SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt...
Transcript of SWP – Funktionale Programme€¦ · {add0,add1,sub,ist0?,ist1?,istLeer?,leer} Anmerkung: Statt...
Institute for Software Technology
SWP – Funktionale Programme
Bernhard Aichernig, Alexander Felfernig, Gerald Steinbauer
Institut für Softwaretechnologie {aichernig, alexander.felfernig, steinbauer}@ist.tugraz.at
Institute for Software Technology 2
Inhalt
§ Einfache Ausdrücke § Datentypen § Rekursive funktionale Sprache § Interpreter für funktionale Sprache § Halteproblem
Semantik
Institute for Software Technology
EINFACHE AUSDRÜCKE
3
Institute for Software Technology 4
Konstante Terme
§ Ziel: Definition einer Sprache konstanter arithmetischer Terme A
§ Eine formale Sprache über einem Alphabet Σ ist eine Teilmenge der Menge aller Zeichenketten über Σ (= Σ*)
§ Σ* = ⎩⎭i=0..∞ Σi mit Σ0 = {ε} Σi = {x1...xi | xk ∈ Σ für k=1..i}
Institute for Software Technology 5
Sprache A
§ Alphabet: Σ = { 0, .., 9, (, ), + } § ZIFF = { 0, .., 9} § ZAHL = (ZIFF – {0}) ZIFF* ∪ {0} § Induktive Definition von A:
1. ZAHL ⊆ A 2. Für x,y ∈ A ist auch (x) + (y) ∈ A
§ Beispiele: 10 ∈ A aber 01 ∉ A (10)+(210) ∈ A aber (x)+(y) ∉ A
Institute for Software Technology 6
Semantik von A
§ Semantikfunktion I: A → N0
mit N0 als Menge der nicht-negativen, ganzen Zahlen.
§ Definition: 1. I(x) = <x> für x ∈ ZAHL, wobei <x> die
Zahl zum String x bezeichnet. 2. I((x)+(y)) = I(x) + I(y) für x,y ∈ A
Institute for Software Technology 7
Beispiel zu A
§ I( ((10)+(9))+(3) ) = = I( (10)+(9) ) + I( 3 ) = I( 10 ) + I( 9 ) + 3 = 10 + 9 + 3 = 19 + 3 = 22
Institute for Software Technology 8
Binäre Zahlenarithmetik (B) § Sprache B:
Alphabet Σ = {0,1,(,),+} ZAHLB = {1}{0|1}* ∪ {0}
§ Definition (Syntax): 1. ZAHLB ⊆ B 2. Für x,y ∈ B ist auch (x)+(y) ∈ B
§ Definition (Semantik): 1. I(x) = <x> für x ∈ ZAHLB 2. I( (x)+(y) ) = I(x) + I(y) für x,y ∈ B
Institute for Software Technology 9
Definition von <x> § Bedeutung von <x> für Binärzahlen
muss noch definiert werden. 1. <x> = 0 für x=0 2. <x> = 1 für x=1 3. <x1..xn> = <x1>2n-1 + ... + <xn>20
für xi∈{0,1}
§ Beispiel: I(1001)=8+0+0+1=9 aber 1001≠9
Institute for Software Technology 10
Mögliche Semantikprobleme § Sprache C: Erweiterung von A um
Multiplikation (*) § Syntax:
1. ZAHL ⊆ C 2. Für x,y ∈ C ist x + y ∈ C 3. Für x,y ∈ C ist x * y ∈ C
§ Semantik: 1. I(x) = <x> für x ∈ ZAHL 2. I(x + y) = I(x) + I(y) 3. I(x * y) = I(x) * I(y)
Institute for Software Technology 11
Problem der Sprache C § Die Interpretation I definiert durch die
Semantik von C ist KEINE Funktion! § Mehrdeutigkeit! § Beispiel:
1. I(1+1*2) = I(1+1)*I(2) = (I(1)+I(1))*2 = (1+1)*2 = 2 * 2 = 4
2. I(1+1*2) = I(1) + I(1*2) = 1 + (I(1)*I(2)) = 1 + (1*2) = 1 + 2 = 3
Institute for Software Technology 12
Erweiterungen § Bisher: Terme
(d.h. Zahlen und Operatoren) § Einführung von Variablen § Neue Grundmenge, der Einfachheit halber
IVS = {x,y,z} ∪ {x1,x2,...} § Variablenwerte durch Environment
(Umgebung) gegeben: ENV = Menge aller Abbildungen IVS→Λ
Institute for Software Technology 13
Sprache VA
§ Syntax: 1. ZAHL ⊆ VA 2. IVS ⊆ VA 3. Falls x,y ∈ VA, dann ist (x)+(y) ∈ VA
§ Somit gilt: A ⊆ VA § Semantik:
§ Erweiterung von I: ENV × VA → N0
Institute for Software Technology 14
Semantik von VA 1. I(ω,k) = <k> 2. I(ω,v) = ω(v) 3. I(ω,(x)+(y)) = I(ω,x) + I(ω,y) mit k ∈ ZAHL
ω ∈ ENV v ∈ IVS x,y ∈ VA
Institute for Software Technology 15
Beispiel für VA
§ Ausdruck: e = (((x) + (2)) + (y)) + (z) § Environment: ω(x)=0, ω(y)=1, ω(z)=2 § I(ω, (((x) + (2)) + (y)) + (z) ) =
= I(ω, ((x) + (2)) + (y)) + I(ω, z) = I(ω, (x) + (2)) + I(ω, y) + ω(z) = I(ω,x) + I(ω,2) + ω(y) + 2 = ω(x) + 2 + 1 + 2 = 0 + 2 + 1 + 2 = 5
Institute for Software Technology
DATENTYPEN
16
Institute for Software Technology 17
Definition
§ Ein Datentyp ist ein Tupel ℜ = (A, f1,..,fn, p1,..,pm, c1,..,ck)
§ A: Menge § fi: Funktionen von Aki → Ali (Arität ki auf Arität li)
(für bestimmte ki und li) § pi: Prädikate Aki → { T,F } (Prädikat der Arität ki)
(für bestimmtes ki) § ci: Konstante (ausgewählte Elemente von A)
Institute for Software Technology 18
Datentyp Integer (Z)
§ A: Menge der ganzen Zahlen § f1: + f2: - f3: * § p1: < p2: = § c1: 0 c2: 1
Institute for Software Technology 19
Datentyp Real (R)
§ A: Menge der reellen Zahlen § f1: + f2: - f3: * § p1: < p2: = § c1: 0 c2: 1 § Problem mit der Hinzunahme von /
(Division) / ist nur auf A × (A-{0}) definiert!
Institute for Software Technology 20
Datentyp String (V)
§ A: V* mit V = endliches Alphabet { v1,..,vn }
§ f1: ° (Konkatenation) § p1: << (x ist Präfix y = x << y) § c1: v1 ... cn: vn cn+1: ε (Leerwort)
Institute for Software Technology 21
Induktive Definition von ° und << § Definition ° :
1. Ist x ∈ V* so gilt: x ° ε = x 2. Ist x ∈ V* und a ∈ V dann gilt: x ° a = xa 3. Ist x,y ∈ V*, a ∈ V dann ist
x ° (y ° a) = (x ° y) ° a
§ Definition << : 1. Für alle x ∈ V* gilt: ε << x 2. Für alle x ∈ V* gilt: x << x 3. Ist x Präfix von y dann auch von y ° z
x << y ⇒ x << y ° z
Institute for Software Technology 22
Spezieller String: Binärer Stack § A: {0,1}*, Strings aus 0 und 1 § f1: add1 f2: add0 f3: sub § p1: ist0? p2: ist1? p3: istLeer? § C1: leer
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1
0 1
add1
add0 sub
Institute for Software Technology 23
Formale Definition der Operatoren/Prädikate
§ add0(x) = 0x § add1(x) = 1x § sub(leer) = leer
sub(ax) = x für a ∈ {0,1} § ist0?(x) ⇔ ∃ z: x = 0z § ist1?(x) ⇔ ∃ z: x = 1z § istLeer?(x) ⇔ x = leer
Institute for Software Technology 24
Beispiele zu binären Stack
§ x = add0(add1(sub(011))) = add0(add1(11)) = add0(111) = 0111
§ ist0?(x) = T § ist1?(x) = F § istLeer?(x) = F
Institute for Software Technology
SPRACHEN ÜBER DATENTYPEN
25
Institute for Software Technology 26
Bisher behandelt ..
§ Einfache Ausdrücke § Syntax § Semantik
§ Datentypen
⇒ Zusammenführung!
Institute for Software Technology 27
Was ist notwendig?
§ Datentyp § Menge § Operatoren § Prädikate
§ 0,1,... § +,- § >, =
§ Sprache § Sprachkonstrukte
§ 0, 1,... § plus, minus § gt, eq
Institute for Software Technology 28
Sprache der Terme T § Gegeben: Datentyp ℜ = (A,f1,..,fn,p1,..,pm,c1,..,cr) § Gesucht: Sprache über ℜ § Konstruktion: definiere Symbolmenge SYM für ℜ; SYM
besteht aus: § Individuen-Variablen Symbole (IVS): x,y,z,x1,x2,... § Funktionssymbole: für jede Funktion fi (s.o.) ein Symbol f § Prädikatensymbole: Für jedes Prädikat pi (s.o.) ein Symbol p § Konstantensymbole (Γ): Für jede Konstante ci (s.o.) ein Symbol c § (,) und , § Sondersymbole: if, then, else, begin, end,...
Institute for Software Technology 29
Beispiel (Konstruktion von SYM) § Stack S = (S,add0,add1,sub,ist0?,ist1?,
istLeer?,leer) § Symbolmenge SYM:
§ SYM = IVS ∪ {(,),,} ∪ {add0,add1,sub,ist0?,ist1?,istLeer?,leer}
Anmerkung: Statt add0, ..., leer könnte man natürlich auch andere Symbole einführen, etwa a0,..,empty
Institute for Software Technology 30
Definition von T
§ Sei ℜ = (A,f1,..,fn,p1,..,pm,c1,..,cr) ein beliebiger Datentyp.
§ T ⊆ SYM(ℜ) § Semantikfunktion Iτ: ENV × T → A mit
ENV: Menge aller Funktionen IVS → A.
Institute for Software Technology 31
Syntax von T
§ Konstantensymbole sind Terme. § Individuenvariablensymbole sind Terme. § Ist f ein n-stelliges Funktionsymbol und
t1,..,tn sind Terme, dann ist auch f(t1,..,tn) ein Term.
Institute for Software Technology 32
Semantik von T (Terminterpretation Iτ)
§ Iτ(ω,c) = c0 für c∈Γ und ω∈ENV § Iτ(ω,v) = ω(v) für v∈IVS und ω∈ENV § Iτ(ω,f(t1,..,tn)) = f0(Iτ(ω,t1),..,Iτ(ω,tn))
für ti∈T und ω∈ENV
§ Γ: Konstantensymbole
Institute for Software Technology 33
Beispiel: Sprache über Datentyp Integer
§ ℜ = ({0,1,..},+,=,>,0,1) § plus für + null für 0
equal für = eins für 1 gt für >
§ Beispielprogramme: § plus(x,y) § plus(plus(x,y),plus(eins,z))
§ Environment: ω(x)=0, ω(y)=1, ω(z)=2
Institute for Software Technology 34
Beispiel (cont.)
§ Iτ(ω,plus(plus(x,y),plus(eins,z))) = = +(Iτ(ω, plus(x,y)), Iτ(ω, plus(eins,z))) = +( +(Iτ(ω,x), Iτ(ω, y)), +(Iτ(ω,eins), Iτ(ω, z))) = +( +(ω(x), ω(y)), +(1, ω(z))) = +( +(0,1), +(1,2)) = +( 1, 3) = 4
Institute for Software Technology 35
Anmerkung § Terme in T sind in Präfixform (und nicht in
Infix-Form) definiert. Z.B. ((x)+(y))+(3) ist Infix. Dieser Ausdruck müsste jetzt folgende Gestalt haben: +(+(x,y),3)
§ Laut Definition von T gibt es keine Konstante 2. Es gibt jedoch Ausdrücke, die zu 2 evaluieren!
plus(eins,eins) § Für jede Zahl n gibt es einen variablenfreien
Term t, so daß Iτ(t)=n ist.
Institute for Software Technology 36
Anmerkung Termtiefe
§ Für jeden Term t ∈ T kann eine Tiefe definiert werden.
§ D(t) = 0 wenn t ∈ Γ ∪ IVS ist.
§ D(f(t1,..,tn)) = = 1 + max{ D(ti) | i=1,..,n }
§ Beispiel: D(plus(null,plus(eins,eins))) =2
plus
null
eins
plus
eins
Institute for Software Technology 37
Verwendbarkeit von T?
§ Beschreibung von digitalen Schaltungen § Datentyp: Boolsche Algebra
§ ....
Institute for Software Technology 38
Sprache der Konditionale COND
§ Erweiterung von T auf Sprachen mit Konditionalen
§ Syntax: § Alle Terme sind Konditionale § Ist p ein n-stelliges Prädikatensymbol und
sind u1,..,un,t1,t2 Konditionale, dann ist auch if p(u1,..,un) then t1 else t2 ein Konditional.
Institute for Software Technology 39
Semantik von COND § Semantikfunktion Iγ § Iγ(ω,t) = Iτ(ω,t) für t ∈ T und ω∈ ENV § Sei po das Prädikat zum
Prädikatensymbol p: § Falls po(Iγ(ω,u1),..,Iγ(ω,un), )=T, dann
Iγ(ω,if p(u1,..,un) then t1 else t2) = Iγ(ω,t1 ) § Falls po(Iγ(ω,u1),..,Iγ(ω,un), )=F, dann
Iγ(ω,if p(u1,..,un) then t1 else t2) = Iγ(ω, t2 )
Institute for Software Technology 40
Beispiel zu COND
§ Binärer Stack ℜ = (S,add0,add1,sub,ist0?,ist1?,istLeer?,leer)
§ if ist0?(sub(x)) then add0(x) else sub(x) § Fragen:
§ Ist der obige Ausdruck wirklich aus COND? ok. § Berechnung des Ausdrucks für ω(x)=101?
Institute for Software Technology 41
Beispiel zu COND (cont.)
§ Iγ(ω,ist0(sub(x))) = § ist0(Iγ(ω,sub(x))) = § ist0(sub(Iγ(ω,x))) = § ist0(sub(101)) = § ist0(01) = T.
§ Iγ(ω,add0(x)) = § add0(Iγ(ω,x)) = § add0(101) = § 0101
Institute for Software Technology 42
Anmerkungen zu COND
§ In COND können verschachtelte Konditionale konstruiert werden.
§ Aufpassen: § Beim Bedingungsteil müssen alle
Argumente aus COND sein. Prädikate sind nicht aus COND!
§ Beispiel: if ist0?(ist1?(x)) then x else add0(x)
Institute for Software Technology 43
Verwendbarkeit von COND?
§ Zur Repräsentation von Wissen § If-then-else Konstrukte
§ ...