• Keine Ergebnisse gefunden

Vorlesung 9 vom 03.06.13: Weitere Datentypen: Mengen, Multimengen, Punkte

N/A
N/A
Protected

Academic year: 2022

Aktie "Vorlesung 9 vom 03.06.13: Weitere Datentypen: Mengen, Multimengen, Punkte"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Formale Modellierung

Vorlesung 9 vom 03.06.13: Weitere Datentypen: Mengen, Multimengen, Punkte

Serge Autexier & Christoph Lüth

Universität Bremen

Sommersemester 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

I

Teil III: Schluß

2 [21]

Das Tagesmenü

I

Isabelle/HOL: sicheres spezifizieren (konservative Erweiterung)

I

typedecl, definition, typedef, datatype, primrec, fun, function

I

typedef

I

Mengen, Multimengen, Rat

I

datatype

I

Listen, Listen ohne Wiederholung, Punkte & Vektoren 3D

3 [21]

Mengen

I

Mengen über beliebigen Typ t: Set

t I

Characterisiert über Prädikat P : to

Collect : (t → o) → Set

t

∈: t × Set

t

o x ∈ (Collect P) = Px

I

Set

t

nicht leer wenn Funktionenraum to nicht leer.

⊥ : to

∀x

t.¬⊥(x)

t

∈ Set

t

⊆: Set

t

× Set

t

o

AB ←→ ∀x

t.x

A −→ xB Power : Set

t

→ Set

Sett

Power 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 : ooo nand xy = (¬x ) ∧ (¬y)

I

Definitionen sind konservative Erweiterungen

I

In 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

: rt, Rep

t

: tr 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

: rt, Rep

t

: tr}

I

P

0

= P ∪ {=

t

: t × t}

I

Φ

0

= Φ ∪ { ∀x

t.

Abs

t

(Rep

t

(x )) =

t

x,

∀x

r.P(xr

) −→ Rep

t

(Abs

t

(x)) =

r

x}

I

Man kann beweisen S ` ∃x

r.P(x)

(bzw. es gilt ∃x

r.P(x)

∈ Th(S))

8 [21]

(2)

Beispiel: Paare

I

Paare über Typen s und t

Pair_Rep : st → (s → to) Pair_Rep(a, b) =

λxsλyt.x

= ay = 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 ’ a

I

Case-Expressions für Datentypen

c a s e o of N o n e - > 1 | o of S o m e ( n ) - > x I

Induktive 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

τ0

6∈ 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

I

Genau 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

N

mit bedingten Äquivalenzen

I

Allgemeine 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

N

I

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]

(3)

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]

Referenzen

ÄHNLICHE DOKUMENTE

I Analog für Prädikate auf N mit bedingten Äquivalenzen I Allgemeine Typen: für frei erzeugte Datentypen kann Abbildung in. natürliche Zahlen definiert werden, die die Anzahl

I Weitere Datentypen: Mengen, Multimengen, Punkte I Teil II: Spezifikation und Verifikation. I Teil

I Analog für Prädikate auf N mit bedingten Äquivalenzen I Allgemeine Typen: für frei erzeugte Datentypen kann Abbildung in. natürliche Zahlen definiert werden, die die Anzahl

I Allgemeine 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

Int, Integer, Rational und Double Alphanumerische Basisdatentypen: Char N¨ achste Vorlesung: Abstraktion ¨

Int, Integer, Rational und Double Alphanumerische Basisdatentypen: Char N¨ achste Vorlesung: Abstraktion ¨ uber Typen. Christoph L¨ uth: Praktische Informatik 3 29

import OrdTree hiding (member) Tree, empty, insert import OrdTree(empty). import OrdTree

• hiding: Liste der Bezeichner wird nicht importiert import Prelude hiding (foldr). foldr f e ls