Predicate (1st order) Logic
It is relatively easy to check for logical consequence in proposition
logic because propositional logic is not very expressive.
It is desirable to have a more expressive logic in which to write
the axioms and conclusions.
A first weakness of propositional logic is that it does not provide
variables which can be quantified over, e.g., it is not possible to
represent the all men in All men are mortal
by a variable which can range of the possible values of specific men.
Similarly, it is not possible to claim the existence of something with
a given property by representing that something by a variable, as in
"There exists a prime number greater than 27".
A second weakness of propositional logic is the lack of syntax for
representing objects in the domain of interest; propositional logic
only permits statements about the domain of interest, e.g., it is
not possible to have a symbol for Socrates, rather it
is possible only to make statements about Socrates.
Associated with this is the absence of functional abstraction, e.g.,
it is not possible to refer to the brother of Socrates.
1st order logic overcomes these two weaknesses of propositional logic
by providing a richer language.
The cost of this increased expressivity is the loss of decidability
for logical consequence.
1st order logic is semi-decidable, which means that if a formula is a
logical consequence of a set of axioms, it is possible to show that it
is. However, if a formula is not a logical consequence of a set of axioms,
it may not be possible to show that it is not.
In addition, 1st order logic requires more complex mechanisms for
checking for logical consequence.
The Language of 1st order logic
A 1st order language consists of three sets of symbols:
- V is a set of variables (for our purposes, infinite)
- F is a set of functors, each of which has an arity.
The arity specifies the number of arguments they take (see below).
Functors of arity 0 are constants.
- P is a set of predicate symbols, each of which has an arity.
Predicate symbols of arity 0 are propositions.
Prolog syntax is used here: variables start with upper case alphbetic, and
functors and predicate symbols start with lower case alphabetic. Functors
and predicate symbols are distinguished by the context, as described below.
When referring directly to a functor or predicate symbol, its arity is
given after a , e.g., in blah/2, blah
is the functor or predicate symbol and the arity is 2.
Example
|
---|
V = { V : V starts with uppercase }
F = { geoff/0, jim/0, brother_of/1 }
P = { wise/1, taller/2 }
|
From the components of the language, two types of expressions are built.
This is in contrast to propositional logic where only propositions
exist.
The first type of expression is terms.
Terms are used to denote (possibly arbitrary) objects in the domain of
interest.
Terms thus correspond roughly to data in conventional programming.
Terms are defined recursively by:
- A functor of arity 0 (a constant) is a term
- A variable is a term
- A functor with the appropriate number of terms as arguments, is a term.
Example
|
---|
geoff
Person
brother_of(jim)
brother_of(brother_of(X))
|
Note that if there is a functor of arity greater than 0, then there is
an infinite number of terms.
As might be expected, ATP for 1st order logic is much easier if the number
of terms is finite (in fact it reduces to ATP for propositional logic).
For this reason, it is desirable to formulate ATP problems without any
functors of arity greater than 0.
The second type of expression is atoms, which correspond to the
propositions of propositional logic.
Atoms decribe relationships between terms (objects in the domain).
Atoms are defined by:
- A predicate symbol of arity 0 (a proposition) is an atom
- A predicate symbol with the appropriate number of terms as arguments,
is an atom.
Example
|
---|
wise(geoff)
taller(Person,brother_of(jim))
wise(brother_of(brother_of(X)))
|
If the number of terms is infinite (which occurs if there is a functor
of arity greater than 0), and there is a predicate symbol of arity
greater than 0, then there is an infinite number of atoms.
Connectives are used to combine atoms into the formulae of 1st order
logic.
The connectives include all those used in propositional logic, and
two new quantifiers:
- ~ for negation.
- ∧ or & for conjunction.
- ∨ or | for disjunction.
- => for implication.
- <=> for equivalence.
- <~> for exclusive or.
- ∀ or ! for universal quantification.
This corresponds to saying "for all" in English, e.g.,
∀X (man(X) => mortal(X))
says "for all objects X, X is a man implies X is mortal".
It is easy to remember that ∀
means "for all" by noticing that the
∀ is an upside down A from
for All.
- ∃ or ? for existential quantification.
This corresponds to saying "there exists" in English, e.g.,
∃X (prime(X) & greater(X,27))
says "There exists an object X such that X is a prime number and X is
greater than 27".
It is easy to remember that ∃
means "there exists" by noticing that the
∃ is a backwards E from
there Exists.
Denoting arbitary 1st order formulae by uppercase variable letters,
e.g., P, 1st order formulae are defined recursively by:
- Atoms are formulae
- If P and Q are formulae then
~P,
P & Q,
P | Q,
P => Q,
P <=> Q, and
(P) are formulae.
- If P is a formula and X is a variable, then
∀X P and
∃X P are formulae.
The ∀X and
∃X are called
quantifications of X, and they quantify all
occurrences of X in P.
The quantification has precedence over any earlier (to the left)
quantification of X.
Variables with the same name but which are quantified by different
quantifiers, are different variables.
The precedence order of the above operators is
∀ ∃ ~ | & => <=>, i.e.,
∀ and ∃ bind most tightly,
down to <=>.
This precedence ordering allows some brackets to be omitted, e.g.,
∀X (clever(X) => pass(X) | lazy(X))
means
∀X (clever(X) => (pass(X) | lazy(X))).
Note that the ()s round the
(clever(X) => pass(X) | lazy(X)) are necessary, for
otherwise the quantification would apply to only the clever(X).
Example
|
---|
wise(geoff)
~taller(Person,brother_of(jim))
wise(geoff) & wise(brother_of(brother_of(Person)))
~taller(Person,brother_of(jim)) | wise(brother_of(brother_of(Person)))
wise(brother_of(brother_of(Person)) => wise(geoff)
wise(geoff) <=> ~taller(Person,brother_of(jim))
(wise(geoff) & wise(brother_of(brother_of(Person)))) | wise(geoff)
∀Person ~taller(Person,brother_of(jim))
∃Person wise(brother_of(brother_of(Person)) => wise(geoff)
|
Atoms and the negations of atoms are called literals.
Example
|
---|
wise(brother_of(X))
~taller(geoff,jim)
|
The scope of a quantification is the formula which follows the
quantification, e.g., the scope of ∃Person in
∃Person wise(brother_of(brother_of(Person)) =>
wise(geoff)
is
wise(brother_of(brother_of(Person)).
A variable is bound if it occurs in a quantification or it is
within the scope of a quantification of that variable.
Otherwise a variable is free.
A formulae that has no free variables is a closed formula;
otherwise a formula is open.
Example
|
---|
Person is bound in in the closed formula:
∀Person ~taller(Person,brother_of(jim))
Person is free in the open formula:
~taller(Person,brother_of(jim))
Person is bound and free in the open formula:
∀Person ~taller(Person,jim) | wise(Person)
Person is bound in the closed formula:
∀Person(~taller(Person,jim) | wise(Person))
|
For ATP open formulae are not useful, because it is not possible to
interpret (in the sense of giving meaning) open formulae.
In English universal quantification is usually meant if no explicit
quantification is given, e.g., "Sheep are stupid" usually means
"All sheep are stupid", not "There exists a sheep that is stupid".
Translation from English to 1st Order Logic
There is often a direct translation from a problem stated in a natural
language to 1st order logic.
In order to make such a translation, it is necessary to:
- Determine the predicates and functors of the 1st order language.
- Objects often correspond to constants
- Relationships that identify a constant often correspond to functors
- Properties and activities often correspond to predicates
- Translate the axioms.
- Make appropriate definitions for the predicates and functors.
- Translate the conjecture.
Example
|
---|
There is a barbers' club that obeys the following three conditions:
- The (only) four of the members are Guido, Lorenzo, Petrucio, and
Guido's nephew.
- If any member A has shaved any other member B - whether
himself or another - then all members have shaved A.
- Guido has shaved his nephew.
Prove Petrucio has shaved Lorenzo
|
V = { V : V starts with uppercase }
F = { guido/0, lorenzo/0, petrucio/0, nephew_of/1 }
P = { member/1, shaved/2, all_shaved/1 }
|
- The (only) four of the members are Guido, Lorenzo, Petrucio, and
Guido's nephew.
member(guido)
member(lorenzo)
member(petrucio)
member(nephew_of(guido))
∀M (member(M) => (M = guido | M = lorenzo | M = petrucio | M = nephew_of(guido)))
- If any member A has shaved any other member B - whether
himself or another - then all members have shaved A.
∀M1∀M2
( (member(M1) & member(M2) & shaved(M1,M2)) => all_shaved(M1) )
- Guido has shaved his nephew.
shaved(guido,nephew_of(guido))
- Definitions
∀M1 (
all_shaved(M1) <=> ( member(M1) &
∀M2
(member(M2) => shaved(M2,M1)) ) )
- Petrucio has shaved Lorenzo.
shaved(petrucio,lorenzo)
|
Example
|
---|
Every student is enrolled in at least one course.
Every professor teaches at least one course.
Every course has at least one student enrolled.
Every course has at least one professor teaching it.
The coodinator of a course is a professor who is teaching it.
If a student is enrolled in a course then the student is taught by every
professor who teaches the course.
CSC410 is a course.
Michael is a student enrolled in CSC410.
Victor is the coordinator of CSC410.
Therefore, Michael is taught by Victor.
|
V = { V : V starts with uppercase }
F = { michael/0, victor/0, csc410/0, coordinator_of/1 }
P = { student/1, profesor/1, course/1, enrolled/2, teaches/2, taught_by/2 }
|
- Every student is enrolled in at least one course.
! [S] : ( student(S) => ? [C] : ( course(C) & enrolled(S,C) ) )
- Every professor teaches at least one course.
! [P] : ( professor(P) => ? [C] : ( course(C) & teaches(P,C) ) )
- Every course has at least one student enrolled.
! [C] : ( course(C) => ? [S] : ( student(S) & enrolled(S,C) ) )
- Every course has at least one professor teaching it.
! [C] : ( course(C) => ? [P] : ( professor(P) & teaches(P,C) ) )
- The coodinator of a course is a professor who is teaching it.
! [C] :
( course(C)
=> ( professor(coordinator_of(C)) & teaches(coordinator_of(C),C) ) )
- If a student is enrolled in a course then the student is taught by every
professor who teaches the course.
! [S,C] :
( ( student(S) & course(C) & enrolled(S,C) )
=> ! [P] :
( ( professor(P) & teaches(P,C) )
=> taught_by(S,P) ) )
- CSC410 is a course.
course(csc410)
- Michael is a student enrolled in CSC410.
( student(michael) & enrolled(michael,csc410) )
- Victor is the coordinator of CSC410.
coordinator_of(csc410) = victor
- Victor teaches Michael.
taught_by(michael,victor)
|
For many more ideas and suggestions, see
Peter Stuber's Translation Tips.
Exercises
Convert the following into 1st order logic:
Osama Bin Laden is a terrorist.
If someone is a terrorist and is dangerous, then his leader is a terrorist
and is dangerous.
There are some terrorists who are their own leader.
Dangerous people care about themselves, or about no-one (not even
themselves!).
The depth and time of a SCUBA dive determine the nitrogen absorbed
on the dive.
If the nitrogen absorbed on a SCUBA dive is greater than the limit,
then the outcome of the dive is illness.
Illness is the only possible bad outcome of a SCUBA dive.
Wolves, foxes, birds, caterpillars, and snails are animals, and there
are some of each of them. Also there are some grains, and grains are
plants.
Every animal either likes to eat all plants or all animals much smaller
than itself that like to eat some plants.
Caterpillars and snails are much smaller than birds, which are much
smaller than foxes, which in turn are much smaller than wolves.
Wolves do not like to eat foxes or grains, while birds like to eat
caterpillars but not snails.
Caterpillars and snails like to eat some plants.
Prove that there is an animal that likes to eat a grain eating animal.
The basic notion of set theory is membership of a set. Using a
member/2 predicate, define set equality, intersection,
union, power set, empty set, and diifference.
For example, intersection is defined as:
! [X,A,B] :
( member(X,intersection(A,B))
<=> ( member(X,A)
& member(X,B) ) )
Now write conjectures for transitivity of subset, associativity of set
intersection, and distribution of intersection over union.
Satisfiability Preserving Transformations
One of the techniques for establishing that C is a logical
consequence of Ax is to show that Ax U {~C}
is unsatisfiable.
Thus the ability to detect that a set of formulae is unsatisfiable, is
important.
It may be difficult or impossible to show directly that a set is
unsatisfiable.
A satisfiability preserving transformation (SPT) takes a set of
formulae and transforms it to a new set, such that if the original set is
satisfiable then so is the transformed set.
Conversely, if the transformed set is unsatisfiable then so is the
original set.
If, by repetitive use, the application of SPTs produces a set that is
obviously unsatisfiable (e.g., containing FALSE) from a set of
formulae, then, iteratively, this means that the very original set is
also unsatisfiable.
If the original set is of the form Ax U {~C}, this establishes
that C is a logical consequence of Ax.
The process of producing a set that is obviously unsatisfiable is called
finding a refutation.
Logical Inference
An inference rule infers formulae from parent formulae.
An inference rule is sound if it infers only logical consequences
of its parents.
The operation of applying a sound inference rule to parents from a set, and
then adding the inferred formula back into the set, is a SPT (think why!).
(There are other SPTs, but this is an important one.)
Thus sound inference rules form the basis of a a simple algorithm for
establishing logical consequence.
The basic saturation procedure is :
While a refutation has not been found
Copy formulae from the set
Generate logical consequences
Put logical consequences into the set
Note the "Copy", indicating that a formula may be used multiple
times with a new set of variables each time.
An inference system is complete if, by repetitive use, it can infer
every logical consequence of its input.
An inference system is refutation complete if, by repetitive use, it
can infer FALSE (a contradiction) from every unsatisfiable set.
Note: A complete inference system can infer all logical consequences, while a
refutation complete inference system can only check (via the unsatisfiability
idea) for logical consequence.
Exercises
- Express the following scenarios in first-order logic, use ATP to check
the axioms for satisfiability, convert them by hand to CNF, find a
resolution proof by hand, find a proof using ATP.
- Axioms:
Every city has crime.
USA is a country.
Washington is a city.
The capital of every country is a beautful city.
Washington is the capital of the USA.
Conjecture:
Washington is beautiful but has crime.
- Axioms: Garfield is a cat.
Odie is a dog.
Cats and dogs are animals.
Jon is a human.
Every animal has a human owner.
Jon is the owner of Garfield and Odie.
Garfield and Odie are the only animals that Jon owns.
If a cat is chased by a dog, then the owner of the cat hates the owner
of the dog.
Odie has chased Garfield.
Conjecture:
Jon hates himself.
- Axioms: Every student is enrolled in at least one course.
Every professor teaches at least one course.
Every course has at least one student enrolled.
Every course has at least one professor teaching it.
The coodinator of a course is a professor who is teaching it.
If a student is enrolled in a course then the student is taught by
every professor who teaches the course.
CSC410 is a course.
Michael is a student enrolled in CSC410.
Victor is the coordinator of CSC410.
Conjecture: Michael is taught by Victor.
Exam Style Questions
- What are the two major limitations of propositional logic?
- What are the three components of a 1st order logic language?
- What is important about closed formulae?
- Translate the following into 1st order logic:
Suming, Yi, and Yury are students, and are the only three students.
If a student works hard then they get a good grade.
At least one of the students works hard.
Therefore at least one student will get a good grade.
- Express the following scenario and conclusion in 1st order logic.
There are some students who fail.
If a student fails, then either there is a lecturer who has taught the
student badly, or the student is stupid.
No lecturer teaches any student badly.
Therefore there is some student who is stupid.
- Explain why truth tables cannot be used to establish logical consequence
in lst order logic.
- What does it mean for an inference system to be {sound, complete,
refutation complete}? Which of these properties are desireable in
a refutation based ATP system?
- Explain how unsatisfiability can be used to establish logical consequence
in classical logic.