Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:

Ähnliche Präsentationen


Präsentation zum Thema: "Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:"—  Präsentation transkript:

1 Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:

2 Programmierung 1 - Repetitorium Donnerstag, den Kapitel 7 Korrektheit

3 Programmierung 1 - Repetitorium 7.1 Abstrakte Prozeduren Abstrakte Prozedur = Vorschrift, die zu jedem Wert eines vorgegebenen Argumentbereichs eine Berechnung definiert, die, wenn sie terminiert, ein eindeutig bestimmtes Ergebnis in einem vorgegebenen Ergebnisbereich liefert. Typzusicherung :sum : Argumentbereich Ergebnisbereich definierende Gleichung : sum (x) = if x < 1 then 0 else sum (x-1) + x Für abstrakte Prozeduren gilt : - keine Speicherbeschränkung - keine Größenbeschränkung für Zahlen - keine undefinierte Operations- und Funktionsanwendungen

4 Programmierung 1 - Repetitorium 7.1 Abstrakte Prozeduren Abstrakte Prozeduren divergieren oder terminieren. Eine Prozedur p ist eine Prozedur X Y, wenn X Y die Typzusicherung von p ist. Sei p eine Prozedur X Y. Ein Paar (x,y) X 2 heißt Rekursionspaar von p, wenn für die Bestimmung von p(x) gemäß der definierenden Gleichung von p die rekursive Bestimmung von p(y) erforderlich ist. Die Rekursionsrelation von p ist die Menge aller Rekursionspaare von p. Rekursionsrelation von sum ist { (n,n-1) | n + } Die Rekursionsrelation einer Prozedur X Y ist immer eine binäre Relation auf X. Sei r eine binäre Relation. Eine unendliche Kette in r ist eine unendliche Folge x 0, x 1, x 2,..., für die gilt : n : ( x n, x n+1 ) r

5 Programmierung 1 - Repetitorium 7.1 Abstrakte Prozeduren Wir sagen, dass r für x terminiert, wenn es keine unendliche Kette in r gibt, die mit x beginnt. Wir sagen, dass r terminiert, wenn es keine unendliche Kette in r gibt. Sei p eine Prozedur X Y. Wir sagen, dass p auf x X terminiert, wenn die Rekursionsrelation von p für x terminiert. Die Menge aller x X, für die p terminiert, bezeichnen wir mit Dom p (domain) und nenne sie den Definitionsbereich von p. Wenn p für ein Argument x X terminiert, bezeichnen wir das eindeutig bestimmte Ergebnis mit p(x). Die Funktion { ( x, p(x) ) | x Dom p } bezeichnen wir als Ergebnisfunktion der Prozedur p. Eine Prozedur ist linear-rekursiv gdw. alle Rekursionsbäume linear sind. Eine Prozedur ist binär-rekursiv gdw. alle Rekursionsbäume binär sind.

6 Programmierung 1 - Repetitorium 7.1 Abstrakte Prozeduren Beispiel : Fibonacci - Funktion fib : fib(n) = if n<2 then n else fib(n-1) + fib(n-2) Die Rekursionsrelation von fib ist { ( n, n – i ) | n n 2 i {1,2} } Offensichtlich terminiert diese Relation, also auch fib. Rekursionsbaum für fib mit Argument 4 : fib 4 fib 2fib 1fib 1fib 0 fib 3fib 2 fib 1fib 0 Jede Kante entspricht einem Rekursionspaar !

7 Programmierung 1 - Repetitorium 7.2 Beweis durch Nachrechnen (1)sum (2) x : sum(x) = if x<1 then 0 else sum(x-1) + x Behauptung :sum (2) = 3 Beweis :sum (2) = sum(1) + 2 = ( sum(0) + 1 ) + 2 = ( ) + 2 = 3 Behauptung : x : x < 1 sum(x) = 0 Beweis :Sei x und x < 1. Dann folgt sum(x) = 0 gem. Def. von sum. Beweistechniken für A B( A Prämisse, B Konklusion ) 1.Beweise B unter Verwendung der Gültigkeit von A. 2.Beweise, dass A gilt.( A B ) ( A v B )

8 Programmierung 1 - Repetitorium 7.2 Beweis durch Nachrechnen Behauptung : x : sum(x) = if x<1 then 0 else x / 2 * (x+1) Beweis :f 1 (x) = if x < 1 then 0 else x / 2 * (x+1) f 2 (x) = if x < 1 then 0 else f 2 (x-1) + x Sei x < 1. f 1 (x) = 0 = f 2 (x)klar nach Def. Sei x 1. f 1 (x) = x / 2 * (x+1) = x-1 / 2 * (x-1+1) + x = f 1 (x-1) + x = if x < 1 then 0 else f 2 (x-1) + x = f 2 (x) (IA)

9 Programmierung 1 - Repetitorium 7.3 Ordnungsrelation Infixschreibweise einer binären Relation r :x r y = ( x, y ) r Sei eine binäre Relation. x yx kleiner gleich y x y y xx größer gleich y x < y x y x yx kleiner yx Vorgänger von y x > y y < xx größer yx Nachfolger von y Eine binäre Relation heißt... - reflexiv, wenn Dom ( ) = Ran () und x Dom () : x x - transitiv, wenn für alle x,y,z Dom ( ) gilt : ( x y y z ) x z. - antisymmetrisch, wenn für alle x,y Dom () gilt : ( x y y x ) x = y. - partielle Ordnung, wenn sie reflexiv, transitiv und antisymmetrisch ist. - linear, wenn für alle x,y Dom () gilt : x y v y x - wohlfundiert, wenn > terminiert.

10 Programmierung 1 - Repetitorium 7.3 Ordnungsrelation Eine partielle Ordnung heißt... - partielle Ordnung für eine Menge X, wenn Dom () = X ist. - lineare Ordnung, wenn sie linear ist. - wohlfundierte Ordnung, wenn sie wohlfundiert ist. - Wohlordnung, wenn sie linear und wohlfundiert ist. natürliche OrdnungNO(x) = { (x,y) X 2 | x y } strukturelle OrdnungSO(x) = { (x,y) X 2 | x Teilobjekt von y } InklusionsordnungIO(x) = { (y,z) | y z und z x } IdentitätId(x) = { (x,x) | x X }

11 Programmierung 1 - Repetitorium 7.4 Terminierungsbeweise Sei X eine nach unten beschränkte Teilmenge der ganzen Zahlen. Dann ist NO(X) eine terminierende Relation. Sei X eine Menge. Dann ist SO(X) eine terminierende Relation. Jede Teilmenge einer terminierenden Relation ist eine terminierende Relation. Eine Funktion f bettet eine binäre Relation r in eine binäre Relation r ein, wenn gilt : 1.( Dom r Ran r ) Dom f 2. (x,y) r : ( f x, f y ) r Jede Relation, die in eine terminierende Relation einbettbar ist, terminiert.

12 Programmierung 1 - Repetitorium 7.4 Terminierungsbeweise Eine Prozedur p heißt... - natürlich rekursiv, wenn es eine nach unten beschränkte Teilmenge X der ganzen Zahlen gibt, sodass die Rekursionsrelation von p in NO(X) eingebettet werden kann. - strukturell rekursiv, wenn es eine Menge X gibt, sodass die Rekursionsrelation von p in SO(X) eingebettet werden kann. Jede natürlich – oder strukturell – rekursive Prozedur terminiert.

13 Programmierung 1 - Repetitorium 7.4 Terminierungsbeweise Beispiel : Größe von Bäumen size : T(x) size ( x, [ t 1,..., t n ] ) = 1 + size(t 1 ) size(t n ) Rekursionsrelation { ( ( x, [ t 1,..., t n ], t i ) | ( x, [ t 1,..., t n ] ) T(X) n 1 i { 1,..., n } } Dies ist eine Teilmenge von SO(T(X)). size ist strukturell – rekursiv und terminiert. ( T(X) = X x (T(X)) ) Beispiel : Potenzen power : x power (x,n) = if n=0 then 1 else power (x,n-1) * x Rekursionsrelation { ( (x,n), (x,n-1) ) | x n + } wird von (x,n) x. n in NO( ) eingebettet. power ist natürlich – rekursiv und terminiert.

14 Programmierung 1 - Repetitorium 7.5 Induktion Eine Relation ist genau dann wohlfundiert, wenn jede nichtleere Menge ein minimales Element für enthält. Wohlfundierte Induktion : Sei eine wohlfundierte Relation, X eine Menge und A X. Dann gilt A = X, wenn gilt : x X : ( y X : y < x y A ) x A Grundmenge : X Aussagemenge : A X Zielbehauptung : x X : x A bzw. X A Induktionsrelation : wohlfundierte Ordnung ( z.B. NO(X) ) Induktionsbehauptung : x X : ( y X : y < x y A ) x A Induktionsannahme für x X : y X : y < x y A Beweis unter Verwendung der Induktionsannahme

15 Programmierung 1 - Repetitorium 7.5 Induktion Von der Wahl der richtigen Induktionsrelation hängt der Erfolg des Induktionsbeweises ab. Wenn die Grundmenge eine nach unten beschränkte Menge von Zahlen ist, ist die natürliche Ordnung die naheliegende Wahl. Man spricht dann von natürlicher Induktion. Wenn die Elemente der Grundmenge dagegen zusammengesetzte Objekte sind (z.B. Listen oder Bäume), bietet sich die strukturelle Ordnung an. Man spricht dann von struktureller Induktion.

16 Programmierung 1 - Repetitorium 7.5 Induktion Beispiel : Summenfunktion sum sum (x) = if x < 1 then 0 else sum (x-1) + x Beweis mit natürlicher Induktion : Behauptung : n : sum (n) = n / 2 * (n+1) Grundmenge : Aussagemenge : A := { n | sum(n) = n / 2 * (n+1) } Zielbehauptung : A Induktionsrelation : NO( ) Sei n=0.sum(n) = 0 = n / 2 * (n+1)klar nach Definition Sei n>0.sum(n) = sum(n-1) + nDefinition von sum = n-1 / 2 * (n-1+1) + n (IA) = n / 2 * (n+1)

17 Programmierung 1 - Repetitorium 7.6 Strukturelle Induktion über Listen (X) = { ( ) } ( X x (X) ) (X) x (X) (X) ys = ys( x :: xr ys = x :: ( ys ) Länge| _ | (X) | nil | = 0| x :: xr | = 1 + | xr | Reversionrev (X) (X) rev ( nil ) = nilrev ( x :: xr ) = rev ( xr [ x ] Sei X eine Menge und seien xs,ys,zs (X). Dann gilt : nil = xs 2.| ys | = | xs | + | ys | 3.| rev ( xs ) | = | xs | 4.rev ( ys ) = rev ( ys rev ( xs ) 5.rev ( rev ( xs ) ) = xs

18 Programmierung 1 - Repetitorium 7.6 Strukturelle Induktion über Listen Behauptung :Sei X eine Menge und seien xs,ys,zs (X) Dann gilt : ( ys zs = ( zs ) Beweis :Seien ys,zs (X). Wir beweisen xs (X) : ( ys zs = ( zs ) durch strukturelle Induktion über xs (X) Sei xs = nil. ( ys zs = zs = ( zs ) Sei xs = x :: xr. ( ys zs = ( x :: ( ys ) zs = x :: ( ( ys zs ) = x :: ( ( zs ) ) (IA) = ( zs )

19 Programmierung 1 - Repetitorium 7.7 Größenverhältnisse in Bäumen T(X) = X x (T(X)) Größes T(X) s ( x, [ t 1,..., t n ] ) = 1 + s ( t 1 ) s ( t n ) Tiefed T(X) d ( x, [ t 1,..., t n ] ) = 1 + max { -1, d ( t 1 ),..., d ( t n ) } Breiteb T(X) + b ( x, [ t 1,..., t n ] ) = if n=0 then 1 else b ( t 1 ) b ( t n ) Die inneren Knoten eines Baumes sind die Knoten, die keine Blätter sind.

20 Programmierung 1 - Repetitorium 7.7 Größenverhältnisse in Bäumen Behauptung :Für jeden balancierten Binärbaum t T (X) gilt : b ( t ) = 2 d ( t ) Beweis durch strukturelle Induktion : Sei t = ( x, [ ] ). b ( t ) = 1 = 2 d ( t ) nach Definition Sei t = ( x, [ t 1, t 2 ] ). b ( t ) = b ( t 1 ) + b ( t 2 ) Definition von b ( t ) = 2 d ( t1 ) + 2 d ( t2 ) (IA) = 2 * 2 d ( t1 ) t balanciert, also d ( t 1 ) = d ( t 2 ) = d ( t1 ) = max { d ( t1 ), d ( t2 ) } t balanciert, also d ( t 1 ) = d ( t 2 ) = 2 d ( t ) Definition von d ( t )

21 Programmierung 1 - Repetitorium 7.7 Größenverhältnisse in Bäumen Behauptung : Für jeden balancierten Binärbaum t T(X) gilt : s ( t ) = 2 d ( t ) Beweis durch strukturelle Induktion : Sei t = ( x, [ ] ). s ( t ) = 1 = 2 d ( t ) nach Definition Sei t = ( x, [ t 1, t 2 ] ). s ( t ) = 1 + s ( t 1 ) + s ( t 2 ) Definition von b ( t ) = d ( t1 ) d ( t2 ) (IA) = 2 * 2 d ( t1 ) t balanciert, also d ( t 1 ) = d ( t 2 ) = d ( t1 ) = max { d ( t1 ), d ( t2 ) } t balanciert, also d ( t 1 ) = d ( t 2 ) = 2 d ( t ) Definition von d ( t )


Herunterladen ppt "Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:"

Ähnliche Präsentationen


Google-Anzeigen