(You really want to know more about mathematical logic, or even model theory, to understand these concepts; this is just a short explanation which should help you keep your head above the water in the NSA series)
Every formal language
talks about something
. To do this, it uses a few universal
symbols: things like "&" for conjunction
" or "and
", "~" for "negation
" or "not
", a symbol used to say for all
, a symbol "=" for "equal to
", and maybe a few more convenient symbols which may be defined in terms of this small group ("v" for "disjunction
" or "or
", a symbol for exists
, a symbol for "not equal to
", ...). These symbols let it say generalities of logic
, but it cannot yet talk about the world!
It also needs to be able to talk about some of the objects in the world. This is achieved by adding 3 categories of names to the language:
- A constant is a symbol c which refers to some object in the world. For instance, in a language to describe the real numbers, "0", "1" and "e" may all be constants. Not every object of the world must have a name! The connection between a constant and the actual object is given by the model.
- predicate names
- A predicate name is a symbol P and an arity (a natural number) k such that P(x1,...,xk) is a valid sentence whenever the x's are all valid terms. In other words, we give names to some predicates on objects. For instance, for our real numbers language, we could have a 2-place predicate name "<" and a 1-place predicate name "Integer". Again, the connection to actual predicates is given by the model.
- function names
- A function name is a symbol f and an arity k such that f(x1,...,xk) is a valid term whenever the x's are all valid terms. Here we're giving names to some functions of objects. For our real numbers language, we could have 2-place function names "+" and "*", and a 1-place function name "sin". Once more, the model connects the names to actual functions.