Logic for real number computation

advertisement
Logic for real number computation
Helmut Schwichtenberg
(j.w.w. Ulrich Berger, Kenji Miyamoto and Hideki Tsuiki)
Mathematisches Institut, LMU, München
Trends in Proof Theory, Hamburg, 20. - 21. September 2015
1 / 16
Dyadic rationals:
X ai
.
2i+1
with ai ∈ {−1, 1} =: PSD.
i<k
15
16
− 15
16
1 1̄
1̄
− 78
1 1̄
1 1̄
1 1̄
1 1̄
1 1̄
1 1̄
1
7
8
1
1̄
1
1̄
− 34
1
1̄
1
1̄
1
1̄
− 12
1
1̄
1
1̄
3
4
1
2
0
with 1̄ := −1. Adjacent dyadics can differ in many digits:
7
∼ 11̄11,
16
9
∼ 111̄1̄.
16
2 / 16
Cure: flip after 1. Binary reflected (or Gray-) code.
− 15
16
L
− 78
15
16
R R
L L
R R
L L
R R
L L
R R
L
7
8
L
R
− 34
R
L
L
L
R
R
− 12
R
R
L
R
L
L
3
4
1
2
0
7
∼ RRRL,
16
9
∼ RLRL.
16
3 / 16
Problem with productivity:
1̄111 + 11̄1̄1̄ = ?
(what is the first digit?)
Cure: delay.
I
For binary code: add 0. Signed digit code
X di
.
2i+1
with di ∈ {−1, 0, 1} =: SD.
i<k
Widely used for real number computation.
I
For Gray-code: add U, D, FinL/R . Pre-Gray code.
4 / 16
Pre-Gray code
7
16
L
U
R
U
U
FinR
U
1
4
R
FinR
3
8
9
16
D
L
D
FinR
FinL
U
R
U
FinL
5
8
R
3
4
L
1
2
0
After computation in pre-Gray code, one can remove Fina up to
U ◦ Fina 7→ a ◦ R,
1
:
2k
D ◦ Fina 7→ Fina ◦ L,
5 / 16
Goal: extract algorithms on infinite objects from proofs, in a simple
framework (TCF). Example:
I
Infinite objects: streams, in pre-Gray code.
I
Algorithm: average.
Framework:
I
Constructive logic
I
Types: only function types (Scott/Ershov partial continuous
functionals), over base types given by constructors (may
contain infinite objects).
I
Inductive & coinductive predicates, with their least & greatest
fixed point axioms (i.e., induction & coinduction).
6 / 16
We will coinductively define a predicate coG and prove
co
co
0
co
∀nc
x,x 0 ( G (x) → G (x ) → G (
x + x0
))
2
(1)
0
(∀nc
x,x 0 : the reals x, x have no computational significance).
Associated with coG is its realizability extension (coG )r (p, x)
(p is a stream representation of x witnessing coG (x)).
Soundness theorem:
(coG )r (p, x) → (coG )r (p 0 , x 0 ) → (coG )r (f (p, p 0 ),
x + x0
)
2
for some stream transformer f extracted from the proof of (1),
which never mentions streams.
7 / 16
What is coG ? Need simultaneously coH.
x −1
x
) ∨ ∃rx∈Y (y = ) },
2
2
x
+
1
x
∆(X , Y ) := { y | ∃rx∈X ∃a (y = a
) ∨ ∃rx∈Y (y = ) }
2
2
Γ(X , Y ) := { y | ∃rx∈X ∃a (y = −a
(∃rx : the real x has no computational significance)
Define (coG , coH) := ν(X ,Y ) (Γ(X , Y ), ∆(X , Y )).
Coinduction:
(X , Y ) ⊆ (Γ(coG ∪X , coH∪Y ), ∆(coG ∪X , coH∪Y )) → (X , Y ) ⊆ (coG , coH),
Associated to Γ, ∆ are algebras G, H with constructors
LR : PSD → G → G,
U: H → G
(for “undefined”),
Fin : PSD → G → H,
D: H → H
(for “delay”).
8 / 16
Realizability extensions (coG )r and (coH)r :
Γr (Z , W ) := { (p, x) | ∃(p0 ,x 0 )∈Z ∃a (x = −a
x0 − 1
∧ p = LRa (p 0 )) ∨u
2
x0
∧ p = U(q 0 )) },
2
x0 + 1
∆r (Z , W ) := { (q, x) | ∃(p0 ,x 0 )∈Z ∃a (x = a
∧ q = Fina (p 0 )) ∨u
2
x0
∃u(q0 ,x 0 )∈W (x =
∧ q = D(q 0 )) }
2
∃u(q0 ,x 0 )∈W (x =
(∨u : the whole formula has no computational significance).
Define
((coG )r , (coH)r ) := ν(Z ,W ) (Γr (Z , W ), ∆r (Z , W ))
9 / 16
CoGAverage:
co
co
co
∀nc
x,y ( G (x) → G (y ) → G (
x +y
)).
2
Consider two sets of averages, the second one with a “carry”
i ∈ SD2 := {−2, −1, 0, 1, 2}:
x +y
| x, y ∈ coG },
2
x +y +i
Avc := {
| x, y ∈ coG , i ∈ SD2 }.
4
Av := {
Suffices: Avc satisfies the clause coinductively defining coG , for
then by the greatest-fixed-point axiom for coG we have Avc ⊆ coG .
Since we also have Av ⊆ Avc we obtain Av ⊆ coG , i.e., our claim.
10 / 16
CoGAvToAvc:
r
∀nc
x,y ∈coG ∃x 0 ,y 0 ∈coG ∃i (
x +y
x0 + y0 + i
=
).
2
4
Implicit algorithm. f ∗ := cCoGPsdTimes, and s := cCoHToCoG.
cL denotes the function extracted from the proof of a lemma L.
co
co
CoGPsdTimes: ∀nc
x ∀a ( G (x) → G (a ∗ x)).
f (LRa (p), LRa0 (p 0 )) = (a + a0 , f ∗ (−a, p), f ∗ (−a0 , p 0 )),
f (LRa (p), U(q)) = (a, f ∗ (−a, p), s(q)),
f (U(q), LRa (p)) = (a, s(q), f ∗ (−a, p)),
f (U(q), U(q 0 )) = (0, s(q), s(q 0 )).
11 / 16
Need J : SD → SD → SD2 → SD2 , K : SD → SD → SD2 → SD
with d + e + 2i = J(d, e, i) + 4K (d, e, i) (cases on d, e, i). Then
x+d
2
+
y +e
2
4
+i
=
x+y +J(d,e,i)
4
+ K (d, e, i)
.
2
CoGAvcSatCoICl:
x
r
∀i ∀nc
x,y ∈coG ∃x 0 ,y 0 ∈coG ∃j,d (
+y +i
=
4
x 0 +y 0 +j
4
2
+d
).
Implicit algorithm.
f (i, LRa (p), LRa0 (p 0 )) = (J(a, a0 , i), K (a, a0 , i), f ∗ (−a, p), f ∗ (−a0 , p 0 )),
f (i, LRa (p), U(q)) = (J(a, 0, i), K (a, 0, i), f ∗ (−a, p), s(q)),
f (i, U(q), LRa (p)) = (J(0, a, i), K (0, a, i), s(q), f ∗ (−a, p)),
f (i, U(q), U(q 0 )) = (J(0, 0, i), K (0, 0, i), s(q), s(q 0 )).
12 / 16
CoGAvcToCoG:
x +y +i
) → coG (z)),
4
x +y +i
r
) → coH(z)).
∀nc
z (∃x,y ∈coG ∃i (z =
4
r
∀nc
z (∃x,y ∈coG ∃i (z =
Implicit algorithm. Proof uses SdDisj: ∀d (d = 0 ∨ ∃a (d = a)).
g (i, p, p 0 ) = let (i1 , d, p1 , p10 ) = cCoGAvcSatCoICl(i, p, p 0 ) in
case cSdDisj(d) of
0 → U(h(i, p1 , p10 ))
a → LRa (g (−ai, f ∗ (−a, p1 ), f ∗ (−a, p10 ))),
h(i, p, p 0 ) = let (i1 , d, p1 , p10 ) = cCoGAvcSatCoICl(i, p, p 0 ) in
case cSdDisj(d) of
0 → D(h(i, p1 , p10 ))
a → Fina (g (−ai, f ∗ (−a, p1 ), f ∗ (−a, p10 ))).
Composing CoGAvToAvc and CoGAvcToCoG gives CoGAverage.
13 / 16
Extracted term for CoGAvcToCoG:
[ipp](CoRec sdtwo@@ag@@ag=>ag sdtwo@@ag@@ag=>ah)ipp
([ipp0][let idpp (cCoGAvcSatCoICl
left ipp0 left right ipp0 right right ipp0)
[case (cSdDisj left right idpp)
(DummyL -> InR(InR(left idpp@right right idpp)))
(Inr a -> InL(a@InR
(a times inv left idpp@
cCoGPsdTimes inv a left right right idpp@
cCoGPsdTimes inv a right right right idpp)))]])
([ipp0][let idpp ...] ...)
ipp
variable of type SD2 × G × G
idpp
variable of type SD2 × SD × G × G
[ipp]r
lambda abstraction λipp r
sdtwo@@ag@@ag=>ah
function type SD2 × G × G → H
r@s, left r, right r
product term, components
cL
realizer for lemma L
14 / 16
Corecursion ∼ coinduction.
(G,H),(σ,τ )
: σ → δG → δH → G
(G,H),(σ,τ )
: τ → δG → δH → H
co
RG
co
RH
with step types
δG := σ → PSD × (G + σ) + (H + τ ),
δH := τ → PSD × (G + σ) + (H + τ ).
PSD × (G + σ) + (H + τ ) appears since G has constructors
LR : PSD → G → G and U : H → G,
and H has constructors
Fin : PSD → G → H and D : H → H.
15 / 16
I
Analyzing the step terms gives the “implicit algorithm”.
I
Extracted terms are in an extension T + of Gödel’s T , the
term language of TCF. They denote partial continuous
functionals (Scott/Ershov).
I
Verification is automatic (soundness theorem).
I
Minlog provides a translation to Haskell for (lazy) evaluation.
I
“Code carrying proof” can be a reasonable alternative to
“Proof carrying code” (Necula).
16 / 16
Download