Next Monday I will hand out the description of the fourth and last project.
Next quarter, CSE 254
will meet on Mondays and Wednesdays, from 10:10am to 11:30am. This
will be a Ph.D. level seminar on learning algorithms. CSE 250B will
not be offered this year.
Unfortunately, the axioms above have many undesired models. In order to eliminate these, we must state many more axioms. Most of these additional axioms are about actions not changing the truth of fluents. For example:forall s holds(loaded,do(load,s))
forall s holds(loaded,s) -> holds(dead,do(s,shoot))
forall s holds(loaded,s) -> ~holds(alive,do(s,shoot))
forall s holds(loaded,s) -> ~holds(loaded,do(s,shoot)).
and many more.forall s holds(alive,s) -> holds(alive,do(s,load))
forall s holds(alive,s) -> holds(alive,do(s,wait))
forall s holds(alive,s) & ~holds(loaded,s) -> holds(alive,do(s,shoot))
In general, one axiom is needed for each pair of an action and a fluent,
to state whether or not the action changes the fluent. Intuitively,
we should only need to write down an axiom when an action does change
a fluent, not otherwise.
One solution is as follows. We use three basic predicates: "holds", "causes", and "cancels", and we formalize some commonsense knowledge:
``A fluent holds in the state resulting from an action if and only if the action `causes' the fluent, or the fluent held before the action, and the action does not `cancel' it.''In first-order logic, this knowledge is written as
Only two more axioms are needed to describe the Yale shooting world:forall a,s,p holds(p,do(s,a)) <-> causes(a,s,p) \/
[ holds(p,s) & ~cancels(a,s,p) ]
Note that causing a fluent dominates canceling the same fluent, and an action whose preconditions are not satisfied has no effect.forall a,s,p causes(a,s,p) <->
[ a=load & p=loaded] \/
[ a=shoot & p=dead & holds(loaded,s)]forall a,s,p cancels(a,s,p) <->
[ a=shoot & p=alive & holds(loaded,s)] \/
[ a=shoot & p=loaded & holds(loaded,s)]
In analytic philosophy and in knowledge representation, the most important choice is precisely what vocabulary to use, i.e. what ontology to adopt. This choice makes the actual statement of a theory easy or difficult. Given a vocabulary item like the predicate causes for a relationship, it is vital to understand exactly what arguments the relationship involves: what its arity is, and what semantic category each argument falls into.
Here, it is critical that we conceptualize causes as a three-way relationship
between an action, a context, and an fluent. In everyday discourse
we often forget that causation is not a two-way relationship between a
'cause' (i.e. an action) and an 'effect' (i.e. a fluent). In fact,
a particular action can have different effects in different contexts, i.e.
in different states of the world. In order to have any chance of
capturing this knowledge, we must formalize causes, and also cancels,
as a predicate with three arguments.
Suppose the turkey is known to be alive originally, but a shot was heard and the turkey was seen dead some time later. Whodunit? This murder mystery is also solvable:T & holds(alive,s_0) |= holds(dead,do(do(do(s_0,load),wait),shoot)).
The frame axiom says that miracles never happen: if a fluent holds, then it must have just been caused by some action, or else it must have held immediately previously, and not been canceled.T & holds(alive,s_0) & ~holds(alive,do(do(s_0,shoot),wait))
|= holds(loaded,s_0) & cancels(shoot,s_0,alive)