Functional Programming with Isabelle/HOL
λ → ∀
=
I s a b e l l e
β α
H O L
Functional Programming with Isabelle/HOL e H O l L l e b - - PowerPoint PPT Presentation
Functional Programming with Isabelle/HOL e H O l L l e b a s = I Florian Haftmann Technische Universit at M unchen January 2009 Overview Viewing Isabelle / HOL as a functional programming language: 1.
λ → ∀
=
β α
H O L
1 / 18
1 / 18
Isabelle/HOL specification tools 3 / 18
axiomatization nonsense :: nat ⇒ nat where nonsense-def : nonsense n = Suc (nonsense n)
Isabelle/HOL specification tools 3 / 18
axiomatization nonsense :: nat ⇒ nat where nonsense-def : nonsense n = Suc (nonsense n) lemma 0 = Suc 0 proof − from nonsense-def have nonsense 0 − nonsense 0 = Suc (nonsense 0) − nonsense 0 by simp then show 0 = Suc 0 by simp qed
Isabelle/HOL specification tools 3 / 18
axiomatization nonsense :: nat ⇒ nat where nonsense-def : nonsense n = Suc (nonsense n) lemma 0 = Suc 0 proof − from nonsense-def have nonsense 0 − nonsense 0 = Suc (nonsense 0) − nonsense 0 by simp then show 0 = Suc 0 by simp qed
Isabelle/HOL specification tools 3 / 18
Isabelle/HOL specification tools 4 / 18
Isabelle/HOL specification tools 5 / 18
Code generator basics 7 / 18
Code generator basics 7 / 18
Code generator basics 7 / 18
Code generator basics 7 / 18
datatype nat = Suc of nat | Zero_nat; fun plus_nat (Suc m) n = plus_nat m (Suc n) | plus_nat Zero_nat n = n; fun sum [] = Zero_nat | sum (m :: ms) = plus_nat m (sum ms);
Code generator basics 8 / 18
datatype nat = Suc of nat | Zero_nat; fun plus_nat (Suc m) n = plus_nat m (Suc n) | plus_nat Zero_nat n = n; fun sum [] = Zero_nat | sum (m :: ms) = plus_nat m (sum ms);
Code generator basics 8 / 18
Code generator basics 9 / 18
A closer look at code generation 11 / 18
A closer look at code generation 11 / 18
A closer look at code generation 12 / 18
A closer look at code generation 13 / 18
data κ αk = f 1 of τ1 | . . . | f n of τn fun f :: ∀ α::sk. τ where f [α::sk] t1 = t1 | . . . | f [α::sk] tk = tk class c ⊆ c1 ∩ . . . ∩ cm where f 1 :: ∀ α. τ 1, . . ., f n :: ∀ α. τ n inst κ α::sk :: c where f 1 [κ α::sk] = t1, . . ., f n [κ α::sk] = tn
A closer look at code generation 13 / 18
data κ αk = f 1 of τ1 | . . . | f n of τn fun f :: ∀ α::sk. τ where f [α::sk] t1 = t1 | . . . | f [α::sk] tk = tk class c ⊆ c1 ∩ . . . ∩ cm where f 1 :: ∀ α. τ 1, . . ., f n :: ∀ α. τ n inst κ α::sk :: c where f 1 [κ α::sk] = t1, . . ., f n [κ α::sk] = tn
A closer look at code generation 13 / 18
A closer look at code generation 14 / 18
A closer look at code generation 15 / 18
A closer look at code generation 16 / 18
A closer look at code generation 16 / 18
A closer look at code generation 16 / 18
A closer look at code generation 16 / 18
A closer look at code generation 16 / 18
A closer look at code generation 17 / 18