Algebraische Spezifikation
|
|
|
- Inge Böhmer
- vor 8 Jahren
- Abrufe
Transkript
1 top(pop(push(42,empty))) =? Algebraische Spezifikation OOPM, Ralf Lämmel
2 610 Wie beschreiben wir das erwartete Verhalten von einem ADT? public class IntStack { private IntListEntry top = null; public void push(int item) { IntListEntry e = new IntListEntry(); e.item = item; e.next = top; top = e; Testfälle? Vor-/Nachbedingungen? } public boolean isempty() { return top == null; } public int top() { return top.item; } public void pop() { top = top.next; } }
3 611 So beschreiben wir das erwartete Verhalten von einem Algorithmus! Angenommen: Dann ist dies zu zeigen: { x >= 0 && y > 0 } q = 0; r = x; while (r >= y) { r = r - y; q = q + 1; } { x == y q + r && r < y && r >= 0 && q >= 0 } Vorbedingung Zusicherungen Nachbedingung Vor Programmausführung muss gelten, dass... Nach Programmausführung gilt, dass...
4 612 Optionen zur Verhaltensbeschreibung von ADTs Testfälle Keine vollständige Beschreibung. Siehe ADT-Vorlesung. Vor- und Nachbedigungen Nur eingeschränkt möglich. Wir benötigen Zugriff auf die Geschichte von Kapseln. Algebraische Spezifikationen Wie heute besprochen.
5 613 Algebraische Spezifikation von IntStack: Konstruktoren empty push : IntStack : int IntStack IntStack Operationen zur kanonischen Repräsentation Repräsentation von Kellern: empty, push(42,empty), push(88,push(42,empty)),...
6 614 Algebraische Spezifikation von IntStack: Operationen isempty : IntStack Boolean top pop : IntStack int : IntStack IntStack Alle Operationen außer den Konstruktoren. Die ultimative Frage: was ergeben Anwendungen von Operationen auf kanonische Repräsentationen? top(push(88,push(42,empty))) =?
7 615 Algebraische Spezifikation von IntStack: Gleichungen Der leere Keller ist leer. isempty(empty) isempty(push(t,l)) top(push(t,l)) pop(push(t,l)) = true = false = t = l Ein durch push entstandener Keller ist nicht leer. Der zuletzt eingekellerte Werte wird durch top zurückgegeben. pop gibt den Keller zurück, auf welchen zuletzt eingekellert wurde.
8 616 Anwendung von Gleichungen zur Normalisierung push(88,pop(push(42,empty))) pop(push(t,l)) = l push(88,empty) Wir wenden Gleichungen solange an, bis nichts mehr geht (oder für immmer).
9 617 Algebraische Spezifikation von IntStack Konstruktoren empty : IntStack push : int IntStack IntStack Operationen isempty top pop : IntStack Boolean : IntStack int : IntStack IntStack Gleichungen isempty(empty) = true isempty(push(t,l)) = false top(push(t,l)) = t pop(push(t,l)) = l
10 618 Algebraische Spezifikation von Boolean specification Boolean sorts Boolean constructors true : Boolean false : Boolean operations not and or equations... : Boolean Boolean : Boolean Boolean Boolean : Boolean Boolean Boolean Verwendung einer Spezifikationssprache; siehe die Schlüsselwörter.
11 619 Gleichungen zu Boolean equations not(true) = false not(false) = true and(false,false) = false and(false,true) = false and(true,false) = false and(true,true) = true...
12 620 Anwendung von Gleichungen zur Normalisierung not(and(not(false),false) not(false) = true not(and(true,false)) and(true,false) = false not(false) not(false) = true true Wir wenden Gleichungen solange an bis nichts mehr geht (oder für immmer).
13 621 Alternative Axiomatisierungen von and and(false,false) = false and(false,true) = false and(true,false) = false and(true,true) = true and(true,b) = b and(b,true) = b and(false,b) = false and(b,false) = false and(true,true) = true and(b1,b2) = false Definition basierend auf erschöpfender Fallunterscheidung von Booleschen Argumenten Verwendung von Variablen beim Matchen (Die Gleichungen schließen einander immer noch aus!) Wir haben eine speziellere und eine allgemeinere Gleichung.
14 622 Definition versus Folgerung and(false,false) = false and(false,true) = false and(true,false) = false and(true,true) = true Wir können diese Gleichungen als die primäre Definition von and ansehen. and(b1,b2) = and(b2,b1) and(b1,and(b2,b3)) = and(and(b1,b2),b3) Die Eigenschaften der Kommutativität und Assoziativität folgen aus der primären Definition.
15 623 Definition versus Folgerung and(true,b) = b and(b,true) = b and(false,b) = false and(b,false) = false Alternative and(b1,b2) = and(b2,b1) and(b1,and(b2,b3)) = and(and(b1,b2),b3)
16 624 Unterscheidung von Definition und Folgerung in der Spezifikationssprache equations and(false,false) = false and(false,true) = false and(true,false) = false and(true,true) = true corollaries and(b1,b2) = and(b2,b1) and(b1,and(b2,b3)) = and(and(b1,b2),b3) Wir sollten beweisen, dass die Folgerungen tatsächlich aus den anderen Gleichungen folgen.
17 625 Unterscheidung von Definition und Folgerung in der Spezifikationssprache equations and(true,b) = b and(b,true) = b and(false,b) = false and(b,false) = false Alternative corollaries and(b1,b2) = and(b2,b1) and(b1,and(b2,b3)) = and(and(b1,b2),b3) Wir sollten beweisen, dass die Folgerungen tatsächlich aus den anderen Gleichungen folgen.
18 626 and(b1,b2) = and(b2,b1)? Konventionen: LHS (linke Seite; left-hand side) RHS (rechte Seite; right-hand side) Zu zeigen dass LHS = RHS für alle Belegungen von b1 und b2 vermöge Gleichungen der Wahrheitstabelle [1] and(false,false) = false [2] and(false,true) = false [3] and(true,false) = false [4] and(true,true) = true
19 627 and(b1,b2) = and(b2,b1)? Beweis per Fallunterscheidung Fall 1: b1 = false Fall 1a: b2 = false LHS: and(false,false) = false wegen [1] RHS: and(false,false) = false wegen [1] Fall 1b: b2 = true LHS: and(false,true) = false wegen [2] RHS: and(true,false) = false wegen [3] Fall 2: b1 = true Fall 2a: b2 = false LHS: and(true,false) = false wegen [3] RHS: and(false,true) = false wegen [2] Fall 2b: b2 = true LHS: and(true,true) = true wegen [4] RHS: and(true,true) = true wegen [4] [1] and(false,false) = false [2] and(false,true) = false [3] and(true,false) = false [4] and(true,true) = true Q.E.D.
20 628 Algebraische Spezifikation - Wozu? Algebraische Spezifikation als Modellierungsform Spezifikation mit mathematischer Interpretation Ausführbare Spezifikationen Grundlage korrekter Implementation Anwendbarkeit mathematischer Beweismethoden Deklarative Programmierung Beschreibung des Was ; nicht des Wie Abstraktion von operationaler Semantik Fokussierung auf Programmeigenschaften
21 629 Eine Sprache für (konstruktive) algebraische Spezifikationen specification... imports... sorts... } constructors... variables... operations... equations... corollaries... } Name der Spezifikation zur Wiederverwendung Import von Spezifikationen zur Signatur = Beschreibung möglicher Terme Gleichungen spezifizieren Teilmengen gleicher Terme.
22 Weitere Beispiele (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 630
23 631 Eine Spezifikation für die natürlichen Zahlen Repräsentation von natürlichen Zahlen: sorts Nat zero, succ(zero), succ(succ(zero)), succ(succ(succ(zero))),... constructors zero : Nat // "0" succ : Nat Nat // Successor operations add : Nat Nat Nat // Addition mult : Nat Nat Nat // Multiplication factorial : Nat Nat // Factorial function equations...
24 632 Eine Spezifikation für die natürlichen Zahlen specification Nat sorts Nat variables n, m : Nat constructors zero : Nat // "0" succ : Nat Nat // Successor Benennung der Spezifikation Vereinbarung von Variablen operations add : Nat Nat Nat // Addition mult : Nat Nat Nat // Multiplication factorial : Nat Nat // Factorial function zero, succ(zero), succ(succ(zero)),... Variablen sind universell quantifiziert in Gleichungen. Man kann also jeden Term der Sorte einsetzen. equations add(zero,n) = n add(succ(n),m) = succ(add(n,m)) mult(zero,n) = zero mult(succ(n),m) = add(m,mult(n,m)) factorial(zero) = succ(zero) factorial(succ(n)) = mult(succ(n),factorial(n))
25 633 Definition versus Folgerung equations add(zero,n) = n add(succ(n),m) = succ(add(n,m)) mult(zero,n) = zero mult(succ(n),m) = add(m,mult(n,m)) factorial(zero) = succ(zero) factorial(succ(n)) = mult(succ(n),factorial(n)) Beachte die Argumentmuster basierend auf Konstruktoren (und Variablen). corollaries add(m,n) = add(n,m) add(m,add(n,k)) = add(add(m,n),k)... Wir mögen uns weitere, nichtkonstruktive Gleichungen gestatten, aber diese müssen wir markieren und nicht bei der Normalisierung verwenden sondern vielmehr als implizierte Eigenschaften annehmen oder herleiten.
26 634 Spezifikation von Listen über Nat Repräsentation von Listen: sorts NatList constructors nil : NatList cons : Nat NatList NatList nil, cons(42,nil), cons(88,cons(42,nil)),... Statt: {}, {42}, {88,42} operations append : NatList NatList NatList snoc : NatList Nat NatList... equations...
27 635 Spezifikation von Listen über Nat specification NatList imports Nat Modularisierung basiert auf Importierung von Spezifikationen. sorts NatList variables l, l1, l2 : NatList constructors nil cons operations : NatList : Nat NatList NatList append : NatList NatList NatList snoc... equations : NatList Nat NatList append(nil,l) = l append(cons(n,l1),l2) = cons(n,append(l1,l2)) snoc(l,n) = append(l,cons(n,nil))... {42, 88} [42, 88] cons(42,cons(88,nil)) Definitionen dürfen auch Substitution benutzen.
28 636 Implementation algebraischer Spezifikationen Zielstellung Abbildung der Spezifikationen auf Java. Es gibt Sprachen die keine Codierung verlangen: F#, Scala, Haskell,... Prototypische Implementation ausreichend. Eine Vorgehensweise Sorte wird Schnittstelle. Es gibt diverse Optionen und Spezialfälle. Operationen sind Methoden der Schnittstelle. Konstruktoren werden Klassen. Die Klassen implementieren die Schnittstelle. Die Klassen haben Attribute für Konstruktorenargumente.
29 637 Sorte versus Schnittstelle sorts Nat constructors zero : Nat // "0" succ : Nat Nat operations // Successor add : Nat Nat Nat // Addition mult : Nat Nat Nat // Multiplication factorial : Nat Nat // Factorial function public interface Nat { Nat add(nat m); Nat mult(nat m); Nat factorial(); } this steht für die erste Argumentposition.
30 638 Konstruktoren versus Klassen sorts Nat constructors zero : Nat // "0" succ : Nat Nat // Successor public class Zero implements Nat {... } public class Succ implements Nat { } private Nat n; public Succ(Nat n) { this.n = n; }...
31 639 Gleichungen für den zero -Fall equations add(zero,n) = n add(succ(n),m) = succ(add(n,m)) mult(zero,n) = zero mult(succ(n),m) = add(m,mult(n,m)) factorial(zero) = succ(zero) factorial(succ(n)) = mult(succ(n),factorial(n)) public class Zero implements Nat { public Zero() { } public Nat add(nat n) { return n; } public Nat mult(nat m) { return new Zero(); } public Nat factorial() { return new Succ(new Zero()); } }
32 640 Gleichungen für den succ -Fall equations add(zero,n) = n add(succ(n),m) = succ(add(n,m)) mult(zero,n) = zero mult(succ(n),m) = add(m,mult(n,m)) factorial(zero) = succ(zero) factorial(succ(n)) = mult(succ(n),factorial(n)) public class Succ implements Nat { private Nat n; public Succ(Nat n) { this.n = n; } } Anteil für den Konstruktor public Nat add(nat m) { return new Succ(n.add(m)); } public Nat mult(nat m) { return m.add(n.mult(m)); } public Nat factorial() { return mult(n.factorial()); }
33 641 Diskussion dieser Implementationsstrategie Seiteneffektfreiheit Die Methoden verändern keine bestehenden Objekte. Ineffizienz Die Vermeidung von int erscheint potentiell unvernünftig. Ad-hoc Zuordnung von Operationen zu Klassen Die Sorte des ersten Argumentes entscheidet. Beschränkungen durch Substitution definierte Funktionen verschachtelte Muster Matching in mehreren Argumenten
34 Beweise von Eigenschaften (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 642
35 643 Ausgewählte Eigenschaften natürlicher Zahlen succ kann von links nach aussen gezogen werden. add(succ(x),y) = succ(add(x,y)) auch von rechts. add(x,succ(y)) = succ(add(x,y)) add ist assoziativ. add(x,add(y,z)) = add(add(x,y),z) add ist kommutativ. add(x,y) = add(y,x)
36 644 Beweistechniken Nicht immer ausreichend Anwendung von Gleichungen Beschränkung auf endliche Wertebereiche Erschöpfende Fallunterscheidung Strukturelle Induktion Anwendbarkeit auf Eigenschaften von Nat, List<T> usw.
37 Satz: Für alle x,y : Nat gilt: add(succ(x),y) = succ(add(x,y)) Zu zeigen trivial add(succ(x),y) = succ(add(x,y)) Beweis ( Forme LHS in RHS um. ) add(succ(x),y) = succ(add(x,y)) { Wende [2] an. n := x m := y } Substitutionen werden nachfolgend weggelassen. [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) Q.E.D. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 645
38 Satz: Für alle x,y : Nat gilt: add(x,succ(y)) = succ(add(x,y)) Annahme add ist kommutativ, d.h.: add(x,y) = add(y,x) Zu zeigen: add(x,succ(y)) = succ(add(x,y)) Beweis add(x,succ(y)) = add(succ(y),x) { Kommutativität } = succ(add(y,x)) { [2] } = succ(add(x,y)) { Kommutativität } Der Succ Satz [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) Q.E.D. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 646
39 Satz: add ist assoziativ. Zu zeigen add( x, add( y, z )) = add( add( x, y ), z ) Beweis: Induktion über x [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 647
40 648 Beweis mittels vollständiger Induktion Behauptung: A(k) gilt für alle natürlichen Zahlen k Beweisschema Induktionsanfang (IA) Zu zeigen dass A(0) gilt. Induktionsschritt (IS) Sei k eine beliebige natürliche Zahl. Induktionsvoraussetzung (IV): A(k) gilt. Induktionsbehauptung (IB): A(k+1) gilt. Beweis: Zeige dass IB gilt unter Verwendung von IV. im Beispiel: add(x,add(y,z)) = add(add(x,y),z) gilt für alle natürlichen Zahlen x.
41 649 Warum klappt das? k = 0: gezeigt durch IA. k = 1: Beweis von IS zeigt: A(0) A(1) k = 2: Beweis von IS zeigt: A(1) A(2)...
42 Satz: add ist assoziativ. Zu zeigen add(x,add(y,z)) = add(add(x,y),z) Beweis: Induktion über x Induktionsanfang: x = zero Zu zeigen: add(zero,add(y,z)) = add(add(zero,y),z) Beweis add(zero,add(y,z)) = add(y,z) { [1] } = add(add(zero,y),z) { [1] } [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) Q.E.D. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 650
43 Satz: add ist assoziativ. Induktionsschritt: x = k IV: add(k,add(y,z)) = add(add(k,y),z) IB: add(succ(k),add(y,z)) = add(add(succ(k),y),z) Beweis add(succ(k),add(y,z)) = succ(add(k,add(y,z)) { [2] } = succ(add(add(k,y),z) { IV } = add(succ(add(k,y)),z) { [2] } = add(add(succ(k),y),z) { [2] } [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) Q.E.D. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 651
44 Zusammenfassung ADTs können ( algebraisch ) spezifiziert werden. Eigenschaften von algebraischen Spezifikation Präzise (verglichen zu imperativen/oo-programmen) Formal (verwendbar für mathematische Beweise) Ausführbar (im funktionalen oder OO-Paradigma) Implementiertierbar Ausblick Komplexitätsanalyse Objektorientierung
45 Weitere induktive Beweise Fakultatives Material (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 653
46 Satz: add ist kommutativ. Zu zeigen: add(x,y) = add(y,x) Beweis: Induktion über x Induktionsanfang: x = zero Zu zeigen: add(zero,y) = add(y,zero) Beweis: Induktion über y Übungsaufgabe [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 654 Fakultatives Material
47 Satz: add ist kommutativ. Induktionsschritt: x = k IV: add(k,y) = add(y,k) IB: add(succ(k),y) = add(y,succ(k)) Beweis add(succ(k),y) = succ(add(k,y)) { [2] } = succ(add(y,k)) { IV } = add(y,succ(k)) { Der Succ Satz } [1] add(zero,n) = n [2] add(succ(n),m) = succ(add(n,m)) Q.E.D. (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 655 Fakultatives Material
48 656 Satz: add ist kommutativ. Oops! Beweis von Succ Satz benutzt Kommutativität. Beweis von Kommutativität benutzt Succ Satz. Was tun? Beweise Succ Satz per Induktion. Übungsaufgabe Fakultatives Material
49 657 Von Vollständiger Induktion zur Strukturellen Induktion Induktion immer über kanonische Repräsentation Induktionsanfang Fälle für nichtrekursive Konstruktoren Induktionsschritt Fälle für rekursive Konstruktoren Fakultatives Material
50 658 Eigenschaften von Listen append(nil,l) = l append(cons(t,l1),l2) = cons(t,append(l1,l2)) length(nil) = zero length(cons(t,l)) = succ(length(l)) reverse(nil) = nil reverse(cons(t,l)) = append(reverse(l),cons(t,nil)) append bewahrt Länge. length(append(l1,l2)) = add(length(l1),length(l2)) append ist assoziativ. append(l1,append(l2,l3)) = append(append(l1,l2),l3) Zweimal reverse ist Identität. reverse(reverse(l)) = l Fakultatives Material
51 659 Satz: append bewahrt die Länge. Zu zeigen: length(append(l1,l2)) = add(length(l1),length(l2)) Beweis: Induktion über l1 Induktionsanfang: l1 = nil Zu zeigen: length(append(nil,l2)) = add(length(nil),length(l2) Beweis length(append(nil,l2)) = length(l2) { [append@nil] } = add(zero,length(l2)) { [add@zero] } = add(length(nil),length(l2)) { [length@nil] Q.E.D. Fakultatives Material
52 660 Satz: append bewahrt die Länge. Induktionsschritt: l1 = k IV: length(append(k,l2)) = add(length(k),length(l2)) IB: length(append(cons(t,k),l2)) = add(length(cons(t,k)),length(l2)) für beliebige t Beweis length(append(cons(t,k),l2)) = length(cons(t,append(k,l2))) { append@cons } = succ(length(append(k,l2))) { length@cons } = succ(add(length(k),length(l2))) { IV } = add(succ(length(k)),length(l2)) { add@succ } = add(length(cons(t,k)),length(l2)) { length@cons } Q.E.D. Fakultatives Material
Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen
Was bisher geschah Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen Syntax: Signatur Semantik: Axiome (FOL-Formeln, meist
Abstract Data Type and the Development of Data Structures
Abstract Data Type and the Development of Data Structures John Guttag, 1976 2. Mai 2006 Inhalt 1 Motivation 2 3 4 Motivation - Komplexe Probleme lösen Dekomposition Problem Abstraktion Komplexität reduzieren
HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen.
HTTP://WWW.WIKIPAINTINGS.ORG/EN/FRIEDENSREICH-HUNDERTWASSER/YOU-ARE-A-GUEST-OF-NATURE-BEHAVE Abstrakte Datentypen OOPM, Ralf Lämmel (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 562 Motivation abstrakter
Mathematik und Logik
Mathematik und Logik 5. Übungsaufgaben 2006-11-21 1. Beweisen Sie, daß die Aussage allgemeingültig ist. A = A Beweis. Dies ist ein Spezialfall von (((A = B) = B) = B) = (A = B), was wir wie folgt beweisen.
Teil IV : Abstrakte Datentypen (ADT)
Teil IV : Abstrakte Datentypen (ADT) Abstraktion ADT in Modula-2 K. Murmann, H. Neumann, Fakultät für Informatik, Universität Ulm, 2001 1. Abstraktion Rekapitulation Realisation eines Stacks Idee für ADT-Konzept
Verifikation von Programmen
http://scam-trap.com/i/stophacking1.gif Verifikation von Programmen OOPM, Ralf Lämmel 380 Was tun? (Mit den Spezifikationen) Dokumentation Überprüfen der Bedingungen zur Laufzeit Verifizieren der Bedingungen
1. Teilklausur. Modul "OOPM Vorlesung/Übung" 16.12.2008. Gruppe A
Objektorientierte Programmierung und Modellierung WS 2008/2009 Institut für Informatik Prof. Dr. Ralf Lämmel Dr. Manfred Jackel 1. Teilklausur Modul "OOPM Vorlesung/Übung" 16.12.2008 Gruppe A Name Vorname
Rekursive Funktionen
Um Rekursion zu verstehen, muss man vor allem Rekursion verstehen. http://www2.norwalk-city.k12.oh.us/wordpress/precalc/files/2009/05/mona-lisa-jmc.jpg Rekursive Funktionen OOPM, Ralf Lämmel Was ist Rekursion?
ALP I Induktion und Rekursion
ALP I Induktion und Rekursion WS 2012/2013 Vollständige Induktion (Mafi I) Die Vollständige Induktion ist eine mathematische Beweistechnik, die auf die Menge der natürlichen Zahlen spezialisiert ist. Vorgehensweise:
Induktion und Rekursion
Induktion und Rekursion Induktion und Rekursion Vorkurs Informatik Theoretischer Teil WS 013/14. Oktober 013 Vorkurs Informatik WS 013/14 1/1 Vollständige Induktion Vorkurs Informatik WS 013/14 /1 Ziel
Grundlagen der Programmierung. Kapitel 8: Information und Repräsentation. Überblick über dieses Kapitel. Repräsentation versus Information.
Überblick über dieses Kapitel Grundlagen der Programmierung Dr. Christian Herzog Technische Universität München Wintersemester 2008/2009 Kapitel 8: Information und Repräsentation! Repräsentation, Information,!
2.3 Spezifikation von Abstrakten Datentypen
Abstrakte Datentypen (ADT) 2.3 Spezifikation von Abstrakten Datentypen Sichtbare Schnittstelle: Typbezeichner Signaturen der Operationen Spezifikation der Operationen Abstraktionsbarriere Implementierung
1 Übersicht Induktion
Universität Koblenz-Landau FB 4 Informatik Prof. Dr. Viorica Sofronie-Stokkermans Dipl.-Inform. Markus Bender 0.11.01 (v1.3) 1 Übersicht Induktion 1.1 Allgemeines Unter einem induktiven Vorgehen versteht
Grundbegriffe der Informatik Tutorium 2
Grundbegriffe der Informatik Tutorium 2 Tutorium Nr. 16 Philipp Oppermann 9. November 2014 KARLSRUHER INSTITUT FÜR TECHNOLOGIE KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
Stapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
Induktion und Rekursion
Mathematische Beweistechniken Vorkurs Informatik SoSe13 10. April 013 Mathematische Beweistechniken Ziel Mathematische Beweistechniken Ziel beweise, dass eine Aussage A(n) für alle n N gilt. Beispiel Für
Softwaretechnik WS 16/17. Übungsblatt 01
Softwaretechnik WS 16/17 Übungsblatt 01 Was ist eine Klasse? Definition der Object Management Group: A class describes a set of objects that share the same specifications of features, constraints, and
Theorie der Informatik
Theorie der Informatik 2. Beweistechniken Malte Helmert Gabriele Röger Universität Basel 18. Februar 2015 Beweis Beweis Ein Beweis leitet die Korrektheit einer mathematischen Aussage aus einer Menge von
Grundbegriffe der Informatik Tutorium 2
Grundbegriffe der Informatik Tutorium 2 Tutorium Nr. 32 Philipp Oppermann 13. November 2013 KARLSRUHER INSTITUT FÜR TECHNOLOGIE KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen
Rev. 1152 1 [23] Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom 10.11.2010: Rekursive Datentypen Christoph Lüth & Dennis Walter Universität Bremen Wintersemester 2010/11
Algorithmen und Programmierung
Algorithmen und Programmierung Kapitel 8 Abstrakte Datentypen A&P (WS 14/15): 08 Abstrakte Datentypen 1 Überblick Abstrakte Datentypen Signaturen und Algebren Spezifikation von ADTs Umsetzung von ADTs
Grundlagen der Mathematik
Universität Hamburg Winter 2016/17 Fachbereich Mathematik Janko Latschev Lösungsskizzen 8 Grundlagen der Mathematik Präsenzaufgaben (P13) Primfaktorzerlegungen Die Primfaktorzerlegungen lauten: a) 66 =
Überblick über dieses Kapitel Grundlagen der Programmierung Kapitel 12: Information und Repräsentation
Überblick über dieses Kapitel Grundlagen der Programmierung Dr. Christian Herzog Technische Universität München Wintersemester 2007/2008 Kapitel 12: Information und Repräsentation! Repräsentation, Information,!
Theoretische Informatik. Alphabete, Worte, Sprachen
Theoretische Informatik Alphabete, Worte, Sprachen Alphabete, Worte, Sprachen 1. Alphabete und Worte Definitionen, Beispiele Operationen mit Worten Induktionsbeweise 2. Sprachen Definition und Beispiele
14 Abstrakte Klassen, finale Klassen, Interfaces
Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse
14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen
Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.
Logik für Informatiker
Vorlesung Logik für Informatiker 2. Induktion Bernhard Beckert Universität Koblenz-Landau Sommersemester 2006 Logik für Informatiker, SS 06 p.1 Induktion Zentrale Rolle Wesentliches Beweisprinzip in Mathematik
1 Abstrakte Datentypen
1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;
Σ = (z; c : z, f : z z) Σ = (z; c : z, f : z z) ( ; 17, x -x) ( ; 17, pred) ( ; true, neg) ( ; 0, suc) ({a,b} + ; a, xa xb und xb xa)
METHODEN UND MODELLE DES SYSTEMENTWURFS 3. Algebraische Spezifikation mit CASL 3.1 Spezifikationen 3.2 CASL 3.1 SPEZIFIKATIONEN JAN SÜRMELI u.hu-berlin.de/mms-13 ZUR ERINNERUNG 2 DAS ZIEL 3 Signatur charakterisiert
12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):
Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel
Interface. So werden Interfaces gemacht
Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.
Mathematik für Informatiker 1 Wintersemester 2013/14 Übungsblatt 6
Dipl.Inf. Malte Isberner Dr. Oliver Rüthing Dipl.Inf. Melanie Schmidt Dr. Hubert Wagner Übungen zur Vorlesung Mathematik für Informatiker 1 Wintersemester 2013/14 Übungsblatt 6 Die Lösungshinweise dienen
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten
Vorlesung. Vollständige Induktion 1
WS 015/16 Vorlesung Vollständige Induktion 1 1 Einführung Bei der vollständigen Induktion handelt es sich um ein wichtiges mathematisches Beweisverfahren, mit dem man Aussagen, die für alle natürlichen
Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
Programmierung mit Feldern OOPM, Ralf Lämmel
Übung: Deklarieren Sie ein entsprechendes Feld in Java! Programmierung mit Feldern OOPM, Ralf Lämmel Einführendes Beispiel Eingabe: ein Feld von int-werten public static int sum(int[] a) { int result =
Grundlagen der Mathematik
Universität Hamburg Winter 016/17 Fachbereich Mathematik Janko Latschev Lösungsskizzen 6 Grundlagen der Mathematik Präsenzaufgaben (P9) Die Ordnung der natürlichen Zahlen I Wir hatten in der Vorlesung
Satz 7. A sei eine Teilmenge des nichttrivialen Vektorraums (V,+, ). Dann sind die folgende Aussagen äquivalent.
Definition der Basis Def. Es sei (V,+, ) ein nichttrivialer Vektorraum. Die Menge A V heißt eine Basis-Menge, falls sie (a) linear unabhängig ist und (b) span(a) = V. Satz 7. A sei eine Teilmenge des nichttrivialen
Diskrete Strukturen Kapitel 2: Grundlagen (Mengen)
WS 2016/17 Diskrete Strukturen Kapitel 2: Grundlagen (Mengen) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_16
TU8 Beweismethoden. Daniela Andrade
TU8 Beweismethoden Daniela Andrade [email protected] 12.12.2016 1 / 21 Kleine Anmerkung Meine Folien basieren auf den DS Trainer von Carlos Camino, den ihr auf www.carlos-camino.de/ds findet ;) 2
Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Mittwoch den
Fachbereich Mathematik Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Mittwoch den 8.9.011 Vorkurs Mathematik WS 011/1 Die mit * gekennzeichneten Aufgaben sind etwas schwerer. Dort braucht
Programmierung im Grossen
1 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Bertrand Meyer 2 Vorlesung 4: Abstrakte Daten-Typen Übungen 3 Passe die vorhergehende Spezifikation von Stacks (LIFO, Last-In First-Out
Entwicklung korrekter Programme in Coq. Thomas Strathmann
Entwicklung korrekter Programme in Coq Thomas Strathmann Überblick Teil 1 Was ist Coq? Theoretische Grundlagen Programmierung, Spezifikation, Beweise in
1. Typen 1.1 Typsicherheit 1.2 Typprüfung
1. Typen 1.1 Typsicherheit 1.2 Typprüfung Ein Typsystem ist ein praktikables, syntaktisches Verfahren, mit dem man die Abwesenheit gewisser Laufzeit-Eigenschaften eines Programms beweisen kann, indem man
Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012
, Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen
Programmieren in Java
Programmieren in Java Vorlesung 06: Das Visitor Pattern Prof. Dr. Peter Thiemann (vertreten durch Luminous Fennell) Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg)
Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen
Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 4: Wörter (und vollständige Induktion) Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Oktober 2008 1/29 Überblick Wörter Wörter Das leere Wort Mehr zu
int x = 3; int y = 11; public A () { this.x = z; y *= z;
Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Aufgabe 1 (Programmanalyse): (13 + 6 = 19 Punkte) a) Geben Sie die Ausgabe des Programms für den Aufruf java M an. Tragen
Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation
Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &
Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 17. Juli 2015 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 7. September
Grundbegriffe der Informatik
Grundbegriffe der Informatik Kapitel 4: Wörter Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik
Einstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
1.2 Eigenschaften der ganzen Zahlen
Lineare Algebra I WS 2015/16 c Rudolf Scharlau 13 1.2 Eigenschaften der ganzen Zahlen Dieser Abschnitt handelt von den gewöhlichen ganzen Zahlen Z und ihren Verknüpfungen plus und mal. Man kann die natürlichen
Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1
Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
Elementare Beweistechniken
Elementare Beweistechniken Beispiel: Satzform (Pythagoras) Voraussetzung: Gegeben sei ein beliebiges rechtwinkeliges Dreieck, die Länge der Hypothenuse sei c und die Längen der anderen Seiten seien a und
Deklaration einer Klasse Innere innerhalb Klassen einer in Ja anderen v a Klasse
Innere Klassen in Java Java 1.0: nur top-level Klassen Seit Java Version 1.1: Innere Klassen Deklaration einer Klasse innerhalb einer anderen Klasse Illustration Eigenschaften Vorteile Anwendungsmöglichkeiten
Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit
Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Aufgabe : Die allgemeine Object-Liste Gegeben sei folgendes UML-Klassendiagramm: MyObjectList
Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen
16:01:59 2017-01-17 1 [35] Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom 01.11.2016: Algebraische Datentypen Christoph Lüth Universität Bremen Wintersemester 2016/17 PI3 WS 16/17
Handout zu Beweistechniken
Handout zu Beweistechniken erstellt vom Lernzentrum Informatik auf Basis von [Kre13],[Bün] Inhaltsverzeichnis 1 Was ist ein Beweis? 2 2 Was ist Vorraussetzung, was ist Behauptung? 2 3 Beweisarten 3 3.1
2.3 Implementierung und Anwendung von ADT Anwendung von ADT... am Beispiel "Stapel"
2.3 Implementierung und Anwendung von ADT 2.3.1 Anwendung von ADT. am Beispiel "Stapel" Ziel Implementierung einer Anwendung ohne Annahmen über die Implementierung der Typen Austauschen der Implementierung
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2016 Patrick Schäfer, Humboldt-Universität zu Berlin Organisation Vorlesung: Montag 11 13 Uhr Marius Kloft RUD 26, 0 115 Mittwoch 11 13 Uhr Marius Kloft
Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Donnerstag den x > 1 3x > 3 3x + 3 > 6 6x + 3 > 3x + 6.
Fachbereich Mathematik Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Donnerstag den 7.9.01 Vorkurs Mathematik WS 01/13 Die mit * gekennzeichneten Aufgaben sind etwas schwerer. Dort braucht
Verkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
12. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty
Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie
Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil
6.1 Natürliche Zahlen. 6. Zahlen. 6.1 Natürliche Zahlen
6. Zahlen Vom lieben Gott gemacht Menschenwerk: operativ oder Klassen äquivalenter Mengen oder axiomatisch (Peano 1889) 6. Zahlen GM 6-1 GM 6- Peano sche Axiome der natürlichen Zahlen Definition 6.1.1:
Informatik I Tutorium WS 07/08
Informatik I Tutorium WS 07/08 Vorlesung: Prof. Dr. F. Bellosa Übungsleitung: Dipl.-Inform. A. Merkel Tutorium: 12 Tutor: Jens Kehne Tutorium 6: Dienstag, 04. Dezember 2007 Agenda des heutigen Tutoriums
Logik für Informatiker
Logik für Informatiker 1. Grundlegende Beweisstrategien: Noethersche Induktion 23.04.2012 Viorica Sofronie-Stokkermans Universität Koblenz-Landau e-mail: [email protected] 1 Letzte Vorlesung 1. Grundlegende
5 Logische Programmierung
5 Logische Programmierung Logik wird als Programmiersprache benutzt Der logische Ansatz zu Programmierung ist (sowie der funktionale) deklarativ; Programme können mit Hilfe zweier abstrakten, maschinen-unabhängigen
Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
2.4 Datenabstraktion und Objektorientierung Datenabstraktion in Programmiersprachen
2.4 Datenabstraktion und Objektorientierung 2.4.1 Datenabstraktion in Programmiersprachen Datenabstraktion: zur Beherrschung von Komplexität unerlässlich. In jeder Programmiersprache kann man gemäß den
2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
Grundkurs Mathematik I
Prof. Dr. H. Brenner Osnabrück WS 2016/2017 Grundkurs Mathematik I Vorlesung 9 In theory, theory and praxis are the same, in praxis they aren t Die Multiplikation auf den natürlichen Zahlen Zur Definition
Brückenkurs Mathematik
Brückenkurs Mathematik 6.10. - 17.10. Vorlesung 1 Logik,, Doris Bohnet Universität Hamburg - Department Mathematik Mo 6.10.2008 Zeitplan Tagesablauf: 9:15-11:45 Vorlesung Audimax I 13:00-14:30 Übung Übungsräume
Vollständige Induktion
Angenommen, wir wollen zeigen, dass eine Aussage P(n) für alle n N wahr ist. Anders ausgedrückt: Es gilt n N : P(n) Hierzu können wir die Technik der vollständigen Induktion verwenden. Wir zeigen, dass
Donnerstag, 11. Dezember 03 Satz 2.2 Der Name Unterraum ist gerechtfertigt, denn jeder Unterraum U von V ist bzgl.
Unterräume und Lineare Hülle 59 3. Unterräume und Lineare Hülle Definition.1 Eine Teilmenge U eines R-Vektorraums V heißt von V, wenn gilt: Unterraum (U 1) 0 U. (U ) U + U U, d.h. x, y U x + y U. (U )
3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt
3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt 1 Kontrollfragen zu Schnittstellen Was bedeutet Orthogonalität / Separation of Concerns?
5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.
Universität Bielefeld AG Praktische Informatik 5. Januar 2015 Themen-Vorschau Module In der Software-Entwicklung unterscheidet zwei Arten von : konkrete beziehen sich auf eine konkrete Repräsentation in
6. Verkettete Strukturen: Listen
6. Verkettete Strukturen: Listen 5 K. Bothe, Inst. f ür Inf., HU Berlin, PI, WS 004/05, III.6 Verkettete Strukturen: Listen 53 Verkettete Listen : Aufgabe Vergleich: Arrays - verkettete Listen Listenarten
Programmieren in Haskell
Programmieren in Haskell Programmiermethodik Programmieren in Haskell 1 Was wir heute machen Spezifikation Strukturelle Rekursion Strukturelle Induktion Programmieren in Haskell 2 Spezifikation sort [8,
Klausur: Java (Liste P)
Klausur: Java (Liste P) SS05 Erlaubte Hilfsmittel: Gebundene! Unterlagen (Skript mit Anmerkungen, eigene Mitschrift) und maximal ein Buch. Bitte keine losen Blätter. Lösung ist auf den Klausurbögen anzufertigen.
Programmieren in Java -Eingangstest-
Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit
3. Übungsbesprechung Programmkonstruktion
3. Übungsbesprechung Programmkonstruktion Karl Gmeiner [email protected] November 16, 2011 K Gmeiner ([email protected]) 3. Übungsbesprechung PK November 16, 2011 1 / 22 Rückblick und
Informatik I. Informatik I Iteration vs. Rekursion. Iteration vs. Rekursion Iteration vs. Rekursion. 20. Iteration vs.
Informatik I 1. Februar 2011 20. Informatik I 20. Jan-Georg Smaus 20.1 Albert-Ludwigs-Universität Freiburg 1. Februar 2011 Jan-Georg Smaus (Universität Freiburg) Informatik I 1. Februar 2011 1 / 31 Jan-Georg
Client-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
