Proof-Theoretic Foundations of Indexing in Logic Programming Iliano - - PowerPoint PPT Presentation

proof theoretic foundations of indexing in logic
SMART_READER_LITE
LIVE PREVIEW

Proof-Theoretic Foundations of Indexing in Logic Programming Iliano - - PowerPoint PPT Presentation

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions Proof-Theoretic Foundations of Indexing in Logic Programming Iliano Cervesato iliano@cmu.edu Carnegie Mellon University Supported by grant NPRP 4-341-1-059, Usable


slide-1
SLIDE 1

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Proof-Theoretic Foundations of Indexing in Logic Programming

Iliano Cervesato

iliano@cmu.edu

Carnegie Mellon University

Supported by grant NPRP 4-341-1-059, Usable automated data inference for end-users

LFMTP’14 Vienna, Austria, July 2014

slide-2
SLIDE 2

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

The Two Worlds of Computational Logic

Logical world

Universal language Abstract specifications Simple and natural reasoning

Computational world

Return answers fast! Pragmatics

Logical status?

slide-3
SLIDE 3

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Justifying Pragmatics Logically

Forward/Backward proof search — focusing Goal/Clause selection — ordered logic Unification — (contextual) reasoning about equality WAM-style compilation — currying

slide-4
SLIDE 4

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Justifying Pragmatics Logically

Forward/Backward proof search — focusing Goal/Clause selection — ordered logic Unification — (contextual) reasoning about equality WAM-style compilation — currying

What about indexing?

slide-5
SLIDE 5

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Justifying Pragmatics Logically

Forward/Backward proof search — focusing Goal/Clause selection — ordered logic Unification — (contextual) reasoning about equality WAM-style compilation — currying

What about indexing?

Cuts context lookup from O(n) to O(1) — exponential savings!

slide-6
SLIDE 6

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Justifying Pragmatics Logically

Forward/Backward proof search — focusing Goal/Clause selection — ordered logic Unification — (contextual) reasoning about equality WAM-style compilation — currying

What about indexing?

Cuts context lookup from O(n) to O(1) — exponential savings!

Backward logic programming: select relevant clauses Forward logic programming: identify rules affected by new facts Theorem proving: retrieve relevant lemmas

slide-7
SLIDE 7

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

This Work

Provide a logical justification for indexing . . . in the context of backward logic programming Punch line: Polarization + Linearity Roadmap: Indexing over predicate symbols

  • Horn clauses

Indexing over first-order terms Beyond Horn clauses

slide-8
SLIDE 8

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Backward Proof Search for Horn Clauses

Atoms: a ::= p ( t ) — negative Goals: G ::= a | ⊤ | G1 ∧ G2 Clauses: D ::= G ⊃ a | ∀x. D Programs: Γ ::= · | Γ, D Case study: the usual append program ∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3))) In Prolog:

append ( [ ] , L , L ) . append ( [X| L1 ] , L2 , [X| L3 ] ) :− append (L1 , L2 , L3 ) .

slide-9
SLIDE 9

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Backward Proof Search for Horn Clauses

Γ − → ⊤

⊤R

Γ − → G1 Γ − → G2 Γ − → G1 ∧ G2

∧R

Γ, D, D − → a Γ, D − → a

atmR

                 Inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Γ − → G Γ, G ⊃ a − → a

⊃L

⊢ t Γ, [t/x]D − → a Γ, ∀x. D − → a

∀L

     Chaining

slide-10
SLIDE 10

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Outline

1

Indexing over Predicates

2

Indexing over Terms

3

Beyond Horn Clauses

4

Conclusions

slide-11
SLIDE 11

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Clause Selection

Γ, D, D − → p ( t ) Γ, D − → p ( t )

atmR

slide-12
SLIDE 12

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Clause Selection

Γ, D, D − → p ( t ) Γ, D − → p ( t )

atmR

⊢ t Γ, [t/x]D − → p ( t ) Γ, ∀x. D − → p ( t )

∀L

slide-13
SLIDE 13

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Clause Selection

Γ, D, D − → p ( t ) Γ, D − → p ( t )

atmR

⊢ t Γ, [t/x]D − → p ( t ) Γ, ∀x. D − → p ( t )

∀L

Γ − → G Γ, G ⊃ p ( t ) − → p ( t )

⊃L

Clause D is selected long before a match is established

slide-14
SLIDE 14

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Clause Selection

Γ, D, D − → p ( t ) Γ, D − → p ( t )

atmR

⊢ t Γ, [t/x]D − → p ( t ) Γ, ∀x. D − → p ( t )

∀L

Γ − → G Γ, G ⊃ p ( t ) − → p ( t )

⊃L

Clause D is selected long before a match is established What we want: Γ, Dp, Dp − → p ( t ) Γ, Dp − → p ( t )

atm′

R

slide-15
SLIDE 15

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Clause Selection

Γ, D, D − → p ( t ) Γ, D − → p ( t )

atmR

⊢ t Γ, [t/x]D − → p ( t ) Γ, ∀x. D − → p ( t )

∀L

Γ − → G Γ, G ⊃ p ( t ) − → p ( t )

⊃L

Clause D is selected long before a match is established What we want: Γ, Dp, Dp − → p ( t ) Γ, Dp − → p ( t )

atm′

R

What is the logical status of Dp?

slide-16
SLIDE 16

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Internalizing Indexing

An old idea: Associate an index atom ip with each predicate p Guard each clause D for p with ip: ip ⊃ D Release ip to start search for p ( t ): ip ⊃ p ( t ) But . . .

slide-17
SLIDE 17

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Internalizing Indexing

An old idea: Associate an index atom ip with each predicate p Guard each clause D for p with ip: ip ⊃ D Release ip to start search for p ( t ): ip ⊃ p ( t ) But . . . Checking a guard must succeed immediately Make ip into a positive atom — p+ Γ; p+ − → p+

InitR

(convenient separation of name spaces)

slide-18
SLIDE 18

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Internalizing Indexing

An old idea: Associate an index atom ip with each predicate p Guard each clause D for p with ip: ip ⊃ D Release ip to start search for p ( t ): ip ⊃ p ( t ) But . . . Checking a guard must succeed immediately Make ip into a positive atom — p+ Γ; p+ − → p+

InitR

(convenient separation of name spaces)

Used guards must not linger Make p+ linear

slide-19
SLIDE 19

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing append

Clauses

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3))

app+ −

  • ∀l.

1 ⊃ app (nil, l, l) app+ −

  • ∀x, l1, l2, l3. (app+ −
  • app (l1, l2, l3)) ⊃

app (c(x, l1), l2, c(x, l3)) Goals

app (c(m, nil), c(n, c(o, nil)), c(m, c(n, c(o, nil)))) (?- append([m],[n,o],[m,n,o]) in Prolog)

app+ −

  • app (c(m, nil), c(n, c(o, nil)), c(m, c(n, c(o, nil))))
slide-20
SLIDE 20

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Approach

Transform programs into a focused linear program with negative and positive atoms Goals: G Clauses: D

  • Programs: Γ

Target logic: Head formulas: H ::= p+ −

  • a

Goal formulas: G ::= H | 1 | G1 ⊗ G2 Program formulas: D ::= G ⊃ a | ∀x. D Programs: Γ ::= · | Γ, p+ −

  • D

Active indices: ∆ ::= · | p+ Γ; ∆ − → G Goal G is derivable from Γ and ∆ Γ; ∆, D − → a Clause D derives a using Γ and ∆

slide-21
SLIDE 21

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Backward Proof Search for Indexed Horn Clauses

Γ; · − → 1

1R

Γ; · − → G1 Γ; · − → G2 Γ; · − → G1 ⊗ G2

⊗R

Γ, p+ −

  • D; q+, p+ −
  • D −

→ a Γ, p+ −

  • D; q+ −

→ a

atmR

                   Inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Γ; · − → G Γ; ·, G ⊃ a − → a

⊃L

⊢ t Γ; ·, [t/x]D − → a Γ; ·, ∀x. D − → a

∀L

     Chaining

slide-22
SLIDE 22

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Backward Proof Search for Indexed Horn Clauses

Γ; p+ − → a Γ; · − → p+ −

  • a

  • R

   Inversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Γ; p+ − → p+

InitR

Γ; q+ − → p+ Γ; D − → a Γ; q+, p+ −

  • D −

→ a

  • L

     Chaining

slide-23
SLIDE 23

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Does it Work?

slide-24
SLIDE 24

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Does it Work?

Lemma (Completeness) If Γ − → G , then Γ; · − → G If Γ, D − → a , then Γ; ·, D − → a Lemma (Soundness) If Γ; · − → G , then Γ − → G If Γ; ·, D − → a , then Γ, D − → a

slide-25
SLIDE 25

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Does it Work?

Lemma (Completeness) If Γ − → G , then Γ; · − → G If Γ, D − → a , then Γ; ·, D − → a Lemma (Soundness) If Γ; · − → G , then Γ − → G If Γ; ·, D − → a , then Γ, D − → a Proof. By simultaneous induction

slide-26
SLIDE 26

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

How does it Work?

Focusing forces clause D to have the same index as goal a Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t )

slide-27
SLIDE 27

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

How does it Work?

Focusing forces clause D to have the same index as goal a Γ; p+ − → p ( t ) Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t )

  • R
slide-28
SLIDE 28

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

How does it Work?

Focusing forces clause D to have the same index as goal a Γ; p+, p+ −

  • D −

→ p ( t ) Γ; p+ − → p ( t )

atmR

Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t )

  • R
slide-29
SLIDE 29

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

How does it Work?

Focusing forces clause D to have the same index as goal a Γ; p+ − → p+

initR

Γ; ·, D − → p ( t ) Γ; p+, p+ −

  • D −

→ p ( t )

  • L

Γ; p+ − → p ( t )

atmR

Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t )

  • R
slide-30
SLIDE 30

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

A Macro-Rule for Indexed Clause Selection

Γ; ·, D − → p ( t ) Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t )

slide-31
SLIDE 31

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

A Macro-Rule for Indexed Clause Selection

Γ; ·, D − → p ( t ) Γ′, p+ −

  • D
  • Γ

; · − → p+ −

  • p (

t ) ⇓ Γ, Dp, Dp − → p ( t ) Γ, Dp − → p ( t )

atm′

R

slide-32
SLIDE 32

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Outline

1

Indexing over Predicates

2

Indexing over Terms

3

Beyond Horn Clauses

4

Conclusions

slide-33
SLIDE 33

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

First-Order Indexing

Take information about predicate arguments into account

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3))

For each predicate, fix position

l1, l2 or l3 (Prolog indexes l1, always) . . . or maybe a combination

depth (1 in Prolog) (somebody else makes the decision)

slide-34
SLIDE 34

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

First-Order Indexing

Associate an indexing constant to each function symbol

IC(p ): the set of indexing constants in indexing position of p

Parametrize p+ with indexing constant of term in the head

. . . ⊃ p (. . . , c( t ), . . .)

  • p+(c) −
  • . . . ⊃ p (. . . , c(

t ), . . .)

Use quantifier when term in head contains variable

. . . ⊃ p (. . . , x, . . .)

  • ∀i. p+(i) −
  • . . . ⊃ p (. . . , x, . . .)
slide-35
SLIDE 35

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {nil, c}

Each clause head starts with a function symbol in indexing position

slide-36
SLIDE 36

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {nil, c}

Each clause head starts with a function symbol in indexing position app+(nil) −

  • ∀l.

1 ⊃ app (nil, l, l) app+(c) −

  • ∀x, l1, l2, l3. app (l1, l2, l3) ⊃

app (c(x, l1), l2, c(x, l3))

slide-37
SLIDE 37

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {nil, c}

Each clause head starts with a function symbol in indexing position app+(nil) −

  • ∀l.

1 ⊃ app (nil, l, l) app+(c) −

  • ∀x, l1, l2, l3. app (l1, l2, l3) ⊃

app (c(x, l1), l2, c(x, l3)) The body has a variable in indexing position: we must be prepared for any constant in IC(app ):

slide-38
SLIDE 38

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {nil, c}

Each clause head starts with a function symbol in indexing position app+(nil) −

  • ∀l.

1 ⊃ app (nil, l, l) app+(c) −

  • ∀x, l1, l2, l3. app (l1, l2, l3) ⊃

app (c(x, l1), l2, c(x, l3)) The body has a variable in indexing position: we must be prepared for any constant in IC(app ): app (l1, l2, l3) = ( l1 = nil ⊗ (app+(nil) −

  • app (l1, l2, l3))

⊕ (∃y, z. l1 = c(y, z) ⊗ (app+(c) −

  • app (l1, l2, l3)))
slide-39
SLIDE 39

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = ∅

There are no function symbols to index on! We cannot do better than indexing on the predicate symbol We get our first encoding

slide-40
SLIDE 40

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {c}

First clause has a variable in indexing position

slide-41
SLIDE 41

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexing app(l1, l2, l3)

∀l. ⊤ ⊃ app (nil, l, l) ∀x, l1, l2, l3. app (l1, l2, l3) ⊃ app (c(x, l1), l2, c(x, l3)) IC(app ) = {c}

First clause has a variable in indexing position ∀i. app+(i) −

  • ∀l.

1 ⊃ app (nil, l, l) app+(c) −

  • ∀x, l1, l2, l3. app (l1, l2, l3) ⊃

app (c(x, l1), l2, c(x, l3))

slide-42
SLIDE 42

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Does it Work?

Sound and complete Yields indexing macro-rule

slide-43
SLIDE 43

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Outline

1

Indexing over Predicates

2

Indexing over Terms

3

Beyond Horn Clauses

4

Conclusions

slide-44
SLIDE 44

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Hereditary Harrop Formulas

Minimal presentation Formulas: A ::= a | A1 ⊃ A2 | ∀x. A Programs: Γ ::= · | Γ, A Direct adaptation of technique for Horn clauses Conjunctive presentation Formulas: A ::= a | A1 ⊃ A2 | ∀x. A | ⊤ | A1 ∧ A2 Programs: Γ ::= · | Γ, A Significantly more complex These presentations are equivalent, but not in the linear case

slide-45
SLIDE 45

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

slide-46
SLIDE 46

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d .

slide-47
SLIDE 47

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d . Accept both: (b+ ⊕ d+) −

  • <rest of A>
slide-48
SLIDE 48

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d . Accept both: (b+ ⊕ d+) −

  • <rest of A>

Doing so consumes the trigger!

slide-49
SLIDE 49

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d . Accept both: (b+ ⊕ d+) −

  • <rest of A>

Doing so consumes the trigger! We need to reassert it ∀i. idx

+(i) (idx +(b) ⊕ idx +(d)) −

  • idx

+(i) ⊗ <rest of A>

slide-50
SLIDE 50

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d . Accept both: (b+ ⊕ d+) −

  • <rest of A>

Doing so consumes the trigger! We need to reassert it ∀i. idx

+(i) (idx +(b) ⊕ idx +(d)) −

  • idx

+(i) ⊗ <rest of A>

Use of ⊗ breaks focus!

slide-51
SLIDE 51

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conjunctive Hereditary Harrop Formulas

Clauses can have multiple heads

A = a ⊃ (b ∧ (c ⊃ d )) has two heads, b and d B = a ⊃ ⊤ has no head

Clause A can be triggered by either b or d . Accept both: (b+ ⊕ d+) −

  • <rest of A>

Doing so consumes the trigger! We need to reassert it ∀i. idx

+(i) (idx +(b) ⊕ idx +(d)) −

  • idx

+(i) ⊗ <rest of A>

Use of ⊗ breaks focus! Use nested implication instead

slide-52
SLIDE 52

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Indexed Conjunctive Hereditary Harrop Formulas

The encoding of our two examples: ∀i. idx

+(i) (idx +(b) ⊕ idx +(d)) −

  • (idx

+(a) −

  • a ) ⊃

a ⊃ ( (idx

+(i) −

  • idx

+(b)) −

  • b

( b (idx

+(i) −

  • idx

+(d)) −

  • (idx

+(c) −

  • c )

∧ (c ⊃ d )) ⊃ d )) 0 −

  • (idx

+(a) −

  • a ) ⊃ ⊤

a ⊃ ⊤

slide-53
SLIDE 53

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Outline

1

Indexing over Predicates

2

Indexing over Terms

3

Beyond Horn Clauses

4

Conclusions

slide-54
SLIDE 54

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Conclusions

A logical foundation of indexing for backward logic programming Indexing on: predicate symbol terms, in any position and at any depth for Horn clauses (Prolog) Hereditary Harrop formulas (λProlog) and their linear variants

slide-55
SLIDE 55

Indexing over Predicates Indexing over Terms Beyond Horn Clauses Conclusions

Future Work

Two-stage indexing

First, on predicate symbol Then, on terms

Beyond backward logic programming

Forward logic programming Theorem proving