CS421 – Logic Programming (Unification)

36
CS421 – Logic Programming (Unification) Based on slides by Mattox Beckman, updated by Vikram Adve, Gul Agha, Elsa Gunter

description

CS421 – Logic Programming (Unification). Based on slides by Mattox Beckman, updated by Vikram Adve, Gul Agha, Elsa Gunter. Contents. Logics Logic Programming Unification. Propositional Logic. Propositions P, Q, R Operations AND, OR, NOT, IMPLIES, EQUIV Models Propositions → { T, F }. - PowerPoint PPT Presentation

Transcript of CS421 – Logic Programming (Unification)

CS421 – Logic Programming(Unification)

Based on slides by Mattox Beckman, updated by Vikram Adve, Gul Agha, Elsa Gunter

Contents

• Logics

• Logic Programming

• Unification

Propositional Logic

• Propositions– P, Q, R

• Operations– AND, OR, NOT, IMPLIES, EQUIV

• Models– Propositions → { T, F }

Predicate Logic

• Terms– Objects – O = { o1, o2, … }

– Functions – F : On → O

• Predicates – P : O → { T, F }

• Operations– + Quantifiers

• Models

Horn Clauses

• H ← T1 & T2 & T3 & …

– Each element a predicate

• Inference– Backwards Chaining– Forwards Chaining

Example

• Graduated(s) ← Quals(s) & Thesis(s)

• Quals(s) ← LangR(s) & SystemR(s) & AreaR(s) & TheoryR(s)

• LangR(s) ← CS421(s)

• TheoryR(s) ← CS476(s)

• CS421(P), CS476(P), CS423(P), …

Logic Programming

• Inference on Horn Clauses– Facts: H ←

– Rules: H ← T1 & T2 & …

• Unification

• Back Tracking

Example

• (append empty x x) ←

• (append (cons w x) y (cons w z)) ← (append x y z)

• (append q r (cons 1 (cons 2 empty)))

Example

• (append empty x x) ←

• (append (cons w x) y (cons w z)) ← (append x y z)

• (append q r (cons 1 (cons 2 empty)))– q = empty– r = (cons 1 (cons 2 empty))– x = (cons 1 (cons 2 empty))

Example

• (append empty x x) ←

• (append (cons w x) y (cons w z)) ← (append x y z)

• (append q r (cons 1 (cons 2 empty)))– q = (cons 1 x), w = 1, y = r– z = (cons 2 empty)– (append x r (cons 2 empty))

Unification

• Terms– Constructors/Constants– Variables

• Substitution– Variable Assignment: Variables → Terms

Term → Constant → Variable → Constructor(Term1, Term2, …)

Unification Problem

• { s1 = t1, s2 = t2, …, sn = tn }

• Find unification solution σ– σ(si) = (ti), for all i = 1, …, n

Unification Algorithm

• S = { s1 = t1, s2 = t2, …, sn = tn }

– S = { } → Unif(S) = Identity– S = { s = t S’ }

• Delete: if s = t• Orient: if s = x (x is a variable, s is not a variable)

Unif(S) = Unif({ x = s S’ })

• Decompose: if c(q1, q2, …, qn) = c(r1, r2, …, rn) Unif(S) = Unif({ q1=r1 q2=r2 … qn=rn S’ })

• Eliminate: if x = t (x does not occur in t)

Unification

• Eliminate: if x = t (x does not occur in t)– f = x | t– g = Unif(f(S’))– Unif(S) = { x | g(t) } o g

• Bad example: x = (cons 1 x)

Unification Example

• x, y, z variables, f, g constructors

• S = { g(y, f(y)) = x, f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• Pick: g(y, f(y)) = x

• S = { g(y, f(y)) = x, f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• Pick: g(y, f(y)) = x

• Orient: x = g(y, f(y)

• S = { g(y, f(y)) = x, f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• S = { x = g(y, f(y)), f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• Pick: x = g(y, f(y))

• S = { x = g(y, f(y)), f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• Pick: x = g(y, f(y))

• Eliminate

• S = { x = g(y, f(y)), f(x) = f(g(y, z)) }

Unification Example

• x, y, z variables, f, g constructors

• S = { f(g(y, f(y))) = f(g(y, z)) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: f(g(y, f(y))) = f(g(y, z))

• S = { f(g(y, f(y))) = f(g(y, z)) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: f(g(y, f(y))) = f(g(y, z))

• Decompose: g(y, f(y)) = g(y, z)

• S = { f(g(y, f(y))) = f(g(y, z)) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• S = { g(y, f(y)) = g(y, z) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: g(y, f(y)) = g(y, z)

• S = { g(y, f(y)) = g(y, z) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: g(y, f(y)) = g(y, z)

• Decompose: y = y, f(y) = z

• S = { g(y, f(y)) = g(y, z) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• S = { y = y, f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: y = y

• S = { y = y, f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: y = y

• Delete

• S = { y = y, f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• S = { f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: f(y) = z

• S = { f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: f(y) = z

• Orient: z = f(y)

• S = { f(y) = z }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• S = { z = f(y) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: z = f(y)

• S = { z = f(y) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• Pick: z = f(y)

• Elimination

• S = { z = f(y) }

• x |→ g(y, f(y))

Unification Example

• x, y, z variables, f, g constructors

• S = { }

• x |→ g(y, f(y))

• z |→ f(y)