Gleichungsspezifikationen Kongruenzabschluss fur ... · Deduktion, SS 10, Folien TES, Seite 18,...
Transcript of Gleichungsspezifikationen Kongruenzabschluss fur ... · Deduktion, SS 10, Folien TES, Seite 18,...
Ubersicht
• Gleichungsspezifikationen
• Kongruenzabschluss fur Grundtermgleichungen
• Kritische Paare und Knuth-Bendix-Vervollstandigung
• Orthogonale Termersetzungssysteme
Deduktion, SS 10, Folien TES, Seite 1, 13. Juli2010
Gleichungsspezifikationen
Eine (Gleichungs-)Spezifikation ist ein Paar spec = (Σ, E), wobei
• Σ = (S, F,arity) eine Signatur
• E = {u1 = v1, . . .} ein Gleichungssystem uber Σ und einem System
von Variablen V, d.h.
– ui, vi ∈ TermS(F,V) fur ein S ∈ S
Deduktion, SS 10, Folien TES, Seite 2, 13. Juli2010
Σ-Algebra
Signatur Σ = (S, F,arity), System von Variablen V , Spezifikation
spec = (Σ, E)
Eine Σ-Algebra A = (A, F ) besteht aus
• Tragermenge A =⋃
S∈SAS mit AS 6= ∅ und AS ∩AS′ = ∅ fur S 6= S′.
• Menge von Funktionen F = {f | f ∈ F}, so dass fur arity(f) =
S1 . . . Sn → S gilt, dass f eine Funktion f : AS1× . . .×ASn → AS ist.
Deduktion, SS 10, Folien TES, Seite 3, 13. Juli2010
Interpretation, Modell
Eine Interpretation ϕ zur Σ-Algebra A ist gegeben durch ϕ : V → A
wobei ϕ : VS → AS fur alle S ∈ S
Erweiterung auf Terme:
ϕ(f) = f , falls f eine Konstanteϕ((f(t1, . . . , tn)) = f(ϕ(t1), . . . , ϕ(tn)), sonst.
Σ-Algebra A ist ein Modell von spec = (Σ, E),
falls fur jede Interpretation ϕ gilt:
ϕ(s) = ϕ(t) fur alle s = t ∈ E.
Deduktion, SS 10, Folien TES, Seite 4, 13. Juli2010
Semantische E-Gleichheit
Sei spec = (Σ, E) eine Spezifikation.
• Σ-Algebra A erfullt eine Gleichung s = t falls fur jede Interpretation
ϕ gilt: ϕ(s) = ϕ(t) gilt in A.
• s, t sind E-gleich, falls jedes Modell von spec die Gleichung s = t
erfullt. Schreibweise: E |= s = t
Deduktion, SS 10, Folien TES, Seite 5, 13. Juli2010
Operationale E-Gleichheit
Sei spec = (Σ, E) eine Spezifikation.
t1E−→ t2 gdw.
formal:
es gibt p ∈ Pos(t1), s1 = s2 ∈ E und Substitution σ
mit σ(s) = t1/p und t2 = t1[σ(s2)/p]
informal:
t2 entsteht aus t1 durch Anwenden einer Gleichung
auf einen Teilterm von t1
t1 =E t1 gdw. t1E,∗←−→ t2
Schreibweise: E ` t1 = t2
Deduktion, SS 10, Folien TES, Seite 6, 13. Juli2010
Satz von Birkhoff
Fur jede Spezifikation spec = (Σ, E) gilt
E ` s = t gdw. E |= s = t
Deduktion, SS 10, Folien TES, Seite 7, 13. Juli2010
Unentscheidbarkeit
Gleichheit von Termen bzgl. einer endlichen Menge von Gleichheits-
axiomen E ist unentscheidbar.
D.h. das Wortproblem in beliebigen Gleichheitstheorien (mit endlichen
vielen Axiomen) ist unentscheidbar.
Aber: Es gibt Falle in denen das Wortproblem entscheidbar ist!
Deduktion, SS 10, Folien TES, Seite 8, 13. Juli2010
Zu betrachtende entscheidbare Falle
• endlich viele Grundtermgleichungen
– Berechne Congruence Closure
• konvergentesE−→
– Zeige Konvergenz. Ausreichend: Terminierung und lokale Kon-
fluenz.
Methode fur lokale Konfluenz: Knuth-Bendix-Test
– oder: Erstelle konvergentesE′−→ mit
E′,∗←−→=
E,∗←−→,
Methode: Knuth-Bendix-Vervollstandigung
Deduktion, SS 10, Folien TES, Seite 9, 13. Juli2010
Wortproblem auf endlicherMenge von
Grundtermgleichungen
Deduktion, SS 10, Folien TES, Seite 10, 13. Juli2010
Endliches Grundtermgleichungssystem
Grundterm : Term ohne Variablen
Grundtermgleichung s = t: s, t Grundterme
Fur Grundtermgleichungssystem E gilt: =E ist der Kongruenzabschluss
CC(E) von E, d.h. die kleinste Kongruenz uber Term(Σ,V) die E
enthalt.
Deduktion, SS 10, Folien TES, Seite 11, 13. Juli2010
Berechnung des Kongruenzabschlusses
Sei EG Grundtermgleichungssytem. Berechnung von CC(EG)
Fur
refl(E) = {s = s | s ∈ Term(Σ,V)}symm(E) = {t = s | s = t ∈ E}trans(E) = {s = t | s = r, r = t ∈ E}cong(E) = {f(s1 . . . sn) = f(t1 . . . tn) | si = ti ∈ E}cl(E) = E ∪ refl(E) ∪ symm(E) ∪ trans(E) ∪ cong(E)
gilt CC(EG) =⋃
i≥0cli(EG) wobei
cl0(EG) = EG
cli(EG) = cl(cli−1(EG)) fur i > 1
Terminiert nicht immer, da u.U. CC(EG) unendlich groß!
Deduktion, SS 10, Folien TES, Seite 12, 13. Juli2010
Losung
Um u =EGv zu entscheiden, braucht man nicht alle Terme aus CC(EG)
Es reicht nur die Terme aus CC(EG) berechnen, die benotigt werden.
Das sind gerade alle Unterterme der Gleichungen aus EG und von u
und v.
subterms(s) = {s/p | p ∈ Pos(s)}subterms(s = t) = subterms(s) ∪ subterms(t)
Deduktion, SS 10, Folien TES, Seite 13, 13. Juli2010
Berechnung des relevanten Teils
Sei EG Grundtermgleichungssytem. Frage: Gilt u =EGv ?
Sei S = subterms(EG) ∪ subterms(u) ∪ subterms(v)
Fur
refl(E) = {s = s | s ∈ S}symm(E) = {t = s | s = t ∈ E}trans(E) = {s = t | s = r, r = t ∈ E}cong(E) = {f(s1 . . . sn) = f(t1 . . . tn) | si = ti ∈ E}cl(E) = E ∪ refl(E) ∪ symm(E) ∪ trans(E) ∪ cong(E)
gilt: u =EGv gdw. (u, v) ∈
⋃i≥0
cli(EG) wobei
cl0(EG) = EG
cli(EG) = cl(cli−1(EG)) ∩ (S × S) fur i > 1
terminiert, da S endlich und cli(EG) ⊆ cli+1(EG) ⊆ (S × S)
Deduktion, SS 10, Folien TES, Seite 14, 13. Juli2010
Programm in Haskell (Ausschnitt)
Datentyp fur Terme:
data Term = Fn String [Term] -- Funktionssymbol mit Argumenten
| Var String -- Variablen
Z.B. f(x, g(y)) als Term: Fn "f" [Var "x", Fn "g" [Var "y"]]
Gleichungen:
type Gleichung = (Term,Term)
Deduktion, SS 10, Folien TES, Seite 15, 13. Juli2010
Operationen fur Reflexivitat, Symmetrie, Transitivitat und Kongruenz
-- s: Alle Unterterme
-- e: Gleichungen
-- fs: (Alle Funktionssymbole mit Stelligkeiten)
refl s e = [(t,t) | t <- s]
symm s e = [(t1,t2) | (t2,t1) <- e]
trans s e = [(t1,t3) | (t1,t2) <-e, t3 <-s, (t2,t3) ‘elem‘ e]
cong fs s e = [(Fn f a, Fn f b) |
(f,l) <- fs,
(a,b) <- nub (map unzip (gen l e)), l > 0]
-- berechnet Liste aller Paare ([s1,...,sl],[t1,...,tl])
-- mit (si,ti) aus e
Eine Iteration:
oneIter fs s e = let s_X_s = [(t,r) | t <- s, r <- s]
ohneS q = intersect q s_X_s
in e ‘union‘ (ohneS $ refl s e)
‘union‘ (ohneS $ symm s e)
‘union‘ (ohneS $ trans s e)
‘union‘ (ohneS $ cong fs s e)
Gesamten Kongruenzabschluss berechnen:
closure e u v =
let
s = nub $ unterterme u ++ unterterme v ++ gleichungenUT e
...
go e = let eneu = nub (oneIter fs s e)
in if eqSet eneu e -- e = eneu ??
then e -- ja, dann fertig (Fixpunkt erreicht)
else go eneu -- nein, dann weiter mit eneu
in go e
Beispiel: Binare Addition
e = parseEq "add(0,0)=0; add(0,1)=1; add(1,0)=1; add(1,1)=0"
u = parseTerm "add(add(add(0,1),add(1,0)),1)"
v = parseTerm "1"
closure e u v ergibt
[(add(0,0),0), (add(0,1),1), (add(1,0),1), (add(1,1),0),(add(add(add(0,1),add(1,0)),1),add(add(add(0,1),add(1,0)),1)),(add(add(0,1),add(1,0)),add(add(0,1),add(1,0))), (add(0,1),add(0,1)), (0,0), (1,1),(add(1,0),add(1,0)), (add(0,0),add(0,0)), (add(1,1),add(1,1)), (0,add(0,0)),(1,add(0,1)), (1,add(1,0)), (0,add(1,1)), (add(add(0,1),add(1,0)),add(1,1)),(add(1,1),add(add(0,1),add(1,0))), (add(0,0),add(1,1)), (add(0,1),add(1,0)),(add(1,0),add(0,1)), (add(1,1),add(0,0)), (add(add(0,1),add(1,0)),0),(0,add(add(0,1),add(1,0))), (add(add(0,1),add(1,0)),add(0,0)),(add(0,0),add(add(0,1),add(1,0))), (add(add(add(0,1),add(1,0)),1),add(0,1)),(add(0,1),add(add(add(0,1),add(1,0)),1)), (add(add(add(0,1),add(1,0)),1),1),(add(add(add(0,1),add(1,0)),1),add(1,0)), (1,add(add(add(0,1),add(1,0)),1)),(add(1,0),add(add(add(0,1),add(1,0)),1))]
Deduktion, SS 10, Folien TES, Seite 18, 13. Juli2010
Wortproblem fur konvergentesReduktionssystem E−→
Deduktion, SS 10, Folien TES, Seite 19, 13. Juli2010
Konvergenz impliziert Entscheidbarkeit
Spezifikation spec = (Σ, E). SeiE−→ konvergentes Reduktionssystem.
Dann ist das Wortproblem entscheidbar: Frage: Gilt u =E v? Es reicht
zu testen, ob gilt u↓= v↓. Denn fur konvergentesE−→ gilt u↓= v↓ gdw.
uE←−→ v
Frage: Wie entscheidet man, obE−→ konvergent ist?
• Im allgemeinen unentscheidbar!
• Hinreichende Bedingung: Zeige
1.E−→ ist noethersch. (zeige Terminierung)
2.E−→ ist lokal konfluent. (Methode: Knuth-Bendix-Test)
Deduktion, SS 10, Folien TES, Seite 20, 13. Juli2010
Kritische Paare
Zwei (variablendisjunkte) Regeln: • l1 → r1 • l2 → r2
Sei u ∈ Pos(l1), so dass• l1/u 6∈ V und• l1/u und l2 sind unifizierbar
Sei σ ∈ mgu(l1/u, l2).
Dann heißt σ(l1) eine Uberlappung von l2 → r2 in l1 → r1
Kritisches Paar zu l1 → r1 und l2 → r2: 〈σ(r1), σ(l1)[u→ σ(r2)]〉
Uberlappungstripel 〈σ(r1), σ(l1), σ(l1)[u→ σ(r2)]〉
CP(R) = Menge aller kritischen Paare, die man aus Regeln in R bilden kann
Deduktion, SS 10, Folien TES, Seite 21, 13. Juli2010
Kritische Paare
Deduktion, SS 10, Folien TES, Seite 22, 13. Juli2010
Kritische Paare
Deduktion, SS 10, Folien TES, Seite 23, 13. Juli2010
Kritische Paare
Deduktion, SS 10, Folien TES, Seite 24, 13. Juli2010
Kritische Paare
Deduktion, SS 10, Folien TES, Seite 25, 13. Juli2010
Kritische Paare
Deduktion, SS 10, Folien TES, Seite 26, 13. Juli2010
Kritische Paare in Haskell (Ausschnitt)-- start fuer (l1,r1) (l2,r2) mit-- cp l1 id l2 r1 r2
cp :: Term -> (Term -> Term) -> Term -> Term -> Term -> [(Term,Term)]cp (Var v) lcon l2 r1 r2 = []cp l1@(Fn f args) lcon l2 r1 r2 =let rek = cpL [] argsincase unify [(l1,l2)] ofNothing -> rekJust sigma -> (apply sigma r1 , apply sigma (lcon (apply sigma r2))) : rek
wherecpL bs [] = []cpL bs (a:as) = (cp a (\x -> lcon (Fn f (bs ++ [x] ++ as))) l2 r1 r2)
++ (cpL (bs ++ [a]) as)
-- Substitutionapply [] t2 = t2apply ((v,t):xs) t2 = apply xs (subst v t t2)
subst v t (Var v’)| v == v’ = t| otherwise = Var v’
subst v t (Fn f args) = Fn f (map (subst v t) args)
Deduktion, SS 10, Folien TES, Seite 27, 13. Juli2010
Unifikation in Haskellunify :: [(Term,Term)] -> Maybe [(String,Term)]unify [] = Just []unify (((Fn a argsA),(Fn b argsB)):xs)| a == b = unify $ (zip argsA argsB) ++ xs -- Dekomposition| otherwise = Nothing -- Fail
unify ((Var v,Var v’):xs)| v == v’ = unify xs -- Loeschen v=v
unify ((Var v,t):xs)| v ‘occursInNonVar‘ t = Nothing -- Fail (Occurs Check)| otherwise = case unify (map (\(l,r) -> (subst v t l, subst v t r)) xs) of
-- Einsetzen + Rekursiver AufrufJust ys -> Just ((v,apply ys t):ys) -- Voll instanziierenNothing -> Nothing -- Fail
unify ((t,Var v):xs) = unify ((Var v,t):xs) -- Drehen t=v -> v=t
-- Occurs CheckoccursInNonVar v (Var _) = FalseoccursInNonVar v t = v ‘elem‘ (varsOf t)
-- Variablen eines Terms berechnenvarsOf (Var v) = [v]varsOf (Fn f args) = concatMap varsOf args
Deduktion, SS 10, Folien TES, Seite 28, 13. Juli2010
Eigenschaften Kritischer Paare
Zwei Terme s und t heißen zusammenfuhrbar, falls es ein z gibt mit
s∗−→ z und t
∗−→ z. (Notation s↓↓t).
Critical Pair Lemma von Knuth und Bendix:
Aus t1R←− t
R−→ t2 folgt t1↓↓t2 oder t1CP (R)←−→ t2.
Satz:
• Regelsystem R ist genau dann lokal konfluent,
wenn alle kritischen Paare zusammenfuhrbar sind.
• Noethersches R ist genau dann konfluent (und auch konvergent),
wenn alle kritischen Paare zusammenfuhrbar sind.
Deduktion, SS 10, Folien TES, Seite 29, 13. Juli2010
Knuth-Bendix-Test
Eingabe: Noethersches Regelsystem R.
Ausgabe: R ist Konfluent? ja / nein
1. Berechne CP(R).
2. Fur alle (s, t) ∈ CP(R):
Berechne s↓ und t↓Wenn s↓6= t↓, dann gebe Nein aus und breche ab
3. Gebe Ja aus
Deduktion, SS 10, Folien TES, Seite 30, 13. Juli2010
Einfacher Test fur Spezifikationen
spec = (Σ, E) Spezifikation,E−→ die operationale E-Gleichheit.
Wir wissen: WennE−→ konvergent, dann ist das Wortproblem fur spec
entscheidbar.
Methode:
1. Richte Gleichungen in E und zeige, dassE−→ terminierend.
2. Zeige lokale Konfluenz mit Knuth-Bendix-Test
Nachteil: Funktioniert oft nicht!
Deduktion, SS 10, Folien TES, Seite 31, 13. Juli2010
Knuth-Bendix-Vervollstandigung
Sei spec(Σ, E) Spezifikation,E−→ die operationale E-Gleichheit
1. Richte Gleichungen in E und finde Ordnung zum Nachweis, dassE−→ terminiert.
2. Berechne CP (E−→) und teste auf Zusammenfuhrbarkeit.
Seien E′ die nicht zusammenfuhrbaren kritischen Paare
3. Wenn E′ = ∅dann: stoppe mit Ausgabe
E−→,
sonst: gehe zu 1. mit E := E ∪ E′.
Deduktion, SS 10, Folien TES, Seite 32, 13. Juli2010
Knuth-Bendix-Vervollstandigung
Wenn die Vervollstandigung terminiert, dann gilt fur die AusgabeE′−→:
• E′−→ ist konvergent
• sE,∗←−→ t gdw. s
E′,∗←−→ t, d.h.
E′−→ entscheidet E.
Deduktion, SS 10, Folien TES, Seite 33, 13. Juli2010
Beispiel
Betrachte E = {f(g(x)) = g(x), f(f(x)) = g(x)}Richten der Gleichungen
E−→:= {f(g(x))→ g(x), f(f(x))→ g(x)},E−→ terminiert, da Termgroße strikt kleiner wird
Berechnen von CP(E−→):
• f(g(x))→ g(x) mit sich selbst: keine kritischen Paare
• f(g(x))→ g(x) mit f(f(x))→ g(x): keine kritischen Paare
• f(f(x))→ g(x) mit sich selbst:
f( f(x) ) //g(x)
f(f(y))��
g(y)
mgu:{x 7→ f(y)} f( f(f(y))
��
) //g(f(y))
f( g(y) )
Kritisches Paar 〈g(f(y)), f(g(y))〉
Deduktion, SS 10, Folien TES, Seite 34, 13. Juli2010
• f(f(x))→ g(x) mit f(g(y))→ g(y):
f( f(x) ) //g(x)
f(g(y))��
g(y)
mgu:{x 7→ g(y)} f( f(g(y))
��
) //g(g(y))
f( g(y) )
Kritisches Paar 〈g(g(y)), f(g(y))〉
Die Kritischen Paare 〈g(f(y)), f(g(y))〉 und 〈g(g(y)), f(g(y))〉 sind beide
nicht zusammenfuhrbar (daE−→:= {f(g(x))→ g(x), f(f(x))→ g(x)} )
Neues
E1 = { f(g(x)) = g(x),f(f(x)) = g(x),g(f(y)) = f(g(y)),g(g(y)) = f(g(y))}
Richten der Gleichungen
E1−−→ = { f(g(x))→ g(x),f(f(x))→ g(x),g(f(y))→ f(g(y)),g(g(y))→ f(g(y))}
terminiert: Ordnungen (Termgroße, Term als String)
Kritische Paare:
〈g(f(x)), f(g(x))〉,〈f(g(g(x))), g(f(g(x)))〉,〈g(f(x)), f(f(g(x)))〉,〈g(g(x)), f(f(g(x)))〉,〈g(g(x)), f(g(x))〉,〈f(g(g(x))), g(g(x))〉,〈f(g(f(x))), g(g(x))〉,〈f(g(f(x))), g(f(g(x)))〉
Alle zusammenfuhrbar, d.h.E1−−→ entscheidet E.
OrthogonaleTermersetzungssysteme
Deduktion, SS 10, Folien TES, Seite 37, 13. Juli2010
Lineare Termersetzungssysteme
Linearer Term := keine Doppelvorkommen der
selben Variablen.
Rewrite-Regel l→ r rechts-linear := r ist linear
Rewrite-Regel l→ r links-linear := l ist linear
Rewrite-Regel l→ r linear := l→ r ist recht- und links-linear
TES ist linear
(links-linear, rechts-linear)
:= alle Regeln sind linear
(links-linear,rechts-linear)
Z.B. sind die linken Seiten von Definitionen von Funktionen in funk-
tionalen Programmiersprachen linear ({fi(x1, . . . , xi,n) = ei})
Knuth-Bendix-Test benotigt Terminierung, um Konfluenz zu zeigen,
aber z.B. Programmiersprachen lassen i.A. auch nichtterminierende
Funktionen zu.
Deduktion, SS 10, Folien TES, Seite 38, 13. Juli2010
Konfluenzbeweis trotz Nichtterminierung
Methode: Zeige Konfluenz uber das Kriterium der starken Konfluenz.
Proposition
Wenn das TES R linear ist, und alle kritischen Paare
die starke Konfluenzbedingung erfullen,
dann ist das TES auch (stark) konfluent.
u∗~~~~
~~~~
~~ ∗��@
@@@@
@@@
x∗ @
@@
@ y∗��~
~~
~
z
u
~~~~~~
~~~~
��@@@
@@@@
@
x∗ @
@@
@ y
≤1��~~
~~
zkonfluent stark konfluent
Deduktion, SS 10, Folien TES, Seite 39, 13. Juli2010
Orthogonale TES
Ein TES heißt orthogonal, wenn es links-linear ist und keine kritischen
Paare hat.
Theorem
Jedes orthogonale Termersetzungssystem ist konfluent.
Deduktion, SS 10, Folien TES, Seite 40, 13. Juli2010
Funktionale Programmiersprachen
Funktionen in funktionalen Programmiersprachen sind links-linear und
haben keine kritischen Paare, wenn die Definition jeweils mit disjunkten
Pattern gemacht wird.
Man muss aber eine parallele Reduktion (mehrere Definitionseinset-
zungen auf einmal) zulassen
Die parallele Reduktion kann man als stark konfluent nachweisen, und
kann danach das Kriterium der starken Konfluenz verwenden.
Deduktion, SS 10, Folien TES, Seite 41, 13. Juli2010
Linkslinearitat ist notwendig als Voraussetzung
Beispiel: TES bestehend aus den Regeln
f(x, x) → af(x, g(x)) → bc → g(c)
Eigenschaften:
• Keine kritischen Paare
• nicht terminierend wg. c→ g(c)
• nicht links-linear (aber rechts-linear).
• Der Ausdruck f(c, c) hat als Normalform a und b,
d.h. das TES ist nicht konfluent
Deduktion, SS 10, Folien TES, Seite 42, 13. Juli2010
Funktionale Programmiersprachen
• Konfluente TES haben eindeutige Normalformen, wenn eine exi-
stiert.
• Konsequenz: Wenn die Regeln einer Programmiersprache orthogo-
nal sind, dann ist die Sprache deterministisch.
Deduktion, SS 10, Folien TES, Seite 43, 13. Juli2010
Programmiersprache mit letrec (1)
Regeln:
letrec . . . , x = t, . . . in C[x]→ letrec . . . , x = t, . . . in C[t]
letrec . . . , x = t, . . . , y = C[x], . . . in s→ letrec . . . , x = t, . . . , y = C[t], . . . in s
letrec . . . , y = C[x], . . . , x = t, . . . , in s→ letrec . . . , y = C[t], . . . , x = t, . . . , in s
Deduktion, SS 10, Folien TES, Seite 44, 13. Juli2010
Programmiersprache mit letrec (2)
Ist nicht konfluent:letrec x = g(y), y = h(x) in x
rrffffffffffffffffffffffff
++XXXXXXXXXXXXXXXXXXXXXXX
letrec x = g(y), y = h(g(y)) in x
��
letrec x = g(h(x)), y = h(x) in x
��
letrec x = g(y), y = h(g(y)) in g(y)
��
letrec x = g(h(x)), y = h(x) in g(h(x))
��letrec x = g(y), y = h(g(y)) in g(h(g(y)))
��
. . .
��
. . .
��
. . . in g(hg)n(y) . . . in (gh)n(y)
Deduktion, SS 10, Folien TES, Seite 45, 13. Juli2010