Knowledge Representation and Reasoning Logics for Arti...

Preview:

Citation preview

Knowledge Representation and

Reasoning

Logics for Artificial Intelligence

Stuart C. Shapiro

Department of Computer Science and Engineering

and Center for Cognitive Science

University at Buffalo, The State University of New York

Buffalo, NY 14260-2000

shapiro@cse.buffalo.edu

copyright c©1995, 2004–2010 by Stuart C. Shapiro

Page 1

Contents

Part I

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2. Propositional Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3. Predicate Logic Over Finite Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

4. Full First-Order Predicate Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

5. Summary of Part I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362

Part II

6. Prolog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

7. A Potpourri of Subdomains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

8. SNePS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

9. Belief Revision/Truth Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

10. The Situation Calculus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569

11. Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588

Part III

12. Production Systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .601

13. Description Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610

14. Abduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627

Page 3

8 SNePS

8.1 SNePSLOG Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

8.2 SNePSLOG Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

8.3 SNePSLOG Proof Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446

8.4 Loading and Running SNePSLOG. . . . . . . . . . . . . . . . . . . . . . . . . .456

8.5 Reasoning Heuristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

8.6 SNePS as a Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

8.7 SNeRE: The SNePS Rational Engine . . . . . . . . . . . . . . . . . . . . . . . 499

Page 428

8.1 SNePSLOG Semantics

The Intensional Domain

of (Mental) Entities

Frege: The Morning Star is the Evening Star.

different from The Morning Star is the Morning Star.

Russell: George IV wanted to know whether Scott was the author of

Waverly.

not George IV wanted to know whether the author of Waverly was

the author of Waverly.

Jerry Siegel and Joe Shuster: Clark Kent is a mild-mannered

reporter; Superman is the man of steel.

Page 429

Intensions vs. Extensions

the Morning Star and the Evening Star

Scott and the author of Waverly

Clark Kent and Superman

are different intensions, or intensional entities, or mental entities, or

just entities,

even though they are coreferential, or extensionally equivalent, or

have the same extensions.

Page 430

SNePSLOG Semantics

Intensional Representation

SNePSLOG individual ground terms denote intensions, (mental)

entities.

Mental entities include propositions.

Propositions are first-class members of the domain.

SNePSLOG wffs denote propositions.

Assume that for every entity in the domain there is a term that

denotes it.

Make unique names assumption: no two terms denote the same

entity.

Page 431

The Knowledge Base

Think of the SNePS KB as the contents of the mind of an

intelligent agent.

The terms in the KB denote mental entities that the agent has

conceived of (so far).

Some of the wffs are asserted.

These denote propositions that the agent believes.

The rules of inference sanction believing some additional

proposition(s), but drawing that inference is optional.

I.e., the agent is not logically omniscient.

Page 432

8.2 SNePSLOG Syntax

Atomic Symbols

Individual Constants, Variables, Function Symbols:

any Lisp symbol, number, or string.

All that matters is the sequence of characters.

I.e. "4", \4, and 4, are the same.

The sets of individual constants, variables, and function symbols

should be distinct, but don’t have to be.

Page 433

SNePSLOG Syntax

Terms

An individual constant is a term.

A variable is a term.

If t1, ..., tn are terms, then {t1, ..., tn} is a set of terms.

If f is a function symbol or a variable, then f() is a term.

If t1, ..., tn are terms or sets of terms and f is a function

symbol or variable, then f(t1, ..., tn) is a term.

A function symbol needn’t have a fixed arity, but it might be a

mistake of formalization otherwise.

Page 434

SNePSLOG Syntax

Atomic Wffs

If x is a variable, then x is a wff.

If P is a proposition-valued function symbol or variable,

then P() is a wff.

If t1, ..., tn are terms or sets of terms

and P is a proposition-valued function symbol or variable,

then P(t1, ..., tn) is a wff.

A predicate symbol needn’t have a fixed arity, but it might be a

mistake of formalization otherwise.

If P1, . . . , Pn are wffs, then {P1, . . . , Pn} is a set of wffs.

Abbreviation: If P is a wff, then P is an abbreviation of {P}.

Every wff is a proposition-denoting term.

Page 435

SNePSLOG Syntax/Semantics

AndOr

If {P1, . . . , Pn} is a set of wffs (proposition-denoting terms),

and i and j are integers such that 0 <= i <= j <= n, then

andor(i, j){P1, . . . , Pn} is a wff (proposition-denoting term).

The proposition that at least i and at most j of P1, . . . , Pn are True.

Page 436

SNePSLOG Syntax/Semantics

Abbreviations of AndOr

~P = andor(0,0){P}

and{P1, . . . , Pn} = andor(n, n){P1, . . . , Pn}or{P1, . . . , Pn} = andor(1, n){P1, . . . , Pn}nand{P1, . . . , Pn} = andor(0, n− 1){P1, . . . , Pn}nor{P1, . . . , Pn} = andor(0, 0){P1, . . . , Pn}xor{P1, . . . , Pn} = andor(1, 1){P1, . . . , Pn}

P1 and ... and Pn = andor(n, n){P1, . . . , Pn}P1 or ... or Pn = andor(1, n){P1, . . . , Pn}

Page 437

SNePSLOG Syntax/Semantics

Thresh

If {P1, . . . , Pn} is a set of wffs (proposition-denoting terms)

and i and j are integers such that 0 <= i <= j <= n, then

thresh(i, j){P1, . . . , Pn} is a wff (proposition-denoting term).

The proposition that

either fewer than i or more than j of P1, . . . , Pn are True.

Page 438

SNePSLOG Syntax/Semantics

Abbreviations of Thresh

iff{P1, . . . , Pn}is an abbreviation of thresh(1, n− 1){P1, . . . , Pn}

P1 <=> · · · <=> Pn

is an abbreviation of thresh(1, n− 1){P1, . . . , Pn}

thresh(i){P1, . . . , Pn}is an abbreviation of thresh(i, n− 1){P1, . . . , Pn}

Page 439

SNePSLOG Syntax/Semantics

Numerical Entailment

If {P1, . . . , Pn} and {Q1, . . . , Qm} are sets of wffs

(proposition-denoting terms), and i is an integer, 1 <= i <= n,

then

{P1, . . . , Pn} i=> {Q1, . . . , Qm} is a wff (proposition-denoting

term).

The proposition that whenever at least i of P1, . . . , Pn are True,

then so is any Qj ∈ {Q1, . . . , Qm}.

Page 440

SNePSLOG Syntax/Semantics

Abbreviations of Numerical Entailment

{P1, . . . , Pn} => {Q1, . . . , Qm}is an abbreviation of {P1, . . . , Pn} 1=> {Q1, . . . , Qm}

{P1, . . . , Pn} v=> {Q1, . . . , Qm}is also an abbreviation of {P1, . . . , Pn} 1=> {Q1, . . . , Qm}

{P1, . . . , Pn} &=> {Q1, . . . , Qm}is an abbreviation of {P1, . . . , Pn} n=> {Q1, . . . , Qm}

Page 441

SNePSLOG Syntax/Semantics

Universal Quantifier

If P is a wff (proposition-denoting term)

and x1, . . . , xn are variables, then

all(x1, . . . , xn)(P) is a wff (proposition-denoting term).

The proposition that for every sequence of ground terms, t1, . . . , tn,

P{t1/x1, . . . , tn/xn} is True.

Page 442

SNePSLOG Syntax/Semantics

Numerical Quantifier

If P and Q are sets of wffs, x1, . . . , xn are variables, and i, j, and k

are integers such that 0 <= i <= j <= k, then

nexists(i, j, k)(x1, . . . , xn)(P: Q) is a wff.

The proposition that there are k sequences of ground terms,

t1, . . . , tn, that satisfy every P ∈ P, and, of them, at least i and at

most j also satisfy every Q ∈ Q.

Page 443

SNePSLOG Syntax/Semantics

Abbreviations of Numerical Quantifier

nexists( , j, )(x1, . . . , xn)(P: Q)is an abbreviation of nexists(0, j,∞)(x1, . . . , xn)(P: Q)

nexists(i, , k)(x1, . . . , xn)(P: Q)is an abbreviation of nexists(i, k, k)(x1, . . . , xn)(P: Q)

Page 444

SNePSLOG Syntax/Semantics

Wffs are Terms

Every wff is a proposition-denoting term.

So, e.g., Believes(Tom, ~Penguin(Tweety))

is a wff, and a well-formed term.

For a more complete, more formal syntax, see

The SNePS 2.7.1 User’s Manual,

http://www.cse.buffalo.edu/sneps/Manuals/manual271.pdf.

Page 445

8.3 SNePSLOG Proof Theory

Implemented Rules of Inference

Reduction Inference

Reduction Inference1: If α is a set of terms and β ⊂ α,

P(t1, . . . , α, ...tn) ` P(t1, . . . , β, . . . tn)

Reduction Inference2: If α is a set of terms, and t ∈ α,

P(t1, . . . , α, ...tn) ` P(t1, ..., t, ...tn)

Page 446

Example of Reduction Inference

: clearkb

Knowledge Base Cleared

: Member({Fido, Rover, Lassie}, {dog, pet}).

wff1!: Member({Lassie,Rover,Fido},{pet,dog})

CPU time : 0.00

: Member ({Fido, Lassie}, dog)?

wff2!: Member({Lassie,Fido},dog)

CPU time : 0.00

Page 447

SNePSLOG Proof Theory

Implemented Rules of Inference

for AndOr

AndOr I1: P1, ..., Pn ` andor(n, n){P1, ..., Pn}

AndOr I2: ~P1, ..., ~Pn ` andor(0,0){P1, ..., Pn}

AndOr E1: andor(i, j){P1, ..., Pn}, ~P1, ..., ~Pn−i ` Pj

for n− i < j ≤ n

AndOr E2: andor(i, j){P1, ..., Pn}, P1, ..., Pj ` ~Pk,

for j < k ≤ n

Page 448

SNePSLOG Proof Theory

Implemented Rules of Inference

for Thresh

Thresh E1: When at least i args are true, and at least n− j − 1

args are false, conclude that any other arg is true.

thresh(i, j){P1, ..., Pn},P1, ..., Pi, ¬Pi+1, ..., ¬Pi+n−j−1

` Pi+n−j

Thresh E2: When at least i− 1 args are true, and at least n− jargs are false, conclude that any other arg is false.

thresh(i, j){P1, ..., Pn},P1, ..., Pi−1, ¬Pi+1, ..., ¬Pi+n−j

` ¬PiPage 449

SNePSLOG Proof Theory

Implemented Rules of Inference

for &=>

&=>I: If A, P1, ..., Pn ` Qi for 1 ≤ i ≤ mthen A ` {P1, ..., Pn} &=> {Q1, ..., Qm}

&=>E: {P1, ..., Pn} &=> {Q1, ..., Qm}, P1, ..., Pn ` Qi,

for 1 ≤ i ≤ m

Page 450

SNePSLOG Proof Theory

Implemented Rules of Inference

for v=>

v=>I: If A ` P v=> Q and A ` Q v=> R then A ` P v=> R

v=>E: {P1, ..., Pn} v=> {Q1, ..., Qm}, Pi,` Qj ,

for 1 ≤ i ≤ n, 1 ≤ j ≤ m

Page 451

SNePSLOG Proof Theory

Implemented Rules of Inference

for i=>

i=>E: {P1, ..., Pn} i=> {Q1, ..., Qm}, P1, ..., Pi ` Qj ,

for 1 ≤ i ≤ n, 1 ≤ j ≤ m

Page 452

SNePSLOG Proof Theory

Implemented Rules of Inference

for all

Universal Elimination for universally quantified versions of

andor, thresh, v=>, &=>, and i=>.

Page 453

UVBR & Symmetric Relations

In any substitution {t1/x1, . . . , tn/xn}, if xi 6= xj , then ti 6= tj

: all(u,v,x,y)(childOf({u,v}, {x,y}) => Siblings({u,v})).

: childOf({Tom,Betty,John,Mary}, {Pat,Harry}).

: Siblings({?x,?y})?

wff14!: Siblings({Mary,John})

wff13!: Siblings({John,Betty})

wff12!: Siblings({Betty,Tom})

wff11!: Siblings({Mary,Betty})

wff10!: Siblings({John,Tom})

wff9!: Siblings({Mary,Tom})

Page 454

SNePSLOG Proof Theory

Implemented Rules of Inference

for nexists

nexists E1:

nexists(i, j, k)(x)(P(x) : Q(x)),

P(t1), Q(t1), . . . , P(tj), Q(tj),

P(tj+1)

` ¬Q(tj+1)

nexists E2:

nexists(i, j, k)(x)(P(x) : Q(x)),

P(t1),¬Q(t1), . . . , P(tk−i),¬Q(tk−i),

P(tk−i+1)

` Q(tk−i+1)

Page 455

8.4 Loading SNePSLOG

cl-user(2): :ld /projects/snwiz/bin/sneps

; Loading /projects/snwiz/bin/sneps.lisp

;;; Installing streamc patch, version 2.

Loading system SNePS...10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

SNePS-2.7 [PL:2 2010/09/04 02:35:18] loaded.

Type ‘(sneps)’ or ‘(snepslog)’ to get started.

cl-user(3): (snepslog)

Welcome to SNePSLOG (A logic interface to SNePS)

Copyright (C) 1984--2010 by Research Foundation of

State University of New York. SNePS comes with ABSOLUTELY NO WARRANTY!

Type ‘copyright’ for detailed copyright information.

Type ‘demo’ for a list of example applications.

Page 456

Running SNePSLOGcl-user(3): (snepslog)

Welcome to SNePSLOG (A logic interface to SNePS)

Copyright (C) 1984--2010 by Research Foundation of

State University of New York. SNePS comes with ABSOLUTELY NO WARRANTY!

Type ‘copyright’ for detailed copyright information.

Type ‘demo’ for a list of example applications.

: clearkb

Knowledge Base Cleared

CPU time : 0.00

: Member({Fido, Rover, Lassie}, {dog, pet}).

wff1!: Member({Lassie,Rover,Fido},{pet,dog})

CPU time : 0.00

: Member ({Fido, Lassie}, dog)?

wff2!: Member({Lassie,Fido},dog)

CPU time : 0.00

Page 457

Common SNePSLOG Commands

: clearkb

Knowledge Base Cleared

: all(x)(dog(x) => animal(x)). ; Assert into the KB

wff1!: all(x)(dog(x) => animal(x))

: dog(Fido). ; Assert into the KB

wff2!: dog(Fido)

: dog(Fido)?? ; Query assertion without inference

wff2!: dog(Fido)

Page 458

Common SNePSLOG Commands: animal(Fido)?? ; Query assertion without inference

: animal(Fido)? ; Query assertion with inference

wff3!: animal(Fido)

: dog(Rover)! ; Assert into the KB & do forward inference

wff6!: animal(Rover)

wff5!: dog(Rover)

: list-asserted-wffs ; Print all asserted wffs

wff6!: animal(Rover)

wff5!: dog(Rover)

wff3!: animal(Fido)

wff2!: dog(Fido)

wff1!: all(x)(dog(x) => animal(x))

Page 459

Tracing Inference: trace inference

Tracing inference.

: animal(Fido)?

I wonder if wff3: animal(Fido)

holds within the BS defined by context default-defaultct

I wonder if wff5: dog(Fido)

holds within the BS defined by context default-defaultct

I know wff2!: dog({Rover,Fido})

Since wff1!: all(x)(dog(x) => animal(x))

and wff5!: dog(Fido)

I infer wff3: animal(Fido)

wff3!: animal(Fido)

CPU time : 0.01

: untrace inference

Untracing inference.

CPU time : 0.00

: animal(Rover)?

wff6!: animal(Rover)

Page 460

Recursive Rules

Don’t Cause Infinite Loops

: all(x,y)(parentOf(x,y) => ancestorOf(x,y)).

wff1!: all(y,x)(parentOf(x,y) => ancestorOf(x,y))

: all(x,y,z)({ancestorOf(x,y), ancestorOf(y,z)} &=> ancestorOf(x,z)).

wff2!: all(z,y,x)({ancestorOf(y,z),ancestorOf(x,y)} &=> {ancestorOf(x,z)})

: parentOf(Sam,Lou).

wff3!: parentOf(Sam,Lou)

: parentOf(Lou,Stu).

wff4!: parentOf(Lou,Stu)

: ancestorOf(Max,Stu).

wff5!: ancestorOf(Max,Stu)

: ancestorOf(?x,Stu)?

wff8!: ancestorOf(Sam,Stu)

wff6!: ancestorOf(Lou,Stu)

wff5!: ancestorOf(Max,Stu)

CPU time : 0.01

Page 461

Infinitely Growing Terms

Get Cut Off: all(x)(Duck(motherOf(x)) => Duck(x)).

wff1!: all(x)(Duck(motherOf(x)) => Duck(x))

CPU time : 0.00

: Duck(Daffy)?

I wonder if wff2: Duck(Daffy)

holds within the BS defined by context default-defaultct

I wonder if wff5: Duck(motherOf(Daffy))

holds within the BS defined by context default-defaultct

I wonder if wff8: Duck(motherOf(motherOf(Daffy)))

holds within the BS defined by context default-defaultct

...

I wonder if wff32: Duck(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(Daffy)))))))))))

holds within the BS defined by context default-defaultct

SNIP depth cutoff beyond *depthcutoffback* = 10

I wonder if wff35: Duck(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(motherOf(Daffy))))))))))))

holds within the BS defined by context default-defaultct

SNIP depth cutoff beyond *depthcutoffback* = 10

SNIP depth cutoff beyond *depthcutoffback* = 10

CPU time : 0.05

Page 462

Eager-Beaver Search: all(x)(Duck(motherOf(x)) => Duck(x)).

wff1!: all(x)(Duck(motherOf(x)) => Duck(x))

: all(x)({walksLikeaDuck(x), talksLikeaDuck(x)} &=> Duck(x)).

wff2!: all(x)({talksLikeaDuck(x),walksLikeaDuck(x)} &=> {Duck(x)})

: and{talksLikeaDuck(Daffy),walksLikeaDuck(Daffy)}.

wff5!: walksLikeaDuck(Daffy) and talksLikeaDuck(Daffy)

: Duck(Daffy)? (1)

I wonder if wff6: Duck(Daffy)

I wonder if wff9: Duck(motherOf(Daffy))

I wonder if wff3: talksLikeaDuck(Daffy)

I wonder if wff4: walksLikeaDuck(Daffy)

It is the case that wff4: walksLikeaDuck(Daffy)

It is the case that wff3: talksLikeaDuck(Daffy)

Since wff2!: all(x)({talksLikeaDuck(x),walksLikeaDuck(x)} &=> {Duck(x)})

and wff3!: talksLikeaDuck(Daffy)

and wff4!: walksLikeaDuck(Daffy)

I infer wff6: Duck(Daffy)

wff6!: Duck(Daffy)

CPU time : 0.02

Page 463

Contradictions

The KB: clearkb

Knowledge Base Cleared

: all(x)(nand{Mammal(x), Fish(x)}).

wff1!: all(x)(nand{Fish(x),Mammal(x)})

: all(x)(LivesInWater(x) => Fish(x)).

wff2!: all(x)(LivesInWater(x) => Fish(x))

: all(x)(BearsYoungAlive(x) => Mammal(x)).

wff3!: all(x)(BearsYoungAlive(x) => Mammal(x))

: LivesInWater(whale).

wff4!: LivesInWater(whale)

: BearsYoungAlive(whale).

wff5!: BearsYoungAlive(whale)

Page 464

Contradictions

The Contradiction: ?x(whale)?

A contradiction was detected within context default-defaultct.

The contradiction involves the newly derived proposition:

wff6!: Mammal(whale)

and the previously existing proposition:

wff7!: ~Mammal(whale)

You have the following options:

1. [C]ontinue anyway, knowing that a contradiction is derivable;

2. [R]e-start the exact same run in a different context which is

not inconsistent;

3. [D]rop the run altogether.

(please type c, r or d)

=><= d

Page 465

SNePSLOG Demonstrations

: demo

Available demonstrations:

1: Socrates - Is he mortal?

2: UVBR - Demonstrating the Unique Variable Binding Rule

3: The Jobs Puzzle - A solution with the Numerical Quantifier

4: Pegasus - Why winged horses lead to contradictions

5: Schubert’s Steamroller

6: Rule Introduction - Various examples

7: Examples of various SNeRE constructs.

8: Enter a demo filename

Your choice (q to quit):

Page 466

8.5 Reasoning Heuristics

Logically equivalent SNePSLOG wffs

are interpreted differently by the SNePS Reasoning System.

Page 467

v=>-Elimination

Instead of

P()

(P() or Q()) => R()

R()

which would require or-I followed by =>-E

Have

P()

{P(), Q()} v=> R()

R()

which requires only v=>-E

Page 468

Example of v=>-E

: P().

wff1!: P()

: {P(), Q()} v=> R().

wff4!: {Q(),P()} v=> {R()}

: trace inference

Tracing inference.

: R()?

I wonder if wff3: R()

holds within the BS defined by context default-defaultct

I wonder if wff2: Q()

holds within the BS defined by context default-defaultct

I know wff1!: P()

Since wff4!: {Q(),P()} v=> {R()}

and wff1!: P()

I infer wff3: R()

wff3!: R()

Page 469

Bi-Directional Inference

Backward Inference

: {p(), q()} v=> {r(), s()}.

wff5!: {q(),p()} v=> {s(),r()}

: p().

wff1!: p()

: r()?

I wonder if wff3: r()

holds within the BS defined by context default-defaultct

I wonder if wff2: q()

holds within the BS defined by context default-defaultct

I know wff1!: p()

Since wff5!: {q(),p()} v=> {s(),r()}

and wff1!: p()

I infer wff3: r()

wff3!: r()

Page 470

Bi-Directional Inference

Forward Inference

: {p(), q()} v=> {r(), s()}.

wff5!: {q(),p()} v=> {s(),r()}

: p()!

Since wff5!: {q(),p()} v=> {s(),r()}

and wff1!: p()

I infer wff4: s()

Since wff5!: {q(),p()} v=> {s(),r()}

and wff1!: p()

I infer wff3: r()

wff4!: s()

wff3!: r()

wff1!: p()

Page 471

Bi-Directional Inference

Forward-in-Backward Inference: {p(), q()} v=> {r(), s()}.

wff5!: {q(),p()} v=> {s(),r()}

: r()?

I wonder if wff3: r()

holds within the BS defined by context default-defaultct

I wonder if wff2: q()

holds within the BS defined by context default-defaultct

I wonder if wff1: p()

holds within the BS defined by context default-defaultct

: p()!

Since wff5!: {q(),p()} v=> {s(),r()}

and wff1!: p()

I infer wff3: r()

wff3!: r()

wff1!: p()

Active connection graph cleared by clear-infer.

Page 472

Bi-Directional Inference

Backward-in-Forward Inference: p().

wff1!: p()

: p() => (q() => r()).

wff5!: p() => (q() => r())

: q()!

I know wff1!: p()

Since wff5!: p() => (q() => r())

and wff1!: p()

I infer wff4: q() => r()

I know wff2!: q()

Since wff4!: q() => r()

and wff2!: q()

I infer wff3: r()

wff4!: q() => r()

wff3!: r()

wff2!: q()

Page 473

Modus Tollens Not Implemented

: all(x)(p(x) => q(x)).

wff1!: all(x)(p(x) => q(x))

: p(a).

wff2!: p(a)

: q(a)?

wff3!: q(a)

: ~q(b).

wff6!: ~q(b)

: p(b)?

:

Page 474

Use Disjunctive Syllogism Instead

: all(x)(or{~p(x), q(x)}).

wff1!: all(x)(q(x) or ~p(x))

: p(a).

wff2!: p(a)

: q(a)?

wff3!: q(a)

: ~q(b).

wff7!: ~q(b)

: p(b)?

wff9!: ~p(b)

Page 475

=> Is Not Material Implication

If ⇒ is material implication,

¬(P ⇒ Q)⇔ (P ∧ ¬Q)

and

¬(P ⇒ Q) |= P

But ~(p => q) just means that its not the case that p => q:

: ~(p() => q()).

wff4!: ~(p() => q())

: p()?

:

Page 476

Use or

Instead of Material Implication

: ~(~p() or q()).

wff5!: nor{q(),~p()}

: p()?

wff1!: p()

Page 477

Ordering of Nested Rules Matters

Optimal Order: wifeOf(Caren,Stu).

: wifeOf(Ruth,Mike).

: brotherOf(Stu,Judi).

: brotherOf(Mike,Lou).

: parentOf(Judi,Ken).

: parentOf(Lou,Stu).

: all(w,x)(wifeOf(w,x)

=> all(y)(brotherOf(x,y)

=> all(z)(parentOf(y,z)

=> auntOf(w,z)))).

: auntOf(Caren,Ken)?

I wonder if wff8: auntOf(Caren,Ken)

I wonder if p7: wifeOf(Caren,x)

I know wff1!: wifeOf(Caren,Stu)

I wonder if p8: brotherOf(Stu,y)

I know wff3!: brotherOf(Stu,Judi)

I wonder if wff5!: parentOf(Judi,Ken)

I know wff5!: parentOf(Judi,Ken)

wff8!: auntOf(Caren,Ken)

CPU time : 0.03

Page 478

Ordering of Nested Rules Matters

Bad Order

all(x,y)(brotherOf(x,y)

=> all(w)(wifeOf(w,x)

=> all(z)(parentOf(y,z)

=> auntOf(w,z)))).

: auntOf(Caren,Ken)?

I wonder if wff8: auntOf(Caren,Ken)

I wonder if p1: brotherOf(x,y)

I know wff3!: brotherOf(Stu,Judi)

I know wff4!: brotherOf(Mike,Lou)

I wonder if wff12: wifeOf(Caren,Mike)

I wonder if wff1!: wifeOf(Caren,Stu)

I know wff1!: wifeOf(Caren,Stu)

I wonder if wff5!: parentOf(Judi,Ken)

I know wff5!: parentOf(Judi,Ken)

wff8!: auntOf(Caren,Ken)

CPU time : 0.04

Page 479

Ordering of Nested Rules Matters

Parallel

all(w,x,y,z)({wifeOf(w,x),brotherOf(x,y),parentOf(y,z)}

&=> auntOf(w,z)).

: auntOf(Caren,Ken)?

I wonder if wff8: auntOf(Caren,Ken)

I wonder if p5: parentOf(y,Ken)

I wonder if p2: brotherOf(x,y)

I wonder if p6: wifeOf(Caren,x)

I know wff5!: parentOf(Judi,Ken)

I know wff3!: brotherOf(Stu,Judi)

I know wff4!: brotherOf(Mike,Lou)

I know wff1!: wifeOf(Caren,Stu)

wff8!: auntOf(Caren,Ken)

CPU time : 0.03

Page 480

Lemmas (Expertise)

Knowledge Base

: all(r)(transitive(r)

=> all(x,y,z)({r(x,y),r(y,z)} &=> r(x,z))).

: transitive(biggerThan).

: biggerThan(elephant,lion).

: biggerThan(lion,hyena).

: biggerThan(hyena,rat).

Page 481

Lemmas: First Task: biggerThan(?x,rat)?

I wonder if p6: biggerThan(x,rat)

I know wff5!: biggerThan(hyena,rat)

I wonder if wff2!: transitive(biggerThan)

I know wff2!: transitive(biggerThan)

I infer wff6: all(z,y,x)({biggerThan(x,y),biggerThan(y,z)} &=> {biggerThan(x,z)})

I wonder if p8: biggerThan(y,rat)

I wonder if p10: biggerThan(x,y)

I know wff5!: biggerThan(hyena,rat)

I wonder if p12: biggerThan(rat,z)

I know wff3!: biggerThan(elephant,lion)

I know wff4!: biggerThan(lion,hyena)

I infer wff7: biggerThan(lion,rat)

I infer wff8: biggerThan(elephant,rat)

...

wff8!: biggerThan(elephant,rat)

wff7!: biggerThan(lion,rat)

wff5!: biggerThan(hyena,rat)

CPU time : 0.09

Page 482

Second Task: clear-infer

: biggerThan(truck,SUV).

: biggerThan(SUV,sedan).

: biggerThan(sedan,roadster).

: biggerThan(?x,roadster)?

I wonder if p14: biggerThan(x,roadster)

I know wff11!: biggerThan(sedan,roadster)

I wonder if p10: biggerThan(x,y)

I wonder if p16: biggerThan(y,roadster)

I know wff3!: biggerThan(elephant,lion)

I know wff4!: biggerThan(lion,hyena)

I know wff5!: biggerThan(hyena,rat)

I know wff7!: biggerThan(lion,rat)

I know wff8!: biggerThan(elephant,rat)

I know wff9!: biggerThan(truck,SUV)

I know wff10!: biggerThan(SUV,sedan)

I know wff11!: biggerThan(sedan,roadster)

I infer wff12: biggerThan(SUV,roadster)

I infer wff13: biggerThan(truck,roadster)

I wonder if p17: biggerThan(roadster,z)

wff13!: biggerThan(truck,roadster)

wff12!: biggerThan(SUV,roadster)

wff11!: biggerThan(sedan,roadster)

CPU time : 0.04

Page 483

Contexts: demo /projects/shapiro/CSE563/Examples/SNePSLOG/facultyMeeting.snepslog

...

: ;;; Example of Contexts

;;; from

;;; J. P. Martins & S. C. Shapiro, Reasoning in Multiple Belief Spaces IJCAI-83, 370-373.

: all(x)(meeting(x) => xor{time(x,morning), time(x,afternoon)}).

wff1!: all(x)(meeting(x) => (xor{time(x,afternoon),time(x,morning)}))

: all(x,y)({meeting(x),meeting(y)} &=> all(t)(xor{time(x,t),time(y,t)})).

wff2!: all(y,x)({meeting(y),meeting(x)} &=> {all(t)(xor{time(y,t),time(x,t)})})

: meeting(facultyMeeting).

wff3!: meeting(facultyMeeting)

: meeting(seminar).

wff4!: meeting(seminar)

: meeting(tennisGame).

wff5!: meeting(tennisGame)

: time(seminar,morning).

wff6!: time(seminar,morning)

: time(tennisGame,afternoon).

wff7!: time(tennisGame,afternoon)

: set-context stuSchedule {wff1,wff2,wff3,wff4,wff6}

((assertions (wff6 wff4 wff3 wff2 wff1)) (named (stuSchedule)) (kinconsistent nil))

: set-context tonySchedule {wff1,wff2,wff3,wff5,wff7}

((assertions (wff7 wff5 wff3 wff2 wff1)) (named (tonySchedule)) (kinconsistent nil))

: set-context patSchedule {wff1,wff2,wff3,wff4,wff5,wff6,wff7}

((assertions (wff7 wff6 wff5 wff4 wff3 wff2 wff1)) (named (patSchedule default-defaultct)) (kinconsistent nil))

Page 484

Stu’s Schedule

: set-default-context stuSchedule

((assertions (wff6 wff4 wff3 wff2 wff1)) (named (stuSchedule))

(kinconsistent nil))

: list-asserted-wffs

wff6!: time(seminar,morning)

wff4!: meeting(seminar)

wff3!: meeting(facultyMeeting)

wff2!: all(y,x)({meeting(y),meeting(x)}

&=> {all(t)(xor{time(y,t),time(x,t)})})

wff1!: all(x)(meeting(x)

=> (xor{time(x,afternoon),time(x,morning)}))

: time(facultyMeeting,?t)?

wff10!: time(facultyMeeting,afternoon)

wff9!: ~time(facultyMeeting,morning)

Page 485

Tony’s Schedule

: set-default-context tonySchedule

((assertions (wff7 wff5 wff3 wff2 wff1)) (named (tonySchedule))

(kinconsistent nil))

: list-asserted-wffs

wff12!: xor{time(facultyMeeting,afternoon),time(facultyMeeting,morning)}

wff7!: time(tennisGame,afternoon)

wff5!: meeting(tennisGame)

wff3!: meeting(facultyMeeting)

wff2!: all(y,x)({meeting(y),meeting(x)}

&=> {all(t)(xor{time(y,t),time(x,t)})})

wff1!: all(x)(meeting(x)

=> (xor{time(x,afternoon),time(x,morning)}))

: time(facultyMeeting,?t)?

wff11!: ~time(facultyMeeting,afternoon)

wff8!: time(facultyMeeting,morning)

Page 486

Pat’s Schedule

: set-default-context patSchedule

((assertions (wff7 wff6 wff5 wff4 wff3 wff2 wff1))

(named (patSchedule default-defaultct)) (kinconsistent nil))

: time(facultyMeeting,?t)?

A contradiction was detected within context patSchedule.

The contradiction involves the newly derived proposition:

wff8!: time(facultyMeeting,morning)

and the previously existing proposition:

wff9!: ~time(facultyMeeting,morning)

You have the following options:

1. [C]ontinue anyway, knowing that a contradiction is derivable;

2. [R]e-start the exact same run in a different context which is

not inconsistent;

3. [D]rop the run altogether.

(please type c, r or d)

=><= d

Page 487

Resulting Contexts

: describe-context stuSchedule

((assertions (wff6 wff4 wff3 wff2 wff1)) (named (stuSchedule))

(kinconsistent nil))

: describe-context tonySchedule

((assertions (wff7 wff5 wff3 wff2 wff1)) (named (tonySchedule))

(kinconsistent nil))

: describe-context patSchedule

((assertions (wff7 wff6 wff5 wff4 wff3 wff2 wff1))

(named (patSchedule default-defaultct)) (kinconsistent t))

Page 488

8.6 SNePS as a Network:

Semantic NetworksAnimal head

PenguinCanarysing Charlie

Tweety Opus

isa isa

moves-by moves-by has-parthas-part

moves-byisa isa instance

instance instance

swimmingBird flying finwing Fish

has-part

can

Some psychological evidence.

More efficient search than logical inference.

Unclear semantics.

Page 489

SNePS as a Network

: clearkb

: Canary(Tweety).

: Penguin(Opus).

: Ako({Canary,Penguin}, Bird).

: Ako(Bird, Animal).

: show

m4!

Bird

a1

Animal

a2

Ako

r

m3!

a2 r

Penguin

a1

Canary

a1

m2!

r

Opus

a1

m1!

r

Tweety

a1

Page 490

Defining Case Frames

: set-mode-3

Net reset

In SNePSLOG Mode 3.

Use define-frame <pred> <list-of-arc-labels>.

...

: define-frame Canary(class member) "[member] is a [class]"

Canary(x1) will be represented by {<class, Canary>, <member, x1>}

: define-frame Penguin(class member) "[member] is a [class]"

Penguin(x1) will be represented by {<class, Penguin>, <member, x1>}

: define-frame Ako(nil subclass superclass) "Every [subclass] is a [superclass]"

Ako(x1, x2) will be represented by {<subclass, x1>, <superclass, x2>}

Page 491

Entering the KB

: Canary(Tweety).

wff1!: Canary(Tweety)

: Penguin(Opus).

wff2!: Penguin(Opus)

: Ako({Canary, Penguin}, Bird).

wff3!: Ako({Penguin,Canary},Bird)

: Ako(Bird, Animal).

wff4!: Ako(Bird,Animal)

Page 492

The Knowledge Base

: list-terms

wff1!: Canary(Tweety)

wff2!: Penguin(Opus)

wff3!: Ako({Penguin,Canary},Bird)

wff4!: Ako(Bird,Animal)

: describe-terms

Tweety is a Canary.

Opus is a Penguin.

Every Penguin and Canary is a Bird.

Every Bird is a Animal.

Page 493

The Network

: show

m4!

Bird

subclass

Animal

superclass

m3!

superclass

Penguin

subclass

Canary

subclass

m2!

class

Opus

member

m1!

class

Tweety

member

Page 494

Path-Based Inferencem4!

Bird

subclass

Animal

superclass

m3!

superclass

Penguin

subclass

Canary

subclass

m2!

class

Opus

member

m1!

class

Tweety

member

: define-path class (compose class

(kstar (compose subclass- ! superclass)))

class implied by the path (compose class

(kstar

(compose subclass- ! superclass)))

class- implied by the path (compose

(kstar (compose superclass-

! subclass))

class-)

Page 495

Using Path-Based Inference: list-asserted-wffs

wff4!: Ako(Bird,Animal)

wff3!: Ako({Penguin,Canary},Bird)

wff2!: Penguin(Opus)

wff1!: Canary(Tweety)

: define-frame Animal(class member) "[member] is a [class]"

Animal(x1) will be represented by {<class, Animal>, <member, x1>}

: trace inference

Tracing inference.

: Animal(Tweety)?

I wonder if wff5: Animal(Tweety)

holds within the BS defined by context default-defaultct

I know wff1!: Canary(Tweety)

wff5!: Animal(Tweety)

Page 496

Rules About Functions in Mode 3: set-mode-3

: define-frame WestOf(relation domain range)

: define-frame isAbove(relation domain range)

: define-frame Likes(relation liker likee)

: define-frame r(relation domain range)

: define-frame anti-symmetric(nil antisymm)

: all(r)(anti-symmetric(r) => all(x,y)(r(x,y) => ~r(y,x))).

wff1!: all(r)(anti-symmetric(r) => (all(y,x)(r(x,y) => (~r(y,x)))))

: anti-symmetric({WestOf, isAbove, Likes}).

: WestOf(Buffalo,Rochester).

: isAbove(penthouse37,lobby37).

: Likes(Betty,Tom).

: WestOf(?x,?y)?

wff9!: ~WestOf(Rochester,Buffalo)

wff3!: WestOf(Buffalo,Rochester)

: isAbove(?x,?y)?

wff13!: ~isAbove(lobby37,penthouse37)

wff4!: isAbove(penthouse37,lobby37)

: Likes(?x,?y)?

wff5!: Likes(Betty,Tom)

Page 497

Procedural Attachment in SNePScl-user(3): (snepslog)

: load /projects/snwiz/Libraries/expressions.snepslog

: define-frame Value(nil obj val) "the value of [obj] is [val]"

: define-frame radius(nil radiusof) "the radius of [radiusof]"

: define-frame volume(nil volumeof) "the volume of [volumeof]"

: all(x,r,p)({Value(radius(x), r), Value(pi,p)}

&=> all(v)(is(v,/(*(4.0,*(p,*(r,*(r,r)))),3.0))

=> Value(volume(x),v))).

: Value(pi,3.14159).

: Value(radius(sphere1), 9.0).

: Value(volume(sphere1), ?x)?

wff13!: Value(volume(sphere1),3053.6257)

Page 498

8.7 SNeRE: The SNePS Rational Engine

Motivation

Coming to believe something

is different from acting.

Page 499

Prolog Searches In Order

The KB

| ?- [user].

% consulting user...

| q(X) :- q1(X), q2(X).

| q1(X) :- p(X), s(X).

| q2(X) :- r(X), s(X).

| s(X) :- t(X).

| p(a).

| r(a).

| t(a).

|

% consulted user in module user, 0 msec 1592 bytes

yes

Page 500

Prolog Searches In Order

The Run| ?- trace.

% The debugger will first creep -- showing everything (trace)

yes

% trace

| ?- q(a).

1 1 Call: q(a) ?

2 2 Call: q1(a) ?

3 3 Call: p(a) ?

3 3 Exit: p(a) ?

4 3 Call: s(a) ?

5 4 Call: t(a) ?

5 4 Exit: t(a) ?

4 3 Exit: s(a) ?

2 2 Exit: q1(a) ?

6 2 Call: q2(a) ?

7 3 Call: r(a) ?

7 3 Exit: r(a) ?

8 3 Call: s(a) ?

9 4 Call: t(a) ?

9 4 Exit: t(a) ?

8 3 Exit: s(a) ?

6 2 Exit: q2(a) ?

1 1 Exit: q(a) ?

yes

Page 501

SNePS Avoids Extra Search

The KB

: clearkb

Knowledge Base Cleared

: all(x)({q1(x), q2(x)} &=> q(x)).

: all(x)({p(x), s(x)} &=> q1(x)).

: all(x)({r(x), s(x)} &=> q2(x)).

: all(x)(t(x) => s(x)).

: p(a).

: r(a).

: t(a).

Page 502

SNePS Avoids Extra Search

The Search: trace inference

Tracing inference.

: q(a)?

I wonder if wff8: q(a)

I wonder if wff10: q2(a)

I wonder if wff12: q1(a)

I wonder if wff14: s(a)

I wonder if wff6!: r(a)

I wonder if wff14: s(a)

I wonder if wff5!: p(a)

I know wff6!: r(a)

I know wff5!: p(a)

I wonder if wff7!: t(a)

I know wff7!: t(a)

Page 503

SNePS Avoids Extra Search

The Answers

Since wff4!: all(x)(t(x) => s(x))

and wff7!: t(a)

I infer wff14: s(a)

Since wff3!: all(x)({s(x),r(x)} &=> {q2(x)})

and wff14!: s(a)

and wff6!: r(a)

I infer wff10: q2(a)

Since wff2!: all(x)({s(x),p(x)} &=> {q1(x)})

and wff14!: s(a)

and wff5!: p(a)

I infer wff12: q1(a)

Since wff1!: all(x)({q2(x),q1(x)} &=> {q(x)})

and wff10!: q2(a)

and wff12!: q1(a)

I infer wff8: q(a)

wff8!: q(a)

Page 504

Primitive Acts

: set-mode-3

Net reset

In SNePSLOG Mode 3.

Use define-frame <pred> <list-of-arc-labels>.

...

: define-frame say(action line)

say(x1) will be represented by {<action, say>, <line, x1>}

: ^^

--> (define-primaction sayaction ((line))

(format sneps:outunit "~A" line))

sayaction

--> (attach-primaction say sayaction)

t

--> ^^

: perform say("Hello world")

Hello world

Page 505

Effects: The KB

: set-mode-3

Net reset

In SNePSLOG Mode 3.

Use define-frame <pred> <list-of-arc-labels>.

...

Effect(x1, x2) will be represented by {<act, x1>, <effect, x2>}

...

: define-frame say (action line)

: define-frame said (act agent object)

: define-frame Utterance (class member)

: ^^

--> (define-primaction sayaction ((line))

(format sneps:outunit "~A" line))

sayaction

-->

(attach-primaction say sayaction)

t

--> ^^

: Utterance("Hello world").

: all(x)(Utterance(x) => Effect(say(x), said(I,x))).

Page 506

Effects: The Run

: list-asserted-wffs

wff2!: all(x)(Utterance(x) => Effect(say(x),said(I,x)))

wff1!: Utterance(Hello world)

: perform say("Hello world")

Hello world

: list-asserted-wffs

wff5!: Effect(say(Hello world),said(I,Hello world))

wff4!: said(I,Hello world)

wff2!: all(x)(Utterance(x) => Effect(say(x),said(I,x)))

wff1!: Utterance(Hello world)

Page 507

Defined Acts

: set-mode-3

...

ActPlan(x1, x2) will be represented by {<act, x1>, <plan, x2>}

...

: define-frame say (action part1 part2)

: define-frame greet (action object)

: define-frame Person (class member)

: ^^

--> (define-primaction sayaction ((part1) (part2))

(format sneps:outunit "~A ~A~%"

part1 part2))

sayaction

-->

(attach-primaction say sayaction)

t

--> ^^

: all(x)(Person(x) => ActPlan(greet(x), say(Hello,x))).

: Person(Mike).

: perform greet(Mike).

Hello Mike

Page 508

Other Propositions about Acts

GoalPlan(p, a )

Precondition(a, p )

Page 509

Control Acts

achieve(p )

do-all({a1, ..., an })do-one({a1, ..., an })snif({if(p1,a1 ), ..., if(pn,an )[, else(da )]})sniterate({if(p1,a1 ), ..., if(pn,an )[, else(da )]})snsequence(a1, a2 )

withall(x, p(x), a(x) [, da ])

withsome(x, p(x), a(x) [, da ])

Must use attach-primaction on whichever you want to use.

Page 510

Policies

ifdo(p, a )

whendo(p, a )

wheneverdo(p, a )

Page 511

Mental Acts

believe(p )

disbelieve(p )

adopt(p )

unadopt(p )

Page 512

The Execution Cycle

perform(act):

pre := {p | Precondition(act,p )};notyet := pre - {p | p ∈ pre & ` p };if notyet 6= nil

then perform(snsequence(do-all({a | p ∈ notyet

& a = achieve(p )}),act))

else {effects := {p | Effect(act,p )};if act is primitive

then apply(primitive-function(act), objects(act));

else perform(do-one({p | ActPlan(act,p )}))believe(effects)}

Page 513

Examples

SNePSLOG demo #7

/projects/robot/Karel/ElevatorWorld/elevator.snepslog

/projects/robot/Karel/DeliveryWorld/DeliveryAgent.snepslog

/projects/robot/Karel/WumpusWorld/WWAgent.snepslog

/projects/robot/Fevahr/Ascii/afevahr.snepslog

/projects/robot/Fevahr/Java/jfevahr.snepslog

/projects/robot/Greenfoot/ElevatorWorld/sneps/elevator.snepslog

/projects/robot/Greenfoot/WumpusWorld/sneps/WWAgent.snepslog

Page 514