Formale Modellierung
Vorlesung 9 vom 03.06.13: Weitere Datentypen: Mengen, Multimengen, Punkte
Serge Autexier & Christoph Lüth
Universität BremenSommersemester 2013
Rev. 2181 1 [21]
Fahrplan
I
Teil I: Formale Logik
I
Einführung
I
Aussagenlogik: Syntax und Semantik, Natürliches Schließen
I
Konsistenz & Vollständigkeit der Aussagenlogik
I
Prädikatenlogik (FOL): Syntax und Semantik
I
Konsistenz & Vollständigkeit von FOL
I
FOL mit induktiven Datentypen
I
FOL mit Induktion und Rekursion
I
Die Gödel-Theoreme
I
Weitere Datentypen: Mengen, Multimengen, Punkte
I
Teil II: Spezifikation und Verifikation
ITeil III: Schluß
2 [21]
Das Tagesmenü
I
Isabelle/HOL: sicheres spezifizieren (konservative Erweiterung)
Itypedecl, definition, typedef, datatype, primrec, fun, function
Itypedef
I
Mengen, Multimengen, Rat
Idatatype
I
Listen, Listen ohne Wiederholung, Punkte & Vektoren 3D
3 [21]
Mengen
I
Mengen über beliebigen Typ t: Set
t ICharacterisiert über Prädikat P : t → o
Collect : (t → o) → Set
t∈: t × Set
t→ o x ∈ (Collect P) = Px
I
Set
tnicht leer wenn Funktionenraum t → o nicht leer.
⊥ : t → o
∀x
t.¬⊥(x)∅
t∈ Set
t⊆: Set
t× Set
t→ o
A ⊆ B ←→ ∀x
t.x∈ A −→ x ∈ B Power : Set
t→ Set
SettPower A = Collect(λx
Sett.x⊆ A)
| {z }
{x:Sett|x⊆A}
4 [21]
In Isabelle
t y p e d e c l ’ a set
a x i o m a t i z a t i o n C o l l e c t :: "( ’ a = > b o o l ) = > ’ a set " - - " c o m p r e h e n s i o n "
and m e m b e r :: " ’ a = > ’ a set = > b o o l " - - " m e m b e r s h i p "
w h e r e
m e m _ C o l l e c t _ e q [ iff , c o d e _ u n f o l d ]: " m e m b e r a ( C o l l e c t P ) = P a "
and C o l l e c t _ m e m _ e q [ s i m p ]: " C o l l e c t (% x . m e m b e r x A ) = A "
5 [21]
Definitionen
I
Definiere nicht-rekursive Konstanten
nand : o → o → o nand xy = (¬x ) ∧ (¬y)
I
Definitionen sind konservative Erweiterungen
IIn Isabelle/HOL
d e f i n i t i o n n a n d :: " b o o l = > b o o l = > b o o l " w h e r e
" n a n d x y == (~ x ) & ~ y "
6 [21]
Typdefinition
I
Spezifiziere nicht-leere Teilmenge eines gegebenen Typs r
I
Deklariere neuen Typ t mit Trägermenge isomorph zu Werten in spezifizierter Teilmenge
I
Isomorphie wird durch inverse Funktionen Abs
t: r → t, Rep
t: t → r axiomatisch Beschrieben
7 [21]
Typdefinitionen sind Erweiterungen
Definition 1 (Typdefinitionen)
Sei S = ((T
,F,P), Φ) eine Spezifikation, r ∈ T und P ∈ Form
Σmit genau einer freien Variable vom Typ r. Dann ist eine Erweiterung S
0= ((T
0,F
0,P
0), Φ
0) eine Typdefinition für einen Typ t 6∈ T gdw.
I
T
0= T ∪ {t}
I
F
0= F ∪ {Abs
t: r → t, Rep
t: t → r}
I
P
0= P ∪ {=
t: t × t}
I
Φ
0= Φ ∪ { ∀x
t.Abs
t(Rep
t(x )) =
tx,
∀x
r.P(xr) −→ Rep
t(Abs
t(x)) =
rx}
I
Man kann beweisen S ` ∃x
r.P(x)(bzw. es gilt ∃x
r.P(x)∈ Th(S))
8 [21]
Beispiel: Paare
I
Paare über Typen s und t
Pair_Rep : s → t → (s → t → o) Pair_Rep(a, b) =
λxsλyt.x= a ∧ y = b
I
In Isabelle/HOL
d e f i n i t i o n P a i r _ R e p :: " ’ a = > ’ b = > ’ a = > ’ b = > b o o l " w h e r e
" P a i r _ R e p a b = (% x y . x = a & y = b )"
d e f i n i t i o n " p r o d = { f . ex a b . f = P a i r _ R e p ( a :: ’ a ) ( b :: ’ b )}"
t y p e d e f ( ’ a , ’ b ) p r o d ( i n f i x r "*" 20) =
" p r o d :: ( ’ a = > ’ b = > b o o l ) set "
t y p e _ n o t a t i o n ( x s y m b o l s )
" p r o d " ("( _ x / _ )" [21 , 20] 20) t y p e _ n o t a t i o n ( H T M L o u t p u t )
" p r o d " ("( _ x / _ )" [21 , 20] 20)
d e f i n i t i o n P a i r :: " ’ a = > ’ b = > ’ a ’ b p r o d " w h e r e
" P a i r a b = A b s _ p r o d ( P a i r _ R e p a b )"
9 [21]
Datentypen
I
Datentypen sind Typdefinition mit Definition der Konstruktoren
d a t a t y p e ’ a o p t i o n = N o n e | S o m e ’ aI
Case-Expressions für Datentypen
c a s e o of N o n e - > 1 | o of S o m e ( n ) - > x IInduktive Datentypen
d a t a t y p e ’ a l i s t = Nil ( " [ ] " )
| C o n s ’ a " ’ a l i s t " ( i n f i x r "#" 65) I
Generierte Taktiken:
Icase_tac: Strukturelle Fallunterscheidung
Iinduct_tac: Strukturelle Induktion
10 [21]
Rekursive Funktionen
I
Drei Möglichkeiten rekursive Funktionen zu definieren:
I primrec
Strukturelle Fallunterscheidung und Rekursion
I fun
Totale, terminierende rekursive Funktionen mit Terminierungsbeweis
11 [21]
Erweiterung um Totale, Terminierende Funktionen is Konservativ
Definition 2 (Funktions- und Prädikatsdefinitionen)
Sei S = ((T
,F,P), Φ) eine Spezifikation, f :
τ1× · · · ×
τn→
τ06∈ F (τ
i∈ T ) und Ψ ∈ Form
Σ∪{f}. Dann ist eine Erweiterung
S
0= ((T
,F
0,P), Φ
0) eine Funktionsdefinition gdw.
I
Ψ ist eine eindeutig und totale Definition für f
I
f ist terminierend und alle in der Definition von f vorkommenden Funktionen und Prädikate sind terminierend
I
Φ
0= Φ ∪ Ψ
I
F
0= F ∪ {f :
τ1× · · · ×
τn→
τ0} Analog für Prädikatsdefinitionen.
Lemma 3
Funktionsdefinitionen bzw. Prädikatsdefinitionen sind konservativ
12 [21]
Strukturelle Rekursive Funktionen
I
case-artige definitions patterns
IGenau eine Schicht Konstruktoren
p r i m r e c a p p e n d :: " ’ a l i s t = > ’ a l i s t = > ’ a l i s t " ( i n f i x r " @ " 65) w h e r e a p p e n d _ N i l : "[] @ ys = ys " |
a p p e n d _ C o n s : "( x # xs ) @ ys = x # xs @ ys "
I
Nicht aber
p r i m r e c m y h a l f :: " nat = > nat " w h e r e
" m y h a l f 0 = 0" |
" m y h a l f ( Suc 0) = 0" |
" m y h a l f ( Suc ( Suc x )) = Suc ( m y h a l f x )"
13 [21]
Allgemeine Totale rekursive Funktionen
I fun
zur Definition allgemeiner rekursiver Funktionen
fun m y h a l f :: " nat = > nat " w h e r e" m y h a l f 0 = 0" |
" m y h a l f ( Suc 0) = 0" |
" m y h a l f ( Suc ( Suc x )) = Suc ( m y h a l f x )"
I
Automatischer Terminierungsbeweiser
I
Definition wird verweigert, falls Terminierungsbeweis mislingt
14 [21]
Terminierung
I
Beispiele:
I
half(x) eine Hypothese pro Rekursionsgleichung
I
fib(x): mehrere Hypothesen pro Rekursionsgleichung
I
gcd(x, y): lexicographische Ordnung
I
Beweise alle Hypothesen im Kalkül. Terminierung gilt relativ zur Terminierung der anderen involvierten Funktionen und Prädikate.
I
Analog für Prädikate auf
Nmit bedingten Äquivalenzen
IAllgemeine Typen: für frei erzeugte Datentypen kann Abbildung in
natürliche Zahlen definiert werden, die die Anzahl der Konstruktoren zählt. Damit lässt sich das Terminierungsverfahren auf all frei erzeugten Datentypen erweitern
15 [21]
Quotienten Typen
I
Gegeben natürliche Zahlen
NI
Rationale Zahl ist Paar nat. Zahlen (n, m) so dass m 6= 0
d e f i n i t i o n i s r a t :: "( nat * nat ) = > b o o l " w h e r e" i s r a t = (% x . ~(( snd x ) = 0)"
I
typedef führt nicht zu gewünschtem Ergebnis
t y p e d e f Rat = "{ x . i s r a t ( x )}"I
Braucht Gleichheit der Paare zusätzlich
d e f i n i t i o n r a t r e l :: "( nat * nat ) = > ( nat * nat ) = > b o o l " w h e r e
" r a t r e l = (% x y .~( snd x = 0) & ~( snd y = 0) &
snd x * fst y = fst x * snd y )"
I
Quotienten Typen:
q u o t i e n t _ t y p e rat = " nat * nat " / p a r t i a l : " r a t r e l "
16 [21]
Integers
d e f i n i t i o n i n t r e l :: "( nat * nat ) = > ( nat * nat ) = > b o o l " w h e r e
" i n t r e l = (%( x , y ) ( u , v ). x + v = u + y )"
q u o t i e n t _ t y p e int = " nat * nat " / " i n t r e l "
17 [21]
Multimengen
t y p e d e f ’ a m s e t = "{ f :: ’ a = > nat . T r u e }"
a p p l y ( a u t o ) d o n e
d e f i n i t i o n e m p t y M S e t :: " ’ a m s e t " w h e r e
" e m p t y M S e t = A b s _ m s e t (% x . 0 ) "
d e f i n i t i o n u n i o n M S e t :: " ’ a m s e t = > ’ a m s e t = > ’ a m s e t " w h e r e
" u n i o n M S e t =
(% m1 m2 . A b s _ m s e t (% n .(( R e p _ m s e t m1 n ) + ( R e p _ m s e t m2 n ) ) ) ) "
d e f i n i t i o n i n t e r M S e t :: " ’ a m s e t = > ’ a m s e t = > ’ a m s e t " w h e r e
" i n t e r M S e t =
(% m1 m2 . A b s _ m s e t (% n .( min ( R e p _ m s e t m1 n ) ( R e p _ m s e t m2 n ) ) ) ) "
18 [21]
Punkte und Mehr
I
Punkte im 3D
t y p e d e f p o i n t 3 D = "{ p ::( int * int * int ). T r u e }"
a p p l y ( a u t o ) d o n e
d e f i n i t i o n o r i g i n :: " p o i n t 3 D " w h e r e
" o r i g i n = ( A b s _ p o i n t 3 D (0 ,0 ,0))"
I
Vektoren 3D
d a t a t y p e V e k t o r 3 D = V e k t o r int * int * int
d e f i n i t i o n s k a l a r P r o d u k t :: " V e k t o r 3 D = > V e k t o r 3 D = > V e k t o r 3 D " w h e r e
" s k a l a r P r o d u k t = (% v1 v2 .
c a s e ( v1 , v2 ) of (( V e k t o r x y z ) , ( V e k t o r u v w ))
= > .."
d e f i n i t i o n p o i n t 2 V e k t o r :: " p o i n t 3 D = > p o i n t 3 D = > V e k t o r 3 D " w h e r e ...
19 [21]
Listen ohne doppelte Vorkommen
I
Listen ohne doppelte Vorkommen
p r i m r e c c o n t a i n s :: " ’ a l i s t = > ’ a = > b o o l " w h e r e
" c o n t a i n s Nil x = F a l s e " |
" c o n t a i n s ( C o n s x xs ) y = (( x = y ) or c o n t a i n s xs x )"
fun c o u n t :: " ’ a = > ’ a l i s t = > nat " w h e r e
" c o u n t x Nil = 0" |
" c o u n t x ( C o n s y xs ) = ( if ( x = y ) t h e n ( Suc ( c o u n t x xs )) e l s e ( c o u n t x xs ))"
d e f i n i t i o n n o D u p l i c a t e s :: " ’ a l i s t = > b o o l " w h e r e
" n o D u p l i c a t e s = (% l :: ’ a l i s t .\ < forall > x :: ’ a .( c o n t a i n s l x ) - - > ( c o u n t x l ) = ( Suc 0 ) ) "
t y p e d e f ’ a s e t l i s t = "{ l :: ’ a l i s t . n o D u p l i c a t e s l }"
20 [21]
Zusammenfassung
I
Isabelle/HOL
I
Primitiven vordefiniert zur sicheren Einführung neuer Typen und Funktionen
I typedef, datatype, quotient_type
I primrec, fun I
Typen
I
Paare
I
Option, Listen
I
Rat, Int
I
Multimengen
I
Punkte und Vektoren im 3D
I
Listen ohne doppelte Vorkommen
21 [21]