Programmextraktion aus Beweisen

Programmextraktion aus Beweisen
co I
⊆
co G
Till Überrück-Fries
30. November 2015
Till Überrück-Fries
Programmextraktion aus Beweisen
Erinnerung 1: Gray-Code
Wir betrachten die beiden Algebren G und H mit den Trägern
∗
|G| = {1, 1}∗ ∪ {1, 1}∗ ⊥11 und |H| =
∗
∗
{1, 1}+ ∪ {1, 1}+ ⊥11 ∪ ⊥1 .Sie sind rekursiv definiert durch:
G = (|G|, {LRa : G → G | a ∈ PSD} ∪ {U : H → G, nilG : G}),
H = (|H|, {Fina : G → H | a ∈ PSD} ∪ {D : H → H, nilH : H}).
Dabei ist die Bedeutung der Konstruktoren gegeben durch:
x −1
x
,
fU (x ) = ,
2
2
x +1
x
fFina = a
,
fD (x ) = .
2
2
Die Bedeutung eines Ausdrucks p = [c1 , c2 , . . .] des Typs G ist
dann gegeben durch
fLRa (x ) = −a
FG (p) =
∞
\
fc1 (fc2 (. . . fcn (I) . . .)).
n=1
Till Überrück-Fries
Programmextraktion aus Beweisen
Erinnerung 2:
co
G und
co
H
Wir konstruieren uns jetzt die Prädikate co G und co H für G und H. co G (x ) bedeutet dann ’x besitzt eine
Pre-Gray-Code-Darstellung’.
Dazu betrachten wir die folgenden Operatoren:
r
Γ(X , Y ) := {y | ∃x ∈X ∃a (y = −a
r
∆(X , Y ) := {y | ∃x ∈X ∃a (y = a
x −1
2
x +1
2
x
r
) ∨ ∃x ∈Y (y =
r
) ∨ ∃x ∈Y (y =
x
2
)}
2
)}
Das Größter-Fixpunkt-Axiom liefert uns ( co G , co H ). Es gilt das (verstärkte) Koinduktionsaxiom:
co
(X , Y ) ⊆ (Γ( G ∪ X ,
co
co
H ∪ Y ), ∆( G ∪ X ,
co
H ∪ Y ))
co
→ (X , Y ) ⊆ ( G ,
co
H)
Die co G -Klausel und die inverse co G -Klausel lauten:
nc co
r
∀x ( G (x ) → ∃x 0 ∈ co G ∃a (x = −a
nc
r
0
∀x (∃x 0 ∈ co G ∃a (x = −a
x −1
2
Till Überrück-Fries
x0 − 1
2
r
r
) ∨ ∃x 0 ∈ co H (x =
) ∨ ∃x 0 ∈ co H (x =
x
0
2
)→
co
x0
2
))
G (x ))
Programmextraktion aus Beweisen
Realisierbarkeit 1
Γr (Z , W ) := {(p, x ) | ∃(p 0 ,x 0 )∈Z ∃a (x = −a
x0 − 1
) ∧ p = LRa (p 0 ))∨u
2
x0
∧ p = U(q 0 ))},
2
x0 + 1
) ∧ q = Fina (p 0 ))∨u
∆r (Z , W ) := {(q, x ) | ∃(p 0 ,x 0 )∈Z ∃a (x = a
2
x0
∧ q = D(q 0 ))}.
∃(q0 ,x 0 )∈W (x =
2
∃(q0 ,x 0 )∈W (x =
Das Größter-Fixpunkt-Axiom von TCF liefert uns
(( coG )r , ( coH )r ) := ν(Z ,W ) (Γr (Z , W ), ∆r (Z , W ))
als den größter Fixpunkt von (Γr , ∆r ).
Till Überrück-Fries
Programmextraktion aus Beweisen
Realisierbarkeit 2
(( coG )r , ( coH )r ) erfüllt das (verstärkte) simultane
Koinduktionsaxiom:
(Z , W ) ⊆ (Γr (( coG )r ∪ Z , ( coH )r ∪ W ), ∆r (( coG )r ∪ Z , ( coH )r ∪ W ))
→ (Z , W ) ⊆ (( coG )r , ( coH )r )
Es bleibt zu zeigen, dass coG korrekt ist, d.h. der Zeuge von
co G (x ) ist genau die Pre-Gray-Code-Darstellung von x .
Proposition
Für x ∈ I und kototale Ideale p in G und q in H gilt
( coG )r (p, x ) ↔ x = FG (p),
( coH )r (q, x ) ↔ x = FH (q).
Kein Beweis.
Till Überrück-Fries
Programmextraktion aus Beweisen
co
I⊆
co
G
Wir wollen zeigen, dass jedes x , das eine Signed-Digit-Darstellung
besitzt auch eine Pre-Gray-Code-Darstellung besitzt. Also
Proposition
(CoIToCoG)
co
∀nc
x ( I (x ) →
co
G (x )).
Stattdessen zeigen wir die folgende stärkere Aussage:
Lemma
(CoIToCoGAux)
co
∀nc
x (∃a I (ax ) →
co
G x ),
co
∀nc
x (∃a I (ax )
co
H x ).
Till Überrück-Fries
→
Programmextraktion aus Beweisen
Beweis
Setze P := {x | ∃a (ax ∈ coI )}. Wir zeigen per Koinduktionsaxiom
(P, P) ⊆ ( coG , coH ). Also (i) P ⊆ Γ( coG ∪ P, coH ∪ P) und (ii)
P ⊆ Γ( coG ∪ P, coH ∪ P). (i): Sei x1 ∈ P. Dann nach inverser
co G -Klausel z.z.:
(∗) ∃rx ∈ coG ∪P ∃a (x1 = −a
x
x −1
∨ ∃rx ∈ coH ∪P (x1 = )
2
2
Da x1 ∈ P gibt es ein a1 , so dass coI (a1 x1 ). Die
x 0 +d
r
(∀nc
x ∈ co I ∃x 0 ∈ co I ∃d (x = 2 ) liefert uns
∃rx ∈ coI ∃d (a1 x1 =
Also haben wir x2 ∈
co I
x +d
).
2
und d, so dass a1 x1 =
Till Überrück-Fries
co I -Klausel
x2 +d
2 .
Programmextraktion aus Beweisen
Beweis Forts.
Fall d = −1: Mit x := x2 und a := −a1 gilt dann die linke Seite
von (∗), da x2 ∈ P und
x1 = a1 a1 x1 = a1
x2 − 1
x −1
x2 + d
= a1
= −a
.
2
2
2
Fall d = 1: Mit x := −x2 und a := a1 gilt dann die linke Seite von
(∗), da −x2 ∈ P und
x1 = a1 a1 x1 = a1
x2 + 1
−x2 − 1
x −1
x2 + d
= a1
= −a1
= −a
.
2
2
2
2
Fall d = 0: Mit x := a1 x2 gilt dann die rechte Seite von (∗), da
a1 x2 ∈ P und
x1 = a1 a1 x1 = a1
x2 + d
a1 x2
x
=
= .
2
2
2
Der Beweis von (ii) funktioniert genauso.
Till Überrück-Fries
Programmextraktion aus Beweisen
Minlog-Beweis
λ-Ausdrücke
Siehe gray.scm Zeilen 1893 - 2070.
Nach Z. 1900: (proof-to-expr)
Baum des λ-Ausdrucks
(lambda (xˆ)
(lambda (ExHyp7062)
((((Gfp xˆ) ExHyp7062) ((u7063 xˆ) ExHyp7062))
((u7064 xˆ) ExHyp7062))))
λ xˆ
λ ExHyp
•
•
•
•
•
Gfp
•
ExHyp
xˆ
u7063
•
ExHyp
•
u7064
ExHyp
xˆ
xˆ
Die Formeln u# sind die noch offenen Lücken des
Baumes.
Till Überrück-Fries
Programmextraktion aus Beweisen
Simultane Korekursion
Die simultanen Korekursionsoperatoren für G, H haben den Typ
co
RG
(G,H),(σ,τ )
: σ → δG → δH → G
co
(G,H),(σ,τ )
RH
: τ → δG → δH → H
mit den Schritttypen
δG := σ → PSD × (G + σ) + (H + τ ),
δH := τ → PSD × (G + σ) + (H + τ ).
Sie genügen den folgenden Konversionsregeln:
(
co
0
R G NMM 7→
(
co
R H N 0 MM 0 7→
LRπ1 (u) ([id, λy ( coR G yMM 0 )]π2 (u))
U([id, λz ( coR H zMM 0 )]v )
( coR
yMM 0 )]π
Finπ1 (u) ([id, λy
G
D([id, λz ( coR H zMM 0 )]v )
Till Überrück-Fries
2 (u))
Programmextraktion aus Beweisen
für MN=inl(u)
für MN=inr(v )
für M 0 N 0 =inl(u)
für M 0 N 0 =inr(v )
Extrahierter Term
Z. 2023:
(ppc neterm-CoIToCoGAux)
[bv]
(CoRec psd@@iv=>ag psd@@iv=>ah)bv
([bv0]
[case (left Des right bv0)
(Lft -> InL(inv left bv0@InR(PRht@right Des right bv0)))
(Rht -> InL(left bv0@InR(PLft@right Des right bv0)))
(Mid -> InR(InR(left bv0@right Des right bv0)))])
([bv0]
[case (left Des right bv0)
(Lft -> InL(inv left bv0@InR(PLft@right Des right bv0)))
(Rht -> InL(left bv0@InR(PRht@right Des right bv0)))
(Mid -> InR(InR(left bv0@right Des right bv0)))])
Dies lässt sich schreiben als
inl(−b, inr(1, v 0 ))
inl(b, inr(−1, v 0 ))
0
inr(inr(b, v ))
für d = −1,
für d = 1,
für d = 0,
inl(−b, inr(−1, v 0 ))
inl(b, inr(1, v 0 ))
inr(inr(b, v 0 ))
für d = −1,
für d = 1,
für d = 0.
Nochmal die Konversionsregel:
co
co
0
n
LRπ (u) ([id, λy ( co R G yMM 0 )]π2 (u))
1
U([id, λz ( co R H zMM 0 )]v )
0
n
Finπ (u) ([id, λy ( co R G yMM 0 )]π2 (u))
1
D([id, λz ( co R H zMM 0 )]v )
R G NMM 7→
0
R H N MM 7→
Till Überrück-Fries
Programmextraktion aus Beweisen
für MN=inl(u)
für MN=inr(v )
für M 0 N 0 =inl(u)
für M 0 N 0 =inr(v )
Impliziter Algorithmus
Dies liefert uns den impliziten Algorithmus: g : τ → G und
h : τ → H mit τ := PSD × I sind gegeben durch
g(b, C−1 (v )) = LR−b (g(1, v )), h(b, C−1 (v )) = Fin−b (g(−1, v )),
g(b, C1 (v ))) = LRb (g(−1, v )), h(b, C1 (v )) = Finb (g(1, v )),
g(b, C0 (v ))) = U(h(b, v )),
h(b, C0 (v )) = D(h(b, v )).
Till Überrück-Fries
Programmextraktion aus Beweisen