Informatik I/II

February 22, 2018 | Author: Anonymous | Category: Mathematik
Share Embed Donate


Short Description

Download Informatik I/II...

Description

ii

Sonstiges 1.Auflage 1993 Prof. Dr. Kupka 2.Auflage 1994 uberarbeitet ¨ und erweitert von Prof. Dr. Ecker 3.Auflage 1997 uberarbeitet ¨ 4.Auflage 1998 unver¨andert 5.Auflage 1999 uberarbeitet ¨ und erweitert

An dieser Version haben mitgearbeitet:

Informatik I/II Prof. Dr. Kupka Institut f¨ur Informatik Technische Universit¨at Clausthal Wintersemester 1998/99, Sommersemester 1999 5. Auflage Stand 27. September 1999

Patrick Bothe Torsten Erkens Martin Herzog Oliver Kr¨uger Stephanie M¨uller Ulrike Bostelmann Ralf Wolters Silke Schomann Andrea Skala Eva Blunk Katrin Baptist Michael Skubowius Sven Witting Alexander Neid Robert Heine Stephan M¨uhling Florian Rilke Michael David

INHALTSVERZEICHNIS

iv

2.5

Inhaltsverzeichnis

2.6

1 Die Entwicklung der Informatik 1 1.1 Historische Wurzeln . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 Verfahren unabh¨angig von inhaltlichen Beziehungen . . . 1 1.1.2 Das 17. Jahrhundert: mechanische Automaten und Mechanisierung des Rechnens . . . . . . . . . . . . . . . . . 2 1.1.3 Ab Mitte des 19. Jahrhunderts: Mechanisierung des logischen Denkens, Verkn¨upfung von Philosophie, Logik, Mathematik und Sprachwissenschaft . . . . . . . . . . . . 2 1.2 Die technologische Entwicklung . . . . . . . . . . . . . . . . . . 4 1.3 Die Entwicklung der Programmierung . . . . . . . . . . . . . . . 7 1.3.1 1. Phase: Entwicklung der Grundtechniken . . . . . . . . 8 1.3.2 2. Phase: Theoretische Fundierung . . . . . . . . . . . . . 9 1.3.3 3. Phase: R¨uckbesinnung auf die Praxis . . . . . . . . . . 9 1.3.4 4. Phase Paradigmen . . . . . . . . . . . . . . . . . . . . 10 1.4 Anwendungen der Informatik . . . . . . . . . . . . . . . . . . . 11 1.5 Informatik als Wissenschaft . . . . . . . . . . . . . . . . . . . . . 12 2 Elementare Modellbildung 2.1 Einf¨uhrung . . . . . . . . . . . . . 2.2 Mengen . . . . . . . . . . . . . . . 2.3 Relationen und Funktionen . . . . . 2.3.1 Cartesisches Produkt . . . . 2.3.2 Relationen . . . . . . . . . 2.3.3 Ordnungsrelationen . . . . . 2.3.4 Operationen auf Relationen 2.3.5 Funktionen . . . . . . . . . 2.3.6 Operationen auf Funktionen 2.3.7 Darstellung von Funktionen ¨ 2.3.8 Aquivalenzrelationen . . . . 2.3.9 Darstellung von Relationen . 2.4 Beweistechniken . . . . . . . . . . iii

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

15 15 17 23 23 24 25 26 26 27 28 32 32 34

2.7 2.8 3

4

2.4.1 Widerspruchsbeweis . . . . . . . . . . . . . . . . . . . . 2.4.2 Beweis nach dem Prinzip der vollst¨andigen Induktion . . . Werte, Variable und Terme . . . . . . . . . . . . . . . . . . . . . 2.5.1 Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.3 Terme . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aussagenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Boolesche Funktionen . . . . . . . . . . . . . . . . . . . 2.6.2 Aussagenlogische Formeln . . . . . . . . . . . . . . . . . 2.6.3 Konjunktive und disjunktive Normalform . . . . . . . . . 2.6.4 Schaltungstechnik . . . . . . . . . . . . . . . . . . . . . 2.6.5 Aussagenkalk¨ul . . . . . . . . . . . . . . . . . . . . . . . 2.6.6 Die Methode der Wahrheitstafeln . . . . . . . . . . . . . 2.6.7 Der Wang-Algorithmus . . . . . . . . . . . . . . . . . . . 2.6.8 Das Resolutionsverfahren im Aussagenkalk¨ul . . . . . . . Pr¨adikatenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . Fuzzy-Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Prozesse und Systeme 3.1 Prozesse und Ablaufpl¨ane . . . . . . . . . . . 3.1.1 Diskrete Prozesse . . . . . . . . . . . 3.1.2 Sequentielle Prozesse . . . . . . . . . 3.1.3 Syntax-Diagramme . . . . . . . . . . 3.1.4 Der Backus-Naur-Formalismus (BNF) 3.1.5 Grammatik . . . . . . . . . . . . . . 3.1.6 Regul¨are Ausdr¨ucke . . . . . . . . . 3.2 Endliche Automaten . . . . . . . . . . . . . 3.3 Graphen . . . . . . . . . . . . . . . . . . . . 3.3.1 Einf¨uhrende Beispiele . . . . . . . . 3.3.2 Ungerichtete und gerichtete Graphen 3.4 Petri-Netze . . . . . . . . . . . . . . . . . . 3.5 Dynamische Systeme . . . . . . . . . . . . .

34 34 35 35 36 37 39 40 43 46 50 53 56 56 58 61 67

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

69 69 70 71 72 73 74 77 79 84 84 86 93 111

Problemstrukturen und Problemsolving 4.1 Problembeschreibung und Spezifikation . . . . . . . . . . . . 4.1.1 Anforderungen an die Problembeschreibung . . . . . . 4.1.2 Notation in einer formalen Spezifikationssprache . . . 4.1.3 Formale Spezifikation, Datenspezifikation, Constraint 4.1.4 Einzelprobleme, Problemklassen, Probleminstanzen . 4.2 Problemarten und Darstellung von Problemen . . . . . . . . . 4.3 Techniken und Strategien des Probleml¨osens . . . . . . . . . .

. . . . . . .

. . . . . . .

113 114 114 116 116 117 118 122

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

INHALTSVERZEICHNIS

4.4

v

4.3.1 Die analytische Vorgehensweise . . 4.3.2 Die algorithmische Vorgehensweise 4.3.3 Die heuristische Vorgehensweise . . 4.3.4 Allgemeine Strategien . . . . . . . Softcomputing-Ans¨atze des Problemsolving 4.4.1 Fuzzy-Technik . . . . . . . . . . . 4.4.2 Neuronale Netze . . . . . . . . . . 4.4.3 Evolution¨are Verfahren . . . . . . . 4.4.4 Simulated Annealing . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

123 124 125 126 126 127 127 128 129

7.3.1 7.3.2 7.3.3 8

5 Algorithmen und Programmierung 131 ¨ 5.1 Ubersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 5.2 Der Algorithmusbegriff . . . . . . . . . . . . . . . . . . . . . . . 132 5.3 Nichtdeterministische Algorithmen . . . . . . . . . . . . . . . . . 134 5.4 Programmierparadigmen und Programmierstile . . . . . . . . . . 138 5.4.1 Das Paradigma der imperativen Programmierung . . . . . 138 5.4.2 Das Paradigma der funktionalen Programmierung . . . . . 143 5.4.3 Das Paradigma der regelbasierten Programmierung . . . . 146 5.4.4 Das Paradigma der logikorientierten Programmierung . . 148 5.4.5 Das Paradigma der objektorientierten Programmierung . . 149 5.5 Grundkonzepte der Programmierung . . . . . . . . . . . . . . . . 150 5.5.1 Zielsetzungen bei der Programmierung . . . . . . . . . . 150 5.5.2 Das Konzept der virtuellen Maschine . . . . . . . . . . . 151 5.5.3 Unterprogrammtechnik . . . . . . . . . . . . . . . . . . . 152 5.5.4 Variable Kontexte und Deklarationen . . . . . . . . . . . 154 6 Information und Nachricht 6.1 Information, Daten und Nachrichten . . . . . . . 6.1.1 Diskretisierung . . . . . . . . . . . . . . 6.1.2 Quantelung . . . . . . . . . . . . . . . . 6.2 Codes und Codierung . . . . . . . . . . . . . . . 6.3 Ein Einblick in die Codierungstheorie . . . . . . 6.4 Huffman-Codierung und arithmetische Codierung

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

157 157 161 163 163 169 173

7 Die Von-Neumann-Maschine 7.1 Das grundlegende Konzept . . . . . 7.1.1 Struktur des Speichers . . . 7.1.2 Struktur des Rechenwerks . 7.1.3 Struktur des Leitwerks . . . 7.2 Maschinennahe Programmierung . . 7.3 Darstellung von Zahlen im Rechner

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

175 175 178 180 181 182 186

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

INHALTSVERZEICHNIS

vi

9

Nichtnegative ganze Zahlen . . . . . . . . . . . . . . . . 186 Vorzeichenbehaftete ganze Zahlen . . . . . . . . . . . . . 187 Rationale Zahlen und Gleitpunktdarstellung . . . . . . . . 189

Datenstrukturen 8.1 Von Datentypen zu Datenstrukturen . . . . . . . 8.2 Elementare Datenstrukturen . . . . . . . . . . . 8.2.1 Boolean . . . . . . . . . . . . . . . . . . 8.2.2 Character . . . . . . . . . . . . . . . . . 8.2.3 Integer . . . . . . . . . . . . . . . . . . 8.2.4 Natural . . . . . . . . . . . . . . . . . . 8.2.5 Rational . . . . . . . . . . . . . . . . . . 8.2.6 Real . . . . . . . . . . . . . . . . . . . . 8.2.7 Aufz¨ahlungstyp . . . . . . . . . . . . . . 8.2.8 Unterbereichstyp . . . . . . . . . . . . . 8.3 Zusammengesetzte Datenstrukturen . . . . . . . 8.3.1 String . . . . . . . . . . . . . . . . . . . 8.3.2 Feld . . . . . . . . . . . . . . . . . . . . 8.3.3 Verbund . . . . . . . . . . . . . . . . . . 8.3.4 Vereinigung . . . . . . . . . . . . . . . . 8.4 Die Speicherstrukturen Stack, Queue und Deque . 8.5 Listen, Mengen und Hash-Tabellen . . . . . . . . 8.6 Rekursive Datenstrukturen und Zeiger . . . . . . 8.6.1 Symbolische Ausdr¨ucke von LISP . . . . 8.6.2 Arithmetische B¨aume . . . . . . . . . . . 8.6.3 Der Stack als rekursive Datenstruktur . . 8.6.4 Zeiger . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

195 195 198 198 200 200 201 201 201 202 203 203 203 204 205 206 206 208 211 211 213 214 215

Kontrollstrukturen 217 ¨ 9.1 Ubersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 9.2 Unterprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . 217

10 Programmiersprachen 10.1 Allgemeine Bemerkungen zu Programmiersprachen . 10.1.1 Syntax, Semantik und Pragmatik . . . . . . . 10.1.2 Merkmale und Auspr¨agungen . . . . . . . . 10.2 Funktionale Programmierung . . . . . . . . . . . . . ¨ 10.2.1 Ubersicht . . . . . . . . . . . . . . . . . . . 10.2.2 APL . . . . . . . . . . . . . . . . . . . . . . 11 Literatur zu Informatik I und II

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

219 . 219 . 219 . 220 . 222 . 222 . 222 229

2

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

1.1.2 Das 17. Jahrhundert: mechanische Automaten und Mechanisierung des Rechnens 1623

Kapitel 1

Wilhelm Schickard (Math. und Astronom), T¨ubingen, erste bekannte Rechenmaschine, zahnradgesteuert, 6 Stellen

1641

Blaise Pascal (Phil., Math. und Physiker), Paris, erste noch erhaltene Rechenmaschine f¨ur 6-stellige Addition

Die Entwicklung der Informatik

1674

Gottfried Wilhelm von Leibniz (Phil., Math. und Jurist), Multiplikation und Division auf (konstruierter Rechenmaschine, Gleitschlitten, Staffelwalze

1.1 Historische Wurzeln

1679

Leibniz: bin¨ares Zahlsystem

1774

Philipp Matth¨aus Hahn (Pfarrer) l¨aßt Rechenmaschinen in Serie bauen

1822

Charles Babbage (engl. Math., Techniker und Org.) entwirft seine ’Difference Engine’, eine 3-stufige, 6-stellige Addiermaschine zur Berechnung von Funktionswerten

1833

Babbage entwirft ’Analytical Engine’, lochkartenprogrammiert, seine ’Programmiererin’: Ada Augusta, Countess of Lovelace ! Universalit¨at des Computers

1886

Hermann Hollerith (amer. Bergwerksing.), Lochkartenmaschine f¨ur 11. amer. Volksz¨ahlung 1880: 500 Helfer / 7 Jahre 1890: 43 Maschinen und Helfer / 4 Wochen — 1896: Hollerith gr¨undet die Firma Tabulating Machine Company 1911: Firmenverkauf, Firma wird Vorl¨aufer der IBM (1924)

 

Hilfsmittel zum Rechnen systematische Vorgehensweisen

¨ 1800 v. Chr. Gebrauch von Rechenbrettern (Abakus in Agypten) ¨ 1700 v. Chr. Papyrus Rhind, Agypten, enth¨alt die a¨ ltesten Rechenaufgaben 400 v. Chr. Griechen und Perser rechnen mit dem Abakus 300 v. Chr. Euklid (griech. Math.) beschreibt in ’Elemente’ mathematische Verfahren, ! Euklidischer Algorithmus 500 n. Chr. In Indien wird das Dezimalsystem erfunden

1.1.1 Verfahren unabh¨angig von inhaltlichen Beziehungen

1.1.3 Ab Mitte des 19. Jahrhunderts: Mechanisierung des logischen Denkens, Verknupfung ¨ von Philosophie, Logik, Mathematik und Sprachwissenschaft

820 n. Chr. Al-Chowarizmi (persischer Math. und Astronom) schreibt ein Buch u¨ ber Algebra (nach Titel des Buches) ! ’Algorithmus’ 1202 n. Chr. Leonardo von Pisa, genannt Fibonacci, beschreibt in ’liber abaci’ indische, arabische und eigene Rechenmethoden 1524 n. Chr. Adam Riese ver¨offentlicht Rechenbuch, dezimal 1

1847

George Boole (engl. Math. und Logiker 1815-1864) beschreibt den Zusammenhang zwischen Logik und Algebra: ’The mathematical analysis of logic, beeing an essay towards a calculus of deductive reasoning’

1.1. HISTORISCHE WURZELN 1879

3

Gottlob Frege (deutsch. Math. 1848-1918) legt Grundlage f¨ur moderne Logik: ’Begriffsschrift, eine der arithmetischen nachgebildete Formelsprache des reinen Denkens’

1889

Guiseppe Peano (ital. Math. 1858-1932) schreibt ’Aritnetices Principia’

1913

A. N. Whitehead (1861-1947) und Bertrand Russell (1872-1970, Lit.-Nobelpreis), Grundlagenwerk f¨ur Mathematik und Logik: ’Principia Mathematica’

1928

David Hilbert und W. Ackermann: ’Grundz¨uge der theoretischen Logik’

1934

¨ Jacques Herbrand (franz. Philosoph) und Kurt G¨odel (Osterr. Math. 1906-1978) entwickeln einen mathematischen Funktionsbegriff, der die prinzipelle Leistungsf¨ahigkeit von Rechenmaschinen repr¨asentiert: ’allgemein-rekursive Funktion’

1936

Alan M. Turing (engl. Math. 1912-1954) entwickelt ein abstraktes Modell zur Untersuchung von Fragen u¨ ber die Berechenbarkeit: Turing-Maschine

1936

Alonzo Church (amer. Math. geb. 1903) entwickelt den LambdaKalk¨ul als universelles Berechenbarkeitsmodell, Church’sche These: alle denkbaren Maschinenmodelle beschreiben die gleiche Leistung

1938

S. C. Kleene (engl. Math.) definiert partiell-rekursive Funktionen, welche die Leistungsf¨ahigkeit von Computer exakt beschreiben

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

4

1.2 Die technologische Entwicklung Unmittelbar im Anschluß an die theoretischen Entdeckungen begann die Entwicklung und Inbetriebnahme der voll funktionsf¨ahigen, programmierbaren, universellen Rechenmaschinen – der Computer im heutigen Sprachgebrauch. 1938 Konrad Zuse, Bauingenieur, Erfinder und Unternehmer (*1910), stellt einen mechanischen Rechner mit Bin¨artechnik fertig – die Z1. 1939 Es folgt die Z2 mit elektromechanischem Rechenwerk mit ca. 200 Relais. 1941 Zuses Z3 wird fertig, die erste voll arbeitsf¨ahige, programmgesteuerte Rechenmaschine. Sie wird in der Deutschen Forschungs- und Versuchsanstalt f¨ur Luft- und Raumfahrttechnik (DFVLR) eingesetzt. Einige Daten:

     

Rechenwerk: 600 Relais, 2 parallele arithmetische Einheiten f¨ur Exponent und Mantisse. Speicher: 1400 Relais f¨ur 64 Worte mit je 22 Bit, Zahlendarstellung halblogarithmisch mit einem Bit Vorzeichen, 7 Bit Exponent und 14 Bit Mantisse. Programmsteuerung: 8-Kanal Lochstreifen. Eingabe: spezielle Tastatur. Ausgabe: Resultatanzeige auf Lampenreihen. Multiplikationszeit: 3 Sekunden.

Das Original der Z3 verbrannte 1944 in Berlin. Ein Nachbau steht im Deutschen Museum in M¨unchen. 1944 Howard Hathaway Aiken, amerikanischer Mathematiker (1900–1973), baut mit der Unterst¨utzung von IBM den Großrechner Mark I: 15m lang, 2.5m hoch und 35t schwer. Einige Daten:

  

Relaistechnik, 60 Read-Only-Register, manuell einstellbar. 72 Read-Write-Register f¨ur 23-dezimalstellige Zahlen. Mutiplikationszeit: 6 Sekunden.

1945 Konrad Zuse baut die Z4, die bis 1959 in Betrieb ist.

1.2. DIE TECHNOLOGISCHE ENTWICKLUNG

5

1945 John von Neumann, ungarisch amerikanischer Mathematiker, entwickelt ein grundlegendes Konzept f¨ur programmierbare Rechner, welches bis heute tragendes Konzept geblieben ist. 1946 J. P. Eckert und J. W. Manchly bauen die ENIAC, die erste elektronische Rechenmaschine. Sie hat 18000 R¨ohren und eine Multiplikationszeit von 3ms. 1949 Der Engl¨ander M. V. Wilkes baut mit der EDSAC den ersten praktisch verwendbaren Rechner nach dem von-Neumann-Konzept. Einige Daten:

 

3000 R¨ohren. Speicher: 512 35-Bit-Worte.

Die weitere Entwicklung ist durch gewaltige technische Verbesserungen und durch folgenschwere Erfindungen im Bereich der Programmierung gekennzeichnet.

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

6



Die Taktzeit unterschreitet 50 Nanosekunden (10;9 sec).

1977 Hochintegrierte Schaltkreise treiben die Miniaturisierung weiter. Es entstehen die Mikroprozessoren, die das gesamte Rechenwerk auf einem Chip enthalten. 1977 Der Mikroprozessor Z 80 wird herausgebracht, neben a¨ hnlichen Mikroprozessoren, charakterisiert durch 8 bit Wortbreite, 7000 Transistoren integriert, 1 MIPS (Million Instruktionen pro Sekunde) 1985 Es entstehen die Mikroprozessoren 80386 (Intel) und a¨ hnliche: 32 bit Wortbreite, 10 hoch 5 Transistoren integriert, 10 MIPS Die Halbleitertechnologie entwickelt sich exponentiell: Etwa alle 5 Jahre vervierfacht sich die Anzahl der Transistorfunktionen pro Chip. Auch die Verarbeitungsgeschwindigkeit w¨achst exponentiell. 1996 Der Mikroprozessor Pentium (und a¨ hnliche) tritt auf den Markt: 4 mal 10 hoch 6 Transistorfunktionen, 200 MIPS Parallel zur Chip- und Prozessortechnologie entwickelt sich das Internet.

1955 Die Elektronenr¨ohre wird durch den Transistor abgel¨ost. Dies f¨uhrt zur 2. Computergeneration mit kleineren und schnelleren Rechnern. Taktzeiten von 1–10 µsec werden realisiert. Die Speichergr¨oße steigt in den Bereich einiger Tausend. 1958 Mit FORTRAN beginnt die Verbreitung der h¨oheren Programmiersprachen. Es folgen ALGOL und COBOL. 1962 Die Miniaturisierung der Transistoren f¨uhrt zur 3. Computergeneration.

  

SSI: small scale integration: bis 50 Transistoren pro Chip. MSI: medium scale integration: 50–500 Transistoren pro Chip. Es wird eine Taktzeit von 0.1–1 µsec erreicht.

1969 Das Forschungsnetz ARPANET wird in der US Defense Advanced Researech Project Agency (DARPA) eingef¨uhrt 1983 der 1. Januar 1983 gilt als Geburtsstunde des Internet: es erfolgt die Einf¨uhrung des Protokollstandards TCP/IP f¨ur ARPANET und es entstehen die Netzwerkdienste Telnet, E-mail und FTP Es bedeuten

   

TCP: Transmission Control Protocol IP: Internet Protocol Telnet: Dienst f¨ur Terminal-Verbindungen zu entfernten Rechnern ¨ FTP: Dienst f¨ur Datei-Ubertragungen

1965 Die Entwicklung von BASIC o¨ ffnet f¨ur Laien den Zugang zur Programmierung. Es entwickeln sich Techniken des Compilerbaus und der Betriebssysteme.

1986 Es erfolgt die u¨ berregionale Ausdehnung des Netzes, 1988 Kanada, 1989 Deutschland

1968 Es entstehen hochintegrierte Halbleiterschaltungen. Sie bilden die Grundlage der 4. Computergeneration.

¨ 1991 Der Internetdienst Gopher f¨ur die Ubertragung von Text, Bild, Ton etc. wird eingef¨uhrt

 

LSI: large scale integration: 500–2500 Transistoren pro Chip. VLSI: very large scale integration: u¨ ber 2500 Transistoren pro Chip.

1993 Das Internet breitet sich in allen Bereichen aus Die Anzahl der Netzknoten verdoppelt sich alle 12 bis 15 Monate.

1.3. DIE ENTWICKLUNG DER PROGRAMMIERUNG

7

1996 Das Netz besitzt 13 mal 10 hoch 6 Knoten, in Europa 3 mal 10 hoch 6 Knoten 1996 Die Internet-Programmiersprache JAVA wird eingef¨uhrt.

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

8

1.3.1 1. Phase: Entwicklung der Grundtechniken Zeitraum: 50’er-Jahre bis fr¨uhe 60’er-Jahre.



Generell gilt f¨ur die Entwickling seit den 80’er Jahren:

     

Weitere Steigerung der Verarbeitungsgeschwindigkeit. Verringerung der r¨aumlichen Abmessungen (ULSI: ultra large scale integration). Verbilligung und Massenproduktion. Fortschreitende Vernetzung der Computer: globale Verbindungen, extrem ¨ hohe Ubertragungsraten bei der Verwendung von Lichtleitfasern. Anpassung der Endger¨atetechnik an die sensorischen F¨ahigkeiten der Menschen. Entwicklung von Vektorrechnern und Multiprozessorsystemen

1.3 Die Entwicklung der Programmierung Die technologische Entwicklung er¨offnete eine Vielzahl von M¨oglichkeiten, die Universalit¨at des Computers auszunutzen. Hierzu geh¨oren:

  



die Behandlung von Programmen als Daten. Programme k¨onnen vom Computer umgeformt, ubersetzt, ¨ optimiert und sogar aus Beschreibungen hergeleitet werden.

  

Wir unterteilen die Zeit der Entwicklung der Programmierung in folgende Phasen ein:

Einf¨uhrung der symbolischen Maschinensprache: Unterscheidung von internem Code (bin¨ar oder hexadezimal) und einem externen Code, der mnemotechnisch aufgebaut ist (z. B. ADD f¨ur Additionsbefehl). Entstehen des ersten Assemblers. Zusammenf¨ugen der Zielprogramme unter Anwendung von Symboltabellen und Makrotechnik. Entstehen der ersten h¨oheren Programmiersprachen; die sogenante erste Generation h¨oherer Programmiersprachen.

1954–57 entsteht bei IBM die Sprache FORTRAN (Formula Translation), definiert durch J. W. Backus. FORTRAN wird f¨ur lange Zeit die wichtigste Sprache f¨ur technisch wissenschaftliche Anwendungen und wird auch heute noch gebraucht und erweitert. 1959–60 entsteht durch ein internationales Autorengremium die Sprache ALGOL, (algorithmic language). Zugleich wird f¨ur die exakte Beschreibung der Backus-Naur-Formalismus eingef¨uhrt. ALGOL wird zum Grundmodell f¨ur allgemeine Betrachtungen der Programmierung. Erst die Nachfolger von ALGOL erfahren gr¨oßere praktische Bedeutung. 1960

wird COBOL (common business oriented language) definiert, ebenfalls durch eine internationale Organisation. Die Sprache ist geeignet f¨ur Anwendungen mit vielen einfachstruktuierten Daten und einfachen Verarbeitungsprozeduren. Im kommerziellen Bereich ist COBOL immer noch die am weitesten verbreitete Sprache.

1962

wird von K. E. Iversan die Sprache APL (a programming language) vorgestellt. Sp¨ater wird sie von IBM als APL/60 verbreitet. Sie ist eine Dialogsprache, welche direkt interpretiert wird. Ihre von der Mathematik entlehnten Konstruktionen wurden 20 Jahre sp¨ater zum Vorbild f¨ur die sogenannten funktionalen Sprachen.

die Simulation eines Computers auf einem anderen und die Simulation einer Sprache in einer anderen. die Umformung in beliebige Datenformen wie Zeichenfolgen, Zahlenfolgen, Bitfolgen, Bild-Matrizen usw.

Entstehung von Macros und der Makro-Technik: Abk¨urzung von Befehlsfolgen durch Pseudobefehle, Abarbeitung erfolgt durch Einsetzen.

1.3. DIE ENTWICKLUNG DER PROGRAMMIERUNG

9

1962

entsteht BASIC (beginners all purpose symbolic instruction code), eine weitere einfache Programmier- und Dialogsprache.

1962

entsteht mit LISP (List processing language) von John McCarthy die erste Sprache der K¨unstlichen Intelligenz“. Die einzige Datenstruktur ” in LISP ist die Liste. LISP ist die erste voll funktionale Sprache.

10

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

1971 wird die Sprache PASCAL von N. Wirth vorgestellt. Sie korrigiert die u¨ bertriebenen theoretischen Ans¨atze von ALGOL68, realisiert Ideen des strukturierten Programmierens und ist f¨ur die Lehre konzipiert. 1978 erfolgt die Verbreitung der Sprache C“ von Kernigham und Ritchie. Die ” Sprache ist eng mit dem Betriebssystem UNIX verbunden und erlaubt eine maschinennahe Programmierung, obwohl es sich um eine h¨ohere Sprache handelt. C wird zu einer wichtigen Implementationssprache.

1.3.2 2. Phase: Theoretische Fundierung Zeitraum: sp¨ate 60’er Jahre Theoretische Erforschung der M¨oglichkeiten der Definition von Sprachen durch ¨ Grammatiken und der Ubersetzung von Sprachen durch Compiler. Konstruktion von Programmiersprachen mit universellem Anspruch: die zweite Generation h¨oherer Programmiersprachen. 1965 entsteht PL/I (programming language I) bei IBM, im wesentlichen durch Zusammenbringen und Verallgemeinerung von Konzepten aus FORTRAN, ALGOL und COBOL. PL/I erreicht eine sehr weite Verbreitung, wurde meist jedoch nur teilweise implementiert (Implementation sogenannter Subsets). PL/I ist auch die erste Sprache, deren inhaltliche Bedeutung, die Semantik, exakt formal beschrieben wird. Hierzu entwickelt das Wiener IBM-Labor unter H. Zemanek die Vienna-Definition-Language (VDL).

1.3.4

Es kommt die Erkenntnis zum Durchbruch, daß g¨anzlich andere Programmiervorstellungen zur Programmierung ebenfalls geeignet sind. 1978

verk¨undet J. W. Backus in seiner ber¨uhmten Turing Award Lecture“, ” daß fast alle bisherigen Programmiersprachen, die sogenannten vonNeumann-Sprachen, eigentlich maschinennahe Sprachen sind, und daß wirklich maschinenunabh¨angige Konzepte, wie man sie z. B. in LISP findet, n¨otig sind.

1980

erscheint ein Aufsatz von R. Kowalski mit dem Titel Algorithm = Lo” gic + Control“. Hierin wird daf¨ur pl¨adiert, die Ausf¨uhrungskontrolle aus Algorithmen so weit wie m¨oglich herauszuhalten. Damit wird unter anderem die Programmierung in PROLOG begr¨undet.

1980

wird die bisher letzte große Programmiersprache des von-NeumannPrinzips, ADA (ein Pascal Nachfolger) benannt nach Ada Augusta, der ersten Programmiererin, vorgestellt.

1967 Auf ALGOL60 aufbauend entsteht SIMULA67, eine Simulationssprache. 1968 wird durch eine Arbeitsgruppe der IFIP (International Federation of Information Processing) die Sprache ALGOL68 vorgestellt. Die Sprache besitzt ein perfektes theoretisches Konzept, wurde aber zu sp¨at implementiert und konnte daher nicht in die Praxis eindringen.

4. Phase: Aufkommen der programmiersprachlichen Paradigmen

ab 1980 erscheinen in weiterer Verbreitung: Beginn der systematischen Software-Technologie und Aufkommen des structural ” programming“. 1968/69 fanden zwei wichtige NATO-Tagung zu dem Thema statt. Wichtige Ideen stammen von C. A. R. Hoare und E. W. Dijkstra.

PROLOG (programming in logic) wird zur zweiten wichtigen Sprache der k¨unstlichen Intelligenz (KI). FP (funktional programming) begr¨undet die neueren funktionalen Sprachen.

1.3.3 3. Phase: Ruckbesinnung ¨ auf die Praxis Zeitraum: 70’er Jahre. Es entstehen wieder engere Sprachkonzepte mit weniger universellem Anspruch, aber mit besseren Realisierungsm¨oglichkeiten. Die Softwaretechnologie wird weiterentwickelt, haupts¨achlich das Modulkonzept.

MIRANDA, HOPE und andere funktionale Sprachen entstehen und verbreiten sich. SMALLTALK wird zur ersten objektorientierten Sprache. 1992

Bertrand Meyer entwickelt die objektorientierte Sprache EIFFEL.

1.4. ANWENDUNGEN DER INFORMATIK 1996

11

Auf C und der objektorientierten Erweiterung C++ setzt die Internetsprache JAVA auf.

Weitere Einfl¨usse auf die Programmierung ergeben sich durch:

   

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

12

¨ zu 3.) Die Kommunikationsleistung des Computers hat sehr große Ahnlichkeit mit der des Menschen, findet aber in streng geregelten Bahnen statt. Sowohl Computer untereinander als auch Computer und Menschen k¨onnen miteinander im Dialog Informationen austauschen. Hier sind einige wichtige Anwendungen:

Vordringen von Architekturen mit Parallelverarbeitung.



Entwicklung von Datenbanken und Grafik-Anwendungen wie CAD (Computer-Aided-Design). Entstehen der Multimediatechnik. Problemangepaßte Sprachen mit sehr leistungsf¨ahigen Ausdrucksmitteln



1.4 Anwendungen der Informatik Die Anwendungsm¨oglichkeiten der Informatik h¨angen von den stungsm¨oglichkeiten des Computers ab. Wir m¨ussen dabei unterscheiden:



Lei-



1. die Informationsverarbeitungsleistung des Computers, 2. die Speicherleistung des Computers und



3. die Kommunikationsleistung des Computers. zu 1.) Die Informationsverarbeitungsleistung bezieht sich auf die Rechenleistung im engeren und im weiteren Sinn: sie kann dabei folgende Formen annehmen, die ineinander u¨ berf¨uhrt werden k¨onnen:

   

Informationsverarbeitung auf Zahlen: Rechnen. Informationsverarbeitung auf Texten: Textverarbeitung. Informationsverarbeitung auf Bildmatrizen: Bildverarbeitung. Informationsverarbeitung auf logische Aussagen: Automatische Deduktion in der KI.



Datenbanken und Systeme des Information Retrieval (InformationsWiedergewinnung): Anwendungen in Staat, Verwaltung sowie im kommerziellen, technischen und wissenschaftlichen Bereich. Computergraphik: Wiedergabe von Meßwerten, Entwurf von Konstruktionszeichnungen, Kartographie. Bildverarbeitung: Komplexe Meßwerterfassung, automatisches Sehen; Anwendungen in der Medizin und in der Technik. Prozeßautomatisierung und Robotik: Hier geht es um die Automatisierung von chemischen bzw. technischen Produktionsprozessen. Simulation: Die Simulation dient der Gewinnung von Erfahrungen und Vorhersagen durch Experimente, die nach denselben Regeln wie in der Realit¨at im Rechner ablaufen. Expertensysteme: Sie halten Expertenwissen großen Umfangs verf¨ugbar und k¨onnen dieses mit Hilfe von Methoden des Wissensverarbeitung auf Probleme anwenden. Wichtigste Beispiele sind die Diagnosesysteme in Medizin und Technik, die aus Symptomen sehr pr¨azise auf die Ursachen schließen k¨onnen.

1.5 Informatik als Wissenschaft

Beim Menschen entspricht das Denken dieser Computerleistung. zu 2.) Die Speicherleistung bezieht sich auf die M¨oglichkeit, große Datenmengen zu speichern und geordnet zu verwalten, so daß auf die darin enthaltenen Informationen gezielt zugegriffen werden kann. Eine Analogie beim Menschen ist das Ged¨achtnis.

Begreift man Informatik als Wissenschaft von Computern, wie das angloamerikanische Wort Computer Science“ nahe legt, so kann man sich schon fra” gen, wie die Besch¨aftigung mit einem vom Menschen geschaffenen Ger¨at eine Wissenschaft ergeben kann. Es gibt ja nicht einmal eine Wissenschaft vom Auto. Nun ist aber der Computer, der Gegenstand der Informatik ist, eine viel abstraktere

1.5. INFORMATIK ALS WISSENSCHAFT

13

und grunds¨atzlichere Angelegenheit als der real k¨aufliche Computer. Bei der abstrakten Computeridee geht es beispielsweise um die M¨oglichkeiten des Vorwegplanens aller realisierbaren Aktivit¨aten, um die Aussch¨opfung von Informationen und um die Gestaltung beliebiger Kommunikation. In wenigen Jahrzehnten hat die Informatik außer datentechnischen Entwicklungen auch eine stattliche Anzahl geistig-theoretischer Leistungen hervorgebracht:

14

KAPITEL 1. DIE ENTWICKLUNG DER INFORMATIK

Theoretische Informatik Automatentheorie, Theorie der Berechenbarkeit, Algorithmentheorie, Theorie der Programmierung, Theorie der Wissensverarbeitung,

Theorie formaler Sprachen Komplexit¨atstheorie, Formale Semantik, Theorie der Systeme und Prozesse, Informations- und Codierungstheorie.

Praktische Informatik

  

Die exakte Erfassung aller mit Computern l¨osbaren Aufgaben (Berechenbarkeit),

die Entdeckung konkreter, nicht auf Computern l¨osbarer Aufgaben (Unberechenbarkeit),

die Aufdeckung der Gleichwertigkeit aller prinzipiellen Maschinenkonzepte (Churchsche These),

Datenstrukturen Programmier- und Dialogsprachen, Betriebssysteme, Mensch-Maschine-Kommunikation,

Algorithmen, ¨ Ubersetzer, Softwaretechnik, Multi-Media-Systeme.

Angewandte Informatik Informationssysteme, Computergraphik, Bildverarbeitung, Robotik, Wissensverarbeitung, Simulation, Textverarbeitung und B¨uro-Automation Prozeßautomatisierung.

Technische Informatik

  

das Auffinden des Zusammenhang zwischen Grammatiken (Sprachdefiniti¨ on) und Automaten (Ubersetzung) (Chomsky-Hierarchie),

die pr¨azise Absch¨atzungen f¨ur Zeit- und Speicheraufwand von Programmen (Komplexit¨at) und

die Entwicklung von Verfahren, um die Korrektheit von Programmen sicherzustellen (Programmverifikation).

Gegenstand der Informatik ist die Verarbeitung von Informationen und alles, was damit in engerem Zusammenhang steht. Ihr zentraler Begriff ist nicht der der Information, sondern der des Algorithmus. Wir unterteilen die Informatik in Theoretische, Praktische, Angewandte und Technische Informatik.

Schaltnetze, Schaltwerke, Peripherieger¨ate, Hardware-Entwurfstechniken, Rechnerorganisation,´

Prozessoren, Mikroprogrammierung, Rechnerarchitektur, Rechnernetze.

Die Informatik steht in enger Beziehung zu vielen anderen Wissenschaften. Die folgende Liste nennt jeweils den Gegenstand gemeinsamen Interesses: Mathematik Physik Maschinenbau Nachrichtentechnik Sprachwissenschaft Psychologie, Physiologie Gesellschaftswissenschaft Wirtschaftswissenschaft

Strukturen Prozesse Steuerung, Datenbanken und Graphik Daten Sprache Wahrnehmung Kommunikation Organisation

KAPITEL 2. ELEMENTARE MODELLBILDUNG

16

Die Position einer Dame ist ein Wertepaar hx; yi. Um 8 Damen zu unterscheiden, f¨uhren f¨ur wir 8 Wertepaare

hx1 y1i hx2 y2i  hx8 y8i ;

;

;

;

;

;

ein, abgek¨urzt:

Kapitel 2

hxi yii i = 1 2 ;

;

;

; : : :;

8:

Die Bedrohungen lassen sich so ausdr¨ucken:

Elementare Modellbildung

a) Die Damen zu den Nummern i; j ,i 6= j, liegen in derselben Zeile: yi = y j . b) Sie liegen in derselben Spalte: xi = x j .

Wenn eine Aufgabe mit dem Computer gel¨ost werden soll, so braucht man ein genaues Modell von allen Zusammenh¨angen, die f¨ur die Aufgabe von Bedeutung sind. Hierzu betrachten wir

  

mathematische Hilfsmittel: Mengen, Funktionen, Relationen, Beweistechniken, Grundelemente von Berechnungen: Werte, Variable, Terme, sowie Modelle zur logischen Pr¨azisierung von Sachverhalten: Aussagenlogik, Pr¨adikatenlogik.

Zur Veranschaulichung beginnen wir mit einem konkreten Problem als Beispiel.

2.1 Einfuhrung ¨ Wir betrachten das 8-Damen-Problem: 8 Damen sind auf einem Spielbrett aus ” 8  8 Feldern so zu positionieren, daß keine eine andere bedroht.“ Alle Begriffe m¨ussen nun exakt modelliert werden: Das Spielbrett wird durch seine Koordinaten x; y 2 f1; 2; 3; 4; 5; 6; 7; 8g modelliert: y: 8 7 6 5 4 3 2 1 x: 1

2

3

15

4

5

6

7

8

c) Sie liegen auf derselben diagonal verlaufenden Linie: jxi ; x j j = jyi ; y j j. Jetzt k¨onnen wir eine exakte Formulierung des Problems angeben: Gesucht sind f¨ur i = 1; : : : ; 8 Wertepaare xi ; yi 2 f1; 2; : : : ; 8g, so daß f¨ur i 6= j stets gilt: xi 6= x j ;

yi 6= y j ;

jxi ; x j j 6= jyi ; y j j

:

Eine solche Festlegung heißt Spezifikation. In Anlehnung an die sogenannte ZNotation schreiben wir eine solche Spezifikation in der folgenden Form: 8-Damen-Problem xi ; yi : f1; 2; : : : ; 8g; i = 1; 2; : : :; 8 i 6= j =) xi 6= x j ; yi 6= y j ; jxi ; x j j 6= jyi ; y j j Man kann das Problem dadurch vereinfachen, daß man festlegt, die i-te Dame genau in die i-te Zeile zu stellen. Es gilt dann yi = i; i = 1; 2; 3; :::; 8: 8-Damen-Problem xi : f1; 2; : : : ; 8g; i = 1; 2; : : :; 8 i 6= j =) xi 6= x j ; jxi ; x j j 6= ji ; jj Eine L¨osung hierf¨ur kann durch ein Programm bestimmt werden. Dazu braucht man noch eine L¨osungsidee. In diesem Fall kann man den Computer auch alle M¨oglichkeiten durchprobieren lassen. Eine heuristische Vorgehensweise liegt ¨ vor, wenn a¨ hnliche Uberlegungen zugrunde gelegt werden, die der Mensch als Probleml¨oser anwendet. Ein Programm lohnt sich aber eigentlich nur, wenn man es oft auf verschiedene Daten anwenden kann, d. h. wenn eine Klasse a¨ hnlicher Probleme vorliegt. Aus dem 8-Damen-Problem gewinnen wir das n-Damen-Problem. n ist der Eingabeparameter. Die Spezifikation wird dann so geschrieben:

2.2. MENGEN

17

KAPITEL 2. ELEMENTARE MODELLBILDUNG

18

Eine ausreichende Darstellung w¨are jetzt N-Damen-Problem (n) n : N4 xi : f1; 2; : : :; ng; i = 1; 2; : : :; n i 6= j =) xi 6= x j ; jxi ; x j j 6= ji ; jj Dabei bezeichnet N die Menge der nat¨urlichen Zahlen. Die allgemeine Vorgehensweise zum L¨osen von Problemen in der Praxis mit Hilfe des Computers ist in Abbildung 2.1 zu sehen.

fh1 1i h2 1i h3 1i h4 1i h1 2i h2 2i h3 2i h1 5i h2 5ig ;

Die wichtigsten mathematischen Hilfsmittel zur Modellbildung sind die Mengen und die Relationen, zu denen auch die Funktionen geh¨oren.

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

Es gen¨ugt die Unterscheidung durch irgendwelche Merkmale vorzunehmen, z. B.

fhx 1i hy 1i hm 1i hq 1i h100 2i h1000 2i h35 2i hy 5i h100 5ig ;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

;

oder

f1 1 1 1 2 2 2 5 5g ;

Mathematische Hilfsmittel

;

;

;

;

;

;

;

;

:

Wir sagen: Elemente einer Menge besitzen Individualit¨at. Beispiel 2.2.2 Weitere Beispiele f¨ur Mengen sind:

2.2 Mengen

(a) Die Menge aller von einer Dame auf Position hx; yi bedrohten Felder eines n  n - Brettes.

In der naiven Mengenlehre wird unter einer Menge eine Gesamtheit von Objekten verstanden. Ein einzelnes Objekt heißt Element der Menge.

(b) Die Menge aller Felder auf der Hauptdiagonalen eines n  n - Brettes.

Beispiel 2.2.1 Wir nehmen als Objekte die Zeichen ’A’,’B’,’C’ und die Zahlen 3,5,9,20. Die daraus gebildete Menge schreiben wir

(c) Die Menge der Figuren eines Schachspiels.

f0 A0 0 B0 0 C0 3 5 9 20g ;

;

;

;

;

;

:

Dabei spielt jedoch die Reihenfolge der Niederschrift keine Rolle:

f3 9 0 B0 20 0 A0 5 0 C0g ;

;

;

;

;

;

bezeichnet dieselbe Menge. Die Menge ver¨andert sich auch dadurch nicht, daß Elemente mehrfach notiert werden: f3,3,9,3g bezeichnet dieselbe Menge wie f3,9g, f9,3g oder f9,9,3,9,9,3,3,9g. Wie modelliert man nun den Inhalt einer Geldb¨orse? Es seien vorhanden 4  1DM; 3  2DM; 2  5DM:

Die Menge f1,1,1,1,2,2,2,5,5g bezeichnet dasselbe wie die Menge f1,2,5g. Man muß daher die M¨unzen gleichen Wertes individualisieren:

h1 1i: Das erste 1 DM - St¨uck, h2 1i: Das zweite 1 DM - St¨uck, h3 1i: Das dritte 1 DM - St¨uck, ; ; ;

usw.

(d) Die Menge aller m¨oglichen Z¨uge bei einer bestimmten Stellung des Schachspiels. (e) Die Menge aller Primzahlen. F¨ur einige wichtige Mengen gibt es feste Bezeichnungen:

f

g

N =Menge der nat¨urlichen Zahlen = 1; 2; 3; : : : . N0 =Menge der nat¨urlichen Zahlen mit 0 = 0; 1; 2; 3; : : : . R =Menge der reellen Zahlen. I =Menge der abgeschlossenen Intervalle u¨ ber R. Z=Menge der ganzen Zahlen. Q =Menge der rationalen Zahlen. C =Menge der komplexen Zahlen.

f

g

B =ftrue, falseg = Menge der sogenannten Wahrheitswerte.

Wir verwenden folgende Schreibweisen f¨ur Aussagen uber ¨ Mengen: x 2 M:

das Objekt x ist ein Element der Menge M.

x 62 M:

das Objekt x ist kein Element der Menge M.

2.2. MENGEN

19

M1  M2 : M1 ist eine echte Teilmenge von M2 , das heißt alle Elemente von M1 sind auch Elemente von M2 , aber M2 enth¨alt mindestens ein Element, welches nicht Element von M1 ist. M1  M2 : Es gilt M1  M2 oder M1 = M2 . Ferner werden die folgenden Schreibweisen f¨ur Mengen verwendet: 1. Auflistung der Elemente, z. B.:

f’a’,’e’,’i’,’o’,’u’g , f5 10 15 ;

;

; : : :;

95g, f1; 2; 4; 8; : : :g

(falls klar ist, wie die Elemente fortgesetzt werden).

KAPITEL 2. ELEMENTARE MODELLBILDUNG

20

nennt man ihn gesellig, sonst ungesellig. Die ungeselligen Einwohner der Stadt bilden einen Club. In dieser Geschichte steckt ein Widerspruch. Geh¨ort der Einwohner, nach dem der Club der Ungeselligen benannt ist, selbst zu diesem Club oder nicht? Wenn ja, so w¨are er gesellig, also k¨onnte er nicht zum Club geh¨oren. Wenn nein, so w¨are er ungesellig und m¨ußte doch dazu geh¨oren. Die naive Modellierung hat also ihre logische T¨ucken. Dies gilt genauso f¨ur die moderne Mengenlehre, wie das folgende Paradoxon, die sog. Antinomie von Bertraud Russell zeigt: Bilde R

2. Angabe von Eigenschaften der Elemente, z. B.: M

=

=

:

fxjx 2 N x  5g; ;

dies ist gleichwertig mit M

=

f1 2 3 4 5g ;

;

;

;

:

R2R

)

R 62 R

R 62 R

)

R 2 R:

Das Paradoxon der Clubs ist ubrigens ¨ kein Mengenparadoxon, sondern eines der Gesamtmodellierung. F¨ur endliche Mengen M definieren wir jM j=card(M) durch j0/ j = 0 und jfx1; : : : ; xngj (alle xi verschieden)=n. M heißt unendlich, wenn jM j nicht endlich ist. M heißt abz¨ahlbar unendlich, wenn man eine Reihenfolge der Elemente von M in der Form M

Sp¨atestens hier wird klar, daß es sinnvoll ist, von der leeren Menge zu reden. Z. B. ist

fxjx 2 N und x  5 und x  7g die leere Menge, da es kein x 2 N gibt mit x  5 und x  7. Im obigen Beispiel (d) M

:

sowie

fxjE (x)g

Dabei beschreibt E (x) eine Eigenschaft von x, z. B.: M

fMjM ist Menge und M 62 Mg

=

Hierzu kann man schließen

=

ergibt sich in der sogenannten Pattstellung auch die leere Menge. Die leere Menge wird durch 0/ beschrieben, aber auch durch fg (leere Aufz¨ahlung). Die Problematik einer naiven Modellierung zeigt das folgende Beispiel, das von Raymond M. Smullyan stammt: Beispiel 2.2.3 Die Einwohner einer Stadt geh¨oren vielen Clubs an, wobei jeder auch mehreren Clubs angeh¨oren kann. Jeder Club ist nach einem Einwohner benannt und es gibt zu jedem Einwohner genau einen Club, der nach ihm benannt ist. Ein Einwohner braucht aber nicht dem nach ihm benannten Club anzugeh¨oren. Tut er dies, so

=

fx1 x2 x3 g ;

;

;:::

angeben kann. M ist dann unendlich. Beispiel 2.2.4 1. N ist abz¨ahlbar unendlich, denn N =

f1 2 3 g ;

;

;::: :

2. N0 ist abz¨ahlbar unendlich, denn N0 =

fx1 x2 x3 g mit xi = i ; 1

N0 =

f0 1 2 g

;

;

;:::

d. h. ;

;

;::: :

;

2.2. MENGEN

21

KAPITEL 2. ELEMENTARE MODELLBILDUNG

22

Dann wird noch jeweils nz fortgelassen, wenn die dadurch dargestellte Zahl schon vorkam. Dies ergibt also folgenden Anfang der Aufz¨ahlung:

3. R ist unendlich, aber nicht abz¨ahlbar unendlich. Wir zeigen die letzte Eigenschaft: Dazu nehmen wir an, R sei doch abz¨ahlbar unendlich, R =

0; 1;

fr1 r2 r3 g ;

;

;::: :

Wir schreiben jedes Element ri in der Dezimalschreibweise r1

=

: : :;

r2

=

: : :;

1 1 dk1; dk1;1; : : : ; d21; d11; d01:d; 1 ; d;2 ; : : : 2 2 dk2; dk2;1; : : : ; d22; d12; d02:d; 1 ; d;2 ; : : :

=

: : :;

Wir verwenden die u¨ blichen Operationen auf Mengen:

  

Es gilt r 2 R. Dies beweist man mit Hilfe der genauen Definition von R. Nun m¨ußte r in der Reihe r1 ; r2; : : : vorkommen, etwa r = r j . Dann w¨are =

: : :;

j

j

j

j

j

d2 ; d1 ; d0 ; d;1; d;2; : : : = r = : : : ; 0; 0; 0; e;1; e;2; : : :



2 0

3

1

1 2

1 3

4

1 4

-2

:::

:::

. % . % ; 12 ; 13 ; 14 #% . % .

-1 -1 2

:::

!0 0! #% . % .

2

:::

2 2

2 3

2 4

:::

. % . % -2 ; 22 ; 23 ; 24

:::

= =

B [ A; (A [ B) [ C; A:

Potenzmenge:

P(A)

=

fBjB  Ag

:

Statt P(A) schreibt man auch 2A .

Ist A endlich und jAj = n, so ist auch P(A) endlich und es gilt

5. Q ist abz¨ahlbar unendlich. Eine Abz¨ahlfolge ergibt sich wie folgt: Jedes q 2 Q ist durch q = nz ; z 2 Z; n 2 Z, darstellbar. Darauf gr¨unden wir folgende Reihenfolge: 1 0

=

A sei eine Menge. Die Potenzmenge zu A ist definiert als

j

1

Differenz A ; B von zwei Mengen A und B.

Aus einfachen Mengen kann man komplexe Mengen aufbauen:

k f¨ Also d; j = e; j . Es war aber gerade e;k 6= d; ahlt. Dies ist k ur alle k gew¨ ein Widerspruch. Also war die Annahme, daß R abz¨ahlbar unendlich ist, falsch. Das bedeutet, R ist eben nicht abz¨ahlbar unendlich.

Nenner Z¨ahler 0

Durchschnitt A \ B von zwei Mengen A und B.

A[B A [ (B [ C) A[A

0; : : :; 0; e;1; e;2; : : :

k f¨ (als Dezimalbruch r = 0:e;1e;2 e;3 : : :) mit e;k 6= d; k ur alle k.

rj

Vereinigung A [ B von zwei Mengen A und B.

Es gelten die bekannten Rechenregeln f¨ur diese Operationen, z. B.:

4. Dazu bilden wir r

1 1 1 1 1 ; ;1; 2; ; ; ; ; ; ; ;2; : : : 2 2 3 4 3

jP(A)j 

=

2n:

Das Cartesische Produkt von Mengen werden wir im n¨achsten Abschnitt kennenlernen.

Im Rechner werden Mengen normalerweise in einer bestimmten Reihenfolge, d. h. als Liste abgelegt. Wir betrachten dazu verschiedene M¨oglichkeiten. F¨ur jede ist zu u¨ berlegen, welcher Aufwand bei Operation auf den Mengen entsteht. Als Operationen ziehen wir in Betracht 1. Test auf Enthaltensein eines Elementes: x 2 M, 2. Hinzuf¨ugen eines Elementes: M [fxg und

2.3. RELATIONEN UND FUNKTIONEN

23

3. Entfernen eines Elementes: M ;fxg.

2. (S1  S2 )  S3 ist ein cartesisches Produkt u¨ ber den beiden Mengen S1  S2 und S3 ; es ist hier also zwischen S1  S2  S3 und S1  (S2  S3 ) zu unterscheiden.

a) Ablage als Liste mit m¨oglicher Wiederholung von Elementen: 1. x 2 M: Durchsuchen gegebenenfalls der ganzen Liste nach dem ersten Auftreten des Elementes x erforderlich.

2. M [fxg: Schlichtes Anf¨ugen an die Liste.

3. M ; fxg: Durchsuchen der ganzen Liste auf mehrfaches Vorkommen und Entfernen jedes Elements x.

b) Ablage als Liste ohne Wiederholung von Elementen 1. x 2 M?: Durchsuchen gegebenenfalls der ganzen Liste nach dem Auftreten des Elements x erforderlich. Die Gesamtl¨ange der Liste ist jedoch i.a. k¨urzer als in der Notation von Teil a).

2. M [ fxg: Erst suchen, ob x schon vorkommt, dann gegebenenfalls an die Liste anf¨ugen. 3. M ;fxg: Durchsuchen bis zum ersten Vorkommen von x, dann wird x entfernt.

Sp¨ater werden wir noch bessere M¨oglichkeiten der Speicherung kennenlernen, bei denen eine m¨ogliche Ordnung auf den Elementen ausgenutzt wird.

2.3 Relationen und Funktionen 2.3.1 Cartesisches Produkt

fhs1 s2 ;

; : : :;

Wenn die Mengen Sk alle gleich sind, S1 = S2 = : : : = Sk = S, dann heißt S1  S2   Sk das k-fache cartesische Produkt (von S), in Zeichen Sk . Im Falle k = 1 degeneriert das cartesische Produkt: S1 = S. Gelegentlich wird noch der spezielle Fall des nullstelligen cartesischen Produkts (k = 0) gebraucht: S0 enthalte nur ein Element, das leere Tupel ε (oder:hi); dieses enth¨alt keine Komponenten.

:::

Beispiel 2.3.2 a) Felder eines Schachbrettes: fA,. . . ,Hgf1,. . . ,8g. b) Sei Σ ein endliches Alphabet. Die Menge Σi heißt auch Menge der Worte der L¨ange i. F¨ur die Elemente von Σi ist die k¨urzere Schreibweise s1 s2 : : : sk anstelle von hs1 ; s2 ; : : : ; sk i u¨ blich.

S

Anmerkung: Die Menge aller Worte uber ¨ Σ ist fΣi ji 2 N0 g. Diese enth¨alt auch das leere Wort ε. F¨ur diese Menge wird kurz Σ geschrieben.

Spezielle Alphabete sind: B=Menge aller Großbuchstaben (einschl. dem Leerzeichen), Menge Z der Ziffernzeichen. c) Sei VNAME=B20 ,FNAME=B25 ,PLZ=Z5 . Die Tupel des cartesischen Produkts FNAME  VNAME  PLZ enthalten drei Komponenten, die der Reihe nach f¨ur Familienname, Vorname und Postleitzahl stehen.

2.3.2 Relationen

Definition 2.3.1 (Cartesisches Produkt) Sei k 2 N. Cartesisches Produkt von S1; S2; : : : ; Sk: S1  S2  : : :  Sk :=

KAPITEL 2. ELEMENTARE MODELLBILDUNG

24

sk ijsi 2 Si ; i = 1; : : : ; kg

; ; : : : ; sk i heißt k-Tupel u ¨ ber S1; S2; : : : ; Sk. Das cartesische Produkt u¨ ber S1 ; S2; : : : ; Sk ist also die Menge aller k-Tupel u¨ ber diesen Mengen.

hs1 s2

Beachte: 1. Die Reihenfolge, in der die k Mengen notiert sind, ist relevant. D. h., werden z. B. S1 und S2 vertauscht, dann ergibt sich ein anderes cartesisches Produkt.

Eine Teilmenge R von S1  S2  : : :  Sk heißt Relation u¨ ber S1  S2  : : :  Sk. Im Falle k = 2 spricht man von einer bin¨aren Relation (oder Korrespondenz von S1 nach S2 ). F¨ur R  S1  S2 heißt S1 der Definitionsbereich (Urbildbereich, domain, kurz: dom(R) ), und S2 der Bildbereich (Wertebereich, image, range, kurz im(R) ). F¨ur ha; bi 2 R wird auch h¨aufig aRb geschrieben. Wenn R Relation ist und S1 = S2 = : : : = Sk = S, dann heißt R k-n¨are Relation auf S. Beispiel 2.3.3 Relationen sind: a) Identische Relation auf einer Menge S (Diagonale von S): idS = fha; aija 2 Sg.

2.3. RELATIONEN UND FUNKTIONEN

25

b) Leere Relation zwischen S1 und S2 : 0/  S1  S2 c) Verschiedenheitsrelation auf S: idS = fha; bija; b 2 S; a 6= bg d) Teilmenge der Tupel der Form FNAMEVNAMEPLZ der hier anwesenden Personen

Sei S eine Menge, und R eine bin¨are Relation u¨ ber S. Dann ist R;1

fha bijhb ai 2 Rg die zu R inverse Relation. ;

d) S=fmo,di,mi,do,fr,sa,sog stehe f¨ur die Tage der Woche. R beschreibe die Abfolge der Tage: R=f(mo,di),(di,mi),(mi,do),(do,fr), (fr,sa),(sa,so),(so,mo)g. Sei nun R erg¨anzt um alle Paare ha; bi f¨ur die gilt: es existiert ein c; ha; ci 2 R; hc; bi 2 R. Die so erhaltene Relation R ist keine partielle Ordnung, da sie nicht asymmetrisch ist: z. B. sind die Paare (fr,so) und (so,fr) darin enthalten. Eine partiell geordnete Menge (S; R) heißt total geordnet, falls die partielle Ordnung R folgende Eigenschaften hat: f¨ur alle a; b 2 S gilt: ha; bi 2 R oder hb; ai 2 R.

Einige grundlegende Begriffe bei bin¨aren Relationen:



KAPITEL 2. ELEMENTARE MODELLBILDUNG

26

=

;

2.3.4 Operationen auf Relationen



R heißt symmetrisch, wenn R;1 = R gilt, d. h. aus ha; bi 2 R folgt hb; ai 2 R.



R heißt antisymmetrisch, falls R \ R;1 hb; ai 2 R folgt a = b.



R heißt reflexiv, falls idS  R, d. h. ha; ai 2 R f¨ur alle a 2 S.

 

R heißt irreflexiv, falls idS \ R = 0, d. h. ha; ai 2 = R f¨ ur alle a 2 S.

 idS gilt, d. h. aus ha bi 2 R und ;

R heißt transitiv, wenn f¨ur alle a; b; c 2 S gilt: Aus ha; bi 2 R und hb; ci 2 R folgt ha; ci 2 R.

2.3.3 Ordnungsrelationen Eine bin¨are Relation R uber ¨ S heißt (partielle) Ordnung (¨uber S) falls R reflexiv, antisymmetrisch und transitiv ist. Das Paar (S; R) heißt dann auch partiell geordnete Menge, oder poset. Beispiel 2.3.4 Partiell geordnete Mengen sind: a) S = N, und R = fhi; jiji  jg. b) Sei P(S) die Potenzmenge einer Menge S. Die Relation  u¨ ber P(S) ist reflexiv, antisymmetrisch und transitiv. Dagegen ist die Relation  irreflexiv, antisymmetrisch und transitiv. c) Menge I der Intervalle u¨ ber R, zusammen mit der partiellen Ordnung hI:= f< i1; i2iji1 = [a1; b1]; i2 = [a2; b2], und b1 < a2g.

Sei R eine Relation u¨ ber S1; S2; : : : ; Sk. F¨ur i 2 f1; : : : ; kg ist die i-te Projektion pri : R ! Si definiert durch: pri (hs1 ; : : : ; sk i) = si . Seien R1 und R2 bin¨are Relationen u¨ ber Mengen S1 und S2 . Dann sind auch die Vereinigung R1 [ R2 , der Durchschnitt R1 \ R2 , und die Differenz R1 ; R2 Relationen u¨ ber S1 und S2 . Seien nun Relationen R1  S1  S2 und R2  S2  S3 gegeben. Das Relationenprodukt R1  R2 ist definiert durch R1  R2 = fha; cij9b 2 S2 mit ha; bi 2 R1 und hb; ci 2 R2g Ist spezieller R  S  S, dann werden mehrfache Relationenprodukte rekursiv definiert: R0 R1

=

Rn+1 R+

=

R

=

= =

idS ; R; R  Rn ; n 2 N; [ R1 [ R2 [ : : : = fRi ji 2 Ng ist die transitive H¨ulle von R, und R0 [ R+ ist die reflexive, transitive H¨ulle von R:

2.3.5 Funktionen Eine bin¨are Relation R uber ¨ A und B heißt Funktion (von A nach B) falls aus ha; b1i; ha; b2i 2 R die Gleichheit b1 = b2 folgt. Eine Relation mit dieser Eigenschaft heißt auch rechtseindeutig. ¨ Ublicherweise wird die Funktionenschreibweise verwendet: fR : A ! B. Anstelle von ha; bi 2 R schreiben wir fR (a) = b oder fR : a 7! b. F¨ur Funktionen gilt R;1  R  idB . Wenn idA  R  R;1 gilt, so heißt R (bzw fR ) total, andernfalls partiell. F¨ur eine totale Funktion fR : A ! B gilt somit dom( fR) = A. R (bzw fR ) heißt surjektiv (oder auf B) wenn R;1  R = idB gilt.

2.3. RELATIONEN UND FUNKTIONEN

27

KAPITEL 2. ELEMENTARE MODELLBILDUNG

28

R (bzw fR ) heißt injektiv (oder 1-1) wenn R  R;1 = idA (¨aquivalent dazu: aus fR (a1 ) = fR (a2 ) folgt a1 = a2 ). R (bzw fR ) heißt bijektiv wenn R injektiv und surjektiv ist. Eine bijektive Funktion von A nach A selbst wird auch Permutation von A genannt.

2.3.6 Operationen auf Funktionen



durch ( p1



Dann ist f  g: A ! B definiert durch

Dann ist g  f : A ! C definiert durch



(f

f : A ! B;

g)(a)

=

 f (a) g(a)

benutzt man außer der Funktionsschreibweise f (a; b) auch Operatorschreibweisen wie: a f b : Infixschreibweise, z. B. 3j + j7, f ab : Pr¨afixschreibweise, z. B. +j3j7 oder ab f : Postfixschreibweise, z. B. 3j7j+.

! f (a) g(a))

! x1

;

;

p2 ! x2; : : : ; pn ! xn)(a) = x1 , falls p1(a) =TRUE, x2 , falls p1(a) =FALSE und p2(a) =TRUE, = x3 , falls p1(a) = p2(a) =FALSE und p3(a) =TRUE, .. .

8 > < > :

Dabei k¨urzen wir nur noch den Fall pn =TRUE, ( p1

! x1

, falls a 2dom(g) , falls a 2 = dom(g); a 2dom( f ):

f:AB ! C

, falls p(a) = TRUE , falls p(a) = FALSE.

und allgemeiner ( p1

f (a)

heißen auch n-stellige Funktionen. Dabei ist auch der Sonderfall der 0-stelligen Funktionen f : ! B erfaßt. Statt f (ha1 ; : : : ; ani) schreibt man f (a1 ; : : : ; an). F¨ur zweistellige Funktionen

g: A ! Bundp: A ! B

Wir schreiben hierf¨ur auch ( p(a)

 g(a)

f : A1  A2  : : :  An ! B

Dann ist die Funktion ( p ! f ; g) definiert durch ;

=

Funktionen der Form

Seien f , g und p Funktionen gem¨aß

!f

 g)(a)

g( f (a)):

Verzweigung:

(p

¨ Uberschreibung: f : A ! Bundg: A ! B:

f : A ! Bundg: B ! C:

=

pn;1 ! xn;1 ; xn)

Seien f und g partielle Funktionen gem¨aß

Seien f und g Funktionen gem¨aß

 f )(a)

; : : :;

ab.

Hintereinanderausf¨uhrung:

(g

! x1

:::

, TRUE ! xn )

2.3.7 Darstellung von Funktionen



Wertetabellen: Eine Funktion f : A ! B mit endlich vielen Wertepaaren ha; f (a)i kann in einer Tabelle dargestellt werden, z. B. a 1 2 3 4

f (a) ’xyz’ ’xx’ ’yzy’ ’zzzz’

2.3. RELATIONEN UND FUNKTIONEN



29

Berechnungsvorschrift Hierbei wird angegeben, wie aus dem Argument a 2 A das Bild f (a) errechnet werden soll. Dies kann durch eine Formel geschehen, z. B.

p f (a)

=

a2 + 7a (1 + 2a)2

Allgemeiner ist die Beschreibung mit Hilfe eines Algorithmus, d. h. einer programmierbaren Berechnungsvorschrift. Beispiel 2.3.5 Euklidischer Algorithmus zur Bestimmung des gr¨oßten gemeinsamen Teilers:

ggT:

N

N ! N

:

F¨ur x; y 2 N wird ggT(x; y) wie folgt bestimmt: while xy do begin if x > y then x := x-y else y := y-x; ggt(x;y) := x; end. Dies l¨aßt sich auch als eine rekursive Funktionsdefinition schreiben. Wir tun dies in der Form einer Spezifikation in Z-Notation: ggT(x,y) x; y : N x=y ggT(x,y)= x < y x>y



!x ! y;x ! x;y

Charakterisierung durch Eigenschaften Man kann eine Funktion auch hinreichend beschreiben, ohne eine Berechnungsvorschrift dazu anzugeben. Das folgende Beispiel demonstriert dies f¨ur die Funktion ggT:

30

KAPITEL 2. ELEMENTARE MODELLBILDUNG ggT(x,y) x; y : N ggT(x,y)=x ggT(x+y,y)=ggT(x,y) ggT(x,x+y)=ggT(x,y) Es gibt Programmiersprachen, in denen man einige solcher Definitionen ¨ auch als eine Art Berechnungsvorschrift hinschreiben kann. Der Ubersetzer zur Programmiersprache kann dann automatisch eine Berechnungsvorschrift ableiten.

2.3. RELATIONEN UND FUNKTIONEN

31

KAPITEL 2. ELEMENTARE MODELLBILDUNG

32

¨ 2.3.8 Aquivalenzrelationen ¨ Eine bin¨are Relation R u¨ ber S heißt Aquivalenzrelation (¨uber S) falls R reflexiv, symmetrisch und transitiv ist, d. h. idS  R;

reales Problem

R;1 = R;

R  R  R:

Modellierung der Problemstruktur

F¨ur jedes a 2 S definieren wir eine Teilmenge aR von S,

Erkundung des Loesungsweges fuer die ganze Problemklasse

fb 2 Sjha bi 2 Rg aR heißt R-Klasse von a. Statt ha bi 2 R schreibt man oft a  b (mod R). Es gilt f¨ur alle a 2 S: a 2 aR a  b (mod R) genau dann wenn aR = bR aR

Modell des Problems

=

;

:

;

;

:

Speziell bilden die R-Klassen eine Partition von S, d. h. sie definieren eine Zerlegung von S in paarweise disjunkte Teilmengen (Klassen der Partition).

Loesungsverfahren im Modell

Beispiel 2.3.6 Programmierung des Loesungsverfahrens

 k 2 N; f¨ur alle m n 2 N0 gelte hm ni 2 R genau dann wenn es ein i 2 N gibt, so daß jm ; nj = ki . Die R-Klassen sind: ;

Programm

Anwendung des Programms

jR

=

;

f j k + j 2k + j g f¨ur j = 0 1 ;

;

;:::

;

; : : :;

k;1

(Restklassen modulo k).

Loesung im Modell

Interpretation reale Loesung



2.3.9 Darstellung von Relationen

 Abbildung 2.1: L¨osen von Problemen mit dem Computer

¨ Funktion f : A ! B; R = f  f ;1 . Es gilt R ist Aquivalenzrelation auf A.

Tabellendarstellung Endliche Relationen lassen sich in Tabellen darstellen, z. B. Person Alter Hans 19 Anna 18 Fritz 21

2.3. RELATIONEN UND FUNKTIONEN



33

Matrixdarstellung

Die Mengen A und B seien endlich, jAj = n, jBj = m. Jede Relation R  A  B l¨aßt sich dann in einem rechteckigen Schema mit n Zeilen, je eine f¨ur jedes Element aus A, und m Spalten, je eine f¨ur jedes Element aus B, darstellen. Man zeichnet dann ein bestimmtes Zeichen (1 oder +) f¨ur das Bestehen der Relation und ein anderes (0 oder ;) f¨ur das Nichtbestehen der Relation. Beispiel 2.3.7 ajb bedeute: a ist Teiler von b, a 2 f1; : : : ; 6g, b 2 f1; : : : ; 12g

j

1 1 0 0 0 0 0

1 2 3 4 5 6



2 1 1 0 0 0 0

3 1 0 1 0 0 0

4 1 1 0 1 0 0

5 1 0 0 0 1 0

6 1 1 1 0 0 1

7 1 0 0 0 0 0

8 1 1 0 1 0 0

9 10 11 12 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1

Berechnungsvorschrift Genauso wie eine Funktion kann auch eine Relation berechnet werden, z. B. durch einen Algorithmus. Dies wird insbesondere klar durch die Tatsache, daß eine Relation R  A  B durch eine totale Funktion f:AB ! B dargestellt werden kann: f¨ur R gewinnt man f durch die Festlegung f (a; b)

=

(

ha bi 2 R ! TRUE,FALSE) ;

:

Umgekehrt wird aus f die Relation R durch

ha bi 2 R $ f (a b) = TRUE ;

2.4 Beweistechniken Die Richtigkeit einer mathematischen Aussage kann sich auf zwei Arten ergeben. Sie kann durch Festlegung gegeben sein. Beispiel 2.4.1 Sei M eine Menge und x 2 M. Hier brauchen wir x 2 M nicht weiter zu beweisen. Ist eine Aussage nicht durch unmittelbare Festlegung wahr, so muß sie bewiesen werden, um als wahr zu gelten. Ein direkter Beweis hat die folgende Form: Es gibt Aussagen A1 ; : : : ; An , die durch Festlegung gelten. Durch logisches Schließen wird aus Aussagen A1 ; : : : ; Ak ; k  n, jeweils eine neue Aussage Ak+1 gewonnen, solange bis die zu beweisende Aussage Ai erreicht ist.

2.4.1 Widerspruchsbeweis Oft verwendet man keinen direkten Beweis, sondern einen Widerspruchsbeweis. Dieser beruht darauf, daß nicht zugleich eine Aussage und ihr Gegenteil gelten k¨onnen. Soll man nun aus A1 ; : : : ; An die Aussage B herleiten, so bildet man das Gegenteil B von B und wendet logische Schlußverfahren auf A1 ; : : : ; An ; B an. Sobald eine Aussage zusammen mit ihrem Gegenteil auftritt, hat man B auf der Grundlage von A1 ; : : : ; An bewiesen. Beispiel 2.4.2 Es gibt unendlich viele Primzahlen. Das Gegenteil ist: Es gibt nur endlich viele Primzahlen. Diese seien p1; p2; : : : ; pn. Bilde z = p1  p2   pn + 1. Nach den Regeln u¨ ber die Teilbarkeit ist z durch keine der Zahlen p1; : : : ; pn teilbar. Also ist z entweder eine Primzahl, oder durch eine Primzahl p teilbar, die zu p1 ; : : : ; pn verschieden ist. Damit haben wir das logische Gegenteil der Aussage p1 ; : : : ; pn ” sind alle Primzahlen“ hergeleitet. Also ist die Annahme falsch und die Aussage Es gibt unendlich viele Primzahlen“ bewiesen. ”

;

bestimmt.



KAPITEL 2. ELEMENTARE MODELLBILDUNG

34

Charakterisierung durch Eigenschaften Eine indirekte Bestimmung einer Relation ist ebenfalls wie bei Funktionen m¨oglich.

2.4.2 Beweis nach dem Prinzip der vollst¨andigen Induktion Der Induktionsbeweis, genauer Beweis durch vollst¨andige Induktion, ist eine spezielle Methode des logischen Schließens. Man kann auch Methoden des logischen Schließens als Aussagen formulieren und beweisen. Als Beispiel verwenden wir eine Variante der vollst¨andigen Induktion. Betrachte eine Folge von Aussagen A(1); A(2); : : ::

2.5. WERTE, VARIABLE UND TERME

35

Sei A(n) eine Aussage zu n 2 N. Es gelte A(1) und daß aus A(i) f¨ur alle i  n stets A(n + 1) folgt, n 2 N. Wir k¨onnen dazu eine Folge von Aussagen E (1); E (2); : : : angeben, f¨ur die gilt:

Sei E (n) eine Aussage zu n 2 N. Es gelte E (1) und aus E (n) folgt stets E (n + 1), n 2 N, n > 1. Dann gilt E (n) f¨ur alle n 2 N. Wir setzen E (n)

=

Es gilt A(i) f¨ur alle i  n“ : ”

Dann zeigen wir, daß die Schlußweise der Behauptung immer richtig ist: E (1)ist erf¨ullt. Es gelte E (n), also A(i) f¨ur alle i  n. Nach Voraussetzung gilt dann A(n + 1) und folglich auch E (n + 1). Das Prinzip der vollst¨andigen Induktion besagt die G¨ultigkeit von A(i) f¨ur alle i 2 N. Dann ist auch E (i) f¨ur alle i 2 N richtig.

2.5 Werte, Variable und Terme 2.5.1 Werte Die Elemente von Mengen, die wir zur Modellierung benutzen, nennen wir Werte. H¨aufig vorkommende Werte sind

       

Aussagenwerte oder boolesche Werte: TRUE, FALSE, nat¨urliche Zahlen bzw. Zahlen aus N0 , ganze Zahlen, reelle Zahlen, rationale Zahlen, komplexe Zahlen, Zeichen eines Alphabets und Worte uber ¨ Alphabeten.

Auch Elemente komplizierter Mengen treten als Werte auf: Paare, n-Tupel, Mengen selbst, Funktionen, Relationen.

KAPITEL 2. ELEMENTARE MODELLBILDUNG

36

2.5.2 Variable Eine Variable ist charakterisiert durch

  

einem Namen x, das ist ein Element aus einer Menge von Symbolen, meist ein Wort u¨ ber einem Alphabet, einem Wertevorrat Y, das ist eine Menge und einer ver¨anderlichen Zuordnung v: x 7! y mit y 2 Y , dabei bedeutet ver¨anderlich, daß w¨ahrend der Verwendung der Variablen verschiedene Zuordnungen x 7! y und auch das Nichtbestehen einer solchen Zuordnung ( undefi” nierte Variable“) in Betracht kommen.

Die Festlegung einer Variablen bez¨uglich ihres Wertevorrats schreiben wir in der Form [d. h.

x:Y

f¨ur alle Zuordnungen v gilt v(x) 2 Y ]

oder, falls M eine Obermenge von Y ist (Y

 M),

x:M p(x) f¨ur den Fall, daß Y = fy 2 M j p(y)g gilt. Eine solche Festlegung heißt Deklaration der Variablen. Die Festlegung eines Wertes heißt Zuweisung. Sie wird meist in der Form x := y notiert. Danach gilt x 7! y. Diese Schreibweise setzt die Vereinbarung einer Funktion voraus, die die Variablen auf ihre Werte abbildet: Sei N die Menge der Variablennamen und W

=

[

x2N;x:Y

Y:

Eine Variablenbelegung ist eine partielle Funktion v: N ! W mit v(x) 2 Y f¨ur x : Y : Deklarationen in Programmiersprachen k¨onnen explizit und implizit sein. Bei der impliziten Deklaration in der Sprache APL wird der Wertebereich aus dem Kontext bei der Benutzung entnommen. Beispiel: X ’A’ (Zuweisung des Zeichens ’A’, zugleich implizite Deklaration X : character)

2.5. WERTE, VARIABLE UND TERME

37

Die Sprache Fortran f¨uhrt implizite Deklarationen auf der Grundlage von Standards ein z. B. die Verwendung von

sofern nichts anderes explizit vereinbart ist. Die Verwendung von Werten erfordert Methoden f¨ur ihre Beschreibung und Konstruktion. Wir unterscheiden:



Wertebeschreibungen durch sogenannte Konstanten, z. B. 3.14159 = π stellvertretend f¨ur eine solche Konstante, Werteberechnungen durch sogenannte Terme z. B. (a + 3b)=17:2

2.5.3 Terme Terme sind formale Ausdr¨ucke, in denen Konstante, Variable und Funktionen vorkommen k¨onnen, und die die Berechnung von Werten u¨ ber null oder mehrere Stufen hinweg beschreiben: /

.&

+

a

.& 3

Stufe 3 17,2

*

.&



; x) 3 ein arithmetischer Term. Beweis:

a; c; 99; x und 3 sind arithmetische Terme, (a + c) und (99 ; x) sind arithmetische Terme, (a + c)  (99 ; x) ist ein arithmetischer Term; (a + c)(99 ; x) ist damit auch ein arithmetischer Term. 3 Terme werden zun¨achst als Zeichenreihen oder Strings aufgefaßt. Das ist m¨oglich, wenn man die Konstanten als Beschreibungen von Werten durch Strings auffaßt. Die Struktur von Strings kann anschaulich durch Syntaxdiagramme dargestellt werden.

) ) )

Beispiel 2.5.3

m - bm - cm

Variable: - a

Stufe 2 Stufe 1

b

Beispiel 2.5.2 Sei K=f0,1,: : :,99g und V=fa,b,: : :,zg. Dann ist (a + c) (99

i, j, k f¨ur Integer und von x, y, z f¨ur Real,



KAPITEL 2. ELEMENTARE MODELLBILDUNG

38

.. . - z

Stufe 0

m

Die folgende exakte Definition beschreibt arithmetische Terme mittels der Funktionen f¨ur Addition, Subtraktion, Multiplikation und Division in Operatorschreibweise: Definition 2.5.1 (arithmetischer Term) Sei K 6= 0/ eine Menge von Konstanten und V / K \ V = 0.

6= 0/ eine Menge von Variablen,

1. Eine Konstante k 2 K ist ein arithmetischer Term, die einen Wert bezeichnet (z. B. π : Wert 3:1415 : : :, 3“: Wert 3) ” 2. Eine Variable v 2 V ist ein arithmetischer Term. 3. Sind S und T arithmetische Terme, so auch (S + T ), (S ; T ), (S  T ), S=T .

Hierdurch wird immer eine unendliche Menge von Termen definiert.

6

.. . - 99

m

6

Term:

m-

- (

m - 2m - 3m

Konstante: -1

-

Term

-

Konstante

-

Variable

m ;m - m - m -+ -

6 6 6

6

-

6

6

- Term

m

- )

6

2.6. AUSSAGENLOGIK

39

Dabei unterscheiden wir



Boolesche Funktionen sind totale Funktionen f : Bn ! B; n 2 N:

elementare Diagramme: Diese enthalten nur Bestandteile in Stringform.



Diagramme mit Referenzen: Diese enthalten Stringbestandteile in der Form von Namen, die auf andere Syntaxdiagramme bzw. auf sich selbst verweisen. Letzteres f¨uhrt auf



KAPITEL 2. ELEMENTARE MODELLBILDUNG

40

Diagramme mit Rekursion.

Die Auswertung von Termen wird durch eine Funktion evalv : T

!W

beschrieben, dabei ist v eine Variablenbelegung, T die Menge der Terme und W die Menge aller in Frage kommenden Werte. Eine solche Evaluierungsfunktion ist meistens keine totale Funktion, da Terme wie 1=0 vorkommen k¨onnen. Die Evaluierungsfunktion wird rekursiv definiert entsprechend dem Aufbau der Terme. F¨ur die vorhin definierten arithmetischen Ausdr¨ucke ergibt sich folgende Definition: Definition 2.5.4 (evalv(t )) Sei val(k) der f¨ur k 2 K dargestellte Wert. Dann sei evalv (t )

=

;

Beispiel 2.6.1 Beispiele f¨ur solche Aussagen sind:

  

Im Garten liegt ein Schatz. Auf dem Mond fliegen Elefanten. Franz¨osische Weine schmecken erdig.

Gegenbeispiele sind:

 

Der Brocken im Winter. Der erdige Geschmack franz¨osischer Weine.

Informationstechnische Schaltungen realisieren boolesche Funktionen auf technische Weise.

2 K ! val(t ) t 2 V ! v(t ) t = t1 + t2 ! eval(t1) + eval(t2) t = t1 ; t2 ! eval(t1) ; eval(t2) t = t1  t2 ! eval(t1)  eval(t2 ) t1 eval(t1) ) t= ! t eval(t ) (t

Was Aussagen u¨ ber Sachverhalte sind, k¨onnen wir nur anschaulich an Hand von Beispielen erkl¨aren. Sie beziehen sich auf irgendeine Realit¨at“, deren physikali” sche Wirklichkeit uns nicht interessiert. Sie k¨onnen entweder wahr oder falsch sein, jedoch nicht gleichzeitig ( Prinzip vom ausgeschlossenen Widerspruch“) ” und m¨ussen entweder wahr oder falsch sein ( Prinzip vom ausgeschlossenen Drit” ten“).

;

; ;

;

2.6.1 Boolesche Funktionen der Stelligkeit 0,1,2



2

Nullstellige boolesche Funktionen sind

TRUE :! B mit Wert True FALSE :! B mit Wert False

:

2

2.6 Aussagenlogik

Diese Funktionen ben¨otigen kein Argument. In diesem Abschnitt geht es um die gemeinsame logische Struktur von

  

booleschen Funktionen, Aussagen u¨ ber Sachverhalte informationstechnischen Schaltungen.



F¨ur einstellige boolesche Funktionen f : M¨oglichkeiten. 1. die Identit¨at: x ! x;

x2B

B!B

existieren genau vier

2.6. AUSSAGENLOGIK

41

KAPITEL 2. ELEMENTARE MODELLBILDUNG

42

2. die Negation: x ! xbzw.:x; dabei gilt:

(c) Aus Falschem folgt Wahres: Das ist wahr (d) Aus Falschem folgt Falsches: Das ist wahr

x2B

x = :x FALSE TRUE

x TRUE FALSE

Die F¨alle 3c und 3d sind etwas u¨ berraschend. Daher betrachten wir zwei Beispiele: zu 3c: Aus 4 = 5 folgt 3 = 3:

3. die Konstante TRUE: x ! TRUE ;

x 2 B;

4=5

4. die Konstante FALSE: x ! FALSE ;



2. Disjunktion (OR): Symbol: _

3. Implikation: Symbole: !; ); 

:

zu 3d: Aus 4 = 5 folgt Ich bin der Papst“: ”

x 2 B:

4=5

Es gibt genau 16 zweistellige boolesche Funktionen. Hierzu geh¨oren die folgenden: 1. Konjunktion (AND): Symbol: ^

) 40 = 50 ) 0 = 0 ) 0+3 = 0+3 ) 3 = 3

Wertetabelle:

Wertetabelle:

Wertetabelle:

Wir interpretieren die Funktion wie folgt: (a) Aus Wahrem folgt Wahres: Das ist wahr (b) Aus Wahrem folgt Falsches: Das ist falsch

x y x^y T T T T F F F T F F F F x y x_y T T T T F T F T T F F F x y xy T T T T F F F T T F F T

) ) ) )

5 = 4 ) 5;3 = 4;3 ) 2 = 1 2 = 1 ^ Ich und der Papst sind 2 Ich und der Papst sind eins Ich bin der Papst.

Wir beobachten ferner:

 

Wahres kann aus Wahrem wie aus Falschem geschlossen werden. Dies liegt daran, daß man beim logischen Schließen stets Wahres neu einbringen kann und andererseits Voraussetzungen ignorieren darf. Falsches kann nicht aus Wahrem, sondern nur aus Falschem geschlossen werden. Dies ist eine notwendige Eigenschaft des logischen Schließens.

¨ 5. Aquivalenz:

Symbole: ,,

Wertetabelle:

x y T T T F F T F F

x,y T F F T

6. Antivalenz (exklusives oder): Symbole: ,, 6

Wertetabelle:

x y x, 6 y T T F T F T F T T F F F

2.6. AUSSAGENLOGIK

43

7. Sheffer-Funktion (NAND): Symbole: ^,—

Wertetabelle:

x T T F F

y x^y T F F T T T F T

x T T F F

y x_y T F F F T F F T

KAPITEL 2. ELEMENTARE MODELLBILDUNG

44

Formeln k¨onnen ausgewertet werden auf der Grundlage von Variablenbelegungen v:V ! B. Dabei gilt: evalv (t )

=

8. Peirce-Funktion (NOR): Symbole: _,#

Wertetabelle:

2.6.2 Aussagenlogische Formeln Definition 2.6.2 (aussagenlogische Formel) Sei V eine Menge von Variablen. Aus V , B und den genannten Funktionen lassen sich Terme bilden. Diese heißen aussagenlogische Formeln. Die Variablen aus V werden vorzugsweise mit p, q und r bezeichnet. 1. x 2 V ist eine aussagenlogische Formel. 2. TRUE und FALSE sind aussagenlogische Formeln. 3. Sind F und G aussagenlogische Formeln, so auch F , und (F op G) mit op 2 f^; _; ); (; ,;, 6 ; ^; _g. Klammern k¨onnen anschließend nach folgenden Regeln fortgelassen werden:

   

Betrachtet man (F op G), jedoch nicht als Teil eines anderen Terms, so schreibt man F op G. Statt (F op G) schreibt man F op G. In F , G sowie in F , 6 G lasse ggf. a¨ ußere Klammern von F bzw. G weg, 6 “ noch ”)“ vorkommen. wenn in F bzw. in G weder ,“ noch , ” ”

In F ) G l¨aßt man ggf. a¨ ußere Klammern von F bzw. G weg, wenn in F bzw. G weder ,“ noch , 6 “ noch ”)“ vorkommen. ” ”

(t 2 B ! t ; t 2 V ! v(t ); t = s ! evalv (s); t = (r op s) ! evalv (r) op evalv (s))

Dabei ist op wie oben definiert. Eine wichtige Rolle spielen Formeln, deren Auswertung bei jeder Belegung den Wahrheitswert TRUE ergeben. Solche Formeln heißen Tautologien. ¨ Die einfachste Art der Uberpr¨ ufung, ob eine Formel eine Tautologie ist, erfolgt durch Auswertung der Wertetafeln. Man kann aber auch durch Umformung in Formeln mit gleichem Wahrheitswert Tautologien beweisen. Dazu ist folgende Technik n¨utzlich: Sind F, G Formeln, so daß F , G eine (bereits bekannte) Tautologie ist, so kann man in einer Formel H, in der F als Teilformel vorkommt, F durch G ersetzen, ohne daß das Ergebnis der Auswertung dabei ver¨andert wird. Hier sind einige wichtige Tautologien: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.

p_ p p^ p p,p p^q , p_q p_q , p^q p ) q , p_q p)q,q) p ( p ^ ( p ) q)) ) q p ) p_q ( p ^ q) ^ r , p ^ (q ^ r) ( p _ q) _ r , p _ (q _ r) p_q , q_ p p^q , q^ p p ^ (q _ r) , ( p ^ q) _ ( p ^ r) p _ (q ^ r) , ( p _ q) ^ ( p _ r) p ) (q ) p) (( p ) q) ) p) ) p

Satz vom ausgeschlossenen Dritten (tertium non datur) Satz vom Widerspruch Satz von der doppelten Verneinung Gesetz von de Morgan (I) Gesetz von de Morgan (II) Transformation der Implikation Kontraposition modus ponens disjunktive Abschw¨achung Assoziativgesetz (I) Assoziativgesetz (II) Kommutativgesetz (I) Kommutativgesetz (II) Distributivgesetz (I) Distributivgesetz (II) Implikative Abschw¨achung Peirce-Implikation

Wir haben Tautologien so definiert, daß sie beim Belegen ihrer Variablen mit beliebigen Werten TRUE oder FALSE immer den Wert TRUE liefern. Wenn nun in

2.6. AUSSAGENLOGIK

45

einer Tautologie eine Variable p an jeder Stelle durch dieselbe Formel F ersetzt wird, so muß daher wieder eine Tautologie entstehen. Beispiel 2.6.3 Aus 16. ergibt sich mit der Ersetzung von q durch p ) q die Tautologie p ) (( p ) q) ) p):

Definition 2.6.4 (Substitution) Eine totale Abbildung σ: F ! F heißt eine Substitution, wenn =

TRUE und σ(FALSE)

=

= =

σ(t ) (σ(t1 ) Op σ(t2 )) f¨ ur Op

=

;

;

;

;

;

7! f ( p1

; : : : ; pi;1; T ; pi+1; : : : ; pn) f ( p1 ; : : : ; pi;1; F; pi+1; : : : ; pn))

8i 1  i  n ;

=

( pi

^ f ( p1 ^ f ( p1

; : : :; ; : : :;

pi;1; T ; pi+1; : : : ; pn)) _ pi;1; F; pi+1 ; : : : ; pn))8i; 1  i  n

Man kann also das Argument pi aus f (: : :) herausziehen. Dies gilt f¨ur alle pi ; i = 1; 2; : : :; n. Unter Verwendung von ( pi , T ) = pi bzw. ( pi , F ) = pi ergibt sich allgemein der Satz von der disjunktiven Normalform (DNF):

2 f^ _ ) , , 6 ^ _g ;

( pi

( pi

:

(t 2 B ! t t=q !F t 2V !t t = s ! σFq (s)

t = (r Op s)

=

Wir wollen dabei die Verzweigung der Form ( p 7! a; b) beseitigen. Es gilt: ( p 7! a; b) = ( p ^ a) _ ( p ^ b) f¨ur p; a; b 2 B (Beweis durch Vergleich der Wertetafeln). Also gilt: f ( p 1 ; : : : ; pn )

Sind p; q; r; : : : die betrachteten Variablen, so beschreibt σ gerade die Substitution bei der p durch σ( p), q durch σ(q), r durch σ(r) usw. ersetzt wird. Soll nur“ q ” durch eine Formel σ(q) ersetzt werden, so wird f¨ur die anderen Variablen σ( p) = p usw. gesetzt. Soll q durch F ersetzt werden, so bezeichnen wir die entsprechende Substitution mit σFq . Dann gilt σFq (t )

Im folgenden geht es um die Darstellung beliebiger boolescher Funktionen f : Bn ! B. Es seien p1; p2; : : : ; pn die n Argumente einer solchen Funktion. Wir betrachten die Abh¨angigkeit des Wertes f ( p1 ; p2; : : : ; pi; : : : ; pn) von einem einzelnen Argument pi . Da pi 2 B, hat pi den Wert T oder F. Also gilt:

FALSE

sowie f¨ur alle t ; t1; t2 2 F gilt: σ(t ) σ(t1 Op t2)

2.6.3 Konjunktive und disjunktive Normalform

f ( p 1 ; : : : ; pn )

Wir wollen diesen Gedankengang formal betrachten. Dazu f¨uhren wir die Substitution als eine Abbildung auf der Menge F der Formeln ein.

σ(TRUE )

KAPITEL 2. ELEMENTARE MODELLBILDUNG

46

! (σFq (r) Op σFq (s))

Es gilt nun: Satz 2.6.5 Die Tautologien sind unter Substitution abgeschlossen, d. h. ist t 2 F eine Tautologie und σ eine Substitution, so ist auch σ(t) eine Tautologie.

Satz 2.6.6 Jede boolesche Funktion f : Bn ! B ist darstellbar durch:

_ xi 2 B

f ( p1 ; p2; : : : ; pn) =



^

( pk



, xk ) ^ f (x1 x2 ;

 ; : : :;

xn)

k = 1; 2; : : : ; n

i = 1; 2; : : :; n

(Normalform bedeutet, daß von verschiedenen Darstellungsm¨oglichkeiten eine ganz bestimmte festgelegt wird.) Erl¨auterung der Formel:

W

: Bilde f¨ur alle m¨oglichen n-Tupel (x1 ; x2 ; : : : ; xn) 2 Bn den angegebenen Term, und verkn¨upfe die Terme disjunktiv. V ur jede Stelle k des jeweiligen n-Tupels den angegebenen k=1;2;:::;n ( pk , xk ) : Bilde f¨ Term, und verkn¨upfe diese Terme konjunktiv: ( p1 , x1 ) ^ ( p2 , x2 ) ^ : : : ^ ( pn , xn ) Die Umformung l¨aßt sich anschaulicher so darstellen:

B

xi 2 i=1;2;:::;n (: : :)

f ( p 1 ; : : : ; pn )

=

=

, T ) ^ f (T p2 pn)] _ , F ) ^ f (F p2 pn)] [( p1 , T ) ^ ( p2 , T ) ^ f (T T p3 [( p1 , T ) ^ ( p2 , F ) ^ f (T F p3 [( p1

;

; : : :;

[( p1

;

; : : :;

;

;

; : : :;

;

;

; : : :;

pn)] _ pn)] _

2.6. AUSSAGENLOGIK

=

Beweis Bereits bewiesen ist: f ( p 1 ; : : : ; pn )

=

47

, F ) ^ ( p2 , T ) ^ f (F T p3 pn)] _ , F ) ^ ( p2 , F ) ^ f (F F p3 pn)] [( p1 , T ) ^ ( p2 , T ) ^ ( p3 , T ) ^ f (T T T  [( p1

;

;

; : : :;

[( p1

;

;

; : : :;

;

W

B

xi 2

(( pi

, xi ) ^ f ( p1

; : : :;

;

Die Anwendung des Satzes ergibt:

;

f ( p1 ; p2; : : : ; pn)

p4 ; : : : ; pn)] _

=

Sei 1  i  n und f ( p 1 ; : : : ; pn )

=

Dann folgt: f ( p 1 ; : : : ; pn )

=

W

, x1) ^ f (x1

(( p1

B

x1 2

_  V B

x1 ;:::;xi 2

k=1;:::;i

( pk

_  ^ B

x1 ;:::;xi 2

 _ ^

( pk

;

p2; : : : ; pn))



, xk ) ^ f (x1

B

(( pi+1



, xi 1) ^ f (x1 +

=

 V

_ B

x1 ;:::;xi+1 2

k=1;:::;i+1

( pk

; : : :;





xi ; xi+1 ; pi+2; : : : ; pn)

::: ::: :::

T T T

:::

F F F

:::

F

_

=

(x1 ; x2 ; : : : ; xn )

;

;

;

;:::;

;:::;

2 Bn

 ^

( pk

k=1;2;:::;n

Beispiel 2.6.9 f ( p; q; r) = ( p _ q) ^ r _ q. Bestimme die disjunktive Normalform. p T T T T F F F F

q T T F F T T F F

r T F T F T F T F

(p

_ q) ^ r _ q F F F T F F F T

p^q^r

p^q^r

D. h. die disjunktive Normalform ist ( p ^ q ^ r) _ ( p ^ q ^ r ).



, xk )

f (x1 ;x2 ;:::;xn )=T

 ; : : :;

Vollst¨andige Induktion bis i = n liefert den Satz von der disjunktiven Normalform. Konkret ist folgendermaßen vorzugehen: W¨ahle die (x1 ; x2; : : : ; xn) systematisch (wie in einer Wertetafel): T T T F T T T F T

f ( p1 ; p2; : : : ; pn)

xi ; xi+1; pi+2 ; : : : ; pn))

, xk ) ^ f (x1

;

;:::;

Es ergibt sich der Satz von der disjunktiven Normalform in vereinfachter Form: Satz 2.6.8 Jede Funktion f : Bn ! B ist darstellbar durch

, xk )

Die Anwendung des Distributivgesetzes ergibt: f ( p 1 ; : : : ; pn )

xi ; pi+1; : : : ; pn)

k=1;:::;i

xi+1 2

;

;

Definition 2.6.7 (Min-Terme) Die verbleibenden, durch Disjunktion verkn¨upften Terme heißen Min =Terme. Jeder Min-Term ist durch eine Konjunktion von n Gliedern pi bzw. p¯i ; i = 1; 2; : : : ; n dargestellt.

 ; : : :;

( p1 ^ p2 ^ p3 ^^ pn ^ f (T T  T )) _( p¯1 ^ p2 ^ p3 ^^ pn ^ f (F T T )) _( p1 ^ p¯2 ^ p3 ^^ pn ^ f (F T T T )) .. . _ _( p¯1 ^ p¯2 ^ p3 ^^ p¯n ^ f (F F F ))

=

Die Terme (Konjunktionen), bei denen f (: : :) = F ist, liefern den Wert F (da q ^ F , F); diese Terme k¨onnen aus der Disjunktion herausfallen (da q _ F , q). Die anderen Terme, bei denen f (: : :) = T ist, k¨onnen nach der Formel q ^ T , q vereinfacht werden.

pi;1; xi ; pi+1; : : : ; pn))8i; 1  i  n

Speziell f¨ur i = 1 heißt das: f ( p 1 ; : : : ; pn )

KAPITEL 2. ELEMENTARE MODELLBILDUNG

48

2.6. AUSSAGENLOGIK

49

3. p _ q = p ^ q, d. h. _ kann durch ^ und : dargestellt werden.

Konjunktive Normalform f ( p 1 ; p2 ; : : : ; pn )

  _ ( pk , xk ) xn ) 2 Bn | k 1 2 n{z }

^

=

KAPITEL 2. ELEMENTARE MODELLBILDUNG

50

(x1 ; x2 ; : : : ;

=

f (x1 ;x2 ;:::;xn )=F

Satz 2.6.14 Die Menge fNANDg = f^g ist funktional vollst¨andig.

; ;:::;

Max-Terme

Wertetafel f¨ur NAND: p q T T T F F T F F

Beispiel 2.6.10 Implikation: p1 T T F F

p2 T F T F

p1 ) p2 T F T T

f (x1; x2 ) = F f¨ur x1 = F; x2 = T ) f ( p1 ; p2) = ( p1 , F ) _ ( p2 , T ) = p1 _ p2 (nur ein Term, daher kein ^) In disjunktiver Normalform wird die Implikation folgendermaßen dargestellt: ( p1 ^ p2 ) _ ( p1 ^ p2 ) _ ( p1 ^ p2 )

Die S¨atze u¨ ber die Normalform zeigen zus¨atzlich: Die Operationen _; ^ und : (Negation) reichen aus, um s¨amtliche booleschen Funktionen darzustellen. F¨ur Schaltungen heißt das: Wenn _; ^ und : geschaltet werden k¨onnen, kann alles geschaltet werden. Definition 2.6.11 (funktional vollst¨andig) Eine Menge boolescher Funktionen (der Art f : Bn ! B) heißt funktional vollst¨andig, wenn sich jede beliebige boolesche Funktion durch endlichmalige Anwendung von Funktionen dieser Menge darstellen l¨aßt.

p^q F T T T

Beweis 1. 2. 3.

f^ :g ist funktional vollst¨andig. p = p^ p = p^ p p ^ q = p ^ q = p ^ q = ( p ^ q) ^ ( p ^ q) ;

2.6.4 Schaltungstechnik An dieser Stelle soll der Zusammenhang mit der Schaltungstechnik dargestellt werden. Den booleschen Funktionen f : Bn ! B entsprechen Schaltungsgliedern mit n Eing¨angen und einem Ausgang. Die Schaltzeichen daf¨ur haben die folgende Form: x1 x2

Satz 2.6.12 Die Menge f^; _; :g ist funktional vollst¨andig.

xn

Erl¨auterung .. .

y

(genormt)

Beweis siehe S¨atze u¨ ber Normalformen Satz 2.6.13 Die Mengen f^; :g und f_; :g sind funktional vollst¨andig. Beweis 1. 2.

f^ _ :g ist funktional vollst¨andig. p ^ q = p _ q, d. h. ^ kann durch _ und : dargestellt werden. ;

;

bzw. x1 x2 xn

Erl¨auterung .. .

(genormt)

e

y

2.6. AUSSAGENLOGIK

51

Allgemeiner werden Schaltungsglieder verwendet, welche Funktionen f:B

n

!B

m

KAPITEL 2. ELEMENTARE MODELLBILDUNG

52

¨ Der Ubertrag der bin¨aren Addition wird durch die Konjunktion ’^’ errechnet. Die mehrstellige bin¨are Addition wird durch stellenweise Anwendung des sogenannten Halbaddierers (HA) realisiert:

realisieren. Sie werden mit m Ausg¨angen gezeichnet. Hier sind die wichtigsten Symbole der Schaltungstechnik nach DIN 40700.

x y

Operation Schaltzeichen

: ^ _ =) ^ _

1

e

u u 1 &

e

&

s = xy

¨ = x^y U

&

1 e 1

Abgek¨urzt ergibt sich ein Schaltungssymbol (nicht genormt): x y

e 1 e

s ¨ U

HA

&

¨ Der Volladdierer besitzt noch einen weiteren Eingang f¨ur den Ubertrag aus der vorherigen Stelle:

Man beachte die Systematik mit der Negation bei Eing¨angen (siehe ’)’) sowie Ausg¨angen (’:’,’^’, ’_’). Die kurze Inschrift besagt, wieviele der Eing¨ange (ggf. negiert) 1 (d. h. TRUE) liefern m¨ussen, damit der Ausgang (ggf. vor der Negation) 1 liefert. In der Schaltungstechnik werden die booleschen Werte oft mit 0 (=FALSE) und 1 (=TRUE) bezeichnet. Die Antivalenz ’6,’ entspricht dann der Addition modulo 2 im Dualsystem. Daher wird sie auch mit ’’ bezeichnet. Auf mehrstellige ¨ Darstellungen angewendet ergibt sie eine Addition ohne Ubertrag, z. B.:

x y ¨ U’

xy x y

HA

Wegen der Tautologie

p  q () ( p _ q) ^ p ^ q

u u 1

¨ U

x^y

x 3 y3

xn yn

e

1

s

Beim n-Bit-Volladdierer sind ein Halbaddierer und n-1 Volladdierer seriell (hintereinander) geschaltet:

l¨aßt sich die Antivalenz als Schaltung so darstellen

&

s ¨ U

A

Eine m¨ogliche Schaltung hierf¨ur ist die folgende: ¨ (x  y)U’ ¨ U’ HA ¨ (x  y)^U’

1101  10111 11010

p q

u

&

pq

A

Un

sn

U3

A

s3

x2 y2

U2

A

s2

x1 y1

U1

HA

s1

2.6. AUSSAGENLOGIK

53

Man erkennt, daß Arithmetik auf einfache Weise auf logische Operationen zur¨uckgef¨uhrt wird.

KAPITEL 2. ELEMENTARE MODELLBILDUNG

54 Dies ergibt die Pr¨amissen: 1. P ^ R =) Q

2.6.5 Aussagenkalkul ¨

2. W

Zum Abschluß des Abschnitts u¨ ber Aussagenlogik besprechen wir formales Schließen und formale Beweise im Aussagenkalk¨ul. Ein formaler Beweis hat folgende Struktur: Gegeben seien n( 1) Aussagen A1 ; : : : ; An , die sogenannten Pr¨amissen, und eine Behauptung B, das sogenannte Theorem. B ist auf der Grundlage von A1 ; : : : ; An beweisbar, wenn

3. R

A1 ^ A2 ^ : : : ^ An =) B; bzw. im Fall n = 0 die Formel B allein eine Tautologie ist. Gleichbedeutend damit ist, daß A1 ^ A2 ^ : : : ^ An ^ B eine Kontradiktion ist. ¨ Das folgende Beispiel veranschaulicht den Ubergang von Aussagen mit realer Bedeutung zu formalen Aussagen. Das sog. Szenario besteht aus m¨oglichen Eigenschaften eines Gegenstandes. Es gelte

4. P 5. W Das Schließen erfolgt jetzt rein formal, d. h. ohne Beachtung der Bedeutung. Was ist nun Schließen? F¨ur den Menschen ist Schließen auf logischer Einsicht auf abstraktem Niveau begr¨undet. F¨ur den Computer beruht Schließen auf systematischen Textumformungen. Hier sind Beispiele von Schlußregeln:







4. Der Gegenstand ist aus Plastik.

5. Der Gegenstand ist ein W¨urfel. Wir f¨uhren jetzt folgende Symbole (Variable) ein: P f¨ur: Der Gegenstand ist aus Plastik. R f¨ur: Der Gegenstand ist rot. Q f¨ur: Der Gegenstand ist ein Quader. W f¨ur: Der Gegenstand ist ein W¨urfel.







Resolutionsschluß: p_q p_r q_r

Disjunktionsschluß: p p_q

Kettenschluß: p =) q q =) r p =) r

Konjunktionsschluß: p q p^q

modus tollens: q p =) q p

3. Der Gegenstand ist nicht rot.

Zu beweisen ist die Aussage:

modus ponens: p p =) q q

1. Wenn der Gegenstand aus Plastik ist, ist er ein Quader, es sei denn, er ist rot. 2. Wenn der Gegenstand kein W¨urfel ist, so auch kein Quader.

)Q

=



Substitution f¨ur Tautologien p: p q pr q q ( pr = σr ( p); r

2 V)

Wendet man diese Schlußregeln an, so gewinnt man aus gegebenen und bereits hergeleiteten Aussagen weitere Aussagen. Um aus A1 ; : : : ; An die Aussage B zu beweisen wendet man also Schlußregeln auf die jeweils bereits gesicherten Aussagen an, solange bis B hergeleitet ist. Dies ist nichts Anderes, als eine schrittweise Best¨atigung der Tautologie A1 ^ : : : ^ An =) B. Wir wenden dies auf unser

2.6. AUSSAGENLOGIK

55

KAPITEL 2. ELEMENTARE MODELLBILDUNG

56

2.6.6 Die Methode der Wahrheitstafeln

Beispiel an: 4.

P

Man bringt die Pr¨amissen A1 ; : : : ; An und das Theorem B in die Form

3. R 6.

Konjunktionsschluß

P^R

1.

P ^ R =) Q modus ponens

7.

Q

2. W

)Q

=

8. W

modus tollens Umformung

5. W Der als Umformung bezeichnete letzte Schritt l¨aßt sich auch durch eine weitere Schlußregel

A1 ^ : : : ^ An =) B und untersucht, ob diese Formel eine Tautologie ist, anhand der Wahrheitstafeln f¨ur die vorkommenden Operationen. Bei k Variablen muß man 2k Varianten der Formel auswerten.

2.6.7 Der Wang-Algorithmus Die Idee dieses Verfahrens beruht auf Umformung von Formeln der Art L1 ^ L2 ^ : : : ^ Ln =) R1 _ R2 _ : : : _ Rm ; welche in der Form L1; L2; : : : ; Ln ;! R1 ; R2; : : : ; Rm

p p

notiert werden. Man verwendet dabei folgende Tautologien: herleiten. Grunds¨atzlich ist jede Regel p1 ... pn q anwendbar, d. h. logisch korrekt, wenn p1 ^ : : : ^ pn =) q eine Tautologie ist. Es gibt auch inkorrekte Schlußregeln die ebenfalls Anwendungen besitzen, z. B. als Plausibilit¨atserkl¨arung. Beispiel 2.6.15 (Abduktionsschluß) Die Abduktion wird h¨aufig im medizinischen Bereich verwendet: p =) q Krankheit ) Krankheitssymptome Krankheitssymptome q p Krankheit Es gibt verschiedene programmierbare Methoden zur Durchf¨uhrung von Beweisen im Aussagenkalk¨ul:

 L ^ L0 =) R () L =) R _ L0 ,  L =) R _ R0 () L ^ R0 =) R,  L _ L0 =) R () (L =) R) ^ (L0 =) R),  L =) R ^ R0 () (L =) R) ^ (L =) R0 ),  L ^ P =) R _ P () textslTRUE :

Das Verfahren lautet: ¨ 1. Uberf¨ uhre die Problemstellung in die Form A1 ; A2; : : : ; An ;! B; wobei Pr¨amissen und Theorem nur die Verkn¨upfungen ^; _ und : enthalten d¨urfen. 2. Falls in der Form L1; L2; : : : ; Ln ;! R1 ; R2; : : : ; Rm ein Li oder Ri negiert ist, so wird es unnegiert auf die andere Seite gebracht.

2.6. AUSSAGENLOGIK

57

KAPITEL 2. ELEMENTARE MODELLBILDUNG

58

3. Steht links eine Konjunktion L1 ^ L2 oder rechts eine Disjunktion R1 _ R2 , so wird daraus L1 ; L2 bzw. R1 ; R2.

1.

#

4. Steht links L1 _ L2 oder rechts R1 ^ R2 , so werden jeweils zwei neue Zeilen erzeugt, die die alte ersetzen: : : :;

3.1

#

L1 _ L2 ; : : : ;! R wird ersetzt durch : : : ; L1 ; : : : ;! R : : : ; L2 ; : : : ;! R

L ;! : : : ; R1 ^ R2 ; : : : wird ersetzt durch L ;! : : : ; R1 ; : : : L ;! : : : ; R2 ; : : :

.

4.1 best¨atigt

2.

.

4.2.1

#

&

4.2.2 best¨atigt

5.2.1 best¨atigt b) Beweisversuch einer Formel, die keine Tautologie darstellt: (p

5. Eine Zeile der Form L1; L2; : : : ; Ln ;! R1 ; R2 ; : : : ; Rm ist best¨atigt, wenn es ein Element gibt, daß links und rechts auftritt. Li = R j .

1. 2. 3.1 3.2 4.1 4.2.1 4.2.2 5.2.1

6. Eine Zeile L1 ; L2; : : : ; Ln ;! R1 ; R2 ; : : : ; Rm , die nur noch Variablen als Elemente enth¨alt, ist endg¨ultig nicht best¨atigt, wenn 5. nicht vorliegt. Beispiel 2.6.16

) q) ^ (r ) q)) =) ( p ) r) p _ q r _ q ;! p r (ersetzt durch 2) p _ q r _ q p ;! r (ersetzt durch 3.1,3.2) p r _ p ;! r p (ersetzt durch 4.1) q r _ q p ;! r (ersetzt durch 4.2.1,4.2.2) r _ q p ;! r p (best¨atigt) q r p ;! r (ersetzt durch 5.2.1) (endg¨ultig nicht best¨atigt) q q p ;! r q p ;! r r (endg¨ultig nicht best¨atigt) ;

;

;

;

;

;

;

;

;

;

; ; ;

;

;

;

An dieser Stelle kann das Verfahren abgebrochen werden.

a) Beweis der dem Kettenschluß entsprechenden Tautologie:

2.6.8 Das Resolutionsverfahren im Aussagenkalkul ¨ Dieses Verfahren basiert auf:

(( p

1. 2. 3.1. 3.2. 4.1. 4.2.1. 4.2.2. 5.2.1.

&

3.2

) q) ^ (q ) r)) =) ( p ) r)

p _ q; q _ r ;! p _ r p _ q; q _ r; p ;! r p; q _ r; p ;! r q; q _ r; p ;! r q _ r; p ;! r; p q; q; p ;! r q; r; p ;! r q; p ;! r; q

(ersetzt durch 2) (ersetzt durch 3.1,3.2) (ersetzt durch 4.1) (ersetzt durch 4.2.1,4.2.2) (best¨atigt) (ersetzt durch 5.2.1) (best¨atigt) (best¨atigt)

Anordnung der Formeln als Baum:



der Technik des Widerspruchsbeweises: A1 ^ A2 ^^ An ) B genau dann, wenn A1 ^ A2 ^^ An ^ B widerspr¨uchlich ist,



der Schlußregel der Resolution: p p q

_ _ _

q r r

2.6. AUSSAGENLOGIK



59

und der Darstellung in konjunktiver Normalform

KAPITEL 2. ELEMENTARE MODELLBILDUNG

60

4. Der Beweis ist mißlungen, d. h. nicht m¨oglich, wenn keine neuen Resolventen gebildet werden k¨onnen und nil nicht abgeleitet wurde.

K1 ^ K2 ^^ Kn

Beispiel 2.6.17 (Kettenschluß)

mit sog. Klauseln K der Form K = l1 _ l2 __ lm ;

(p

wobei die sog. Literale li Variable oder negierte Variable sind. Ziel des Verfahrens ist die Ableitung der leeren Klausel nil, welche den Widerspruch darstellt: der Resolutionsschluß wird auf Klauseln in der Form p p q1

_ q1 _  _ _ r1 _  _ _  _ qn _

qn rm r1

) q) ^ (q ) r) ) ( p ) r)

ergibt umgeformt: (p

_ q) ^ (q _ r) ^ ( p _ r)

und in konjunktiver Normalform:

_  _

(p

rm

angewendet. F¨ur n = m = 0 ergibt sich

2.

Dies belegt, daß die leere Klausel einen Widerspruch darstellt. Man nennt zwei Klauseln (miteinander) resolvierbar, wenn ein Literal unnegiert in der einen und negiert in der anderen vorkommt. Dann kann auf die beiden Klauseln der Resolutionsschluß angewendet werden. Das Ergebnis ist wieder eine Klausel und heißt Resolvente der Ausgangsklauseln. Das Verfahren lautet: 1. Die zu untersuchende Formel A1 ^ A2 ^^ An ^ B

3.

4.

f p _ q; q _ r; p; rg. Die beiden ersten Klauseln sind resolvierbar mit p _ r als Resolvente:

f p _ q; q _ r; p; r; p _ rg. Resolventenbildung zwischen 3. und 5. Klausel liefert die Resolvente r.

f p _ q; q _ r; p; r; p _ r; rg und Resolventenbildung zwischen 4. und 6. Klausel liefert die leere Klausel nil. f p _ q q _ r p r p _ r r nilg. ;

p_q

&

K1 ^ K2 ^^ Km gebracht. Dann wird die Menge aller Klauseln gebildet: ;

; : : :;

;

; ;

; ;

Die Bildung der Resolventen kann graphisch wie folgt dargestellt werden:

wird in die konjunktive Normalform

fK1 K2

:

Die Klauselmenge hierzu ist 1.

p p leere Klausel nil

_ q) ^ (q _ r) ^ p ^ r

Kmg

p_r

. &

q_r

r

. &

2. Die Menge der Klauseln wird vergr¨oßert, indem man zu zwei resolvierbaren Klauseln die Resolvente bildet und zur Menge der Klauseln hinzuf¨ugt.

Gegenbeispiel:

3. Der Beweis ist gelungen, wenn die leere Klausel abgeleitet wurde.

Dies ergibt folgende Klauselmengen:

(p

) q) ^ (q ) r) ) (r ) p)

:

. nil

. .

p

.

.

.

.

r

¨ 2.7. PRADIKATENLOGIK 1. 2.

61

f p _ q; q _ r; p; rg Die beiden ersten Klauseln sind resolvierbar mit p _ r als Resolvente: f p _ q q _ r p r p _ rg ;

;

; ;

Neue Resolventen k¨onnen nicht gebildet werden!

KAPITEL 2. ELEMENTARE MODELLBILDUNG

62 Variable:

x; y; z

Funktionssymbole: hier brauchen wir nur eines: quad f¨ur das Quadrat einer Zahl Pr¨adikatssymbole: das sind Symbole f¨ur Funktionen mit B als Wertebereich: f¨ur: x ist Elefant, ELEPHANT(x) WEISS(x) f¨ur: x ist weiß, STADT(x) f¨ur: x ist Stadt, ¨ HUNDEFANGER (x; y) f¨ ur: y ist Hundef¨anger in x, f¨ur: y ist Hund in x, HUND(x; y) GEBISSEN(x; y) f¨ur: x wurde von y gebissen, NAT(x) f¨ur: x 2 N, LESS(x; y) f¨ur: x < y und f¨ur: x > y. GREATER(x; y)

2.7 Pr¨adikatenlogik W¨ahrend die Aussagenlogik die Grundlage f¨ur die Schaltungstechnik liefert, dient die Pr¨adikatenlogik der Hardware- und Softwaretechnik auf h¨oherem Niveau. Wichtige Anwendung sind die Verifikation von Hardware und Software, d. h. die Sicherstellung der Korrektheit, und die Wissensverarbeitung, in der die LogikProgrammierung eine fundamentale Rolle spielt. Es geht hier ubrigens ¨ um die Pr¨adikatenlogik erster Stufe, auch PL1 genannt. Die mathematische Logik kennt h¨ohere pr¨adikatenlogische Kalk¨ule. Wichtig ist der folgende Unterschied zur Aussagenlogik:

  

Operatoren der Aussagenlogik: Die Quantoren

Der Kalk¨ul der Aussagenlogik ist entscheidbar. D. h. es gibt einen Algorithmus, der immer terminiert (d. h. zum Ende kommt) und zu jeder aussagenlogischen Formel feststellt, ob sie unter einer bestimmten Variablenbelegung wahr ist, oder nicht. Der Kalk¨ul der PL1 ist nicht entscheidbar. D. h. es gibt keinen Algorithmus, der immer terminiert und zu einer pr¨adikatenlogischen Formel feststellt, ob sie wahr ist oder nicht.

Zur begrifflichen Einf¨uhrung der Pr¨adikatenlogik betrachten wir Beispiele, f¨ur deren Formulierung die Aussagenlogik nicht ausreicht: 1. Es gibt einen weißen Elefanten. 2. Jede Stadt hat einen Hundef¨anger, der von jedem Hund der Stadt gebissen wurde. 3. Zu jeder nat¨urlichen Zahl x gibt es eine kleinere nat¨urliche Zahl y, deren Quadrat gr¨oßer als x ist. Zur pr¨azisen Formulierung dieser Beispiele f¨uhren wir ein:

;

;

;

;

;

;

;

Existenzquantor und Allquantor:

9x 8x

: :

f (x): es existiert ein x, f¨ur welches f (x) gilt. f (x): f¨ur alle x gilt f (x).

Damit k¨onnen wir die Beispielaussagen so formulieren: 1. 2.

9x (ELEPHANT(x)^WEISS(x))) ¨ (8x (STADT(x) ) (9y HUNDEFANGER (x y) ^ (8z HUND(x z) )GEBISSEN(y z))))) (8x (NAT(x) ) (9y NAT(y)^LESS(y x)^GREATER(quad(y) x))))) (

:

:

:

:

;

Aber es gilt wenigstens: der Kalk¨ul der PL1 ist semi-entscheidbar (w¨ortlich: halb-entscheidbar). D. h. es gibt einen Algorithmus, der wahre Formeln in endlicher Zeit erkennt.

: ^ _ ) , 6, ^ _

3.

:

;

:

;

:

:

;

;

:

F¨ur die Definition pr¨adikatenlogischer Formeln ben¨otigen wir zun¨achst drei variable Mengen, n¨amlich:

  

eine Menge V von Variablen, eine Menge F von Funktionssymbolen und eine Menge P von Pr¨adikatssymbolen.

Fest dagegen sind folgende Mengen

 

eine Menge J = f:; ^; _; ); ,; 6,; ^; _g von Junktoren, eine Menge Q = f9; 8g von Quantoren und

¨ 2.7. PRADIKATENLOGIK



63

eine Menge H = f(; ); :; ; g von Hilfssymbolen.

KAPITEL 2. ELEMENTARE MODELLBILDUNG

64



Zusammenfassen von Quantoren:

9x1 9x2 9xn wird zu 9x1 x2 8x1 8x2 8xn wird zu 8x1 x2

Definition 2.7.1 ((Pr¨adikatenlogische) Terme) Die Menge T der pr¨adikatenlogischen Terme wird induktiv wie folgt gebildet: 1. Jede Variable aus V ist ein Term.

2 F ein n-stelliges Funktionssymbol, so ist

Definition 2.7.2 ((Pr¨adikatenlogische) Formel, Syntax) Die Menge FO der pr¨adikatenlogischen Formeln wird induktiv wie folgt gebildet: 1. Die booleschen Werte TRUE und FALSE sind Formeln. 2. Jede Pr¨adikatskonstante, d. h. jedes nullstellige Pr¨adikatssymbol, aus P ist eine Formel. 3. Sind t1; : : : ; tn Terme und ist p 2 P ein n-stelliges Pr¨adikatssymbol, so ist p(t1 ; : : : ; tn) eine Formel. 4. Ist a eine Formel, so auch (:a). 5. Ist a eine Formel und x eine Variable, so sind (9x:a) und (8x:a) Formeln. 6. Sind a; b Formeln, so sind (a ^ b); (a _ b); (a ) b); (a , b); (a 6, b); (a^b) und (a_b) Formeln. Bemerkung Die Bedingungen 1,2,4 und 6 allein definieren die Aussagenlogik; die Mengen F; Q; V , sowie die n-stelligen (n  1) Pr¨adikatensymbole werden dabei nicht verwendet. An Vereinfachung der Notation sei erlaubt:



Weglassen von Klammern unter Beachtung der Priorit¨aten der Bindung:

: 9x 8x ^^ __ ) , 6, ;

:;

; ;

;

:

bindet am st¨arksten, Priorit¨at 4. bindet stark, Priorit¨at 3. bindet geringer, Priorit¨at 2. bindet noch geringer, Priorit¨at 1. bindet am geringsten, Priorit¨at 0.

:

;

; : : :;

:

:

;

; : : :;

xn: xn:

Beispiel 2.7.3

2. Jede Konstante, d. h. jedes nullstellige Funktionssymbol aus F ist ein Term. 3. Sind t1 ; : : : ; tn Terme und ist f f (t1 ; : : : ; tn) ein Term.

:

9x (9y (9z (( p(x y) ^ q(y z)) , ( p(z y) ) r(x))))))

(

:

:

:

;

;

;

kann zu

9x y z ( p(x y) ^ q(y z) , p(z y) ) r(x)))

(

; ; :

;

;

;

vereinfacht werden. Damit haben wir den zeichenweisen Aufbau pr¨adikatenlogischer Formeln erkl¨art, jedoch nicht ihre Bedeutung. Diese h¨angt von der jeweiligen Interpretation ab, die auch formal definiert werden kann. Definition 2.7.4 (Interpretation einer pr¨adikatenlogischen Formel) Gegeben seien die Mengen V; F; P. Eine Interpretation hierzu ist ein Paar hD; I i, dabei ist D eine nichtleere Menge (Dom¨ane oder Universum genannt) und I eine Abbildung wie folgt: 1. Zu jeder Konstanten c 2 F ist I (c) 2 D.

2. Zu jedem Funktionssymbol f der Stelligkeit n  1 ist I ( f ) eine Funktion I ( f ): Dn ! D.

3. Zu jeder Pr¨adikatskonstanten k 2 P ist I (k) 2 B.

4. Zu jedem Pr¨adikatssymbol p der Stelligkeit n  1 ist I ( p) eine Funktion I ( p): Dn ! B.

Auch bei fester Interpretation betrachtet man die Formeln in Abh¨angigkeit von Variablenbelegungen v:V ! D. Auf den Termen ist dann eine Evaluierungsfunktion evalv: T ! D wie folgt definiert: evalv (t )

=

8 t 2 V ! v(t ) > < t 2 F t nullstellig ! I (t ) (t1 tn) f n-stellig, n 2 N > : t = f! I ( f )(evalv (t1) evalv (tn )) t1 ;

; : : :;

;

; : : :;

;

; : : :;

tn Terme

¨ 2.7. PRADIKATENLOGIK

65

Definition 2.7.5 (Semantik pr¨adikatenlogischer Formeln) Auf den Formeln wird eine Evaluierungsfunktion evallogv: FO definiert: evallog 1.

v (a) = a

v (k) = I (k)

v ( p(t1 ; : : : ; tn )) = I ( p)(evalv (t1 ); : : : ; evalv (tn ))

n  1, t1; : : : ; tn Terme

evallog 4.

f¨ur p 2 P, n-stellig,

:a) = :(evallogv (a))

v(

evallog 5. (a)

9x a)) =TRUE, falls es eine Variablenbelegung v0 gibt, so daß

v ((

D = N ist die Dom¨ane, I bildet wie folgt ab: I (quad): N ! N mit I (quad)(x) = x2 ; I (NAT): N ! B mit I (NAT)(x) = (x 2 N !TRUE,FALSE) I (LESS); I (GREATER): NN ! B mit I (LESS)(x; y) = (x < y !TRUE,FALSE) und I (GREATER)(x; y) = (x > y !TRUE,FALSE).

f¨ur k 2 P, nullstellig

evallog 3.

Die Interpretation ergibt sich aus der verbalen Originalform:

f¨ur a 2 B

evallog 2.

! B wie folgt

KAPITEL 2. ELEMENTARE MODELLBILDUNG

66

Semantik von 8x:(NAT(x) ) (9y:NAT(y)^LESS(y; x)^GREATER(quad(y); x)))): Sei v: fx; yg ! N eine beliebige Variablenbelegung; evallog 1.

:

evallogv0 (a)

=

T RUE

evallogv0 (A)

ist; dabei stimmt v0 mit v in allen Variablen (außer eventuell in x) u¨ berein. Andernfalls istevallogv ((9x:a)) =FALSE. evallog (b)

[x

2.

v0 (NAT(x)

evallogv0 (a) = T RUE;

evallog 3.

evallog 6.

op b)) = (evallogv (a) op evallogv (b)) f¨ur ¯ ; _g op 2 f^; _; ); ,; 6,; ^

Zur Veranschaulichung betrachten wir erneut das Einf¨uhrungsbeispiel:

8x (NAT(x) ) (9y (NAT(y)^LESS(y x)^GREATER(quad(y) x))))) :

:

;

;

Hier ist V = fx; yg die Menge der Variable F = fquadg die Menge der Funktionssymbole, quad einstellig P = fNAT,LESS,GREATERg, mit den Stelligkeiten 1 f¨ur NAT und 2 f¨ur LESS und GREATER.

mit

T RU E :

)

: : :)

vereinfacht sich wegen I (NAT)(x) =TRUE zu:

9

v0 ( y:B) =TRUE, v0 (x) =beliebig, so

falls ein v00 : fx; yg daß

!N

evallogv00 (NAT(y) ^ LESS(y; x) ^ : : :)

v ((a

(

=

!N

evallogv0 (9y:(NAT(y) ^ : : :)):

:

dabei stimmt v0 mit v (außer eventuell in x) u¨ berein. Andernfalls ist evallogv((8x:a)) =FALSE.

falls f¨ur jede Variablenbelegung v0 : fx; yg

ist dabei eine beliebige nat¨urliche Zahl]

evallog

8x a)) =TRUE, falls f¨ur jede Variablenbelegung v0 gilt:

v ((

8

v (( x:A)) =TRUE, v0 (y) = v(y) gilt:

=

existiert, mit v00 (x)

=

T RU E :

4. I (NAT)(y) =TRUE; somit bleibt zu zeigen: evallogv00 (LESS(y; x)) ^ evallogv00 (GREATER (quad(y); x))

=

T RU E

(dabei ist v00 (x) = v0 (x) beliebig aus den nat¨urlichen Zahlen) evallogv00 (LESS(y; x))

= = =

I (LESS)(evalv00 (y); evalv00 (x)) 00 < v00 (x) ! T RU E ; FALSE ) 00 (v (y) < 1 ! T RU E ; FALSE ) = FALSE (v (y)

2.8. FUZZY-LOGIK

67

D. h. die oben angegebene Formel ist nicht mit TRUE evaluierbar. Man kann leicht eine Interpretation angeben, in der die Formel immer TRUE liefert (z. B. D = N ; f1; 2g). Oft betrachtet man auch zu einer Formel alle Interpretationen, unter denen die Formel wahr ist. Dies wollen wir hier nicht weiter betrachten. Die Allgemeing¨ultigkeit einer Formel der PL1 wird so erkl¨art: Definition 2.7.6 (allgemeingultig) ¨ Eine pr¨adikatenlogische Formel a heißt allgemeing¨ultig, falls unter jeder Interpretation und f¨ur jede Variablenbelegung v evallogv(a)

=

T RUE

ist. Beispiel 2.7.7 (Allgemeingultige ¨ Formeln der PL1) 1. (8x:P(x) ) P(y)) 2. (P(y) ) 9x:P(x)) 3. 4. 5. 6.

9x P(x) , :8x (:P(x))) (8x P(x) , :9x (:P(x))) (:(8x P(x)) , 9x (:P(x))) (:(9x P(x)) , 8x (:P(x))) (

:

:

:

:

:

:

:

:

F¨ur die Pr¨adikatenlogik gibt es spezielle Verfahren, die die Allgemeing¨ultigkeit feststellen sollen. Ein Beispiel hierf¨ur ist das Resolutionsverfahren der Pr¨adikatenlogik, welches eine Verallgemeinerung des aussagenlogischen Resolutionsverfahrens darstellt und auch Grundlage der Programmiersprache PROLOG ist.

2.8 Fuzzy-Logik Literaturhinweis: Goos, Bd.4, Kap.23: Unscharfe Informationsverarbeitung ¡Text fehlt¿

68

KAPITEL 2. ELEMENTARE MODELLBILDUNG

KAPITEL 3. PROZESSE UND SYSTEME

70



Diskrete Prozesse: Die Zeit wird als (kausale) Reihenfolge der Ereignisse ber¨ucksichtigt. Die Ereignisse heißen Aktionen. Beispiel 3.1.4 (Ein Rechenprozeß) ggT zweier Zahlen x; y: x = 18; y = 12 1. Subtrahiere y von x (x = 6; y = 12) 2. Subtrahiere x von y (x = 6; y = 6) 3. Gib x als Resultat aus.

Kapitel 3 Prozesse und Systeme

Das folgende Programm erzeugt diesen Prozeß: 1. if x = y then Gib x als Resultat aus.

3.1 Prozesse und Ablaufpl¨ane

2. if x > y then Subtrahiere x von y.

Definition 3.1.1 (Prozeß) Ein Prozeß ist ein in der Zeit ablaufender Vorgang, der aus Ereignissen zusammengesetzt ist. Es kann sich um einen realen oder virtuellen (gedachten) Prozeß handeln.

3.1.1 Diskrete Prozesse

Man unterscheidet:

Innere Struktur der Prozesse  Zusammenhang der Aktionen:

Kontinuierliche Prozesse: Die Zeit wird durch reelle Zahlen gemessen und dargestellt. Die Ereignisse heißen Zust¨ande und werden durch zeitabh¨angige Funktionen dargestellt. Beispiel 3.1.2 (ged¨ampfte Pendelschwingung)

t

Beispiel 3.1.3 (Prozeß zu einem kontinuierlichen dynamischen System) x(t ); y(t ) mit x˙(t ) = ;x2 (t ) + a  y3 (t ); y˙(t ) = ;y(t ), beginnend mit x(0) = c0 ; y(0) = c0 . 69



zeitliches Nacheinander: dann liegt ein sequentieller Teilprozeß vor



unabh¨angiges Nebeneinander: dann liegt ein nebenl¨aufiger Teilprozeß vor

Beispiel 3.1.5 (diskrete Prozesse)

Amplitude



3. if x < y then Subtrahiere y von x.



rein sequentiell: A ! B ! C ! D ! E



nebenl¨aufig mit sequentiellen Teilprozessen: A -B

E

F

 ; ; C -D -G @  ; R @ ; @ R @

H

Beachte: zeitliche Reihenfolge ist transitiv und irreflexiv, daher sind Zyklen nicht m¨oglich.

¨ 3.1. PROZESSE UND ABLAUFPLANE

71

KAPITEL 3. PROZESSE UND SYSTEME

72

3.1.2 Sequentielle Prozesse

3.1.3 Syntax-Diagramme

Wir betrachten Pl¨ane zur Steuerung solcher Prozesse. Die Pl¨ane enthalten:

Syntax-Diagramme sind Pl¨ane zur systematischen Erzeugung von Texten. Bestandteile sind:



elementare Aktionen



Reihenfolgeangaben



Alternativen



 Text  konstante Text-Teile:  

1. mit beliebiger endlicher Wahl (Nichtdeterminismus)

Verweis auf andere Diagramme bzw. auf dasselbe Diagramm (Selbstreferenz): Name

2. mit Auswahl gem¨aß Bedingung (Determinismus)



Wiederholungen

elementare Aktionen Reihenfolge

nichtdetermin. Alternative Wiederholung determin. Alternative

 als Text Textsymbole Reihenfolge der Niederschrift; Verweise Spezialsymbole: z. B. —, 2; oder Spezialsymbole: repeat, while, ( )+,( ) if. . . then. . .

Beispiel 3.1.6 (Programm eines sequentiellen Prozesses) x := 1; y := x + 3; (z := x + yjz := 100jz := x + x  y); w := 1; (w := w + 1) ; print(x); print(y); print(z); print(w);

als Zeichnung graphische Grundsymbole: , gerichtete Pfeile; f¨ur die Vorzugs-richtungen ; oft ohne Spitze Linienverzweigung:

 

Name zur Benennung eines Diagrammes und als Referenzen

#!

*   H j H

Verbindungslinien mit – Laufrichtung (Pfeil oder implizit nach rechts bzw. nach unten) – Verzweigung – R¨uckf¨uhrung

Ein Syntaxdiagramm repr¨asentiert eine Menge von Worten u¨ ber einem Alphabet, also eine sogenannte formale Sprache. Beispiel 3.1.7 (unendliche formale Sprache)

 - - c b      - d e  -6 6  f  

Linienr¨uckf¨uhrung: ?

X- a

Linienverzweigung mit Bedingungen notiert

6

Zur formalen Sprache X geh¨oren z.B.: abc, ade, adee, adeee, adefde

Beispiel 3.1.8 (leere formale Sprache) X

 -? - b  X   - Y - c  ? a

-

 - - e  X 

Y - d

¨ 3.1. PROZESSE UND ABLAUFPLANE

73

3.1.4 Der Backus-Naur-Formalismus (BNF) Zu einer Beschreibung in BNF geh¨oren:

  

Metasymbole: ::=“, j“ ” ” begriffliche Symbole, sogenannte Nichtterminalsymbole N: Hilfszeichen der Definition, z. B. hZahli, hstatementi. Bestandteile des Textes, sogenannte Terminalsymbole T , z. B.: a, b, c, 0, 1, . . . , ?, [, . . .

KAPITEL 3. PROZESSE UND SYSTEME

74

X::=aY j aZ Y::=b j bY Z::=cd j cd j ce j cdZ j ceZ Hierbei sind Terminalsymbole: T = fa,b,c,d,eg und Nichtterminalsymbole: N = fX; hYi; hZig. Der Backus-Naur-Formalismus f¨uhrt uns zu einem sehr wichtigen Begriff der Theorie der Formalen Sprachen:

Die Beschreibung besteht aus Regeln der Form A ::= X1 jX2 j : : : jXn ; n  1; A 2 N ; Xi 2 (T [ N )

Erl¨auterung: Steht M f¨ur eine Menge von Zeichen, dann bezeichnet M die Menge aller W¨orter u¨ ber diesen Zeichen, einschließlich des leeren Wortes. Beispiel 3.1.9 (arithmetische Terme) hTermi ::= (hTermihOpihTermi) j hKonsti j hVariablei hKonsti ::= : : : hVariablei ::= : : : hOpi ::= + j ; j  j n ¨ Uberf¨ uhrung von Syntaxdiagrammen in BNF:

  

3.1.5 Grammatik Definition 3.1.11 (Grammatik) Eine Grammatik G ist ein Quadrupel G = (VN ; VT ; P; S) wie folgt:

 VN = Alphabet der Nichtterminalsymbole,  VT = Alphabet der Terminalsymbole, VN \ VT = 0/ 

P = Menge von Ersetzregeln der Form α ! β, wobei α β 2 V , V = VN [ VT



S = Startsymbol der Grammatik, S 2 VN

Hintereinanderschaltung: bleibt erhalten Verzweigung: Aufteilung in Alternativen : : : j : : : j : : : Linienr¨uckf¨uhrung: Einf¨uhrung eines neuen Nichtterminalsymbols

Beispiel 3.1.10 (Backus-Naur-Formalismus)

  - 6 X- a d  -  c   - e  6  -? b  6 X- a - d  -   c 6 -  e 

2 V VNV  und

Ist α 2 VN , so heißt G kontextfrei.

- b

X::=ab j acd j ace

Beispiel 3.1.12 (Darstellung von BNF als kontextfreie Grammatik) X::=aY j aZ Y::=b j bY Z::=cd j ce j cdZ j ceZ Als kontextfreie Grammatik: P = fX!aY,X!aZ,Y!b,Y!bY, Z!cd,Z!ce,Z!cdZ,Z!ceZg VN = fX,Y,Z,g; VT = fa,b,c,d,eg; S =X.

¨ 3.1. PROZESSE UND ABLAUFPLANE

75

Beispiel 3.1.13 (nicht kontextfreie Grammatik) G = (fX,Y; Sg; fa,b,cg; P; S), P = fS !XYC,Y!ab,Y!bY,Xa!aXb, Xbb!cg

76

KAPITEL 3. PROZESSE UND SYSTEME

oder mehrere Nachfolger, die durch Kanten an ihn gebunden sind. Alle Knoten, bis auf den Wurzelknoten, haben genau einen Vorg¨anger. Aus einer Ableitungsfolge entsteht auf folgende Art ein Ableitungsbaum:

Oft verwendet man die Alternativdarstellung : : : j : : : j : : : j : : : auch bei Grammatiken zur Ab-k¨urzung. Definition 3.1.14 (direkte Ableitung) Eine Grammatik G = (VN ; VT ; P; S) definiert auf V  = (VN [ VT ) die sogenannte direkte Ableitung ’)’ als bin¨are Relation: x ) y gilt genau dann, wenn x = w1 αw2 ; y = w1 βw2 ; w1 ; w2 2 V  und (α ! β) 2 P gilt. Definition 3.1.15 (Satzform) Ein Wort w 2 V  heißt Satzform (zu G), wenn S ) w gilt. Dabei ist ’)’ die reflexive, transitive H¨ulle von ’)’, d.h. es ist genau dann S ) w, wenn es eine Folge S = w0 ) w1 ) w2 )  ) wn = w (n  0) gibt.

1. Man notiert einen Wurzelknoten und schreibt daran das Startsymbol S.

Definition 3.1.16 (Menge aller Satzformen) Sei G eine Grammatik. Dann ist L(G) die Menge aller Satzformen zu G, welche nur terminale Zeichen enthalten: L(G) = fw j s ) w; w 2 VTg. Beispiel 3.1.17 G = (fSg; fa; bg; fS ! ε; S ! abSg; S); L(G) = fanbn j n  0g. Zur Veranschaulichung des Arbeitens mit Grammatiken f¨uhren wir die Begriffe einer Ableitungsfolge und eines Ableitungsbaums ein, den letzteren allerdings nur unter der Einschr¨ankung, daß es sich um eine kontextfreie Grammatik handelt. Zu einer Grammatik G haben wir die Relation ’)’, eigentlich ’)G ’ eingef¨uhrt. Dann bezeichnen wir eine Kette g¨ultiger Ableitungsschritte S ) w1 ) w2 )  ) wn als Ableitungsfolge. S ) w bedeutet dann, daß eine solche Folge von S nach w

f¨uhrt (im Falle n = 0 mit S = w). Ist die Grammatik kontextfrei, so wird in jedem Schritt ein Nichtterminalsymbol duch ein Wort aus (VN [ VT ) ersetzt. Dabei spielt es keine Rolle, in welcher Reihenfolge die vorhandenen Nichtterminalsymbole ersetzt werden. Eine reihenfolgeunabh¨angige Darstellung ergibt sich durch eine zweidimensionale Darstellung durch einen sogenannten Baum: Ein Baum besteht aus Knoten und Kanten und wird von oben nach unten gezeichnet. Es gibt oben einen ausgezeichneten Knoten, den sogenannten Wurzelknoten. Jeder Knoten ist entweder ein Endknoten, auch Blatt genannt, oder er besitzt einen

2. Eine Ableitung A ! α1 α2 : : : αn ; αi 2 (VN [ VT ); i = 1; : : : ; n; n  1, wird so durchgef¨uhrt: Von dem mit A beschrifteten Knoten zeichnet man n Kanten f¨ur n Nachfolger, die mit α1 ; : : : ; αn beschriftet werden. Eine Ableitung A ! ε wird so durchgef¨uhrt, daß von A ausgehend eine Kante zu einem Nachfolger gezeichnet wird, der mit beschriftet wird. Das abgeleitete Wort steht am Schluß in den von links nach rechts zu lesenden Bl¨attern des Baumes.

¨ 3.1. PROZESSE UND ABLAUFPLANE

77

Beispiel 3.1.18 (zur Grammatik) S !ab,S !aSb,S !AA,A! S S )aSb)aAAb)aASb)aSSb )aaSbSb)aaSbabb)aaabbabb S H 

a

HH S b  Q  Q

A S

JJ

KAPITEL 3. PROZESSE UND SYSTEME

78 2. Lε = fεg.

3. LRS = LR  LS = fvw j v 2 LR; w 2 LSg.

A S

 AA

4. L(R1 j ::: j Rn ) = LR1 [[ LRn .

a S b a b  AA

a b Grammatiken, die nicht kontextfrei sind, werden auch ben¨otigt. Es gibt formale Sprachen mit einem praktischen Hintergrund, die sich sonst nicht durch Grammatiken beschreiben ließen. Ein theoretisches Beispiel f¨ur eine formale Sprache, die sich nicht durch eine kontextfreie Grammatik geschreiben l¨aßt, ist die Sprache L = fan bncn j n  1g. Eine weitere Methode, formale Sprachen zu beschreiben, ist durch die sogenannten regul¨aren Ausdr¨ucke gegeben.

3.1.6 Regul¨are Ausdrucke ¨

5. LR = (LR ) ; LR+

= (LR )+ .

Dabei verwendet man die folgende Definition von ’’ und ’+ ’ f¨ur Mengen von Worten:

Definition 3.1.19 (regul¨arer Ausdruck) Gegeben sei ein Terminalalphabet VT . 1. Jedes Symbol a 2 VT ist ein regul¨arer Ausdruck. 2. Das Symbol 0/ f¨ur die leere Sprache ist ein regul¨arer Ausdruck. 3. Sind R; S regul¨are Ausdr¨ucke, so auch RS. (Hierdurch wird Konkatenation ausgedr¨uckt.) 4. Sind R1 ; : : : ; Rn regul¨are Ausdr¨ucke, so auch (R1 j tiven).

:::

j Rn ), n  2 (Alterna-

5. Ist R ein regul¨arer Ausdruck, so auch R und R+ (bzw. (R) ; (R)+ ) (Wiederholung).

Definition 3.1.21 Sei A ein Alphabet und X

X  = fw1 : : : wn j wi 2 X ; i = 1; : : : ; n n  0g

X + = fw1 : : : wn j wi 2 X ; i = 1; : : : ; n n  1g

Regul¨are Ausdr¨ucke ben¨otigen keine Nichtterminalsymbole. Definition 3.1.20 Jedem regul¨aren Ausdruck r ist eine Menge Lr  VT wie folgt zugeordnet: 1. a 2 VT : La = fag.

 A .Dann ist

Beachte: 0/  = fεg.

3.2. ENDLICHE AUTOMATEN

79



Wir vergleichen die Ausdruckskraft:

b

1. Syntaxdiagramme ohne Referenzen = regul¨are Ausdr¨ucke, dargestellte Sprachen heißen regul¨are Sprachen

b

KAPITEL 3. PROZESSE UND SYSTEME

80

Ist ein vorgelegtes Wort vollst¨andig zeichenweise gelesen und danach ein Zustand q 2 F erreicht, so hat der EA das Wort akzeptiert.

b

2. Syntaxdiagramme mit Referenzen = BNF = kontextfreie Grammatik, dargestellte Sprachen heißen kontextfreie Sprachen

)

regul¨are Sprachen  kontextfreie Sprachen, d.h. die regul¨aren Sprachen sind ein spezieller Fall der kontextfreien. Merke: Klammerstrukturen sind kontextfrei, aber nicht regul¨ar.

Wir k¨onnen uns die Arbeit eines endlichen Automaten so veranschaulichen:

Beispiel 3.1.22 (Syntaxdiagramm) XLX

=

  - b a  6 X

fanbn j n  1g.

3.2 Endliche Automaten Automaten dienen dem Erkennen und Verarbeiten exakt definierter Strukturen. Definition 3.2.1 (endlicher Automat) Ein endlicher Automat ist ein Quintupel (Q; Σ; δ; q0; F ) wie folgt:

 Q ist eine endliche Menge sogenannter Zust¨ande  Σ ist ein Alphabet  q0 2 Q; q0 heißt Anfangszustand  δ : Q  Σ ! Q ist eine totale Funktion. Sie heißt Transitionsfunktion  F  Q, F heißt die Menge der Endzust¨ande. Anschaulich: Arbeitsweise eines EA:

 

Der Automat beginnt in Zustand q0. In jedem Schritt wird ein von außen vorgelegtes Zeichen a 2 Σ gelesen und der Zustand q in den neuen Zustand q0 = δ(q; a =) u¨ bergef¨uhrt.

a

b

c

x

p

q

.......

Lesekopf nur Bewegungen nach rechts

q

q0 , δ , F

aktueller Zustand, verändert sich

feste Bestandteile

Eingabemedium (Band) mit Wort über Alphabet

3.2. ENDLICHE AUTOMATEN

81

Das Transitionsdiagramm eines endlichen Automaten:





Zeichne jeden Zustand q als Knoten:

 q 

F¨ur jeden Fall qn = δ(qm ; a) zeichne einen Pfeil von qn nach qm und beschrifte ihn mit ’a’. Fasse alle Pfeile zwischen gleichen Knoten zu einem mit Mehrfachbeschriftung zusammen:

a q  n



;:::

 - q  m

e

Definition 3.2.3 (erweiterte Transitionsfunktion) Die erweiterte Transitionsfunktion δ wird rekursiv erkl¨art durch

e 2. e δ(q wa) = δ(e δ(q w) a) f¨ur alle q 2 Q w 2 Σ a 2 Σ. 1. δ(q; ε) = q f¨ur alle q 2 Q. ;

;

;

;

;

Satz 3.2.4 F¨ur die von einem endlichen Automaten A erkannte Sprache gilt S(A) = fw 2 Σ j δ(q0 ; w) 2 F g.

e

Zum Beweis zeigt man f¨ur w = a1 : : : an

eδ(q0 a1 ;

:::

ai ) = qi ; i = 0; : : : ; n:

Kennzeichne den Anfangszustand durch einen hereinf¨uhrenden Pfeil:

 

H H  q0 



KAPITEL 3. PROZESSE UND SYSTEME

82

Kennzeichne alle Endzust¨ande durch eine doppelte Umrandung:

  q  

Außer durch Transitionsdiagramme werden endliche Automaten auch durch Tabellen dargestellt, in denen man zu jedem Zustand und jedem Eingabezeichen den Folgezustand ablesen kann. Zus¨atzlich m¨ussen noch Anfangszustand und Endzust¨ande gekennzeichnet werden. Beispiel 3.2.5 (Tabelle zu einem EA)

! q0

f¨ur q 2 F .

q1 q2 q3 q4 q5 2 F q6

Exakte Definition der Arbeitsweise eines endlichen Automaten: Gegeben sei A = Dem Automaten werde ein Wort w = a1 : : : an ; ai 2 Σ; i = 1; : : : ; n vorgelegt. Der Automat durchl¨auft dann die Zust¨ande q0; q1; : : : ; qn mit

(W ; Σ; δ; q0; F ).

qi+1 = δ(qi ; ai+1 ); i = 0; : : : ; n ; 1:

a q1 q6 q4 q4 q6 q6 q6

b q6 q2 q3 q6 q5 q6 q6

c q6 q3 q6 q3 q6 q6 q6

Ist qn 2 F, so wird w von A akzeptiert, sonst nicht.

Das folgende Beispiel zeigt, wie ein erkennender Automat zu einem Verfahren erweitert wird, welches die vollst¨andige Verarbeitung enth¨alt:

Definition 3.2.2 (von einem EA akzeptierte Sprache) Die vom endlichen Automaten A akzeptierte (oder: erkannte) Sprache ist l (A) = fw j w 2 Σ; w = a1 : : : an; ai 2 Σ, so daß q1; : : : ; qn existieren mit qi+1 = δ(Qi ; ai+1; i = 0; : : : ; n ; 1 und qn 2 F g. Zu einer k¨urzeren Beschreibung von L(A) kommen wir mit Hilfe der erweiterten Transitionsfunktion δ : Q  Σ ! Q.

Beispiel 3.2.6 Es sollen Bin¨arworte zu folgendem Syntaxdiagramm erkannt und zugleich in die dargestellte Zahl umgewandelt werden:

e

  - 0    ? - . ? q - q  q - q 1 1   - 0

0

1

2

3

3.2. ENDLICHE AUTOMATEN

83

Das Syntaxdiagramm ist schon erg¨anzt um die Zust¨ande des endlichen Automaten.

Wir zeichnen nun auch den Automaten, notieren aber zus¨atzlich den jeweils dazugeh¨origen Verarbeitungsschritt. Dabei ist z den Wert der gerade gelesenen Ziffer (0 oder 1), w der aktuelle Gesamtwert der Bin¨arzahl und d eine Hilfsgr¨oße bei der Berechnung.

KAPITEL 3. PROZESSE UND SYSTEME

84

Die Informationen des Diagramms bringt man in praktischen Anwendungsf¨allen in die Form zweier Tabellen: Zustand 0 1 . sonst Aktion 0 1 . sonst (q)0 1 1 4 4 (q)0 1 1 0 0 4 0 1 1 1 2 1 2 2 3 2 3 3 4 2 4 4 0 4 0 3 3 3 4 3 5 5 0 4 0 4 4 4 4 4 0 0 0 4 0 Die Eintr¨age in der Aktionstabelle bedeuten: 0: “Fehlermeldung” 1: w := z 2: w := 2w + z 3: d := 12 4: w := w + 2  z 5: d := d2 ; w := w + d  z

3.3 Graphen 3.3.1 Einfuhrende ¨ Beispiele Graphen sind allgemeine mathematische Modelle f¨ur “Objekte” und “Verbindungen” zwischen diesen. Anschauliche Definition eines Graphen: Definition 3.3.1 Ein Graph besteht aus Knoten (oder Ecken, eng. ’nodes’ oder ’vertices’) und Kanten (oder B¨ogen, engl. ’edges’ oder ’arcs’), welche Knoten miteinander verbinden. Knoten und Kanten k¨onnen noch zus¨atzlich beschriftet sein. Beispiel 3.3.2 (Transtionsdiagramm eines endlichen Automaten)

Beispiel 3.3.3 (Elektrischer Schaltkreis)

R1

A

R2

B

U

Ein klassisches Beispiel: Beispiel 3.3.4 (Das K¨onigsberger Bruckenproblem) ¨

3.3. GRAPHEN

85

KAPITEL 3. PROZESSE UND SYSTEME

86

Der Graph besteht aus folgenden Teilen: C A

D

B

 

Knoten: A; B; C; D (Gebiete) Kanten: a; b; c; d ; e; f ; g (Br¨ucken)

Die L¨osung fand L EONHARD E ULER (1707-1783). Wir werden sie noch kennenlernen.

3.3.2 Ungerichtete und gerichtete Graphen Definition 3.3.5 (ungerichteter Graph) Ein ungerichteter Graph (’undirected graph’) ist ein Tripel G = (K ; B; δ) wie folgt:

Gesucht ist ein Weg, der genau einmal u¨ ber jede der sieben Br¨ucken f¨uhrt. Als Graph:

  

K ist eine nichtleere Menge, deren Elemente Knoten heißen B ist eine Menge, deren Elemente Kanten oder B¨ogen heißen δ : B ! ffk1 ; k2g j k1; k2 2 K g ist eine totale Abbildung

G heißt endlich, wenn K und B endlich sind. Beim Graphen zum K¨onigsberger Br¨uckenproblem ist z.B. δ(a) = fA; Bg; δ(b) = fA; Bg; δ(c) = fA; Cg: Bemerkung: Sind zwei Knoten h¨ochstens durch einen Bogen miteinander verbunden, so kann man einen Bogen b mit δ(b) identifizieren. Definition 3.3.6 (Schlinge) Eine Kante b mit δ(b) = fkg, d.h. k1 = k2 , heißt Schlinge (’loop’).

c

C d e b

A a

B

g D f

Definition 3.3.7 (Pfad, Zykel) Ein Pfad in einem ungerichteten Graphen G = (K ; B; δ) ist eine Folge b1; : : : ; bn von Kanten (n  0), so daß eine zugeh¨orige Folge k0 ; : : : ; kn von Knoten existiert mit δ(bi ) = fki;1 ; ki g, i = 1; 2; : : :; n. Ein Pfad ist ein Zykel, wenn k0 = kn ist. Definition 3.3.8 (Eulerscher Pfad, Zykel und Graph) Ein Pfad ist ein Eulerscher Pfad, wenn darin jede Kante des Graphen genau einmal vorkommt bzw. ein Eulerscher Zykel, wenn außerdem k0 = kn ist. Ein ungerichteter Graph heißt ein Eulerscher Graph, wenn es darin einen Eulerschen Zykel gibt. Definition 3.3.9 (Hamiltonscher Zykel, Graph) Ein Zykel, der alle Knoten des Graphen genau einmal enth¨alt, heißt ein Hamiltonscher Zykel. Ein ungerichteter Graph heißt ein Hamiltonscher Graph, wenn es darin einen Hamiltonschen Zykel gibt.

3.3. GRAPHEN

87

Beispiel 3.3.10 (Eulerscher Graph, nicht Hamiltonsch)

KAPITEL 3. PROZESSE UND SYSTEME

88

Weitere Begriffe zu ungerichteten Graphen: Definition 3.3.12 (azyklisch, zyklisch) Ein ungerichteter Graph, in dem es keinen Zykel gibt, heißt azyklisch, sonst zyklisch. Beispiel 3.3.13 (azyklisch)

s3

s

u

s

s

s6

u

s

;@ @ ; @ 4 ; 2 ; ; ; ; ; ; ; 5 1 ; ; @ ; @ @;

A A

u

u

  

 AA @ @ @     

u

u

u

u

Beispiel 3.3.14 (zyklisch)

u u u u u u P  BB PP P ; B ; B;  

Definition 3.3.15 (schlicht) Ein ungerichteter Graph heißt schlicht, wenn er keine Mehrfachkanten enth¨alt, d.h. δ(b1 ) = δ(b2) ) b1 = b2 f¨ur alle b1 ; b2 2 B, und keine Schlingen enth¨alt. Beispiel 3.3.11 (Hamiltonscher Graph, nicht Eulersch)

s

s

s

s

s

s

;@ ; ; ; @; ; ; ;@ @ ; ; @

Definition 3.3.16 (zusammenh¨angend) Ein ungerichteter Graph heißt zusammenh¨angend, wenn es zu je zwei Knoten einen Pfad gibt, dessen Knotenfolge beide Knoten enth¨alt. Die Relation f¨ur Knoten k1 ; k2 k1 y k2 , Es gibt einen Pfad von k1 nach k2 l¨aßt sich leicht exakt beschreiben: Sei k1 ! k2 , Es gibt einen Bogen b mit δ(b) = fk1 ; k2g. Dann ist ’y’ die reflexive, transitive H¨ulle von ’!’: ’y’=’!’. Folgerung: G ist zusammenh¨angend genau dann, wenn f¨ur k1 ; k2 2 K stets k1 ! k2 gilt. ¨ Bemerkung: ! ist eine Aquivalenzrelation, also reflexiv, symmetrisch und tran¨ sitiv. Sie zerteilt K in Aquivalenzklassen. Ist G zusammenh¨angend, so gibt es nur ¨ eine Aquivalenzklasse. Definition 3.3.17 (Grad) Der Grad eines Knotens ist die Anzahl der darin zusammentreffenden Kanten: γ(K ) = j fb j k 2 δ(b)g j (Anzahl der Elemente einer endlichen Menge). Im gerichteten Graphen:

3.3. GRAPHEN

89

γ+ (k) = j fb j (k; k0) 2 δ(b)g j “auslaufender Knotengrad” γ+ (k) = j fb j (k0 ; k) 2 δ(b)g j “einlaufender Knotengrad”

KAPITEL 3. PROZESSE UND SYSTEME

90 Weiter mit ungerichteten Graphen:

Satz 3.3.19 (Grad, Eulerscher Graph) F¨ur einen zusammenh¨angenden ungerichteten Graphen sind folgende Aussagen gleichwertig: 1. Der Graph ist ein Eulerscher Graph. 2. Bei jedem Knoten ist die Anzahl der hinf¨uhrenden B¨ogen geradzahlig. 3. Die Menge der B¨ogen l¨aßt sich auf disjunkte Zykel ohne Kreuzungspunkte aufteilen.

Beispiel 3.3.18 (Grad, ungerichteter Graph)

Beweis: 1 ) 2 : Ein Eulerscher Zykel geht bei einem Umlauf genauso oft in einen Knoten hinein wie er dort herauskommt und benutzt dabei nie denselben Bogen mehrfach. Also gilt 2. 2 ) 3 : Bilde einen ersten Zykel ohne Kreuzungspunkt,

s s s s s @ ; ; R @ ; YH ; H

s

Da man aus jedem Knoten wieder herauskommt, landet man bei einem solchen:

s s

*    - 

s

s

; ; @ @

; ;

Grad 3

Grad 2

Der Restgraph ist von gleicher Struktur oder leer. 3 ) 1 : Aufbau des Eulerschen Zykels aus der Folgerung: Ein ungerichteter zusammenh¨angender Graph besitzt einen Eulerschen Pfad genau dann, wenn entweder genau f¨ur zwei Knoten die Anzahl der hinf¨uhrenden B¨ogen ungeradzahlig ist oder f¨ur alle Knoten die Anzahl geradzahlig ist. Anwendung auf das K¨onigsberger Br¨uckenproblem Bemerkung: Hamiltonsche Graphen sind nicht so einfach zu charakterisieren. Definition 3.3.20 (gerichteter Graph) Ein gerichteter Graph ist ein System G = (K ; B; δ0; δ1):

  

K = Menge sogenannter Knoten, nichtleer B = Menge sogenannter B¨ogen δ0 : B ! K ; δ1 : B ! K

3.3. GRAPHEN

91

Definition 3.3.21 (Pfad, gerichteter Graph) Ein Pfad in einem gerichteten Graphen (K ; B; δ0; δ1 ) ist eine Folge b1; b2; : : : ; bn von B¨ogen, n  0, so daß eine Folge k0 ; k1 ; : : : ; kn von Knoten existiert mit δ0(bi ) = ki;1 ; δ1 (bi ) = ki ; i = 1; : : : ; n. Definition 3.3.22 (Adjazenzmatrix, gerichteter Graph) Sei G = (K ; B; δ0; δ1) ein gerichteter Graph. Dann heißt die Matrix AG = (ai j ), ai j = (9b 2 B : δ0 (b) = ki ^ δ1(b) = k j ! 1; 0) die Adjazenzmatrix von G. Definition 3.3.23 (Adjazenzmatrix, ungerichteter Graph) Sei G = (K ; B; δ) ein ungerichteter Graph. Dann heißt die Matrix AG = (ai j ), ai j = (9b 2 B : δ(b) = fki ; k j g ! 1; 0) die Adjazenzmatrix von G. Satz 3.3.24 (Adjazenzmatrix, Wegl¨ange) Sei G ein gerichteter Graph ohne Mehrfachkanten und A = (ai j ) die zugeh¨orige Adjazenzmatrix. Ferner sei Ar = Ar;1  A f¨ur r  2 und A1 = A. Dann gilt Ar = (r ) (ai j ), (r )

ai j

=

Anzahl der Wege der L¨ange r von ki nach k j .

Beweis: durch vollst¨andige Induktion Satz 3.3.25 (Adjazenzmatrix, zyklisch / azyklisch) Sei G ein gerichteter Graph, A seine Adjazenzmatrix. Dann gilt: G ist zyklisch , Ar 6= 0 f¨ur 1  r  n, G ist azyklisch , 9r : 1  r  n ^ Ar = 0. Definition 3.3.26 (Graph, vereinfachte Schreibweise) Ein schlichter ungerichteter Graph G = (K ; B; δ) wird vereinfacht geschrieben als G = (K ; E ) mit E = fδ(b) j b 2 Bg, ein schlichter gerichteter Graph G = (K ; B; δ0; δ1 ) in der Form G = (K ; E ) mit E = fδ0 (b); δ1 (b) j b 2 Bg. Definition 3.3.27 (Baum etc.) Ein schlichter, ungerichteter, azyklischer zusammenh¨angender Graph G = (K ; E ) zusammen mit einem ausgezeichneten Knoten k0 2 K heißt ein Baum mit Wurzel k0. Als Tiefe eines Knotens k bezeichnet man die L¨ange des Pfades von k0 nach k. Sind zwei Knoten k1; k2 direkt durch einen Bogen verbunden, so heißt der mit der geringeren Tiefe Vorg¨anger des anderen und der mit der gr¨oßeren Tiefe Nachfolger des einen. Die Knoten ohne Nachfolger heißen Bl¨atter des Baumes, die anderen heißen innere Knoten. Man zeichnet B¨aume mit der Wurzel nach oben und den Nachfolgern jeweils unter den Vorg¨angern. Klar ist: Jeder Knoten hat h¨ochstens einen Vorg¨anger. Nur der Wurzelknoten hat keinen Vorg¨anger.

KAPITEL 3. PROZESSE UND SYSTEME

92

Definition 3.3.28 (geordneter Baum) Ein Baum B = ((K ; E ); k0) heißt geordnet, wenn auf den Nachfolgern jedes inneren Knotens eine totale Ordnung festgelegt ist. Beispiel 3.3.29 (geordneter Baum) Ableitungsb¨aume zu kontextfreien Grammatiken sind geordnete B¨aume. Zu S ! AcB; A ! aAb; A ! a; B ! BBb; B ! c kann mat folgenden Ableitungsbaum konstruieren S H  

A

;@ ; @

c

HH H

B

;@ ; @

a A b

B B b

a A b

c c

;@ ; @

a Hinweis: Die Knoten sind nicht identisch mit ihren Beschriftungen. Will man den Graphen durch seine Knoten und Kanten beschreiben, so muß man f¨ur die Knoten eindeutige Bezeichnungen einf¨uhren.

3.4. PETRI-NETZE

93

KAPITEL 3. PROZESSE UND SYSTEME

94

3.4 Petri-Netze Petri-Netze sind Graphen mit 2 Arten von Knoten, bei denen Kanten nur Knoten verschiedener Art verbinden, sog. bipartite Graphen. Sie wurden 1962 von Carl-Adam Petri eingef¨uhrt als ein Modell f¨ur den Informationsfluß bei der automatischen Verarbeitung von Information. Zu den Ideen von Petri geh¨oren folgende Feststellungen, die zugleich Kritikpunkte in Bezug auf die klassischen Automaten darstellen:

 



T-Elemente: Quadrate, Rechtecke, eckige Formen



Kanten: als Linien bzw. Pfeile, wie bei Graphen u¨ blich

Informationsverarbeitung erfolgt r¨aumlich und zeitlich verteilt kooperierende nebenl¨aufige Prozesse ben¨otigen Synchronisationsmechanismen

Petri-Netze sind besonders gut geeignet f¨ur:

 

Synchronisation die Darstellung der Zusammenh¨ange zwischen Prozessen und Systemen

Beispiel 3.4.2 Das linke Netz ist ungerichtet, das rechte ist gerichtet.

Definition 3.4.1 Ein Petri-Netz ist ein Graph mit folgenden Eigenschaften: 1. Es gibt zwei Arten von Knoten: S-Elemente (state) und T-Elemente (transition). 2. Es gibt nur Kanten zwischen verschiedenartigen Elementen. 3. Jeder Knoten liegt an mindestens einer Kante. Ein Petri-Netz heißt gerichtet, wenn der Graph gerichtet ist. Definition in formaler Form: Ein Petri-Netz ist ein Graph G (K ; B; δ0; δ1 ) mit folgenden Eigenschaften: 1. K = S [ T ; S \ T

=

= (K ; B; δ)

bzw. Einige Anwendungsarten von Petri-Netzen:



2. δ(b) \ S 6= ; δ(b) \ T 6= f¨ur b ; fδ0(b); δ1(b)g 6= f¨ur b 2 B

1. Netze aus Instanzen und Kan¨alen

2

B bzw.

3. es existiert b mit k 2 δ(b) = fδ0(b); δ1 (b)g f¨ur alle k

fδ0(b) δ1(b)g 6= ;

T-Elemente: Instanzen, d. h. informationsverarbeitende Einheiten ¨ S-Elemente: Einheiten zur Ubertragung und Speicherung von Information. Kanten sind gerichtet: Richtung des Informationsflusses, Bedeutung: lesen, schreiben, . . .

Graphische Darstellung:



S-Elemente: Kreise, Ellipsen, runde Formen

Beispiel 3.4.3 Konfiguration eines Rechnersystems

3.4. PETRI-NETZE

95

seperater

gemeinsamer

seperater

Speicher 1

Speicher

Speicher 2

KAPITEL 3. PROZESSE UND SYSTEME

96

Arbeitszustand des Editors

Editieren eines Files

Loeschen alter Versionen

Prozessor 1

Prozessor 2

Kopplungskanal

Verlassen des Editors

Speicher 3

Einloggen

Eingabekanal

Ausgabekanal

Informieren ueber Files

Auftragszustand

seperater

Ausloggen

fehlerhaftes Einloggen

E.K.

Grundzustand

informieren

A.K.

3. Netze aus Aufgaben und Mitteln T-Elemente: Auszuf¨uhrende Aufgaben Multiplexeinheit

S-Elemente: Ben¨otigte und produzierte Mittel Kanten: gerichtet, Arbeitsfluß

....

Terminals

Beispiel 3.4.5 Programmverarbeitung

Editieren

2. Zustands-/Vorgangsnetze

Programmtext

T-Elemente: Vorg¨ange, welche Zust¨ande ver¨andern Uebersetzen

S-Elemente: Zust¨ande

Fehlermeldungen lauffaehig. Progr.

Kanten:gerichtet, bedeuten Wirkungen Eingabedaten

Beispiel 3.4.4 Benutzeroberfl¨ache eines Computersystems

Markierte Petri-Netze

Ausfuehren

Resultatdaten

3.4. PETRI-NETZE

97

Beispiel 3.4.6 Engpaß: Gegeben zwei nebenl¨aufige Abl¨aufe

KAPITEL 3. PROZESSE UND SYSTEME

98 Beispiel 3.4.7  Engpaß

A1 ;! A2 ;! A3 B1 ;! B2 ;! B3 mit der Bedingung, daß sich A2 und B2 zeitlich gegenseitig ausschließen. Modellierung: A1 ; A2 ; A3; B1 ; B2 ; B3 werden Zust¨ande. Der jeweils g¨ultige Zustand wird markiert durch Zuordnung einer Marke. Es wird ein zus¨atzlicher Zustand X eingef¨uhrt (quasi als Ampel). ¨ Es werden 4 Uberg¨ ange A1 =A2 ; A2=A3 ; B1 =B2 ; B2 =B3 eingef¨uhrt. Diese transportieren Marken von Eingangspl¨atzen auf Ausgangspl¨atze:

  

Zwei um 2 Mittel konkurrierende Prozesse Sukzessive Aufnahme von 2 Mitteln bei einem Prozeß Konkurrenz zweier solcher Prozesse

M2

Konflikt: t1 , t2

A1

A2

B1

t1

A1

t1

t3

B1

t4

B2

Prozesse A und B konkurrieren um M1 , M2

X B2

t3

t4 A3

t2 M2

t2 A2

A0 B 0

B3

Das sog. Schalten oder Feuern einer Transition t: t kann schalten, wenn alle hineinf¨uhrenden Stellen markiert sind, evtl. spielen Marken auf den nachfolgenden Stellen noch eine Rolle (siehe unten). Schalten bedeutet Entfernen der Marken im Vorbereich und Hinzuf¨ugen von Marken im Nachbereich. Es kann vorkommen, daß verschiedene schaltbereite Transitionen sich gegenseitig behindern, sei es durch Entziehen von Marken im gemeinsamen Vorbereich oder, wie wir sehen werden, im Nachbereich. Wir modellieren zun¨achst die sog. Bedingungs-/Ereignis-Netze (B/E-Netze): Eine Transition kann nur schalten, wenn alle Stellen des Vorbereich markiert sind und keine Stelle des Nachbereichs markiert ist.

M1

M2

A0

t2

t1 A1

A2 t4

t3 A3 t5 A4

Sukzessive Aufnahme zweier Mittel

3.4. PETRI-NETZE

99

Formale Beschreibung des Schaltens eines B/E-Netzes: und eine Anfangsmarkierung M0 : S ! f0; 1g Definiere Vor- und Nachbereich eines Knotens: x 2 S [ T; x = fyj9b 2 B : δ0 (b) = y ^ δ1(b) = xg; x = fyj9b 2 B : δ0 (b) = x ^ δ1(b) = yg: t 2 T ist schaltbereit bei Markierung M (s 2 t ) M (s) = 1) ^(s 2 t  ) M (s) = 0) Markierung nach Schalten von t: (S; T ; B; δ0; δ1 )

Mt (s) =

KAPITEL 3. PROZESSE UND SYSTEME

100

Wir f¨uhren jetzt auch paralleles Schalten ein: Zwei schaltbereite Transitionen, die sich gegenseitig nicht behindern, k¨onnen gleichzeitig schalten. dies gilt auch f¨ur n unabh¨angige schaltbereite Transitionen. Beispiel 3.4.8 Hier ist paralleles Schalten m¨oglich:

2 t ^ s 2 t  ! 0 s 2 t ^ s 2 t  ! 1 s 2 t ^ s 2 t  ! 1 s 2 t ^ s 2 t  ! M (s)) (s

=

;

A

B

C

D

;

= =

;

=

Schalten bei Stellen-/Transitionsnetzen mit/ohne Kapazit¨atsbeschr¨ankung. Spezialfall beim Schalten einer Transition:

t

s

Nach der bisherigen Definition kann t bei keiner Markierung schalten. Da man solche Situationen ber¨ucksichtigen will, formulieren wir die Schaltregel neu: Einen Transition ist schaltbereit, wenn 1. alle Stellen des Vorbereichs markiert sind und 2. alle Stellen des Nachbereichs, die nicht zum Vorbereich geh¨oren, nicht markiert sind. Das Schalten erfolgt dann so: 1. alle Stellen des Vorbereichs, die nicht auch zum Nachbereich geh¨oren, werden unmarkiert 2. alle Stellen des Nachbereichs werden markiert.

E

Wir haben dann

 

elementare Transitionen: A, B, C, D, E parallele Transitionen: AjjB, AjjD, CjjB, CjjD.

Der gesamte Systemzustand wird durch die Markierung des Netzes wiedergegeben (bei bekannter Struktur des Netzes). Formel: Mi : S ! f0; 1g zum Zeitpunkt i, oder Mi = f< s; Mi (s) > js 2 Sg. Definition 3.4.9 Sei P ein markiertes Petri-Netz mit einer Markierung M0 und M die Menge aller von M0 aus erreichbaren Markierungen von P. Dann wird der zugeh¨orige Markierungs¨ubergangsgraph G wie folgt gebildet: G ist ein gerichteter Graph. Die

3.4. PETRI-NETZE

101

Markierungen Mi 2 M bilden die knoten des Graphen. markierungen, die durch Schaltung ineinander u¨ bergehen, werden durch gerichtete Kanten verbunden. Die Kanten werden mit den zugeh¨origen Transitionen, elementaren oder parallelen, verbunden. Beispiel 3.4.10 zum Petri-Netz von oben:

KAPITEL 3. PROZESSE UND SYSTEME

102

Schaltgraph oder Folgengeflecht des Petri-Netzes bei vorgegebener Anfangsmarkierung. Zu Beispiel von oben:

B. 1

B. 2

A.1

A

A||B

A.2

...

A.n

C.2

C.n

A

Bildungsregeln: Knoten = Instanzierungen von Transitionen gerichtete Kanten = Weitergabe der Schaltbereitschaft Im folgenden werden einige Begriffe zur Charakterisierung verschiedener markierter Petri-Netze eingef¨uhrt.

usw.

Beispiel 3.4.11 Ein weiteres Beispiel ist:

Definition 3.4.12 Alle Markierungen, die von einer bestimmten Markierung M aus erreichbar sind, bilden eine Markierungsklasse von M. Alle Markierungen in der Markierungsklasse von M bilden die Knoten des Markierungs¨ubergangsgraphen mit M als Startmarkierung.

A

B

D.1

B C.1

B

B. 3

C D

Definition 3.4.13 Der Nebenl¨aufigkeitsgrad einer Markierungsklasse ist die Maximalzahl elementarer Transitionen, die im Markierungs¨ubergangsgraphen parallel vorkommen.

zugehoeriger Markierungsuebergangsgraph: C

B B||C

A

C B

D C||D

Beispiel 3.4.14 Der Markierungs¨ubergangsgraph von oben hat Kantenbeschriftungen A, B, C, D, BjjC, CjjD. Also ist der Nebenl¨aufigkeitsgrad der Markierungsklasse der Anfangsmarkierung gleich 2.

Start

C D

Bemerkung: auch als Petri-Netz auffaßbar! Eine weitere Sichtweise: die Struktur des Prozesses, bestehend aus den Transitionen:

Der folgende Begriff unterscheidet zwischen markierten Netzen, die leichter und solchen die schwerer zu durchschauen sind. Definition 3.4.15 Eine Markierung M heißt eine sichere Markierung, wenn f¨ur alle Markierungen ihrer Markierungsklasse gilt: Sind alle Stellen des Vorbereichs einer Transition markiert, so ist die Transition schaltbereit, d. h. die Ausgangsstellen, soweit nicht Eingangsstellen, sind unmarkiert. Andernfalls heißt die Markierung unsicher.

3.4. PETRI-NETZE

103

Beispiel 3.4.16 Das linke Netz ist sicher markiert, das rechte unsicher.

KAPITEL 3. PROZESSE UND SYSTEME

104

Sei dies die Anfangsmarkierung: A

F

F

C

B W

S

S

W

D H

E

H

F Wir analysieren jetzt die Arbeitsf¨ahigkeit von Netzen. Definition 3.4.17 Eine Transition heißt tot bei einer gegebenen Markierung, wenn sie bei keiner Markierung der zugeh¨origen Markierungsklasse schaltbereit ist.

Dieselben Prozesse erzeugt:

Beispiel 3.4.18 Bei dieser Markierung ist keine Transition tot, schaltet D, so sind B, A und D tot. Schaltet danach E abwechselnd mit F, so ist keine weitere Transition tot. Sobald C schaltet, sind alle Transitionen tot.

C E

A B

C D

F

E F

Definition 3.4.20 Eine Transition ist bei einer Markierung lebendig (eigentlich m¨ußte es ’unsterblich’ heißen), wenn es in der zugeh¨origen Markierungsklasse nur solche Markierungen gibt, von denen aus die Transition schaltbereit werden kann.

Ist eine Transition bei der Anfangsmarkierung tot, so kann sie samt den damit verbundenen Kanten gestrichen werden, ohne daß sich die Prozesse a¨ ndern. Beispiel 3.4.19 (aus dem vorherigen Beispiel entwickelt)

Beispiel 3.4.21 Die beiden Vierjahreszeiten haben nur lebendige Transitionen, auch das folgende Netz:

3.4. PETRI-NETZE

105

1. Es gibt Transitionen unter vorgegebenr Markierung, die weder tot noch lebendig sind: Sie k¨onnen noch mal dran kommen, aber es ist m¨oglich, daß sie in die Situation ’tot’ geraten.

H

F

2. Es gibt Markierungen, die weder tot noch lebendig sind: Es gibt lebendige Transitionen, aber dies sind nicht alle.

W

Tote Markierungen unterscheiden sich anschaulich oft wie folgt: Es gibt Endsituationen, denen eine Entscheidung vorausgeht, einen Prozeß zu beenden. Es gibt ferner Verklemmungen, die auf ung¨unstigen Entscheidungen bei Konflikten beruhen und aus Anwendersicht vermieden werden sollten. Eine formale Unterscheidung hierf¨ur gibt es bislang nicht.

S

Im folgenden Netz ist nur G nicht lebendig: C F

KAPITEL 3. PROZESSE UND SYSTEME

106

E

G

Beispiel 3.4.24 Beispiele fur ¨ Verklemmungen

H

Bsp. 1: V

Definition 3.4.22 Ein Petri-Netz heißt lebendig markiert, wenn darin alle Transitionen lebendig sind. Die Markierung heißt dann lebendige Markierung.

S R

Folgerung: Ein Petri-Netz ist h¨ochstens dann lebendig markiert, wenn alle Knoten im Markierungs¨ubergangsgraphen herausgehende Kanten besitzen. Nat¨urlich ist diese Bedingung nicht hinreichend, wie das letztgenannte Beispiel zeigt.

W

V

R V R||V R

S

W

S

Start

Endsituation

V Verklemmung W

R

Definition 3.4.23 Eine Markierung heißt tot, wenn es dazu keine schaltbereite Transition gibt. Folgerung: Tote Markierungen sind im Markierungs¨ubergangsgraphen durch Knoten ohne herausf¨uhrende Kanten charakterisiert. Veranschaulichung: tot lebendig Transition kommt nie wieder dran kann immer wieder dran kommen Markierung nichts geht mehr alle Transitionen k¨onnen immer wieder dran kommen Man mache sich folgendes klar:

Bsp. 2:

c

a

c

Verklemmung

a b

d

c

b

d

a Verklemmung

3.4. PETRI-NETZE

107

KAPITEL 3. PROZESSE UND SYSTEME

108

Beispiel 3.4.25 Beispiel zu Vergr¨oberung/Verfeinerung

Man kann verklemmungsfreieErsatznetze bilden: Bsp. 1:

Bsp. 1: ZR

R

R

S

Sp

V U

EAI

W E

A E

A

Bsp. 2: feines Netz

grobes Netz Bsp. 2:

a

c

A

A

C

b

d

Wir wenden uns noch einmal den nichtmarkierten Netzen zu. Wir betrachten folgende Arten von Netztransformationen: Vergr¨oberung: Fortlassen von Detail-Information u¨ ber die Struktur. Verfeinerung: hinzuf¨ugen struktureller Information. Faltung: Eine spezielle Form der Vergr¨oberung. Abwicklung: Eine spezielle Form der Verfeinerung. Dabei wird sich folgendes ergeben: Vergr¨oberung und Verfeinerung sind die Umkehrung voneinander, ebenso Faltung und Abwicklung. Hieran k¨onnen wir die Definition der Begriffe Prozeßnetz und Systemnetz anschließen. Zun¨achst definieren wir als Hilfsbegriffe transitionsberandete und stellenberandete Teilnetze.

B

C

D

feines Netz

grobes Netz

Definition 3.4.26 Sei P ein Petri-Netz mit Knotenmenge K und 6= X  K. X bildet zusammen mit allen Kanten, die Knoten aus X verbinden, ebenfalls ein Petri-Netz. Dieses heißt transitionsberandet, wenn in P alle Knoten aus X, die mit einem Konten aus K n X verbunden sind, T-Knoten sind, es heißt stellenberandet, wenn alle Knoten aus X, die mit einem Knoten aus K n X verbunden sind, S-Knoten sind. Beispiel 3.4.27 Dialog mit einem Rechner

3.4. PETRI-NETZE

Benutzeraktion 1

109

Eingabe 1

Rechneraktion 1

Zustand 1

Eingabe 2

Rechneraktion 2

Zustand 2

Rechneraktion 3

Zustand 3

Ausgabe 2

Benutzeraktion 3

Eingabe 3

Ausgabe 3

Zustand 4

Durch Faltung entsteht ein Netz f¨ur ein Dialog-System: Eingabekanal Benutzer Rechner

Ausgabekanal

KAPITEL 3. PROZESSE UND SYSTEME

Definition 3.4.28 Durch eine Vergr¨oberung werden n  0 disjunkte transitions- bzw. stellenberandete Teilnetze durch je eine einzige Transition bzw. Stelle ersetzt. Die umkehrung heißt Verfeinerung. Definition 3.4.29 Eine Vergr¨oberung heißt Faltung, wenn zwei direkt durch eine Kante verbundene Knoten dabei getrennt bleiben, d. h. nicht demselben Teilnetz angeh¨oren, welches durch einen Knoten ersetzt wird. Die Umkehrung heißt Abwicklung.

Ausgabe 1

Benutzeraktion 2

110

Speicher

Definition 3.4.30 Ein gerichtetes Petri-Netz ohne Zyklen heißt Prozeßnetz. Entsteht hieraus durch Faltung ein weiteres Netz, so ist dieses ein zugeh¨origes Systemnetz. Aus dem Systemnetz entstehen durch Abwicklung (verschiedene) Prozeßnetze.

3.5. DYNAMISCHE SYSTEME

3.5 Dynamische Systeme (Text fehlt)

111

112

KAPITEL 3. PROZESSE UND SYSTEME

114



KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING Schwierigkeiten der Darstellung

Techniken und Strategien des Probleml¨osens

Kapitel 4 Problemstrukturen und Problemsolving Problembeschreibung und Spezifikation

      

Anforderungen an die Problembeschreibung

Allgemeine Strategien

Softcomputing-Ans¨atze des Problemsolving

  

Fuzzy-Technik Neuronale Netze Evolution¨are Verfahren

Notation in einer formalen Spezifikationssprache

In diesem Kapitel befassen wir uns mit m¨oglichen Aufgabenstellungen f¨ur den Computer, d.h. f¨ur automatische Probleml¨osungen, und mit Beschreibungen von Problemen. Probleme sind in diesem Zusammenhang nichts Anderes als Aufgabenstellungen.

Formale Spezifikation, Datenspezifikation, Constraint Beispiel: Sortieren Einzelprobleme, Problemklassen, Probleminstanzen

Constraintprobleme

Optimierungsprobleme

Constraint-Optimierungsprobleme Beispiel: Rucksack-Problem



Heuristischer Weg

4.1 Problembeschreibung und Spezifikation

Beispiel: Traveling-Salesman-Problem



Algorithmischer Weg

Beispiele

Beispiel: n-Damen



Analytischer Weg

Mathematisch exakte Beschreibung und formale Spezifikation

Problemarten und Darstellung von Problemen



   

4.1.1 Anforderungen an die Problembeschreibung Eine Problembeschreibung muß klar und verst¨andlich sein. Einfache Probleme lassen sich in nat¨urlicher Sprache so beschreiben. Bei komplexen Problemstellungen kommt man meistens nicht ohne Formaln aus, d.h. Teile der Beschreibung sind exakt abgefaßt, nat¨urlich mathematisch exakt. Wir beschreiben auch einfache Probleme mathematisch exakt, erstens zur Ein¨ubung in die Methoden, zweitens aber auch im Hinblick darauf, daß exakte Beschreibungen notwendig sind, um sp¨ater von Programmen beweisen zu k¨onnen, daß sie das Problem l¨osen. Mathematisch exakte Beschreibungen von Anforderungen heißen formale Spezifikationen. Beispiel 4.1.1 Bestimme zu einer nat¨urlichen Zahl n die kleinste Primzahl, die gr¨oßer als n ist.“ ”

Wahl der Darstellung 113

4.1. PROBLEMBESCHREIBUNG UND SPEZIFIKATION

115

Diese Beschreibung ist exakt und verst¨andlich. Eine mathematisch exakte Beschreibung ist die folgende: Gegeben: n 2 N

Gesucht: m 2 N mit prim(m) ^ (m > n) ^8 p : ( prim( p) ^ p > n) ! p  m Man ben¨otigt hierzu pr¨adikatenlogische Formeln und setzt die darin vorkommenden Pr¨adikate >,  und prim als gegeben voraus. Wir k¨onnen aber auch prim durch eine eigene Spezifikation beschreiben: Spezifikation prim(x):

Gegeben: x 2 N

Gesucht: b 2 fT RUE ; FALSE g mit b = (8y : teiler(y; x) ! y = 1 _ y = x) ^ x > 1 Auch teiler(x; y) (d.h. y ist Teiler von x) k¨onnen wir weiter erkl¨aren, und zwar entweder durch eine neue Spezifikation:

116

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

4.1.2 Notation in einer formalen Spezifikationssprache In den sogenannten formalen Spezifikationssprachen wird noch st¨arker festgelegt, wie Spezifikationen zu schreiben sind. Wir betrachten Beispiele in Anlehnung an die Sprache Z: Beispiel 1 n:N m:N prim(m) ^ (m > n) ^ (8 p : (( prim( p) ^ p > n) ! p  m)) prim(x) x:N b:B b = (8y : ((9z : (y  z) = x) ! y = 1 _ y = x) ^ x > 1) Eine solche Beschreibung besteht aus drei Teilen: ¨ 1. Spezifikationskopf: Eine Uberschrift oder eine Funktion mit Argumenten 2. Eine Datenspezifikation f¨ur die Eingabeparameter 3. Eine Datenspezifikation f¨ur das Resultat

Spezifikation teiler(x; y): Gegeben: y; x 2 N

Gesucht: b 2 fT RUE ; FALSE g b = 9z : y  z = x oder durch direktes Einf¨ugen:

Der Teil 2 kann fehlen, etwa wenn wir im Beispiel 1 den Parameter n durch die Konstante 50 ersetzen. Beispiel 2 m:N prim(m) ^ (m > 50) ^ (8 p : (( prim( p) ^ p > 50) ! p  m))

Spezifikation prim(x):

4.1.3 Formale Spezifikation, Datenspezifikation, Constraint

Gesucht: b 2 fT RUE ; FALSE g mit

Jede Datenspezifikation besteht aus einer oder mehreren Variablendeklarationen vi : Di mit Wertebereichen Di und gegebenenfalls einer einschr¨ankenden Formel, welche ein Constraint genannt wird.

Gegeben: x 2 N

b = 8y : ((9z : (y  z) = x) ! y = 1 _ y = x) Wir k¨onnen nat¨urlich in der allerersten Aufgabenstellung auch prim direkt ersetzen. Dies erschwert aber die Lesbarkeit. Hinzu kommt, daß wir an zwei Stellen die Ersetzung vornehmen m¨ußten, also die Beschreibung unn¨otig l¨anger machen w¨urden.

Beispiel 4.1.2 (Sortieren) Gegeben: ein Vektor (Array) A mit reellen Komponenten a1 ; : : : ; an. Gesucht: eine Umsortierung der Komponenten a01 ; : : : ; a0n, so daß a01  a02  : : :  a0n. Mathematisch exakter ist folgende Formulierung:

4.1. PROBLEMBESCHREIBUNG UND SPEZIFIKATION

117

Gesucht ist eine Permutation (a01 ; : : : ; a0n) von (a1 ; : : : ; an), so daß a01  0 : : :  an .

4.2 Problemarten und Darstellung von Problemen

Die formale Beschreibung lautet jetzt so: Sortieren(a1 ; : : : ; an) ai : R; i = 1; : : : ; n ai : R; i = 1; : : : ; n (a01 ; : : : ; a0n ) 2 perm(a1 ; : : : ; an ) ^ ( j  k ) a0j  a0k ) Die Menge perm(a1 ; : : : ; an) aller Permutationen von a1 ; : : : ; an kann man auch auf der Grundlage der folgenden rekursiven Mengendefinition spezifizieren: 1. (a1 ; : : : ; an) 2 perm(a1 ; : : : ; an) 2. (b1 ; : : : ; bi; bi+1 ; : : : ; bn) 2 perm(a1 ; : : : ; an); 1 (b1 ; : : : ; bi+1; bi ; : : : ; bn ) 2 perm(a1 ; : : : ; an ).



i



n

;

1

)

Bei aller Vielfalt der in der Praxis auftretenden Probleme treten doch immer wieder Probleme a¨ hnlicher Art auf, die dann eine a¨ hnliche Behandlung erfordern. Die folgenden Problemarten werden im Bereich des Problemsolving, einem Zweig der sogenannten K¨unstlichen Intelligenz, der auch im dazu benachbarten Bereich des sogenannten Operations Research, einem Bindeglied zwischen Mathematik und Wirtschaftswissenschaften, modelliert und systematisch analysiert. a) Constraint Probleme (auch Erf¨ullungsprobleme) Diese haben folgende abstrakte Form: Gegeben:

  

4.1.4 Einzelprobleme, Problemklassen, Probleminstanzen Jetzt soll sch¨arfer zwischen Einzelproblem und allgemeineren Klassen von Problemen unterschieden werden. Beispiel 4.1.3 Folgendes sind Einzelprobleme, erkennbar daran, daß sie ohne ver¨anderliche Eingabe formuliert werden k¨onnen: a) Bestimme die Fakult¨at von 5, d.h. 1  2  3  4  5 b) Sortiere den Array (10 7 3 6 8 2) F¨ur solche Probleme braucht man keine o¨ fter zu benutzenden Programme, z.B. wird a) gel¨ost“ durch die Anweisung: ” Schreibe 120“ ” und b) durch Schreibe (2 3 6 7 8 10)“. ” Probleme mit ver¨anderlichen Eingabeparametern heißen Problemklassen. Beispiel 4.1.4 a) Bestimme die Fakult¨at von n b) Sortiere den Array (a1 ; : : : ; an) Ein Einzelproblem aus einer Klasse heißt eine Probleminstanz dieser Klasse.

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

118

n Variablen x1 ; : : : ; xn; x  1, n Wertebereiche D1 ; : : : ; Dn, so daß gilt: xi : Di m Constraints, das sind logische Formeln c1 (x1 ; : : : ; xn); : : : ; cm(x1 ; : : : ; xn), in denen die Variablen alle oder zum Teil vorkommen.

Gesucht:



n Werte a1; : : : ; an; ai 2 Di , so daß c1 (a1 ; : : : ; an) = : : : = cm (a1 ; : : : ; an) = T RUE

Beispiel 4.2.1 (n-Damen) Auf einem n  n-Schachbrett sind n Damen so zu verteilen, daß sich keine zwei Damen gegenseitig bedrohen, d.h. keine gemeinsame Zeile oder Spalte besetzen und auch nicht diagonal benachbart sind. n Variablen: x1 ; : : : ; xn (xi entspricht der Figur in Zeile i) n Wertebereiche: Di = D = 1; : : : ; n. Folgende Constraints: xi 6= x j f¨ur i 6= j, das sind n2 = n(n2;1) Constraints. (Bedeutung: nicht in derselben Spalte) i + xi 6= j + x j f¨ur i 6= j, i ; xi 6= j ; x j f¨ur i 6= j, das sind n(n ; 1) Constraints. (Bedeutung: nicht diagonal benachbart) Hier ist eine formale Spezifikation dazu: N ; Damen(n) n:N n4 xi : f1; 2; : : : ; ng; i = 1; 2; : : :; n i 6= j ) x1 6= x j ^ i + xi 6= j + x j ^ i ; xi 6= j ; x j

;

4.2. PROBLEMARTEN UND DARSTELLUNG VON PROBLEMEN

119

Weitere Beispiele zu Constraint-Problemen:

b) Optimierungsprobleme Die abstrakte Form ist die folgende: Gegeben:

Beispiel 4.2.2 (Kryptoarithmetik) Es handelt sich um R¨atsel-Aufgaben wie

 

SEND +MORE MONEY

n Wertebereiche D1 ; : : : ; Dn eine Abbildung f : D1  : : :  Dn ! R

Gesucht:



Darstellung als Constraint-Problem: Variable: fS; E ; N ; D; M ; O; R; Y g = V

n Werte a1 ; : : : ; an; ai 2 Di , so daß

f (b1 ; : : : ; bn)  f (a1 ; : : : ; an) f¨ur alle bi 2 Di

Wertebereiche: f0; 1; : : : ; 9g

(Spezialfall Minimierungsproblem)

Constraints:

bzw.

 u= 6 v f¨ur alle verschiedenen u v 2 V 103  S + 102  E  + 103  M + 102  O = 104  M + 103  O + 102  N

f (b1 ; : : : ; bn)  f (a1 ; : : : ; an) f¨ur alle bi 2 Di

;

+ + +

10  N 10  R 10  E

+ + +

D E Y

a¨ hnliche Aufgaben:

 

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

120

HEMD+HOSE=JACKE ROAD+CROSS=DANGER

Beispiel 4.2.3 (Graphenf¨arbung) Gegeben sei ein Graph G = (V; E ) (jedes e 2 E hat die Form fv1 ; v2g; v1; v2 2 V ) und eine nat¨urliche Zahl k; 1  k  jV j. Gesucht ist eine Abbildung f :V

! f1

; : : :;

kg

mit f (u) 6= f (v), falls fu; vg 2 E Variable: Knoten Wertebereiche: f1; : : : ; kg f¨ur alle Constraints: u 6= v f¨ur alle fu; vg 2 E (Die Standard-Constraint-Formulierung ben¨otigt die Funktion f nicht!) Dieses Problem ist aus zwei Gr¨unden wichtig: 1. Es ist eine abstrakte Form vieler praktischer Probleme. 2. Es geh¨ort zu den Problemen, die in der Informatik als sehr schwierig erkannt wurden (f¨ur k > 2).

(Spezialfall Maximierungsproblem) Man kann Minimierungsprobleme in Maximierungsprobleme umwandeln und umgekehrt. Ein Spezialfall ist die ganzzahlige Optimierung mit f : D1  : : :  Dn ! N oder ! Z. Beispiel 4.2.4 (Travelling-Salesman-Problem) Gegeben seien n St¨adte“ 1; 2; : : :; n (vereinfacht f¨ur s1 ; s2 ; : : : ; sn ) und Distanzen ” di j 2 N1 (= f1; 2; : : :g) f¨ur alle i; j 2 f1; : : : ; ng; i 6= j, wobei di j = d ji gilt. Gesucht ist die k¨urzeste Rundtour durch alle St¨adte, wobei jede Stadt genau einmal zu besuchen ist. Darstellung in der Standard-Form:

 

ein Wertebereich D = perm(1; : : : ; n), Abbildung f : D ! N, f (i1 ; : : : ; in) =

n;1

∑ dikik

+1

+ din i1

k=1

als zu minimierende Funktion. Dieses Problem ist f¨ur die Praxis von großer Bedeutung. Es ist ein sehr schwieriges Problem unter der Zielsetzung, in annehmbarer Zeit eine L¨osung zu ermitteln. c) Constraint-Optimierungsprobleme Die beiden vorher genannten Problemarten treten jetzt kombiniert auf. Gegeben:

4.2. PROBLEMARTEN UND DARSTELLUNG VON PROBLEMEN

   

121

122

n Variable x1 ; : : : ; xn ; n  1,

Beispiel 4.2.6 (n-Damen) Das Constraint

i 6= j ) xi 6= x j ^ i + xi 6= j + x j ^ i ; xi 6= j ; x j

n Wertebereiche D1; : : : ; Dn mit xi : Di ,

wird u¨ berf¨uhrt in die zu minimierende Funktion f : f1; : : : ; ng n ! N,

m Constraints ck (x1 ; : : : ; xn); k = 1; : : : ; m,

f (x1 ; : : : ; xn) = jf(i; j)j(i < j) ^ (xi = x j _ i + xi = j + x j _ i ; xi = j ; x j )gj.

eine Abbildung f : D1  : : :  Dn ! R

3. Eine Optimierungsbedingung l¨aßt sich durch eine logische Formel, also durch ein Constraint ersetzen.

Gesucht:



n Werte a1 ; : : : ; an; ai 2 Di , so daß ck (a1 ; : : : ; an) = T RUE f¨ur k = 1; : : : ; m und f (b1 ; : : : ; bn)  f (a1 ; : : : ; an) (bzw. )

f¨ur alle bi 2 Di , die auch die Bedingung ck (b1 ; : : : ; bn) = T RUE ; k = 1; : : : ; m erf¨ullen. Beispiel 4.2.5 (Rucksackproblem) Es geht darum, eine optimale Auswahl von Gegenst¨anden in einen Rucksack zu packen, ohne dessen Kapazit¨at zu uberschreiten. ¨ F¨ur die n Objekte sind Werte vi 2 N und Kapazit¨atsanteile ki 2 N gegeben. Die Kapazit¨at des Rucksacks wird als K 2 N angegeben. Optimal ist die Auswahl mit maximalem Wert. Die drei vorgestellten Problemarten sind untereinander austauschbar, man kann also die Problemart w¨ahlen. Hierf¨ur sind in der Praxis die Verst¨andlichkeit der Darstellung und die Wahl der L¨osungsverfahren ausschlaggebend. ¨ Folgendes sind die wichtigsten Uberlegungen hierzu: 1. In Constraint-Optimierungsproblemen lassen sich die Constraints durch Umdefinition der Wertebereiche eliminieren.

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

Diese Umformung hat mehr prinzipiellen Charakter und ist nicht so sehr von praktischer Bedeutung. Zum Schluß dieses Abschnittes sei darauf hingewiesen, daß das Auffinden einer Darstellung zu einem gegebenen Problem sich bereits schwierig gestalten kann. Dies ist insbesondere dann der Fall, wenn das Problem sich auf anschauliche Vorstellungen st¨utzt, deren abstrakte Komplexit¨at dem Betrachter nicht bewußt ist. Beispiel 4.2.7 (Pentominos) ¨ Hier handelt es sich um eine Legespiel, also die Uberdeckung von Fl¨achen mit vorgegebenen Spielsteinen unterschiedlicher Form.

4.3 Techniken und Strategien des Probleml¨osens Dieser Abschnitt soll einen Einblick in die grunds¨atzlichen Vorgehensweisen beim L¨osen von Problemen mit Hilfe des Computers geben. Hierauf basieren unter anderem

  

die Technik des strukturierten Programmierens Methoden der kombinatorischen Optimierung und des Operations Research Methoden der K¨unstlichen Intelligenz

Wir stellen drei prinzipiell unterschiedliche Ans¨atze vor:

Zum Constraint-Optimierungsproblem mit x1 ; : : : ; xn; D1; : : : ; Dn; c1(xi ); : : : ; ck (xi ); f ergibt sich folgendes reines Optimierungsproblem: x; D = f(a1 ; : : : ; an) 2 D1  : : :  Dnjc j (a1 ; : : : ; an) = T RUE ; j = 1; : : : ; kg; f . 2. Zu reinen Constraint-Problemen lassen sich Funktionen konstruieren, welche ihr Minimum dort annehmen, wo die Constraints erf¨ullt sind.

1. Die analytische Vorgehensweise: Diese Methode st¨utzt sich auf das abstrakte, mathematische Problemverst¨andnis. 2. Die algorithmische Vorgehensweise: Im Vordergrund steht der Prozeß der Probleml¨osung. Durch geschickte Zerlegung des Prozesses gewinnt man eine Darstellung des L¨osungsprozesses.

¨ 4.3. TECHNIKEN UND STRATEGIEN DES PROBLEMLOSENS

123

Es werden Erfahrungen bei der L¨osung von Problemen eingesetzt.

4.3.1 Die analytische Vorgehensweise Es wird eine umfangreiche Problemanalyse vorgenommen. Dabei k¨onnen sich Hinweise auf eine besonders g¨unstige L¨osungskonstruktion ergeben, oder es l¨aßt sich sogar mathematisch eine Formel f¨ur die L¨osung herleiten. Beispiel 4.3.1 (Fibonacci-Zahlen) Welches ist die n-te Zahl der Folge

y  1 + 0; 5x

y  6 ; 2x

y

Eine mathematische Analyse ergibt mit x1 =

Beispiel 4.3.3 (Lineare Optimierung) Minimiere f (x1 ; : : : ; xn), so daß gi (x1 ; : : : ; xn )  0; i = 1; : : : ; k, mit linearen Funktionen f ; gi . Beispiel:

y  0 (d.h. ;y  0)

f ib(i + 2) = f ib(i + 1) + f ib(i)?

; ;

Benutze die n = 5-L¨osung erst auf den 5  5-Feldern des 25  25-Brettes und in jedem der besetzten Felder noch einmal.

f (x; y) = 3x + 2y = min!

f ib(0) = f ib(1) = 1,

f ib(n) =

Beispiel: n = 5 / n = 25:

x  1 (d.h. 1 ; x  0)

f ib(n); n = 0; 1; 2; : : :,

x2n+1 x2

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

2. Gewisse L¨osungen f¨ur n lassen sich auf n2 ausdehnen.

3. Die heuristische Vorgehensweise:

x1n+1 x1

124

p 1

1 2+2

5; x2 =

1 2

p 1

;2

5

Durch Einsetzen wird dieses Ergebnis leicht best¨atigt. Man braucht also nicht alle Glieder der Folge bis zum n-ten Element zu errechnen. Beispiel 4.3.2 (n-Damen) Eine Analyse zeigt, daß man aus L¨osungen f¨ur bestimmte n L¨osungen f¨ur andere n konstruieren kann: 1. Hat man eine L¨osung f¨ur n, bei der die Hauptdiagonale nicht belegt ist, so kann man diese zu einer L¨osung f¨ur n + 1 erweitern. Beispiel: n = 4 / n = 5:

111111 000000 000000 111111 000000 111111 y=6-2x 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 y=1+0,5x 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 0000000000 1111111111 000000 111111 000000 111111 000000 111111 000000 111111

1111 0000 0000 1111 0000 1111 0000 1111

x

Die mathematische Analyse ergibt: Man braucht die optimale L¨osung nur unter den Eckpunkten zu suchen (! Simplex-Verfahren).

4.3.2 Die algorithmische Vorgehensweise

11 00 00 11 00 11

Es wird versucht, den L¨osungsweg auf die L¨osung von Teilproblemen zur¨uckzuf¨uhren. Erreicht man dabei am Ende triviale Teilprobleme, so l¨aßt sich der gesamte L¨osungsprozeß hinschreiben. Der wichtigste Fall ist die rekursive R¨uckf¨uhrung auf dasselbe Problem.

¨ 4.3. TECHNIKEN UND STRATEGIEN DES PROBLEMLOSENS

125

Beispiel 4.3.4 (Sortieren) Sortieren(a1 ; : : : ; an) l¨aßt sich erreichen durch 1. Sortieren von (a1 ; : : : ; ai ); (i 

n 2)

126

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

4.3.4 Allgemeine Strategien Ebenfalls aus Erfahrungen stammen die allgemeinen Strategien des Problemsolving. Sie r¨ucken bestimmte Betrachtungsweisen in den Vordergrund.

2. Sortieren von (ai+1 ; : : : ; an)

Vorw¨arts- und Ruckw¨ ¨ arts-Strategie

3. Zusammenmischen der sortierten Listen

Sind eine Anfangs- und eine Endsituation gegeben und ein verbindender Weg mit Zwischenschritten gesucht, so konzentriert sich die Vorw¨arts-Strategie auf den Weg vom Anfang her, die R¨uckw¨arts-Strategie auf den Weg vom Ende her. Beispiele: Logisches Schließen, Planungen

Das Verfahren wird rekursiv angewendet. Beispiel dazu: Sortiere(7 1 5 8 6 2 4 3 9). Diese Vorgehensweise f¨uhrt zu einer schnellen Programmierung durch den Benutzer, ergibt aber auch ein recht gutes Verfahren.

Beispiel 4.3.6 (Erkennen eines Wortes zu einer gegebenen Grammatik) Hier spricht man auch von der Top-Down-Methode: Start beim Startsymbol S, Ableitungsschritte bis zum Wort w, und von der Bottom-Up-Methode: Start mit w und R¨uckw¨arts-Ableitungsschritte bis S.

4.3.3 Die heuristische Vorgehensweise Generate & Test Wenn die analytische Vorgehensweise h¨ochstens zu aufwendigen L¨osungen f¨uhrt, die auf dem Computer eine zu hohe Rechenzeit erfordern (etwa astronomisch hoch) und auch die algorithmische Vorgehensweise keine zus¨atzlichen Einsichten liefert, bleibt folgender Ausweg: Man f¨uhrt eine systematische Suche nach der L¨osung durch und setzt allgemeine Erfahrungen ein, um den Aufwand dabei zu vermindern. Eventuell verzichtet man auch auf exakte oder optimale L¨osungen und begn¨ugt sich mit Approximationen. Beispiel f¨ur eine heuristische Technik, die Aufwand spart, aber zur optimalen L¨osung f¨uhrt: k¨urzester Weg im 8er-Puzzle. Die heuristische Technik lautet: unter den m¨oglichen Schritten w¨ahle man einen solchen, f¨ur den die durchgef¨uhrten Schritte plus die Anzahl der noch falschen Positionen am geringsten ist. Mann kann diese Heuristik noch verbessern. Beispiel f¨ur eine heuristische Technik f¨ur Optimierungsprobleme, die Aufwand spart, aber nicht das Optimum liefert:

Man erzeugt erst L¨osungskandidaten, von denen man vermutet, daß sie eine L¨osung darstellen k¨onnten, und testet aus, ob sie tats¨achlich die Bedingungen an eine L¨osung erf¨ullen. Die Strategie ist f¨ur Constraint-Probleme geeignet, nicht f¨ur Optimierungsprobleme. Exhaustive Search Diese Strategie kann aus der vorherigen hergeleitet werden, indem der Wertebereich voll durchsucht wird. Damit lassen sich nun auch Optimierungsprobleme l¨osen, im Allgemeinen aber nur mit einem zu hohen Aufwand. Es gibt viele Strategien auf a¨ hnlich abstrakter Ebene. Sie geh¨oren zum Wissensbestand der K¨unstlichen Intelligenz beziehungsweise der Wissensverarbeitung.

4.4 Softcomputing-Ans¨atze des Problemsolving Die Greedy-Heuristik Baue die L¨osung schrittweise auf. W¨ahle dabei in jedem Schritt die Alternative, die aus momentaner Sicht am g¨unstigsten erscheint. Beispiel 4.3.5 (Travelling-Salesman-Problem) Beginne in 1. W¨ahle stets die n¨achstgelegene Stadt unter den noch vorhandenen. Man kann zeigen, daß dabei die optimale Tour eventuell nicht erreicht wird.

Die Bezeichnung Softcomputing bezieht sich auf Methoden, die wie die FuzzyTechnik diskrete Unterscheidungen wie 0 oder 1, FALSE oder T RU E, durch ¨ gl¨attende Uberg¨ ange zu ersetzen versuchen. Im Wesentlichen handelt es sich dabei um

 

die Anwendung Neuronaler Netze die Fuzzy-Technik und

¨ 4.4. SOFTCOMPUTING-ANSATZE DES PROBLEMSOLVING



127

evolution¨are Verfahren

Es haben sich folgende weitgehend gemeinsame Ideen als entscheidend f¨ur den Erfolg der Methoden herausgebildet:

     

Black-box“-L¨osungen ” Analogien zu nat¨urlichen Systemen Kontinuierliche Daten Vage Werte Probabilistische Werte Holistische Problemsicht

Die herk¨ommlichen Methoden heißen, bezogen auf die Informatik, symbolorientiert. Aus der Sicht der aufgez¨ahlten Ideen betrachten wir die wichtigsten Ans¨atze:

128

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

das gew¨unschte Verhalten des Netzes. Am Ende weiß man - im Erfolgsfall - daß das Netz in Einzelf¨allen wie gew¨unscht funktioniert, aber nicht im Detail, warum es funktioniert. Dies ist offensichtlich eine Systemkonstruktion als Blackbox“” L¨osung. Das nat¨urliche Vorbild der Neuronalen Netze ist das Gehirn bei Mensch und Tier. Die darauf basierende Systembeschreibung f¨uhrt zun¨achst zu kontinuierlichen Daten, die aber diskretisiert werden. Es geh¨ort zum typischen Verhalten Neuronaler Netze, auf geringe Abweichungen bei Eingabedaten, stetig und weitgehend unempfindlich zu reagieren. Die Werte brauchen daher nur vage vorzuliegen. Es gibt dar¨uber hinaus spezielle Fuzzy-Versionen Neuronaler Netze. Man spricht hierbei von der Neuro-Fuzzy-Technik. Probabilistische Werte treten nur in bestimmten Situationen auf, etwa wo eine willk¨urliche Entscheidung vorzunehmen ist. Betrachtet man jedoch Netze, die bei Eingabe oder Verarbeitung von Informationen St¨orungen unterworfen sind, so treten systematisch probabilistische Werte auf. Das Verhalten Neuronaler Netze wird durch Systemgleichungen beschrieben, - es sind ja dynamische Systeme - im kontinuierlichen Fall sind dies Differentialgleichungen, im diskreten Fall Iterationsgleichungen. Dies belegt die holistische Sicht.

4.4.1 Fuzzy-Technik Ein Fuzzy-System wird aus Komponenten f¨ur Fuzzyfizierung, Regelanwendung und Defuzzyfizierung konstruiert. Dabei bezieht sich die Blackbox-Idee auf die einzelnen Regeln. Ein Whitebox-Ansatz w¨urde aus der Aufgabenstellung heraus die Regeln begr¨unden. Die Analogie zu nat¨urlichen Systemen bezieht sich auf das Lernen der Regeln und die Struktur der Regeln, dies geschieht n¨amlich a¨ hnlich wie beim Menschen oder bei Tieren. Im Vordergrund der Technik stehen die Fuzzy-Werte, also die vagen Werte. Dadurch entstehen intern kontinuierliche Daten. Probabilistische Werte spielen in der Fuzzytechnik keine Rolle. Eine holistische (ganzheitliche) Systemsicht liegt der Begr¨undung der Regeln zugrunde: Das System als Ganzes zeigt das durch die Regeln formulierte Verhalten.

4.4.2 Neuronale Netze Soll ein k¨unstliches Neuronales Netz zur L¨osung bestimmter Aufgaben gebildet werden, so legt man eine bestimmte Struktur der Neuronen und ihrer synaptischen Verbindungen zugrunde und betrachtet die Gewichte mi j zu den Synapsen zwischen Neuronen xi und y j als noch zu bestimmende Parameter. Durch Trainieren des Systems sorgt man daf¨ur, daß sich solche Werte mi j einstellen, die das Netz zu seiner Aufgabe bef¨ahigen. Es erfolgt also ein st¨andiges Anpassen an

4.4.3 Evolution¨are Verfahren Die nat¨urliche Evolution dient hier als Vorbild, um L¨osungen ohne analytische Konstruktion als Blackbox-L¨osungen zu gewinnen. Ein evolution¨ares Verfahren stellt ein Suchverfahren f¨ur ein gew¨unschtes Konstrukt dar, bei dem viele Approximationen simultan betrachtet werden und schrittweise verbessert werden. Wir nehmen als Beispiel die L¨osung eines Problems, wie beispielsweise des Travelling-Salesman-Problems. Es wird eine sogenannte Population von N Rundtouren gebildet (N passend, f¨ur die Wahl dieses Parameters wie auch anderer braucht man Erfahrungen). Jedem Individuum der Population wird eine Fitneß als Qualit¨atsmaß zugeordnet (L¨ange der Tour). Die Population wird nun in vielen diskreten Schritten so fortentwickelt, daß die Wahrscheinlichkeit eines Individuums zu u¨ berleben oder Nachkommen zu erzeugen mit seiner Fitneß korreliert ist. Nachkommen entstehen durch Mutation sowie durch Kreuzung. Dabei werden die Individuen durch sogenannte Chromosomen beschrieben, auf die sich die genannten genetischen Operatoren anwenden lassen. Man erwartet, daß die Populationen gegen Populationen mit Individuen hoher Fitneß konvergieren und dadurch L¨osungen liefern.

¨ 4.4. SOFTCOMPUTING-ANSATZE DES PROBLEMSOLVING

129

4.4.4 Simulated Annealing Bei dieser Methode handelt es sich um ein Suchverfahren, bei dem nach einem der Physik entnommenen Vorbild Approximationen f¨ur eine Problematik ermittelt werden. Anders als bei Evolution¨aren Verfahren wird aktuell immer eine Approximation behandelt. Von der momentanen Approximation ausgehend sucht man eine andere per Zufall aus der Nachbarschaft aus - man muß also vorher definieren, wie die Approximationen untereinander benachbart sind - und macht mit dieser weiter, falls keine Verschlechterung der Approximation eintritt. Bei einer Verschlechterung entscheidet man zuf¨allig mit vorgegebener Wahrscheinlichkeit, ob die Approximation genommen wird oder nicht. Dabei gilt: Je geringer die Verschlechterung ∆ ist, um so h¨oher ist die Wahrscheinlichkeit der Annahme, und je weiter die Zeit“ des Iterationsverfahrens fortgeschritten ist, um so geringer wird ” (bei gleichem ∆) die Wahrscheinlichkeit der Annahme. Die Analogie zur Physik ist die folgende. Ein physikalisches System, wie zum Beispiel eine Metallschmelze, durchl¨auft einen Prozeß, bei dem mit fortschreitender Zeit die Temperatur T und ebenfalls die Energie des Systems abnimmt, jedoch kann die Energie auch um ∆ zunehmen, jedoch mit einer Wahrscheinlichkeit e;k T (k eine Konstante) ∆

Diese Formel wird beim Simulated Annealing ( annealing“ = Erstarrung einer ” Schmelze) auch verwendet. Der Energie entspricht das Bewertungsmaß f¨ur die Approximationen derart, daß niedrige Energie mit einer guten Bewertung korrespondiert. Beim Travelling-Salesman-Problem und a¨ hnlichen Problemen der kombinatorischen Optimierung gilt Simulated Annealing zur Zeit als ein sehr erfolgreiches Suchverfahren.

130

KAPITEL 4. PROBLEMSTRUKTUREN UND PROBLEMSOLVING

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

132

5.2 Der Algorithmusbegriff

Kapitel 5 Algorithmen und Programmierung

Der klassische Algorithmusbegriff geht auf Donald Knuth zur¨uck und stellt eine Pr¨azisierung intuitiver Begriffe wie Rezept“, Prozeß“, Methode“, Technik“, ” ” ” ” Prozedur“ und Routine“ dar. pr¨aziser: ” ” Definition 5.2.1 (Algorithmus) Ein Algorithmus ist ein ein endlich beschriebener abstrakter Handlungsplan f¨ur die diskrete Informationsverarbeitung, der die Eigenschaften der Endlichkeit (der Ausf¨uhrung), der Bestimmtheit, der Funktionalit¨at und der Effektivit¨at besitzt. nach D.E. Knuth:



¨ 5.1 Ubersicht



Der Algorithmusbegriff

     

Algorithmus nach Knuth, Eigenschaften Verzicht auf Terminierungseigenschaft

¨ erster Uberblick u¨ ber Kontrollstrukturen mathematische Sicht: berechenbare Funktionen Hinweis auf Turing-Maschinen und λ-Kalk¨ul

Nichtdeterministische Algorithmen

     



Verzicht auf Bestimmtheit



Finiteness (Endlichkeit) ”An algorithm must always terminate after a finite number of steps.” (sonst: ’computational method’) Definiteness (Bestimmtheit) ”Each step of an algorithm must be precisely defined; the actions to be carried out must be rigorously and unambiguously specified for each case.” Input/Output (Funktionalit¨at) ”An algorithm has zero or more inputs. i.e. quantities which are given to it initially before the algorithm begins. These inputs are taken from specified sets of objects. An algorithm has one or more outputs, i.e. quantities which have a specified relation to the inputs.” Effectiveness (Effektivit¨at) ”All of the operations to be performed in the algorithm must be sufficiantly basic that they can in principle be done exactly and in a finite length of time by a man using pencil and paper.”

Erl¨auterungen und Bemerkungen:

Motivation nichtdeterministische L¨osungswege nichtdeterministische Resultate Programmierung nach Floyd Ausf¨uhrungsarten Realisierung des Nichtdeterminismus 131

Zur Endlichkeit: Wir wissen aus theoretischen Untersuchungen, daß man einem Programm grunds¨atzlich nicht immer ansehen kann, ob seine Ausf¨uhrung endlich ist oder nicht. Eine Beschr¨ankung von Programmen auf solche, deren Endlichkeit garantiert werden kann, w¨urde die M¨achtigkeit des Computers erheblich einschr¨anken. Zur Bestimmtheit: Diese Forderung schließt Nichtdeterminismus aus. Sie sichert die logische Eindeutigkeit der Programmschritte. Zur Funktionalit¨at:

5.2. DER ALGORITHMUSBEGRIFF

133

Hiermit wird im Grunde gefordert, die Aufgaben eines Algorithmus zu spezifizieren. Zur Effektivit¨at: Es gibt mathematisch exakte Definitionen, die nicht effektiv ausf¨uhrbar sind, da nur endlich viele Ausf¨uhrungsschritte erlaubt sind. Beispiel: limn!∞ fi f¨ur Ausdr¨ucke fi. Effektivit¨at ist nicht zu verwechseln mit Effizienz. Letztere zielt auf einen im Verh¨altnis zur Leistung m¨oglichst geringen Aufwand an Zeit bzw. an Speicher. Verlangt man von den Eigenschaften, die f¨ur einen Algorithmus gefordert werden, die Nachpr¨ufbarkeit, so muß auf die Endlichkeit verzichtet werden. Knuth hatte hierf¨ur die Bezeichnung ’computational method’ vorgeschlagen. Im InformatikHandbuch definiert Pomberger den Algorithmus so: Ein Algorithmus ist eine pr¨azise, d.h. in einer festgelegten Sprache abgefaßte, ” endliche Beschreibung eines schrittweisen Probleml¨osungsverfahrens zur Ermittlung gesuchter Gr¨oßen aus gegebenen Gr¨oßen, in dem jeder Schritt aus einer Anzahl ausf¨uhrbarer eindeutiger Aktionen und einer Angabe u¨ ber den n¨achsten Schritt besteht. Ein Algorithmus heißt abbrechend, wenn er die gesuchten Gr¨oßen nach endlich vielen Schritten liefert, andernfalls heißt der Algorithmus nicht abbrechend.“ Die Forderung der Bestimmtheit kann abgeschw¨acht werden, indem f¨ur einzelne Schritte endlich viele pr¨azise definierte Alternativen zugelassen werden. Dies kann – muß aber nicht – die Funktionalit¨at verletzen. Diese muß dann ersetzt werden durch relational festgelegte Beziehungen zwischen Eingaben und Ausgaben. Wir werden dies ausf¨uhrlicher diskutieren in dem Abschnitt u¨ ber nichtdeterministische Algorithmen.

¨ Ein erster Uberblick uber ¨ Kontrollstrukturen Nach dem vorangehenden geh¨oren zu einem Algorithmus Einzelschritte, deren Verh¨altnis zueinander durch den Algorithmus ebenfalls festgelegt sein muß. Da die Ausf¨uhrung einen diskreten Prozeß ergibt, kommen hierf¨ur die Techniken zur Planung diskreter Prozesse in Frage:

  

sequentielle Ausf¨uhrung parallele Ausf¨uhrung. ggf. mit Synchronisierung Alternativen, und zwar deterministisch (mit einer Bedingung) bzw. nichtdeterministisch

134



KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG Wiederholung, z.B. in Form von Schleifen

Eine weitere, bisher nicht erw¨ahnte Technik ist hinzuzunehmen: dies ist die



Unterprogrammtechnik

Man kann in einen Algorithmus einen anderen als Zulieferer einbauen. Bei Programmen spricht man dann von einem Unterprogramm. Die Unterprogramm¨ technik dient der besseren Ubersicht, dem schnelleren Programmieren und der geschickteren Programmentwicklung, sie erh¨oht aber nicht die M¨achtigkeit der Programmierung. In der Programmierung heißen die genannten Techniken Kontrollstrukturen. Die Algorithmusdefinitionen sind, so wie sie im vorangehenden Text gegeben wurden, nicht im mathematisch-theoretischen Sinne pr¨azise. Die funktionalen Abbildungen, die durch Algorithmen realisiert werden, sind aber – noch vor Fertigstellung des ersten universellen Computers – mathematisch exakt beschrieben ¨ worden. Es gibt hierzu u.a. die folgenden Ans¨atze (vgl. die historische Ubersicht in 1.1):

  

partiell-rekursive Funktionen f: Nk ! N; k  0, mathematisch definiert Turingberechenbare Funktion, definiert mit Hilfe von Turing-Maschinen λ-berechenbare Funktionen, definiert mit Hilfe des λ-Kalk¨uls von A. Church

5.3 Nichtdeterministische Algorithmen Beim L¨osen von Problemen stoßen wir auf folgende Tatsachen: 1. Oft f¨uhren sehr viele verschiedene Programme, die sich gerade in den Kontrollstrukturen unterscheiden, zu demselben Endergebnis. Im Hinblick auf das Ergebnis ist also eine genaue Festlegung der Reihenfolge einzelner Schritte nicht wichtig. Beispiel 5.3.1 Sortieren von ai ,. . . ,an Die folgenden nichtdeterministischen Anweisungen reichen aus: Solange i,j existieren mit 1  i < j  n, so daß ai > a j , vertausche die beiden Elemente.

5.3. NICHTDETERMINISTISCHE ALGORITHMEN

135

Oder: Solange i,j existieren mit 1  i, i+1 = j < n, so daß ai > a j , vertausche die beiden Elemente.

(2 = nichtdeterministische Alternative) Hier ist nur blinder Nichtdeterminismus m¨oglich. Wir erweitern das Beispiel: x := 2; y := 3; z := x + y 2 x * y; if prim(z) then success drucke z;

2. Oft m¨ochte man nur eine von mehreren als gleichwertig angesehenen L¨osungen haben und sich im Programm daf¨ur nicht festlegen. Beispiel 5.3.2 Gesucht ist eine Primzahl < 20. Eine spezielle Aufgabe ergibt sich, wenn wir, etwa f¨ur statistische Experimente, Zufallszahlen programmieren sollen. In den obigen F¨allen wie in diesem ben¨otigt man nichtdeterministische Programme und – dem zugrunde liegend – Algorithmen. Wir definieren einen nichtdeterministischen Algorithmus wie folgt: Es handelt sich um einen endlich beschriebenen abstrakten Handlungsplan f¨ur die diskrete Informationsverarbeitung, der die Eigenschaften der Bestimmtheit f¨ur endlich viele Alternativen, der Relationalit¨at in Bezug auf die Ausgaben und der Effektivit¨at besitzt. Je nachdem, ob auch Endlichkeit vorliegt, heißt der nichtdeterministische Algorithmus abbrechend (terminierend) oder nichtabbrechend. Bei der Ausfuhrung ¨ nichtdeterministischer Algorithmen (nat¨urlich nur f¨ur die nichtdeterministischen Verzweigungen) unterscheiden wir drei F¨alle: 1. Blinder Nichtdeterminismus: Es wird mit Hilfe einer geeigneten Zufallsmethode irgendeine der Alternativen ausgew¨ahlt. 2. Anglischer Nichtdeterminismus: Es wird versucht, die Auswahl so zu treffen, ein im Algorithmus vorgesehenes Erfolgsereignis eintritt bzw. Mißerfolgsereignis nicht eintritt, falls dies m¨oglich ist. Gedanklich kann dies durch richtiges Raten erfolgen, praktisch durch Wiederholung des gesamten Ablaufs oder durch parallele Aufspaltung des Ausf¨uhrungsprozesses. 3. D¨amonischer Nichtdeterminismus: Dabei wird ein Mißerfolgsereignis angestrebt, ein Erfolgsereignis vermieden. Beispiel 5.3.3 x := 2; y := 3; z := x + y 2 x * y; drucke z;

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

136

else

failure;

Jetzt sind alle drei Ausf¨uhrungsarten m¨oglich. Das Erfolgsereignis success tritt ein, wenn prim(z) = TRUE, das Mißerfolgsereignis failure tritt ein, wenn prim(z) = FALSE. Also gilt: Blinder Nichtdeterminismus liefert 5 oder 6. Anglischer Nichtdeterminismus liefert 5. D¨amonischer Nichtdeterminismus liefert 6. Erg¨anzend sei noch auf die statistische Variante der Ausf¨uhrung hingewiesen: Dabei kommt es jetzt darauf an, f¨ur eine h¨aufige Ausf¨uhrung des Programms festzulegen, wie die einzelnen Entscheidungen verteilt sein sollen. Ein wichtiger Fall ist die Gleichverteilung. Ein Programm enthalte eine nichtdeterministische Alternative mit n M¨oglichkeiten ai . Bei mehreren Ausf¨uhrungen dises Programms erwartet man dann etwa gleichviele Varianten f¨ur jede der Alternativen. Sind dies X Ausf¨uhrungen, so nennen wir Xn den Erwartungswert f¨ur jede der Alternativen. Jede Alternative ai wird dann mit der Wahrscheinlichkeit pi = 1n ausgef¨uhrt. Jetzt wird auch klar, was eine Ausf¨uhrung mit der Wahrscheinlichkeit p, 0  p  1, bedeutet, wie sie beim Simulated Annealing vorkommt: Bei X Ausf¨uhrungen ist der Erwartungswert der betreffenden Variante X*p. Programmieren nichtdeterministischer Algorithmen nach R. Floyd: Man verwendet sog. prozedurale Techniken f¨ur deterministische Algorithmen, etwa Flußdiagramme oder Sprachen a¨ hnlich C oder PASCAL, und zus¨atzlich

  

choice(n): als Integer-Funktion, die eine Integer-Zahl aus 1 bis n ausw¨ahlt success: als Erfolgsereignis failure: als Mißerfolgsereignis

Es wird angelicher Nichtdeterminismus unterstellt. Beispiel 5.3.4 “6 aus 49“

5.3. NICHTDETERMINISTISCHE ALGORITHMEN for j := 1 to begin a[j] := for k := 1 to if a[k] = a[j] end.

137

6 do choice(49); j - 1 do then failure

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

138

5.4 Programmierparadigmen und Programmierstile Programmiersprachliches Paradigma: Modellvorstellung f¨ur die Abarbeitung von Programmen, welche die Einzelheiten der Programmierung bestimmt.

Beispiel 5.3.5 Sortieren von a[1],. . . ,a[n]

Programmierung: for k := 1 to n do begin j := choice (n - k + 1); x := a[k]; a[k] := a[k + j - 1]; a[k + j - 1] := x; end; for k := 1 to n - 1 do if a[k]> a[k + 1] then failure. Beispiel 5.3.6 Gleichung erf¨ullen x := choice(100); if x * x * x - 5 * x * x - x + 105 = 0 then success.

Der Vorgang der Entwicklung und Niederschrift von Programmen, das sind sprachlich abgefaßte Algorithmen im erweiterten Sinn. Programmierstile sind teils von Paradigmen gepr¨agt, teils folgen sie allgemeineren Strategien f¨ur die Entwicklung und Niederschrift von Programmen. Wir befassen uns zun¨achst mit verschiedenen Paradigmen:

    

imperative oder prozedurale oder Von-Neumann-Programmmierung funktionale Programmierung regelbasierte Programmierung Logikprogrammierung objektorientierte Programmierung

Realisierung des Nichtdeterminismus in der Praxis

5.4.1 Das Paradigma der imperativen Programmierung

Es gibt die folgenden M¨oglichkeiten:

Jeder elementare Schritt der Abarbeitung ist eine Zuweisung eines Wertes an eine Variable. Die Reihenfolge der Schritte ergibt sich aus den verwendeten VonNeumann‘schen Kontrollstrukturen, dies sind

 

physikalischer Zufallsgenerator: Das Ereignis h¨angt von ver¨anderlichen Außenfaktoren ab. Pseudozufallsgenerator mit vorgegebener Verteilung: Es wird programmtechnisch eine scheinbar zuf¨allige Folge von Zahlen erzeugt, so daß eine vorgeschriebene Verteilung (z.B. Gleichverteilung) m¨oglichst gut eingehalten wird.

In Programmiersprachen gibt es hierzu oft eine Standard-Funktion ’random’. Man kann sich leicht u¨ berlegen, wie man die Ausf¨uhrung mit Wahrscheinlichkeit p programmiert, wenn man eine Pseudozufallsfunktion ’random’ zur Verf¨ugung hat, die n¨aherungsweise gleichverteilte Zahlen erzeugt(!).

  

Sequenzen, deterministische Alternativen und Schleifen.

Eventuell tritt noch die



parallele bzw. nebenl¨aufige Ausf¨uhrung

hinzu, sowie eine



Unterprogrammtechnik.

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE

139

Aus diesen Vorgaben ergeben sich folgende konkret festzulegende Sprachanteile f¨ur die imperative Programmierung:

     

Werte der Variablen: dies definiert die sog. Datenstruktur Zuweisung und andere Anweisungen Sequenzen und Nebenl¨aufigkeit

Weitere Strukturen werden sp¨ater erkl¨art.

Zuweisung und andere Anweisungen Abstrakt, und etwas allgemeiner als die meisten Programmiersprachen, vereinbaren wir die simultane Zuweisung v1 ; v2; : : : ; vn := e1 ; e2; : : : ; en .

Alternativen: einseitige, zweiseitige, mehrseitige Schleifen: Spr¨unge, Z¨ahlschleifen, unbeschr¨ankte Schleifen Unterprogrammtechnik

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

140

Dabei sind die vi entweder



einfache Variable, bezeichnet durch Namen, z.B. x, alpha, wert3, anzahl alt,

Datenstrukturen Man legt nicht nur die Mengen der Werte fest, die benutzt werden sollen, sondern zugleich die Operationen, die darauf angewendet werden sollen. Beides definiert dann eine Datenstruktur. Es gibt zus¨atzliche Operationen, die eine Datenstruktur in eine andere abbilden. Hier werden im folgenden die nachstehend aufgef¨uhrten Datenstrukturen verwendet. Name Werte Operationen boolean TRUE, FALSE :; ^; _; !; ; 6 character ’a’,. . . ,’Z’,’0’,. . . ,’9’ =, 6=; ; ;  u. Sonderzeichen (Ergebnis boolean) (alle geordnet) integer f;Nmin; ;Nmin+1; : : : ; Nmaxg +, -, *, div (ganzzahl. Division), mod (Modulrest), " (Exponentiation), =, 6=; ; ;  (mit Ergebnis boolean) natural f 0, 1, . . . , Nmaxg Operationen von Integer real rationale und +, -, *, /," (mit Ergebnis real); darstellungsabh¨angige Werte =, 6=; ; ;  (mit Ergebnis boolean) zwischen ;Rmin undRmax string Folgen aus character k (Konkatenation), length mit L¨ange  0 (ergibt natural) array r-dimensionale Anordnung Zugriff auf ein Element von Werten eines bestimmten durch nachgestelltes [i1,. . . ,ir ] Typs, r  1



oder indizierte Variable, bezeichnet durch einen Namen f¨ur eine ArrayVariable und einen nachfolgenden Indexausdruck, z.B. x[17], vector[i - 1], M[i,k], ggf. auch y[i][k] usw.

Die Ausdr¨ucke auf Indexposition werden als Terme mit Operationen zu ’integer’ gebildet. Danach ist z.B. m¨oglich x[3 * k - m * (n + 2)]. Die Ausdr¨ucke ei sind ebenfalls als Terme zu bilden mit den Operationen, die zu dem Typ passen, z.B. f¨ur eine integer-Variable: x := (z div 3) * 7 + 1 f¨ur eine boolean-Variable: b := p ^: q. Die Zuweisungen einer simultanen Zuweisung sind streng simultan auszuf¨uhren: x, y := y, x vertauscht die Werte. Dies gilt nicht f¨ur die Sequenz x := y; y := x . Wir vereinbaren noch weitere elementare Aktionen, die – wie die Zuweisung – Anweisungen heißen: Die Sprunganweisung goto . Diese bezieht sich darauf, daß vor jede Anweisung im Programm eine oder mehrere Marken gesetzt werden k¨onnen:

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE <

141

Marke > : < Anweisung >

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

142 if fi

Ausdruck> then

<

Anweisung1> else

<

Anweisung2 >

<

bzw. <

Marke1 >  < Marken > : < Anweisung >.

Die Sprunganweisung wird zur Realisierung bestimmter Schleifen verwendet. Die Eingabeanweisung lautet

Wertn >: else endcase n  1.

mit nicht indizierten Variablen vi ,

Die Ausgabeanweisung out e1 ; : : : ; en mit Ausdr¨ucken (Termen) e1; : : : ; en; n  1. Die Erfolgsanweisung success sowie die Mißerfolgsanweisung failure f¨ur nichtdeterministische Programmierung nach Floyd. Dann werden auch Aufrufe von choice in der Form choice(< natural >) zugelassen. Ein solcher Aufruf ist ein Ausdruck vom Typ natural. Sequenzen und Nebenl¨aufigkeit Wir schreiben Sequenzen als Aufreihung mit Trennzeichen ’;’ : a1 ; a2; : : : ; an

(a1 ; a2; : : : ; an) geschrieben. Alternativen Die einseitige Alternative lautet Ausdruck > then

mit optionalem else-Teil und Abk¨urzungen wie Wert1 >; ; : : : :.

<

Die Ausf¨uhrung beruht auf der Auswertung von und der durch den erhaltenen Wert gesteuerten Ausf¨uhrung einer der Anweisungen. Schleifen Mit Hilfe von Marken, die eindeutig gesetzt sein m¨ussen, und Sprunganweisungen, k¨onnen Schleifen (in einem eher unstrukturierten Programmierstil) geschrieben werden. Die Z¨ahlschleife werde so geschrieben: for = by to < Endwert> until do od mit folgenden Varianten: ’= ’ ist optional und implizit ’=1’, ’by ist optional und implizit ’by 1’, ’until ’ ist optional und implizit ’until FALSE’. Laufvariable und Werte sind entweder vom Typ integer oder vom Typ real. Der Typ von ist boolean. Die unbeschr¨ankte Schleife lautet

Nebenl¨aufigkeit wird in der Form

<

case < Ausdruck > of :; .. . <

in v1 ; v2; : : : ; vn

if

Die mehrseitige Alternative hat die Form

while <

Anweisung > fi

Dabei muß < Ausdruck > einen booleschen Wert liefern. Als < Anweisung > kommen die elementaren Anweisungen sowie die durch die Kontrollstrukturen definierten zusammengesetzten Anweisungen in Frage. Die zweiseitige Alternative lautet

Ausdruck> do

<

Anweisung> od.

<

Hierbei ist vom Typ boolean. Als Erweiterung benutzen wir die unbeschr¨ankte Schleife mit mehreren Ausg¨angen: do <

; exit ; : : : ; Anweisungn >; exit od

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE

143

Die Schleife wird verlassen, wenn ein exit mit einem booleschen Ausdruck erreicht wird, dessen Wert gerade TRUE ist. Das Paradigma der imperativen Programmierung beherrscht weitgehend die Programmierpraxis. Dem Paradigma folgen die maschinennahen Sprachen, die fr¨uhen sog. h¨oheren Programmiersprachen wie FORTRAN, ALGOL, PL/I, COBOL sowie die Sprachen PASCAL, C und viele andere.

in x,y; u := x2 ; y; v := x + y3 ; z := u3 + u2  v + 2  u  v + v2; out z Das Programm wird st¨arker funktional, wenn die Ergebnisformel hinter out steht und m¨oglichst wenige Anweisungen davor vorkommen: in x,y; u := x2 ; y; v := x + y3 ; out u3 + u2  v + 2  u  v + v2

5.4.2 Das Paradigma der funktionalen Programmierung W¨ahrend bei der imperativen Programmierung Aktionen, meist Zuweisungen, durch Kontrollstrukturen verkn¨upft werden, stehen bei der funktionalen Program¨ mierung die folgenden Uberlegungen im Vordergrund:

Man kann die verbleibenden Zuweisungen ebenfalls aufgeben und die Ausdr¨ucke f¨ur u und v in die Ergebnisformel einsetzen. Dann ist aber die Auswertung sehr ineffizient. Hier ist eine Formulierungsalternative f¨ur den Ergebnisausdruck:

1. Das gew¨unschte Ergebnis wird als ein komplexer Ausdruck in Abh¨angigkeit von den Eingaben formuliert, sozusagen als Formel (ergebnis = ) f(: : :,eingaben,: : :) 2. Um eine solche Formel bilden zu k¨onnen, muß man oft Funktionen vorweg definieren. Das funktionale Programm enth¨alt dann Funktionsdefinitionen neben Funktionsanwendungen (= Applikationen, daher spricht man auch von applikativen Sprachen). Beispiel 5.4.1 Sei x ein Array der L¨ange n. Wir wollen die Summe der Quadrate der Elemente bilden. In imperativer Programmierung: in x; sum := 0; for i to out sum

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

144

u3 + u2  v + 2  u  v + v2

where u == x2 ; y; v == x  y3

Darin k¨onnen die Angaben hinter where als Gleichungen angesehen werden. Diese (auf Landin zur¨uckgehende) Technik l¨aßt sich direkt in die Technik des λKalkuls ¨ umformen: (λu(λv(u3 + u2  v + 2  u  v + v2))) bedeutet: die Formel hat u und v als Parameter. Diese Formel wird jetzt angewandt auf x2 - y f¨ur u und x  y3 f¨ur v: (((λu(λv(u3 + u2  v + 2  u  v + v2)))x2 ; y)x  y3 Definition: mit Parametern u,v Anwendung In vollst¨andiger λ-Notaion sieht sieht auch der arithmetische Ausdruck anders aus, z.B. schreibt man

n do sum := sum + x[i]*x[i] od;

In der Sprache APL (A Programminglanguage, von K.E. Iverson, ca. 1961) kann dies funktional programmiert werden: x 2 (Eingabe von x) + / x * x (komponentenweise Multiplikation, dann Aufsummierung) Beispiel 5.4.2 Wir gehen aus von folgendem imperativen Programm:

(+ (a b c)) statt (a + b + c). Auf dem λ-Kalk¨ul basiert die funktionale Programmiersprache LISP. Beispiel 5.4.3 Es soll die Fakult¨at programmiert werden. Nach dem imperativen Paradigma bietet sich eine Z¨ahlschleife an:

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE

145

in n; i,s := 0,1; for j to n do s := 1; for i to n do s := s * i od; out s Bemerkung: Die simultanen Zuweisungen lauten sequentialisiert so: i := 0; s := 1 und i := i + 1; s := s * i Man findet hierf¨ur auch eine Formulierung im λ-Kalk¨ul und in LISP. Wir wollen uns jedoch stattdessen zwei Formulierungen in moderneren funktionalen Sprachen ansehen: In FP (nach J.W. Backus) wird die Funktion ’fakult¨at’ zusammenkomponiert: fak = if null then 1 else mult [id,fak  pred] mult :< x; y > = x * y ’:’ kennzeichnet die Anwendung. Verwendet werden die Funktionen null : x = if x = 0 then TRUE else FALSE id : x = x, 1 : x = 1 pred : x = if x = 0 then 0 else x - 1 ’’ bezeichnet die sequentielle Verkn¨upfung von Funktionen, [: : : ; : : :]die parallele. Damit ergibt sich z.B. mit [id, fak  pred]: 3 = : fak : 3 = if null : 3 then 1 : 3 else mult : < 2, fak : pred : 3> = mult : Zwischenrechnung ergibt fak : 2 = : : : = mult : , fak : 1 = : : : = mult : , fak : 0 = if null : 0 then 1 : 0 else : : : = 1 : 0 = 1, also fak : 1 = mult : < 1; 1 > = 1 * 1 = 1, fak : 2 = mult : < 2; 1 > = 2 * 1 = 2, fak : 3 = mult : < 3; 2 > = 3 * 2 = 6.

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

146

Die Technik erscheint uns deswegen ungewohnt, weil in der Definition die Parameter eliminiert sind. In noch moderneren Sprachen wie MIRANDA werden die Parameter (wieder) mitgef¨uhrt: fac 0 = 1 fac (n + 1) = (n + 1) * fac n Hier ist noch eine weitere Formulierung in MIRANDA, bei der die whereKonstruktion sich auf eine verwendete Funktion bezieht: fac n = product [1...n] where product [ ] = 1 product (a : x) = a*product x Dabei gilt: [ ] steht f¨ur die leere Liste, a: [b c: : :d]= [a b c: : :d], [a: : :b] = [a, a+1, : : :, b]. Es zeigt sich, daß funktionale Formulierungen oft die Datenstruktur einer Liste ben¨otigen.

5.4.3 Das Paradigma der regelbasierten Programmierung Die Grundoperationen hierbei sind Anwendungen vorgegebener Regeln, die im Prinzip die Form Muster vorher ! Muster nachher haben. Ein Programm besteht dann aus einer im Prinzip ungeordneten Menge von Regeln fL1 ! R1 ; L2 ! R2 ; : : : ; Ln ! Rn g. Die Ausf¨uhrung erfolgt auf einer Datei, die zu Beginn aus den Eingabedaten und zum Schluß aus den Ergebnisdaten besteht. Die Ausf¨uhrung folgt dabei dem folgenden Schema, welches RAC (Recognize-Act-Cycle) genannt wird:

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE

147

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

148

5.4.4 Das Paradigma der logikorientierten Programmierung

Es existiert noch eine anwendbare Regel

nein

Ende

p(t1; : : : ; tn).

ja

Dabei ist p ein n-stelliges Pr¨adikatssymbol und t1; : : : ; tn sind pr¨adikatenlogische Terme. Regeln in PROLOG sind Formeln

Auswahl und Anwendung einer anwendbaren Regel

Beispiel 5.4.4 Fakult¨at: fak 0 fak n

Ein Programm besteht aus Fakten und Regeln, d. h. pr¨adikatenlogischen Aussagen. Ziel der Anwendung des Programms ist es, eine als Aussage formulierte Eingabe, eine sogenannte Anfrage an das System, zu best¨atigen. Die Ausf¨uhrung ist dann eine Kette logischer Schlußfolgerungen. Die wichtigste Logiksprache ist PROLOG (Programming in Logic). Fakten in PROLOG sind Formeln

p(t1; : : : ; tn)

!

1 where n > 0 ! n*fak(n-1)

Hier muß eine Regel ggf. innerhalb eines Datums angewendet werden: fak 3 ) 3*fak 2 ) 3*2*fak 1 ) 3*2*1*fak 0 ) 3*2*1*1 ) 6 Soll das Muster der Regel das volle Datum abdecken, so kann man wie folgt programmieren: fak n ! [0 1 n] [i k n] where iY !

[A Y X B].

Hierin sind A,B als Sequenzen (row) von real-Zahlen definiert, wobei leere Sequenzen erlaubt sind. Regelbasierte Sprachen finden haupts¨achlich in der k¨unstlichen Intelligenz Anwendung. Beispiele sind STRIPS und OPS 5.

q1 (: : :); q2 (: : :); : : : ; qn(: : :)

Hierin treten rechts ebensolche Formeln auf, die durch Anwendung von Pr¨adikatssymbolen auf Terme entstehen. Sie sind konjunktiv verkn¨upft, d.h. das Komma steht f¨ur ’^’. Eine Anfrage lautet ?-r1 (: : :); : : : ; rk (: : :). Ein nichtnummerisches Beispiel 5.4.6 vater(max,emil). vater(emil,fritz). vater(fritz,hugo). rothaarig(fritz). rothaarig(max). vorfahr(x,y) vater(x,y). vorfahr(x,y) vorfahr(x,z),vater(z,y).

(vater von max ist emil)

Frage: Gibt es jemanden, der einen rothaarigen Vorfahren besitzt und selbst Vorfahre eines Rothaarigen ist? ?- vorfahr(x,y),rothaaig(y),vorfahr(z,x),rothaarig(z). Die Abarbeitung erfolgt so, daß versucht wird, die Anfrage zu best¨atigen. Dabei wird eine durch Fakten best¨atigte Formel entfernt (TRUE ^ Rest = Rest) und Substitutionen (z.B. max f¨ur x) werden gemerkt. Anwendungen von Regeln f¨uhren zu entsprechenden Ersetzungen. Die Anfrage wird von links nach rechts gelesen und

5.4. PROGRAMMIERPARADIGMEN UND PROGRAMMIERSTILE

149

die (bekannten) Aussagen des Programms von oben nach unten. L¨aßt sich die Formel nicht mit den bereits gew¨ahlten Aussagen best¨atigen, so werden solange neue Versuche gestartet, bis die Herleitung gelingt oder alle vorgesehenen M¨oglichkeiten ersch¨opft sind. Dieses Durchprobieren erfolgt mittels Backtracking. Formal liegt ein Widerspruchsverfahren vor, bei dem der sog. Resolutionsschluß angewendet wird. Das Ergebnis heißt entweder ‘nein‘ oder ‘ja‘, wobei im letzten Fall die Variablensubstitutionen angegeben werden, die den Schluß erm¨oglichen. Im Beispiel: ja: x = emil.

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

150

5.5 Grundkonzepte der Programmierung Man kann die Programmierung als eine Ingenieurst¨atigkeit ansehen, die sich jedoch nicht auf physikalische oder chemische sondern auf abstrakte Prozesse bezieht, die es zu planen gilt. Damit wird klar, daß hier sowohl Zielvorstellungen als auch Modelle und Konzepte eine wichtige Rolle spielen.

5.5.1 Zielsetzungen bei der Programmierung Korrektheit

5.4.5 Das Paradigma der objektorientierten Programmierung Die Grundideen der objektorientierten Programmierung lassen sich etwa wie folgt skizzieren: Es gibt sog. Objekte, welche wie die Objekte der realen Welt statische Informationen und dynamische Aktivit¨aten verkn¨upfen. Beispiel: Ein Kreis besitzt die statischen Informationen

 

Koordinaten des Mittelpunkts: x,y Radius: r

Bei kleinen Programmen reicht hierzu in der Praxis eine sorgf¨altige Analyse zusammen mit einigen Tests. Bei großen Programmen ben¨otigt man ein ganzes B¨undel von ineinandergreifenden Maßnahmen:

  

Dazu k¨onnen wir ihn mit Aktivit¨aten ausstatten:

 

Radius ver¨andern um Faktor: f Mittelpunkt verschieben: dx, dy

Die Objekte geh¨oren sog. Klassen an. Es gibt Klassenhierarchien, in denen Informationen vererbt werden k¨onnen. Die Objekte k¨onnen ggf. auch Nachrichten austauschen. Zum Beispiel kann ein Objekt ein anderes Objekt veranlassen, eine seiner Aktivit¨aten (diese heißen Methoden) auszuf¨uhren. Die Informationsverarbeitung erfolgt dann durch koordinierte Zusammenarbeit von Objekten.

   

exakte Spezifikation der Aufgabenstellung (schwierig!) exakte Spezifikation der Semantik der Sprache (existiert meist, wird aber selten gelesen) formale Korrektheitsbeweise (schwierig, Theorie und Praxis klaffen hier noch weit auseinander) unterst¨utzende Software f¨ur die Korrektheit (fehlt weitgehend) systematische Tests (in der Praxis vorhanden) Transparenz der Programme n¨otig: siehe unten Programmierkonzepte, die die Fehleranf¨alligkeit herabsetzen: strukturiertes Programmieren, objektorientierter Entwurf



transparentes Sprachkonzept

Transparenz (der Programme, fur ¨ die Sprache sei diese vorausgesetzt) Man sollte die folgenden Maßnahmen anwenden:

 

Dokumentation des Programmentwicklungsprozesses Mnemotechnik zur Verbesserung der Selbstdokumentation

5.5. GRUNDKONZEPTE DER PROGRAMMIERUNG

 

151

Problemangepaßte Strukturen von Daten und Operationen verwenden: hierzu gibt es z. B. die h¨oheren und abstrakten Datenstrukturen Systematischer Programmentwicklungsprozeß: Techniken hierf¨ur vermittelt das Gebiet des Software-Engineering

Effizienz Die Zielsetzung der Effizienz betrifft die o¨ konomische Nutzung der Ressourcen Zeit und Speicher.

  

F¨ur die theoretischen Analysen stellt die Komplexit¨atstheorie Hilfsmittel bereit. Praktische Analysen k¨onnen direkt erkennbare Verbesserungen im Einzelfall aufzeigen. ¨ Systematische Messungen zur Uberpr¨ ufung sind notwendig.

Anpaßbarkeit, Wiederverwendbarkeit Es ist wichtig, die Verwendung der Programme f¨ur etwas ver¨anderte Aufgaben vorzusehen. Hierf¨ur kann es n¨utzlich sein, die Aufgabenstellung gleich etwas abstrakter zu fassen und durch Parameter auf den konkreten Fall abzustimmen.

152

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

Turing-Programme (siehe Theoretische Informatik I und II). Unseren Computern etwas a¨ hnlicher ist der Universal Calculator. Dieser besitzt z. B. Anweisungen der Art x(i) := 0, x(i) := x(i) + 1, x(i) := x(i) - 1, x(i) := x(j). (siehe ebenfalls Theoretische Informatik I und II).

5.5.3 Unterprogrammtechnik Die Unterprogrammtechnik geh¨ort zu den fundamentalen Ideen der Programmierung.

Prinzip der Arbeitsteilung Programmteile f¨ur Teilaufgaben werden aus dem Gesamtprogramm herausgel¨ost. Die einzelnen Teilprogramme k¨onnen von verschiedenen Personen programmiert werden. Dazu sind exakte Schnittstellendefinitionen notwendig.

Unterprogramme als Konsequenz des Algorithmusbegriffs Algorithmen sind bereits intuitiv (siehe Algorithmusbegriff nach D. E. Knuth) so definiert, daß ganze Algorithmen innerhalb anderer Algorithmen wie elementare Schritte auch vorkommen k¨onnen. In der exakten Berechenbarkeitstheorie wird dies noch deutlicher.

Offene Unterprogrammtechnik, Makrotechnik 5.5.2 Das Konzept der virtuellen Maschine Die großen Erfolge, welche die Software-Entwicklung verzeichnet, gr¨unden zu einem erheblichen Teil auf dem Konzept der virtuellen Maschine. Eine reale Maschine, also ein Computer, hat eine feste Maschinensprache. Eine virtuelle Maschine existiert zun¨achst nur gedanklich, wird aber durch Simulation auf einer realen Maschine so realisiert, daß sie f¨ur den Programmierer real wirkt. Die Programmiersprache der virtuellen Maschine kann weitgehend frei gew¨ahlt werden. Darin liegt gerade der Vorteil, den die Programmiersprachen bieten. Virtuelle Maschinen und Programmiersprachen sind also zueinander duale Konzepte. Wenn wir in C oder in PASCAL programmieren, so beziehen wir uns auf die virtuellen Maschinen C-Maschine, PASCAL-Maschine. Reale Maschinen (nat¨urlich nur Computer) sind universelle Maschinen, bis auf die Tatsache, daß sie nur einen endlichen Speicher besitzen. Die Universalit¨at sichert zu, daß jede andere informationsverarbeitende Maschine darauf simuliert werden kann. Auch f¨ur theoretische Untersuchungen ben¨otigt man virtuelle Maschinen. Das bekannteste Beispiel ist diue Turing-Maschine. Ihr entspricht die Sprache der

Die a¨ lteste Unterprogrammtechnik ist die Makrotechnik oder auch Technik der offenen Unterprogramme genannt. Ein Makro ist eine Befehlsfolge. Diese kann auch parametrisiert sein. Makros besitzen eine Aufrufform, z. B. ein Name zusammen mit den Parametern. Die Ausf¨uhrung eines Makros erfolgt durch Ersetztechnik. Die zugeh¨orige Befehlsfolge, der sog. Rumpf des Makros, wird, ggf. mit den mitgegebenen Parametern als Text in die Befehlsfolge des Hauptprogramms eingef¨ugt. Dann wird die Ausf¨uhrung des Hauptprogramms fortgesetzt.

Geschlossene Unterprogramme Die heute vorherrschende Unterprogrammtechnik ist die der geschlossenen Unterprogramme. Wie die Makros besitzen auch diese eine Aufrufform mit Parametern und einen Rumpf. Virtuell gesehen erfolgt aber die Ausf¨uhrung auf einer separaten Maschine. Der Rumpf wird also nicht in das aufrufende Programm eingef¨ugt. Die separate Maschine zur Ausf¨uhrung des Unterprogramms wird auf der realen Maschine nur simuliert. Die Begriffe Hauptprogramm (aufrufendes Programm)

5.5. GRUNDKONZEPTE DER PROGRAMMIERUNG

153

und Unterprogramm (aufgerufenes Programm) sind nat¨urlich relativ. Die Rolle der Parameter ist komplexer als es auf den ersten Blick scheint. Es gibt hierzu spezielle Parameterauswertungs-Mechanismen (call by value, call by name, call by reference, call by need etc.). In imperativen (d. h. Von-Neumann-) Sprachen unterscheidet man Unterprogramme, die aus Sicht des Hauptprogramms Anweisungen darstellen, diese heißen meist Prozeduren, und solche, die aus Sicht des aufrufenden Programms Ausdr¨ucke darstellen. Letzteres sind Funktionsunterprogramme und sollten nur einen Wert abliefern. Ver¨andern sie auch noch den Programmzustand, so spricht man von einem Seiteneffekt. Eine transparente Programmierung sollte nur seiteneffektfreie Funktionen verwenden. Standardunterprogramme geh¨oren zur Implementation einer Sprache.

– die while-Schleife. Es ist wichtig zu wissen, daß diese Strukturen v¨ollig ausreichen. Spr¨unge sind zum Beispiel entbehrlich. Aus der Theorie weiß man, daß es zu jedem Programm mit beliebigen Spr¨ungen (vom sog. Label-Typ) ein Programm nach Dijkstra gibt. Allerdings l¨aßt sich dieses nicht systematisch aus dem anderen herstellen. Diese Resultate sind das Ergebnis der sog. gotoKontroverse unter den Informatikern.





Modulares Programmieren Hier tritt die Arbeitsteilung st¨arker in den Vordergrund. Aus dem Teilprogramm wird der Modul. Dieser faßt zusammengeh¨orige Deklarationen und Anweisungen in einer Einheit zusammen. Es erfolgt eine Unterteilung in modulinterne und modulexterne Information. Das verbergen der modulinternen Information heißt Information-Hiding. Die modulexterne Information wird auch Schnittstelle genannt

Programmierung im Großen Das Schreiben kleiner Programme ist relativ leicht. Man f¨uhrt die L¨osung einer gestellten Aufgabe auf die Ausf¨uhrung einiger elementarer Schritte zur¨uck. Bei großen Programmen zeigt sich, daß erstens das Auffinden einer algorithmischen L¨osung nicht so einfach ist und zweitens die Transparenz des entstehenden Programms schwerer zu erreichen ist. Zur L¨osung dieses generellen Problems haben sich - historisch gesehen in der nachstehenden Reihenfolge - die folgenden Techniken entwickelt:

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

154



Objektorientierte Programmierung Die Weiterentwicklung der Moduln zu Einheiten, die sowohl statische als auch dynamische Informationen tragen und in hierarchischen Klassen organisiert sind, f¨uhrt zur objektorientierten Programmierung. Die inzelnen Moduln bzw. Objekte tauschen Botschaften untereinander aus.

Strukturiertes Programmieren Hierbei nimmt man eine systematische Zergliederung der Aufgabe vor, n¨amlich – sequentiell: Zerlege die (Teil-)Aufgabe in Teile, die nacheinander gel¨ost werden k¨onnen. – alternativ: Zerlege die (Teil-)Aufgabe in Teile, die Alternativen darstellen. – rekursiv, iterativ: Stelle die (Teil-)Aufgabe als Wiederholung von Aufgaben dar. Aus diesen Vorstellungen entwickelten Dijkstra und andere Informatiker in den 70er-Jahren Kontrollstrukturen f¨ur imperative Programmiersprachen. Der sog. Dijkstra-Typ f¨ur Programmiersprachen sieht demnach folgende Kontrollstrukturen vor: – die Sequenz (durch ’;’ ausgedr¨uckt) – die Alternative (if - then - else)

5.5.4 Variable Kontexte und Deklarationen Befehle werden durch Niederschriften, also durch Texte, dargestellt. Generell unterscheidet man bei Zeichen (in der Zeichenlehre, das heißt in der Semiotik) deren Syntax, Semantik und Pragmatik: Die Syntax bezieht sich auf die Zeichen selbst, die Semantik auf die Bedeutung und die Pramatik auf alle Beziehungen in der Realit¨at. Geht man von einem syntaktischen Zeichen aus (das wir uns jetzt am besten als eine Folge von Symbolen vorstellen), so h¨angt dessen Semantik von einem jeweils g¨ultigen Kontaxt ab. Z. B. ben¨otigt der Befehl x := y +1 als Kontext die Wertze von x und y sowie die Vereinbarung, was ’+’ bedeutet. In Programmiersprachen dien die Deklarationen zur Festlegung von Kontexten. Durch Deklarationen k¨onnen zum Beispiel folgende Informationen festgelegt werden:

  

Variable Typen und Datenstrukturen Operationen und Operatoren

5.5. GRUNDKONZEPTE DER PROGRAMMIERUNG

  

Priorit¨aten zwischen Operationen Resultate (insbesondere in sog. deklarativen Sprachen) Moduln und Objekte.

155

156

KAPITEL 5. ALGORITHMEN UND PROGRAMMIERUNG

KAPITEL 6. INFORMATION UND NACHRICHT

158

ben¨otigen immer eine Vereinbarung. Diese nennen wir Kontext. Die Darstellungen der Information k¨onnen konkret und materiell sein wie z. B. eine Verkehrsampel, aber sie k¨onnen auch selbst abstrakt sein. Buchstaben und Zahlen sind z. B. abstrakt, ebenso Worte und S¨atze. Die Immateriellit¨at der Information hat weitreichende Konsequenzen insbesondere

Kapitel 6 Information und Nachricht

  

die leichte Transportierbarkeit, die beliebige Kopierbarkeit und die Speicherbarkeit auf unterschiedliche Arten.

Information und Entscheidung bedingen einander Der Begriff der Information wird auch in der Informatik meistens nur intuitiv verstanden. Die Notwendigkeit einer mathematischen Pr¨azisierung trat zuerst bei ¨ dem Problem der Ubertragung von Informationen auf. In diesem Kapitel wird dieser Aspekt der Information n¨aher untersucht.

6.1 Information, Daten und Nachrichten Bereits vor der Entwicklung der Informationsverarbeitung durch den Computer trat der Begriff der Information im nat¨urlichen Sprachgebrauch auf. Wir betrachten einige wichtige Eigenschaften der Information:

Information bezieht sich auf Sachverhalte In den DIN-Festlegungen ist dies durch folgende Erkl¨arung ausgedr¨uckt: Infor” mation ist Kenntnis von Sachverhalten“. Zum Beispiel enth¨alt der Satz Auf dem ” Brocken liegt Schnee.“ eine Information, die sich auf einen konkreten Sachverhalt bezieht, der etwas mit dem Harz und den dortigen Witterungsbedingungen zu tun hat. Es ist offenkundig, daß eine solche Information zutreffend sein kann.

Information ist abstrakt, immateriell und bedarf einer Darstellung Die Information ist weder mit dem Sachverhalt identisch noch mit der speziellen Form, in der sie beschrieben wird. Sie existiert nur als Objekt einer geistigen Vorstellungswelt. Gleiches gilt ja f¨ur die Zahlen. Auch diese sind abstrakt und von speziellen Darstellungen zu unterscheiden. Die r¨omische Zahldarstellung VII und die arabische Darstellung 7 stellen die gleiche abstrakte Zahl dar. Darstellungen 157

Beim planm¨aßigen Handeln gr¨unden sich Entscheidungen auf Information. Aber umgekehrt ist auch Information das Ergebnis realer oder ideeller Entscheidungen. Hiervon machen wir z. B. Gebrauch, wenn wir Information durch Fragen ermitteln, deren Beantwortung Fallunterscheidungen herbeif¨uhren. So kann man z. B. mit n Ja-Nein-Fragen 2n verschiedene Sachverhalte unterscheiden. Zugleich erhalten wir hier einen Hinweis auf die notwendige Form der Informationsdarstellung: die durch 2n Ja-Nein-Fragen ermittelte Information ben¨otigt mindestens n Angaben, mit denen sich jeweils Ja und Nein unterscheiden lassen, d. h. n Bit. In der Informationstheorie, die genauer eine Informations¨ubertragungstheorie (englisch: Mathematical Theory of Communication) ist, bezeichnet man die Angabe der zur Darstellung notwendigen Anzahl von Bits als Informationsgehalt. Hierauf werden wir am Ende dieses Kapitels genauer eingehen. F¨ur die Verarbeitung von Information ist diese Sichtweise nicht besonders geeignet. Hingegen l¨aßt sich die intuitive Auffassung von Information unabh¨angig von dem Ansatz der Informationstheorie formalisieren: Definition 6.1.1 (Beschreibung, Bedeutung) Gegeben sei eine Menge S von Sachverhalten, eine Menge Z von Zeichen und eine Menge K von Kontexten, d. h. Vereinbarungen, so daß jedes k 2 K eine Relation :k auf Z  S festlegt; z :k s heiße z bedeutet s im Kontext k“. ” Dabei soll stets gelten: z :k s ^ z :k s0 ) s = s0

(Eindeutigkeit bei gegebenem Kontext):

F¨ur z :k s heißt hz; ki 2 Z  K eine Beschreibung von s 2 S und s heißt Bedeutung von z im Kontext k.

6.1. INFORMATION, DATEN UND NACHRICHTEN

159

Bemerkung: Wir lassen auch zu, daß Z eine Teilmenge von S ist, das heißt, Zeichen k¨onnen eventuell auch als Sachverhalte angesehen werden. Dann gibt es die M¨oglichkeit, daß ein Zeichen die Bedeutung eines anderen Zeichens darstellt. Intuitiv stellen zwei Paare hz; ki; hz0 ; k0i die gleiche Information dar, wenn sie Beschreibungen desselben Sachverhalts sind. Hierauf gr¨undet sich die folgende Definition von Information.

160

KAPITEL 6. INFORMATION UND NACHRICHT

Zeichenvorrat ( character set“) ” Darunter versteht man eine endliche Menge von verschiedenen Elementen, die der Informationsdarstellung dienen soll.

Zeichen ( character“) ” So nennt man ein Element aus einem Zeichenvorrat.

Definition 6.1.2 (Darstellung) Sei x ein Sachverhalt. Dann heißt die Klasse aller Beschreibungen hz; ki von x die x zugeordnete Information Ix, in Formeln: Ix = fhz; ki j z :k xg. Jedes Paar hz; ki mit z :k x heißt eine Darstellung von Ix . ¨ Bemerkung: Informationen sind auf diese Weise als Aquivalenzklassen von Beschreibungen gleicher Bedeutung erkl¨art. Hierzu gibt es in der Mathematik ¨ eine Analogie. Kardinalzahlen sind als Aquivalenzklassen von Mengen gleicher M¨achtigkeit definiert. Auf diesem Zusammenhang hat der Erkenntnistheoretiker ¨ G. Klaus zuerst hingewiesen. Er definiert Information als Aquivalenzklasse von Signalen gleicher Bedeutung, in Formeln etwa Ix = fz j z : xg. Hierbei treten also Kontexte nicht auf. Hier sind einige Beispiele f¨ur Kontexte und Beschreibungen: x = x + 1 :FORTRAN

Erh¨ohung des Wertes von x um 1“ ” x := x + 1 :PASCAL Erh¨ohung des Wertes von x um 1“ ” Summe der Elemente 1, 2, 3“ + / 1 2 3 :APL ” Wir stellen die Sprechweisen zu der Relation ’:’ noch einmal zusammen: A :k B heißt

 A bedeutet B im Kontext k  A tr¨agt die Information IB (d. h. die Information u¨ ber B) im Kontext k.  hA ki ist eine Beschreibung von B  hA ki ist eine Darstellung der Information IB. ; ;

Soweit haben wir prinzipiell gekl¨art, was Informationen sind und wie sie dargestellt werden k¨onnen. Der n¨achste Schritt besteht darin, eine systematische Darstellung von Informationen zu modellieren. Hierbei werden die Begriffe und Definitionen der Norm DIN 44300: Informationsverarbeitung - Begriffe“ zugrunde ” gelegt.

Alphabet Dies ist ein Zeichenvorrat mit definierter Reihenfolge der Elemente. Bemerkung: In der theoretischen Informatik wird Alphabet oft nur als Zeichenvorrat definiert, ohne Ordnung.

Un¨are, bin¨are, tern¨are, . . . , n-¨are Informationsdarstellungen Dies sind Darstellungen auf der Basis von 1, 2, 3, . . . , n Zeichen. Beispiel 6.1.3 un¨are Darstellung: lll. . . l, d. h. die Zahl n 2 N wird durch n Striche dargestellt. bin¨are Darstellung: 0,1,10,11,110,. . . d. h. das Alphabet besteht aus 2 Zeichen tern¨are Darstellung wie der Morsecode mit Zeichen f¨ur “kurz“,“lang“ und “Pause“ Es folgen weitere grundlegende Begriffsdefinitionen: Ein Bin¨arzeichen (binary element, binary digit, abgek¨urzt BIT) ist ein Zeichen eines bin¨aren Zeichenvorrats. Ein Wort (word) ist eine endliche Folge von Zeichen. Ein Symbol ist ein Wort, welches eine Bedeutung tr¨agt. Zum Beispiel ist in der deutschen Sprache das Wort Bergspitze“ ein Symbol, die Zeichenfolge ergsp“ ” ” hingegen nicht. Man beachte, daß der Begriff Wort“ hier anders ist als u¨ blicher” weise in der deutschen Sprache verwendet wird. Informationsdarstellungen auf der Basis von Symbolen heißen diskrete Informationsdarstellungen, solche auf der Basis von physikalischen Vorg¨angen heißen analoge Informationsdarstellungen. Die zugeh¨origen Informationen heißen dann diskrete bzw. analoge Information. Daten (data, Singular:Datum, data item) sind Informationsdarstellungen zum Zweck der Informationsverarbeitung.

6.1. INFORMATION, DATEN UND NACHRICHTEN

161

KAPITEL 6. INFORMATION UND NACHRICHT

162 W

Nachrichten (messages) sind Informationsdarstellungen zum Zweck der Informations¨ubertragung. Kombinierte Begriffe sind: Digitale (oder diskrete) Daten, digitale (=diskrete) Nachrichten, analoge Daten und analoge Nachrichten.

6.1.1 Diskretisierung In der Praxis besteht oft das Problem, analoge Informationsdarstellungen in diskrete Darstellungen derselben Information oder einer ann¨ahernd gleichen Information umzuwandeln. F¨ur die mathematische Modellbetrachtung ersetzen wir analoge Darstellungen durch Funktionen f : D ! W . Siehe hierzu die folgenden Visualisierungen:

W

D

D

Eine gerasterte Bildfunktion bezieht sich auf endlich viele Bildpunkte:

W = Schw¨arzungsgrade

D a) Darstellung im Koordinatensystem

b) Darstellung als Bildfunktion

Die Diskretisierung besteht aus zwei Schritten: 1. Die Rasterung bewirkt eine Diskretisierung des Definitionsbereiches D

Ist die Rasterung fein genug und f auf bestimmte Art zusammengesetzt, so entsteht durch die Rasterung kein Informationsverlust. Dieser Sachverhalt wird in pr¨aziser Form ausgedr¨uckt durch das Abtasttheorem: Sei f : R ! R aus Schwingungen mit Grenzfrequenz νG zusammengesetzt,



G

f (t )

=

(a(ν) cos(2πνt ) + b(ν) sin(2πνt ))dν:

0

2. Die Quantelung bewirkt eine Diskretisierung des Wertebereiches W .

Rasterung Die Rasterung ersetzt D durch einen diskreten Bereich, aufgebaut aus gleichgroßen Grundeinheiten. Rasterung von f : R ! R ergibt eine durch eine Treppenfunktion darstellbare Funktion:

Ist dann das Abtastintervall ts durch ts  2ν1 beschr¨ankt, so ist f (t ) diskret darG stellbar durch ∞

f (t )

=



n=;∞

f (nts )

sin( πt ts ; nπ) πt ts

; nπ

:

Hierzu gibt es mehrdimensionale Verallgemeinerungen.

6.2. CODES UND CODIERUNG

163

Die Bedingung ts  2ν1 l¨aßt sich anschaulich noch anders lesen: G Dem Zeitintervall ts des Abtastens entspricht eine Abtastfrequenz νs Bedingung lautet dann

=

1 . Die ts

KAPITEL 6. INFORMATION UND NACHRICHT

164

2. Codierung der Ziffern in einem bin¨aren Graycode: das ist ein Bin¨arcode fester L¨ange, bei dem sich benachbarte Ziffern genau in einem Bit unterscheiden:

νG  2νG

0 1 0000 0001

d.h. um die Funktion durch regelm¨aßiges Abtasten voll zu erfassen, muß die Abtastfrequenz mindestens das Doppelte der Grenzfrequenz νG betragen.

2 3 0011 0010

00 01 11 10

Die Quantelung ersetzt W durch einen diskreten Bereich. Bei Begrenzung der Werte ergibt sich eine endliche diskrete Menge. Bezogen auf W = R unterscheidet man



Quantelung auf Mitte Intervalle werden auf die Intervallmitte abgebildet (Bild a) Quantelung auf Seite Intervalle werden auf einen Intervallrand abgebildet (Bild b) W

W

a)

6 7 8 0101 0100 1100

9 1101

Die Systematik ergibt sich aus der folgenden Darstellung:

6.1.2 Quantelung



4 5 0110 0111

00 01 0 1 7 6 8 9

11 2 5

10 3 4

3. Der Morsecode verwendet die Zeichen “ (kurz), bin¨ar codiert als 01, ” -“ (lang), bin¨ar codiert als 0111, und ” L¨ucke“, bin¨ar codiert als 000. ” Es werden die Zeichen eines Alphabets aus Buchstaben und Ziffern codiert. Die Codew¨orter besitzen unterschiedliche L¨ange. Sie k¨onnen in einem sog. Codebaum dargestellt werden; siehe dazu die folgende Darstellung f¨ur die Buchstaben:

b)



;

6.2 Codes und Codierung

Beispiel 6.2.1



1. Codierung der nat¨urlichen Zahlen im Dualsystem 0 1 2 0 1 10

3 11

4 5 100 101

H

 

E



Ein Code ist eine Vorschrift, die den Zeichen eines Zeichenvorrats eindeutig die Zeichen eines anderen Zeichenvorrats zuordnet. Vereinfacht nennt man auch die Bildmenge selbst den Code. Besteht die Bildmenge aus Bin¨arworten, so liegt ein Bin¨arcode (binary code) vor.



I

S

; V F

; U

;



¨ U

L

T



; 

A

R

; ¨ P A

; W

;



J

B



N

D

; XC

;

; K

;



Y

Z



M

G

;

;

¨ Q O

O

; CH

4. Der Fernschreibercode CCIT-2 ist f¨ur 5-Kanal-Lochstreifen ausgelegt. Mit Hilfe der beiden Umschaltzeichen

6.2. CODES UND CODIERUNG Buchstabenumschaltung Ziffern-/Zeichenumschaltung

165

j  - j

k¨onnen Codew¨orter doppelt belegt werden. 5. Der IBM-Lochkartencode stellt Zahlen, Buchstaben und Sonderzeichen ¨ durch L¨ocher in 12 m¨oglichen Positionen (Reihen 0-9 und 2 Uberlochreihen) dar. Eine Lochkarte enth¨alt 80 Spalten, kann also bis zu 80 Zeichen aufnehmen. 6. Der ISO-7-Bit-Code ist ein internationaler Bin¨arcode f¨ur die rechnerinterne Darstellung von Ziffern, Buchstaben, Sonder- und Steuerzeichen (z. B. Backspace, Line-Feed,...). Siehe dazu DIN66003. 7. Der Strichcode oder Balkencode, mit dem Waren gekennzeichnet werden, codiert Ziffern, beim Code EAN-8 sind es 8 Ziffern, mit je 7 Bit, die durch weiße bzw. schwarze Streifen dargestellt werden, so daß sich h¨aufende Einsen zu breiteren schwarzen Streifen f¨uhren. Damit der Code in jeder Richtung gelesen werden kann, gibt es einen Rechtscode und einen Linkscode f¨ur jede Ziffer. Es werden dann die linken 4 Ziffern im Linkscode, die rechten 4 Ziffern im Rechtscode dargestellt. Wir betrachten nun allgemein die Codierung von Texten, also von Worten“ u¨ ber ” dem Originalzeichenvorrat. Es ist klar, daß man die Codew¨orter der Einzelzeichen zusammenf¨ugt. Dabei entsteht jedoch das Problem der eindeutigen Decodierung, z. B. kann im Beispiel a) die Bitfolge 0 jj 0 als 0110“ oder als 030“ oder 06“ ” ” ” etc. interpretiert werden. Folgende L¨osungen des Problems werden angeboten: feste Codel¨ange, d. h. feste L¨ange der Codew¨orter, Codierung von Trennzeichen (L¨ucke), dabei ist Bedingung, daß der Code des Trennzeichens dieses eindeutig aus dem Gesamttext identifiziert, Fano-Bedingung : Kein Codewort ist Anfang eines Anderen. Die Praxis ben¨otigt Codes mit M¨oglichkeiten zum Erkennen und Beseitigen von Fehlern: Ein Fehlererkennungscode liegt vor, wenn nicht alle W¨orter der Bildmenge ausgenutzt werden. Damit ist in der deutschen Sprache z. B. Bqum“ als fehlerhaft ” erkennbar. Ein Fehlerkorrekturcode liegt vor, wenn es zu gewissen fehlerhaften Worten der Bildmenge n¨achstgelegene Codew¨orter gibt, etwa Baum“ zu Bqum“. ” ” Als Maß f¨ur die Abweichung bei Bin¨arworten dient der Hamming-Abstand (signal-distance), der die Anzahl der unterschiedlichen Bits angibt.

KAPITEL 6. INFORMATION UND NACHRICHT

166

Man spricht von einem bin¨aren Fehlererkennungscode bei Hammingabstand  2 f¨ur die Codew¨orter und von einem bin¨aren Fehlerkorrekturcode bei Hammingabstand  3. Fehlererkennungscodes gewinnt man auf einfache Weise durch hinzuf¨ugen von Pr¨ufzeichen bzw. Pr¨ufbits.

Fehlererkennende und -korrigierende Codes Annahme: Datenworte haben feste L¨ange von m Datenbits 2 f0; 1g. Zur Korrektheitspr¨ufung werden weitere r  1 Bits benutzt. F¨ur ein Datenwort sind somit n = m + r Bits vorgesehen. Von den insgesamt 2m+r verschiedenen Worten sind 2m g¨ultig“. Ziel ist die Erkennung oder sogar Korrek” tur von ung¨ultigen Worten. (a) Parit¨atsbit: r = 1 Sei im folgenden m = 8, die Datenbits seien a7 ; a6; : : : ; a0, und das Parit¨atsbit sei a8 , a8

=

a7  : : :  a0:

Damit ist die Erkennung von 1-Bit Fehlern m¨oglich: wenn a8  a7  : : :  a0 = 0, dann liegt kein Fehler vor, andernfalls ist das Wort fehlerhaft. Fehlerkorrektur ist hier nicht m¨oglich. Definition 6.2.2 (Hammingdistanz) (b) Fehlerkorrektur: Seien w1 ; w2 Worte derselben L¨ange n u¨ ber f0; 1g. Die Hammingdistanz h(w1 ; w2 ) ist definiert als die Anzahl Bin¨arstellen, in denen sich w1 und w2 unterscheiden; mit anderen Worten: H (w1; w2 )

=

Anzahl ’1’ in w1  w2;

wobei w1  w2 die komponentenweise EXOR Operation bedeutet. Beispiel 6.2.3 n = 8; w1 = 01011011; w2 = 01110011 ) w1  w2 = 00101000 ) h(w1 ; w2) = 2

6.2. CODES UND CODIERUNG

167

Bemerkung Im Falle (a) (Parit¨atsbit) haben korrekte Worte w1 ; w2 eine Hamming- Distanz h(w1 ; w2 )  2, da mindestens zwei Bits ge¨andert werden m¨ussen, um w2 aus w1 zu erhalten. Allgemein gilt: Bei fehlererkennenden Codes muß die Hamming Distanz zwischen je zwei korrekten Worten mindestens 2 sein. Ein Code mit Hamming Distanz  3 dagegen erlaubt Fehlerkorrektur. Sei w ein korrektes Codewort und x ein Wort, das von w nur in einer Bin¨arstelle differiert (1-Bit Fehler). D. h. h(w; x) = 1. Dann gilt: 8w0 6= w; w und w0 korrekt, gilt:h(w; w0 )  3. Aus h(w; x) = 1 folgt daher: 8w0; w0 korrekt, gilt:h(w0 ; x)  2. Ziel: wenn x gegeben ist, bestimme das zugeh¨orige (korrigierte) Wort w. Korrektur von Einzel-Bit-Fehlern in Worten der L¨ange m W¨ahle die Anzahl r zus¨atzlicher Bin¨arstellen so, daß

 

im Fehlerfall eindeutig festgestellt werden kann, welche der m + r Stellen falsch ist, und der korrekte Fall erkannt wird.

Es sind also m + r + 1 verschiedene M¨oglichkeiten zu unterscheiden. Mit r zus¨atzlichen Bin¨arstellen sind 2r verschiedene Bitmuster zur Fehlerkorrektur m¨oglich. Folglich muß gelten: 2r



m + r + 1:

Beispiel 6.2.4 m = 4 ) r = 3 n¨otig Originalcode sei b1b2 b3 b4 b1 b2 b3 c123 Konstruiere 3 weitere Bits c123 ; c234; c134 , so daß b2 b3 b4 c234 b1 b3 b4 c134 jeweils Fehlererkennungscodes sind. Ist dann eines der Bits b1 b2 b3b4 c123 c234 c134 falsch, so kann erkannt werden, welches dies ist. Beispiel 6.2.5 m = 8 ) r = 4. Seien c0 ; c1; c2; c3 die Fehlerkorrekturbits. ci wird in Position 2i des m + r-Bitwortes eingef¨ugt, i = 0; : : : ; 3: c0 c1 x1 c2 x2 x3 x4 c3x5 x6 x7 x9 = y1 y2 y3y4 y5 y6 y7 y8 y9 y10 y11 y12 : Dabei soll gelten:

KAPITEL 6. INFORMATION UND NACHRICHT

168

     

y1 wird gepr¨uft von c0 y2 wird gepr¨uft von c1 y3 wird gepr¨uft von c0 und c1 y4 wird gepr¨uft von c2 y5 wird gepr¨uft von c0 und c2 etc. y12 wird gepr¨uft von c2 und c3

Allgemein wird yi gepr¨uft von den Pr¨ufbits c α1 ; : : : ; cαk wobei ∑kj=1 2α j = i. Anders ausgedr¨uckt:

   

y1 (bzw. c0 ) f¨uhrt Parit¨atspr¨ufung durch f¨ur y 1 y3 y5y7 y9 y11 , y2 (bzw. c1 ) f¨uhrt Parit¨atspr¨ufung durch f¨ur y 2 y3 y6y7 y10 y11 , y4 (bzw. c2 ) f¨uhrt Parit¨atspr¨ufung durch f¨ur y 4 y5 y6y7 y12 , y8 (bzw. c3 ) f¨uhrt Parit¨atspr¨ufung durch f¨ur y 8 y9 y10y11 y12 ,

Es werden nun Fehlerbits e0 ; e1; e2; e3 definiert:

   

e0 := y1  y3  y5  y7  y9  y11 e1 := y2  y3  y6  y7  y10  y11 e2 := y4  y5  y6  y7  y12 e3 := y8  y9  y10  y11  y12

Das Wort y1 : : : y12 ist korrekt genau dann wenn e0 = e1 = e2 = e3 = 0. Im Fehlerfall gibt j = ∑3i=0 ei 2i die fehlerhafte Bin¨arstelle an. Beispiel 6.2.6 Dem Datenwort 01101110 wird das Codeworty1 : : : y12 =110011011110 zugeord¨ net (die Korrekturbits ci sind kursiv angegeben). Wenn durch einen Ubertragungsfehler das Wort 110011111110 gelesen wird, erh¨alt man:e0 = 1; e1 = 1; e3 = 0. Somit ist die Stelle j = 20 + 21 + 22 = 7 fehlerhaft, und y7 wird zu 0 korrigiert.

6.3. EIN EINBLICK IN DIE CODIERUNGSTHEORIE

169

6.3 Ein Einblick in die Codierungstheorie

KAPITEL 6. INFORMATION UND NACHRICHT

170

Fall b) k gleichwahrscheinliche Zeichen, k beliebig.

¨ Die Codierungstheorie befaßt sich mit Problemen und Methoden der Ubertragung von Informationen. Dabei wird das folgende Modell zugrunde gelegt: Eine Nachrichtenquelle, der Sender, erzeugt in einem sequentiellen Prozeß Zei¨ chen eines Zeichenvorrats. Diese werden in codierter Form u¨ ber einen Ubertragungskanal an einen Empf¨anger geleitet, wobei jedoch durch St¨orungen, die auf den Kanal einwirken k¨onnen, die Nachrichten verf¨alscht werden k¨onnen, siehe die folgende Abbildung:

Jedes Zeichen xi tritt mit der Wahrscheinlichkeit pi =

1 k

auf.

Definition 6.3.2 (Entscheidungsgehalt) Als Maß der Information eines Zeichens xi oder gleichbedeutend als Entscheidungsgehalt des Zeichens xi bezeichnet man die Zahl mi := log2 k = ; log2( pi). Die Maßeinheit ist das Bit. Man beachte, daß mi im allgemeinen keine ganze Zahl ist.

St¨orung Fall c) Der allgemeine Fall: k Zeichen xi , jedes Zeichen xi hat die Wahrscheinlichkeit pi , so daß ∑ki=1 pi = 1 gilt.

Empf¨anger ¨ gskanal Ubertragun Abb.: Modell der Nachrichten¨ubertragung Sender

Typische Fragestellungen sind die nach der Gr¨oße des Kanals, etwa gemessen in Bits pro Zeiteinheit, nach dem Einfluß der Codierung und der Abh¨angigkeit von St¨orungen. Die Nachrichtenquelle wird charakterisiert durch die Wahrscheinlichkeiten, mit der die jeweiligen Zeichen erzeugt werden. Fall a) k gleichwahrscheinliche Zeichen mit k = 2n . Diese lassen sich durch n Bin¨arentscheidungen identifizieren, wie der nachfolgende Entscheidungsbaum illustriert:

fa b c d e ;

;

;

; ;

f ; g; hg

fa b c d g c b fa bg fc d g 6= c 6 a = =c =a fcg fd g fag fbg ;

;

;

;

;

2. ϕ(2) = 1: dies ist eine Normierung auf Bin¨arentscheidungen.

 f fe f g hg g fe f g 6 e = gfg hg6= g = =e feg f f g fgg fhg ;

;

Diese Definition, die wir hier durch Verallgemeinerung eines u¨ berschaubaren Falles (k = 2n, pi = 2;n) gewonnen haben, l¨aßt sich auch systematisch begr¨unden. Dies sei hier f¨ur beliebiges k, mit pi = 1k skizziert: Man sucht ein Maß ϕ: N ! R, so daß der Entscheidungsgehalt nach einer Unterteilung in n gleichwahrscheinliche F¨alle gerade um ϕ(n) zunimmt. Dann l¨aßt sich festlegen: 1. ϕ(1) = 0: keine echte Unterteilung.

e

d

Definition 6.3.3 Als Maß der Information eines Zeichens xi , welches mit der Wahrscheinlichkeit pi auftritt, d. h. als Entscheidungsgehalt von xi bezeichnet man mi := ; log2 pi .

;

;

3. ϕ(n  m) = ϕ(n) + ϕ(m): Eine Aufspaltung in n und dann in m Alternativen ergibt insgesamt n  m Alternativen. dt

;

Definition 6.3.1 (Maß der Information) Als Maß der Information mi f¨ur ein Zeichen xi , i = 1; : : : ; k, bezeichnen wir die Anzahl der notwendigen bin¨aren Entscheidungen zur Identifikation des Zeichens, welche in diesem speziellen Fall (k=2n, alle Zeichen gleichwahrscheinlich) mit der Zahl der notwendigen Bits einer Bin¨ardarstellung u¨ bereinstimmt: Es gilt mi := n = log2 k.

(n)

dt

dt

dt

dt

dt

dt

dt

 m)

(m) +ϕ(m)

(m)

dt

+ϕ(n

dt

dt

(m)

dt

+ϕ(n)

dt

dt

dt

dt

4. ϕ(n) > ϕ(m) f¨ur n > m: Der Zugewinn an Entscheidungsinformation ist gr¨oßer bei mehr Alternativen.

6.3. EIN EINBLICK IN DIE CODIERUNGSTHEORIE

171

Hieraus kann man mathematisch herleiten:ϕ(n) = log2 n. Dieses Resultat erkl¨art, weshalb das Maß f¨ur den Entscheidungsgehalt logarithmisch ist. F¨ur den allgemeinen Fall wird weiterhin definiert: Definition 6.3.4 (mittlerer Entscheidungsgehalt) Der mittlere Entscheidungsgehalt einer Nachrichtenquelle, auch Entropie der Quelle genannt, ist H = ∑ni=1 pi (; log2 pi ). H gibt die mittlere L¨ange in Bit an, die zur Codierung der Zeichen der Quelle n¨otig ist.

Definition 6.3.6 (mittlere Wortl¨ange) Das Zeichen xi der Quelle sei mit Ni Bit codiert, i = 1; : : : ; n. Dann ist L = ∑ni=1 pi Ni die mittlere Wortl¨ange. Es gilt dann das -hier nicht bewiesene- Codierungstheorem von Shannon: Es gilt: (a) H  L

(b) Durch Codierung von Zeichengruppen ist es m¨oglich, L ; H beliebig klein zu machen.

Beispiel 6.3.5 a) Der W¨urfel mit xi = i; i = 1; 2; : : :; 6; pi = 16 ; mi = log2 6  2:585 f¨ur alle i, also auch H  2:585. Zur Codierung sind also 3 Bit erforderlich. b) Totow¨urfel mit x1 = 1; x2 = 2; x3 = 3; p1 = 12 ; p2 = 13 ; p3 = 16 . Dabei ist m1 = 1; m2 = log2 3  1:585 und m3 = log2 6  2:585. Es folgt H

KAPITEL 6. INFORMATION UND NACHRICHT

172

=

1 1 1 1 1 1 log 2 + log2 3 + log2 6  +  1:585 +  2:585 = 1:448 2 2 3 6 2 3 6

Welche Werte kann nun H annehmen, wenn nur die Zahl n der Zeichen festliegt? Der geringste mittlere Entscheidungsgehalt liegt vor, wenn sicher ist, daß immer nur dasselbe Zeichen x1 gesendet wird: p1 = 1; p2 = : : : = pn = 0. Hierf¨ur kann H gem¨aß der Formel nicht direkt ausgerechnet werden, da ; log2 0 nicht existiert. Hier hilft eine Grenzwertbetrachtung:

Definition 6.3.7 (Redundanz) L ; H heißt Redundanz der Quelle. Beispiel zur Verminderung der Redundanz durch Codierung von Zweiergruppen: Wir haben bereits gesehen, daß f¨ur den Totow¨urfel H  1:448 gilt: Zeichen Wahrscheinlichkeit Entscheidungsgehalt 1 1 1“ 2 ” 1  1:585 2“ 3 ” 1 3“  2:585 6 ” Hierzu w¨ahlen wir als Codierung folgende Zuordnung:

lim p  (; log2 p)

p!0

=

lim

1

i!∞ 2i

1  (; log2 21i ) = ilim i = 0 !∞ 2i

:

Da auch 1  (; log2 1) = 0 ist, ergibt sich H=0. Der gr¨oßte Wert f¨ur H ergibt sich bei gleichen Wahrscheinlichkeiten:

n

H

=

1 1 ∑ n  (; log2 n ) = log2 n: i=1

Wir vergleichen jetzt f¨ur den allgemeinen Fall die Entropie H mit der mittleren Wortl¨ange einer beliebigen konkreten Codierung:

Zeichen Bin¨arcode L¨ange 1“ 0 1 ” 10 2 2“ ” 3“ 11 2 ” Man beachte, daß hierf¨ur die Fano-Bedingung erf¨ullt ist. F¨ur die mittlere Wortl¨ange L gilt: L = 12  1 + 13  2 + 16  2 = 1:5. Jetzt codieren wir Zweiergruppen. Die Wahrscheinlichkeit f¨ur ein Paar xi x j ist pi p j . F¨ur die neuen Zeichen ergibt sich ein Code entsprechender Redundanz durch aneinanderf¨ugen: Auf die neuen Zeichen bezogen ist H  2  1:448 = 2:896 und L=3. Der verbesserte Code erreicht L=2.97:

6.4. HUFFMAN-CODIERUNG UND ARITHMETISCHE CODIERUNG Zeichen 11“ ” 12“ ” 13“ ” 21“ ” 22“ ” 23“ ” 31“ ” 32“ ” 33“ ”

Wahrscheinlichkeit Code 1 1 00 22 1 1  010 2 3 1 1  011 2 6 1 1  100 3 2 1 1  1010 3 3 1 1  1011 3 6 1 1 110 62 1 1 1110 63 1 1 1111 66

173

verbesserter Code 00 010 011 100 101 1101 1100 1110 1111

6.4 Huffman-Codierung und arithmetische Codierung (Text fehlt)

174

KAPITEL 6. INFORMATION UND NACHRICHT

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

176

– Jeder Algorithmus im Knuth’schen Sinne ist auf der Maschine ausf¨uhrbar, auch jede ’computational method’ bis zu einem a¨ ußerlich erzwungenem Abbruch. – F¨ur Baueinheiten ist die Universalit¨at nicht realisierbar, da sie einen unendlich großen Speicher ben¨otigen w¨urde. Die Universalit¨at begr¨undet die M¨achtigkeit und vielseitige Einsetzbarkeit des Computers. Der unendliche Speicher wird durch Soeicher approximiert, die f¨ur konkrete Probleme groß genug sind.

Kapitel 7 Die Von-Neumann-Maschine



Dies ist zu einer wichtigen Voraussetzung f¨ur die Software-Technik geworden: Auch Programme werden einer vielf¨altigen Informationsverarbeitung unterworfen. F¨ur den Compiler ist ein Programm zum Beispiel ein Satz von Eingabedaten.

7.1 Das grundlegende Konzept Das dem modernen Computer im wesentlichen zugrunde liegende Konzept wird nach John von Neumann bezeichnet, der dieses Konzept 1944 in seinem EDVACReport beschrieben hat. Nach diesem Konzept wurde 1946 die ertste Rechenmaschine mit Elektronenr¨ohren gebaut, die ENIAC. Dasselbe Konzept liegt aber auch der Z§ von Konrad Zuse, gebaut 1941, und der Mark I von H.H. Aiken, gebaut 1944, zugrunde. Hier sei auch noch auf ein immer noch interessantes Buch von John von Neumann hingewiesen: The Computer and the Brain, Yale University Press, Inc., New Ha¨ ven, 1958, Deutsche Ubersetzung: Die Rechenmaschine und das Gehirn, Oldenbourg, M¨unchen, 1960 In der Norm DIN 44300 Ger¨ate der Computertechnik unterscheidet man Funktionseinheiten, die durch Aufgabe und Wirkung beschrieben sind, und Baueinheiten, welche physikalische Gebilde darstellen. Die Von-Neumann-Maschine ist ein Konzept f¨ur eine Funktionseinheit. Dieses beruht auf den folgenden Grundprinzipien:

  



Ein Nachteil dieser Arbeitsteilung ist der sog. Von-Neumannsche Flaschenhals: Alle zu verarbeitenden Daten m¨ussen vom Speicher zum Rechenwerk transportiert werden. Dies hat auch Auswirkungen auf die Von-NeumannProgrammierung in h¨oheren Sprachen: Dem Transport entspricht die Zuweisung. Komplexe Vorg¨ange m¨ussen bis auf elementare Zuweisungen heruntergebrochen werden. Wir betrachten jetzt die funktionalen Einheiten:



– Es wird eine einheitliche Struktur der Elemente vorgesehen:k Speicherzellen gleicher Gr¨oße, z. B. Bin¨arworte der L¨ange m.

Prinzipielle Gleichheit von zu verarbeitenden Daten und Steuerdaten (Daten und Programmen)

– Die Zellen werden linear angeordnet und adressiert. Mit bin¨aren Adressen 0...0 bis 1...1 als n-Bit-Worte lassen sich k = 2 hoch n Zellen adressieren.

Funktionale Arbeitsteilung

– Der Zugriff auf Inhalte wird nur u¨ ber die Adresse realisiert. Bei sog. assoziativen Speichern wird uber ¨ den Inhalt zugegriffen.

 175

Speicher – Dieser ist f¨ur die zu verarbeitenden Daten und die Steuerdaten.

Universalit¨at: f¨ur alle denkbaren Programmieraufgaben geeignet

Universalit¨at:

Funktionale Arbeitsteilung: 0.Universelle Maschine 0.0 Speicher 0.1 verarbeitende Instanz 0.1.0 Ein/Ausgabewerk 0.1.1 Prozessor 0.1.1.0 Leitwerk 0.1.1.1 Rechenwerk

Wir diskutieren diese Prinzipien im Detail:



Prinzipielle Gleichheit der Daten:

Rechenwerk

7.1. DAS GRUNDLEGENDE KONZEPT

177

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

178

Dieses heißt auch ALU (arithmetical logical unit) und ist der Ort f¨ur arithmetische und logische Operationen auf den Worten, die als Speicherzelleninhalte vorkommen. Die Zellen in der ALU heißen Register.



verarbeitende Instanz

Leitwerk,

Eingabekanal

Ausgabekanal

auch Steuerwerk oder Befehlswerk genannt, englisch Control Unit (CU). Die Aufgaben betreffen die Verarbeitung von Steuerdaten: – Entschl¨usselung von Befehlen, – Organisation und Veranlassung der Ausf¨uhrung von Befehlen, – Organisation des Befehlszyklus: n¨achsten Befehl ermitteln oder Beenden.



Speicher

Abbildung 7.2: Ausgliederung des Speichers

Ein-/Ausgabewerk Dieses organisiert den Datenfluß von und nach außen. EK

Wir betrachten die funktionale Arbeitsteilung jetzt aus der Sicht der (unmarkierten) Petri - Netze. Die sog. Netze aus Instanzen und Kan¨alen (NIK’s) sind ein Darstellungs- und Analysehilfsmittel f¨ur funktionale Einheiten. Zur Detaillierung wird die Operation der Verfeinerung (Gegenrichtung: Vergr¨oberung) eingesetzt.

EA Werk

Rechenwk.

Leitwerk Kommunikationskanal

Maschine Eingabekanal

AK

Speicher Ausgabekanal

Abbildung 7.1: Der Computer als verarbeitende Instanz Beachte: In Petri - Netzen gibt es Verbindungen nur zwischen verschiedenartigen Elementen (S - Elemente, rund, bzw. T - Elemente, eckig gezeichnet). HIER ZEICHNUNG SEITE 122:Aufspaltung des Kommunikationskanals: In der Praxis verwendet man andere Darstellungen, z.B. die folgende ”Bus - orientierte”Darstellung:

Abbildung 7.3: Funktionale Aufspaltung der verarbeitenden Instanz

7.1.1 Struktur des Speichers 2n Zellen je m Bit adressiert von 0 bis 2n ; 1. Der Speicher hat ein n - Bit Datenregister DAR und ein Datenregister DR von m Bits: Schema:

Um Vorg¨ange im Detail beschreiben zu k¨onnen f¨uhren wir eine Notation ein: ROM = Read Only Memory RAM = Random Access Memory

<

a > oder C(a):

7.1. DAS GRUNDLEGENDE KONZEPT

179

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

180 bestehend.

0; x ! a: Transport des zu kurzen Wortes x an die Stelle a unter Auff¨ullung mit Nullen von links.

Abbildung fehlt!

Execute(b): Ausf¨uhrung des Befehls, der durch das Bin¨arwort b dargestellt wird. Jetzt k¨onnen wir den Zugriff auf den Speicher so beschreiben: Sei x eine Speicheradresse. Gesucht ist < x >: 1. x ! DAR 2.

>! DR

aus DR kann der Inhalt weiter transportiert werden, z.B. in ein Register der ALU. Abbildung 7.4: Bus - orientierte Darstellung

7.1.2 Struktur des Rechenwerks DAR:

n

DR:

m

0:

m

Das Rechenwerk enth¨alt Register f¨ur Bin¨arwerte. Als Beispiel w¨ahlen wir folgende einfache Registerstruktur: Ein Hauptregister, Akkumulator (AC) genannt, der L¨ange m, ein Hilfsregister, Multiplikanden / Quotientenregister MQ genannt, der L¨ange m, ein 1 - Bit ¨ Register OV zur Anzeige des arithmetischen Uberlaufs, zwei Indexregister IX, IY der L¨ange n f¨ur Adreßarithmetik: Schema:

2^n-1:

m

Abbildung 7.5: Speicherstruktur

AC:

m

MQ:

m

Inhalt von a, wobei a ein Registername oder eine Adresse ist.

OV:

1

x ! a: Transport des Wortes x an Register oder Adresse a.

IX:

n

IY:

n

xk::: j : bin¨ares Teilwort des Wortes x, n¨amlich aus den Bits der Positionen k bis j

Abbildung 7.6: Struktur des Rechenwerks

7.1. DAS GRUNDLEGENDE KONZEPT

181

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

182

Heutige Prozessoren besitzen Rechenwerke aus 32, 64, 128 oder mehr gleichartigen Registern.

OP

ADR m

Abbildung 7.8: Einadreßbefehle

7.1.3 Struktur des Leitwerks Das Leitwerk enth¨alt ein Register IR (instruction register) f¨ur Befehlsworte und eines f¨ur Adressen von Befehlen PC (program counter).

OP

ADR

ADR m

Schema:

Abbildung 7.9: Zweiadreßbefehle 1. Befehlsholphase : >! IR PC:

n

2. Decodierungsphase : < IR > wird entschl¨usselt.

IR:

m

3. Operandenholphase : Notwendige Operanden werden in das Rechenwerk geholt

Abbildung 7.7: Struktur des Leitwerks Die Arbeitsweise des Leitwerks ist die folgende: Zu Beginn steht die Adresse des Startbefehls im PC. Mittels dieser Adresse wird der Befehl selbst in das IR geholt und dort entschl¨usselt. Im PC wird weiter gez¨ahlt. Darstellung eines einfachen Befehlszyklus: 1.

>! IR

PC > +1 ! PC

3. Execute(< IR >); falls dieses keinen Abbruch hervorruft, weiter bei 1. Das Leitwerk interpretiert die Worte in seinem IR als Befehlsworte. Hier sind m¨ogliche Strukturen f¨ur Befehlsworte: Man ben¨otigt einen Operationscode (OP) f¨ur den Befehl selbst sowie 0, 1 oder mehr Adressen (ADR), auf denen ggf. der Befehl arbeiten soll.

 

Einadreßbefehle haben die Form

4. Ausf¨uhrungsphase : Verkn¨upfung der Operanden etc. 5. R¨uckschreibphase : R¨uckspeicherung der Resultate in daf¨ur bestimmte Speicherstellen oder Register 6. Adressierungsphase : Bestimmung der Adresse des n¨achsten Befehls.

7.2 Maschinennahe Programmierung Wir unterscheiden folgende Hauptgruppen von Befehlen: 1. Transportbefehle: f¨ur den Transport von Teilworten, Worten und Wortgruppen zwischen Zellen des Speichers oder des Rechenwerks. 2. Umwandlungsbefehle: F¨ur arithmetische und logische Operationen. 3. Programmablaufbefehle: Dies sind Befehle, die den Ablauf steuern (z.B. Sprungbefehle).

Zweiadreßbefehle haben entsprechend die Form

Mit k Bits im Operationsteil lassen sich 2k Befehle identifizieren. Heute unterteilt man den Befehlszyklus in die folgenden 6 Phasen:

Im folgenden konstruieren wir f¨ur das im vorigen Abschnitt eingef¨uhrte Schema eines klassischen Rechners einen Satz von Maschinenbefehlen. Jeder Befehl hat die Struktur

7.2. MASCHINENNAHE PROGRAMMIERUNG OP

183

SPEC

Abbildung 7.10: Befehlsstruktur

mit einem Operationsteil OP und einem Spezifikationsteil SPEC, der oft aber nicht immer - eine Adresse darstellt. Die Befehle werden nicht in interner bin¨arer Codierung, sondern in einer externen Codierung angegeben, die besser lesbar ist.

184 Befehlsgruppe Transportbefehle

OP LAC SAC LMQ SMQ LIX LIY RT RT RT RT RT RT RT RT Umwandlungsbefehle ADD

Beispiel: LAC a (f¨ur ´Load Accumulator with the content of a´).

Die Wirkung wird in der oben eingef¨uhrten Notation beschrieben, f¨ur LAC a z.B. durch

<

a >! AC

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

Programmablaufbefehle

SPEC a a a a a a AQ QA AX AY QX QY XA YA a

SUB

a

MUL

a

AND OR NOT SEZ SHL SHR CSL CSR JMP JLE JEQ JOV STP NOP

a a beliebig beliebig k k k k a a a a beliebig beliebig

Wirkung < a >! AC < AC >! a < a >! MQ < MQ >! a a ! IX a ! IY < AC >! MQ < MQ >! AC < AC >m;n+1:::m ! IX < AC >m;n+1:::m ! IY < MQ >m;n+1:::m ! IX < MQ >m;n+1:::m ! IY 0; < IX >! AC 0; < IY >! AC < AC > + < a >! AC (1 ! OV bei Overflow) < AC > ; < a >! AC (1 ! OV bei Overflow) < AC >  < a >! AC ; < a >! MQ (1 ! OV bei Overflow) < AC > ^ < a >! AC (bitweise) < AC > _ < a >! AC (bitweise) : < AC >! AC (bitweise) 0:::0 ! AC < AC >k +1:::m ; 0 ! AC 0; < AC >1:::m;k ! AC < AC >k +1:::m ; < AC >1:::k ! AC < AC >m;k +1:::m ; < AC >1:::m;k ! AC a ! PC Wenn < AC > 0, dann a ! PC Wenn < AC >= 0, dann a ! PC Wenn < OV >= 1, dann a ! PC; 0 ! OV Halt keine Operation

Hier ist ein Beispielprogramm, welches zugleich den Speicher f¨ur Befehle und Daten zuweist. Hier ist eine Tabelle solcher Befehle:

Aufgabe: Addition von 3 Zahlen, s = x1 + x2 + x3 :

7.2. MASCHINENNAHE PROGRAMMIERUNG

185

Bereich Adresse Wort Erl¨auterung Befehle 0 LAC 5 x1 ! AC 1 ADD 6 x1 + x2 ! AC 2 ADD 7 x1 + x2 + x3 ! AC 3 SAC 8 x1 + x2 + x3 ! 8 => S < 4 STP 0 Halt Daten 5 x1 1. Argument 6 x2 2. Argument 7 x3 3. Argument 8 s Resultat

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

186 - Bedingung).

2. Indirekte Adressierung: Statt der wechselnden Adresse wird ein Speicherplatz a angegeben, an dem die eigentliche Adresse gespeichert ist. Die Ver¨anderung der Adresse erfolgt dann an dieser Stelle. Man braucht dazu einen erweiterten Befehlscode, z.B. so, daß zu jedem Befehl XXX ein Befehl XXXI existiert, so daß XXXI a so wirkt wie XXX < a >.

Wir haben hier eine weitere Notationsvereinbarung verwendet: > s < f¨ur Adresse von s. Diese Notation macht nur Sinn, wenn die Adresse eindeutig ist. Beispiel 2: Maximum von 2 Zahlen (m = max(x1 ; x2)): Bereich Adresse Wort Befehle 0 LAC 8 1 SUB 9 2 JLE 5 3 LAC 8 4 JMP 6 5 LAC 9 6 SAC 10 7 STP 0 Daten 8 x1 9 x2 10 m

Erl¨auterung x1 ! AC x1 ; x2 ! AC Sprung zu 5, falls x1  x2 falls x1 > x2 : x1 ! AC falls x1 > x2 : Sprung nach 6 falls x1  x2 : x2 ! AC < AC >!> m < Halt 1. Argument 2. Argument Resultat

Wir betrachten nun den Fall, daß Befehle in einer Schleife mehrfach verwendet werden sollen, aber jeweils mit ver¨andertem Spezifikationsteil. Dieser Fall tritt z.B. auf, wenn eine variable Anzahl von Zahlen addiert werden soll. Es gibt hierzu besondere Adressiertechniken: 1. Programmierung der Adresse: Die jeweils aktuelle Adresse wird vor Verwendung des Befehls in diesen eingebaut. Wegen der Universalit¨at des Computers ist diese Verarbeitung von Befehlsworten m¨oglich, sie ist aber auch umst¨andlich und etwas undurchsichtig. Außerdem verletzt sie eine wichtige praktische Bedingung, n¨amlich, daß ein Programm nach Ablauf unver¨andert sein sollte (´reentrant´

3. Adreßmodifikation Die zu verwendende Adresse wird aus der angegebenen und einer weiteren Indexinformation zusammengesetzt. Ein Befehl XXX a soll dann interpretiert werden als XXX < i > +a. i k¨onnte dabei ein Indexregister sein. Beispiel: Das Voranstellen eines Befehls MOD IX (Modifizierung mit Indexregister IX) bewirkt, daß im unmittelbar n¨achsten Befehl XXX a als XXX < IX > uhrt wird. +a ausgef¨

7.3 Darstellung von Zahlen im Rechner Wir betrachten die u¨ blichen bin¨aren Darstellungen von Zahlen in Maschinenworten.

7.3.1 Nichtnegative ganze Zahlen Mit m Bits lassen sich die Zahlen 0 bis 2m ; 1 durch die Worte 0...00, 0...01, 0...10, ... ..., 1...11 darstellen. Der Zahlenwert eines Wortes b1:::bm (bzw. bm :::b1) ist dann ;1 m;1 i i ∑m i=0 bm;i  2 (bzw. ∑i=0 bi+1  2 ).

7.3. DARSTELLUNG VON ZAHLEN IM RECHNER

187

7.3.2 Vorzeichenbehaftete ganze Zahlen



Von m Bits kann man eines f¨ur das Vorzeichen verwenden (0 f¨ur +, 1 f¨ur ;) und die restlichen m ; 1 Bits f¨ur den Absolutbetrag, dessen Werte von 0 bis 2m;1 ; 1 reichen. Damit werden die Zahlen von

;(2m;1 ; 1) bis (2m;1 ; 1)

dargestellt. Die Zahl 0 hat dabei zwei Darstellungen: 0|0...0 und 1|0..0. Der Nachteil dieser Darstellung erweist sich erst in der Arithmetik: Man braucht dann einen eigenen Subtraktionsbefehl außer dem Additionsbefehl.



Einerkomplement Bei der Darstellung im Einer-Komplement wird f¨ur positive Zahlen nur der Bereich bis 2m;1 (bin¨ar 01...1) verwendet, die dar¨uber liegenden Zahlen werden f¨ur negative Zahlen verwendet. Dabei wird

;x = (2hochm) ; 1 ; x gesetzt. Damit ist zum Beispiel

;0 = 2m ; 1 ;1 = 2m ; 2 ;2 = 2m ; 3

bin¨ar 11....11 bin¨ar 11....10 bin¨ar 11....01

Zum Vergleich: +0 +1 +2

wird dargestellt durch 00....0 wird dargestellt durch 00....1 wird dargestellt durch 00...10

Man erh¨alt also ;x durch bitweise Invertierung von +x.



Zweierkomplement Heute weitgehend u¨ blich ist die Darstellung im Zweierkomplement. Dabei gilt ;x = 2m ; x: Dies hat zur Folge, daß die negative Null herausf¨allt: 2m hat schon eine Stelle zuviel. Es gelten folgende Darstellungen:

;1 = 2m ; 1 ;2 = 2m ; 2

bin¨ar 11....1 bin¨ar 11....0

Hier sind Addition und Subtraktion identisch: Beispiele:

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

188 +2 = 0010 +5 = 0101 --------+7 = 0111 +2 = 0010 -5 = 1011 ---------3 = 1101 -2 = 1110 +5 = 0101 --------+3 = 0011 -2 = 1110 -5 = 1011 ---------7 = 1001

¨ Bei den letzten beiden Beispielen tritt ein Uberlauf auf, der aber ignoriert werden kann. ¨ Ob eine Uberschreitung des Zahlbereichs aufgetreten ist, wird separat gepr¨uft.

7.3. DARSTELLUNG VON ZAHLEN IM RECHNER

189

7.3.3 Rationale Zahlen und Gleitpunktdarstellung Um gebrochene Zahlen und auch Zahlen in verschiedenen Gr¨oßenordnungen (wenigstens angen¨ahert) darstellen zu k¨onnen, verwendet man GleitpunktZahlensysteme: Eine Zahl x wird in die Form x = (-1) hoch v mal y mal b hoch e gebracht. Dabei gilt 0 ¡= y ¡ 1. b ist die Basis des Exponenmten, meist ist b = 2. Auch b = 2 hoch k f¨ur k ¿ 2 kommt vor. Dargestellt werden dann - das Vorzeichen v: 0 oder 1 - die Mantisse y als Bin¨arbruch 0.y(1) y(2) . . . - der Exponent e. Schema: v

e

Anschaulich ist klar: Wir k¨onnen die Mantisse durch Einschieben von r*i Nullen hinter dem sog. Radixpunkt verkleinern und den Exponenten entsprechend vergr¨oßern. Beispiel 7.3.2 Im oben erl¨auterten ’single format’ kann die Zahl 0.75 wie folgt dargestellt werden: v = 0, e = 0 y = 0.7510 = 0.110: : : 02

(dargestellt durch 12710 = 011111112) (dargestellt durch 110: : : 00)

d.h. es ergibt sich das folgende Bin¨arwort

y

Beispiel 7.3.1 Beispiele f¨ur in der Praxis vorkommende Wortl¨angen:

0 01111111 110: : : 00 (zu Basis b = 2)

32 bit: 1 Bit f¨ur v, 8 Bit f¨ur e, 23 Bit f¨ur y 64 bit: 1 Bit f¨ur v, 11 Bit f¨ur e, 52 Bit f¨ur y (’single format’ und ’double format’ der Norm IEC 559 9 1989) Der Exponent e wird wie folgt dargestellt: Betr¨agt die L¨ange k bit, so werden dadurch die nichtnegativen Zahlen 0 bis 2k;1 direkt dargestellt. Sei d die direkt dargestellte Zahl. Dann ist

Stellen: 1 Alternativen sind

8

v = 0,

e = 1,

0 10000000 0110: : : 00

v = 0,

-(2k;1 - 1) bis 2k;1

e = 2,

y = 0.01875,

d.h.

ohne Vorzeichen darstellen. Spart man die Bitmuster 0: : :00 und 0: : :01 aus, so reicht der Bereich von -(2k;1 -3) bis 2k;1 f¨ur k = 8, also von -125 bis 128, f¨ur k = 11 von -1021 bis 1024. Bevor wir das Aussehen der Mantisse er¨ortern, m¨ussen wir u¨ ber die Mehrdeutigkeit der Darstellung sprechen: Gilt x = (-1)v ybe mit b = 2i , so gilt auch

e

y = 0.0375,

d.h.

Man kann damit f¨ur e Werte von

x = (-1)vyee mit y = y*b;r ,

23

oder

e = d - (2k;1 - 1).

e

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

190

e

e = e + r.

0 10000001 00110: : : 00 Eindeutigkeit der Darstellung wird f¨ur x 6= 0 erreicht durch die sog. Normalisierungsbedingung b;1  y < 1. Dies bedeutet: Gilt b = 2i , so m¨ussen die i ersten Bits der Mantisse von i Nullen verschieden sein, f¨ur i = 1 heißt das: das erste Bit muß gleich 1 sein. Diese Darstellungen heißen normalisierte Gleitpunktzahlen . Ist die Bedingung nicht erf¨ullt, so spricht man von denormalisierten Gleitpunktzahlen. F¨ur b = 2 und x = 0 ist bei normalisierten Gleitpunktzahlen das erste Bit der Mantisse redundant. Es wird dann eventuell nicht mehr dargestellt. Die Zahl 0.75 w¨urde dann wie folgt dargestellt:

7.3. DARSTELLUNG VON ZAHLEN IM RECHNER

191

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

192

0 01111111 10: : : 00

if x = y then: : : 0 und

Sind y1,: : : 0,y p die Bits der Mantisse (y1 f¨ur b = 2 eventuell gar nicht dargestellt und implizit = 0), dann gilt

if x - y = 0 then: : : 0

x = (-1)v be ∑ y j b; j . p

j=1

Auch e l¨aßt sich durch die bits d1 : : : 0dk der Darstellung d = e +(2k;1 - 1) ausdr¨ucken: e = -2k;1 + 1 + ∑ bk;1 d j . k

zu unterschiedlichen Resultaten f¨uhren k¨onnen. ¨ Der letztgenannte Punkt f¨uhrt uns zu den Uberlegungen zur Arithmetik der Gleit¨ punktzahlen. Hierf¨ur gelten die folgenden Uberlegungen:



j=1

Folgende Tatsachen folgen aus den Darstellungen:

 



Es werden nur endlich viele Zahlen dargestellt. Die kleinste und die gr¨oßte darstellbare Zahl sind aus den Darstellungsparametern errechenbar.

 





Gem¨aß der Darstellung

lassen sich Additionen und Subtraktionen nur nach Anpassung des Argumentes mit kleinerem Exponenten durch Denormalisierung durchf¨uhren. Beispiel 7.3.4 (Basis b = 1)

Die Intervalle zwischen benachbarten darstellbaren Zahlen wachsen, wenn der Absolutbetrag der Zahl w¨achst.

x1 = 16,

x2 = 0.75

Es soll x1 + x2 gebildet werden. Es ist e1 = 5, e2 = 0,

Die L¨ucken rechts und links der 0 sind relativ groß bei normalisierten Gleitpunktzahlen.

y1 = 0.12 , y2 = 0.112

Die Darstellung von x2 wird denormalisiert zu

Variiert man bei fester Gesamtwortl¨ange die Bitl¨ange von Exponent und Mantisse, so ergeben sich prinzipiell folgende M¨oglichkeiten: Mehr Bits f¨ur den Exponenten bedeuten einen gr¨oßeren Zahlbereich und eine genauere Darstellung der Zahlen ’rechts’ und ’links’ der 0. Mehr Bits f¨ur die Mantisse bedeuten eine gr¨oßere Genauigkeit. Es gibt normalisierte Gleitpunktzahlen, die verschieden sind, deren Differenz aber als normalisierte Zahl nur durch 0 approximiert werden kann. Daraus folgt z.B. daß die Abfragen

Ist das Ergebnis nicht exakt darstellbar, so wird es gerundet.

x = (-1)v y be

Nur ganze Zahlen und gebrochene Dualzahlen werden exakt dargestellt. Zur Darstellung anderer Zahlen innerhalb des uberhaupt ¨ darstellbaren Bereichs wird gerundet, und zwar auf einen der beiden benachbarten Werte, bei optimaler Rundung auf den n¨achstgelegenen Wert. Eine einfache Rundungstechnik besteht im Abstreichen u¨ berz¨ahliger Bits (’truncation’).

Beispiel 7.3.3 Man berechne die Nachbarn von 1, 4 und 16 in der ’single-format’- Darstellung, normalisiert mit impliziter erster Mantissenstelle.



Wird der Zahlbereich der darstellbaren Zahlen durch das Ergebnis einer Operation nach außen u¨ berschritten, so liegt ein Overflow-Fehler vor. Dieser l¨ost i.a. einen Alarm aus.

e’2 = 5,

y’ = 0.00000112

Die Summe hat dann die Darstellung e3 = 5,



y3 = 0.10000112

Bei der Multiplikation werden die Exponenten addiert, bei der Division subtrahiert. Die Mantissen werden multipliziert bzw. dividiert. Das Resultat der Mantissen muß ggf. angepaßt werden.

7.3. DARSTELLUNG VON ZAHLEN IM RECHNER Beispiel 7.3.5 x1 = 10,

x2 = 0.75,

193

x3 = x1*x2.

Es ist y1*y2 = 0.0112 ,

e1 + e2 = 5.

Daraus wird errechnet e3 = 4,

 

y3 = 0.112

Es k¨onnen Ergebnisse arithmetischer Operationen auftreten, die in der Darstellung auf 0 gerundet werden. Dann spricht man von Underflow. Es wird aber mit dem Approximationswert 0 weitergerechnet. Die Ungenauigkeit von Ergebnissen nach Rundung bewirkt, daß einige Rechengesetze außer Kraft gesetzt werden, z.B. : Beispiel 7.3.6 Assoziativgesetze: (a + b) + c = a + (b + c) (a * b) * c = a * (b * c) Distributivgesetz: a * (b + c) = a * b + a * c.

194

KAPITEL 7. DIE VON-NEUMANN-MASCHINE

KAPITEL 8. DATENSTRUKTUREN

196 Gr¨unden.

In den Programmiersprachen erf¨ullen die Datentypen mehrere Funktionen: 1. Unterscheidung der Daten nach vorgegebenen Typen, ausgehend von

Kapitel 8 Datenstrukturen 8.1 Von Datentypen zu Datenstrukturen In der Anfangszeit der Programmierung waren Datenstrukturen g¨anzlich unbekannt. Man kannte nur Algorithmen und Zahlen. Komplexe Datenstrukturen wurden erst mit einer h¨oheren Problemorientierung und immer komplexeren Aufgaben f¨ur Computer erforderlich. Hierbei ergaben sich die Datenstrukturen direkt aus der Struktur der Probleme. Sie werden durch den Definitions-/Wertebereich einerseits und die Operationen andererseits festgelegt. Die Verwendung von Variablen in von-Neumann-Programmen erfordert die Festlegung von Typen, um den Wertebereich zu bestimmen. Dies ist n¨otig, um den notwendigen Speicher abzusch¨atzen und die Laufsicherheit von Programmen zu gew¨ahrleisten. Falls der Benutzer sich an die Vereinbarungen nicht h¨alt, wird dies automatisch entdeckt. Dabei sieht die Deklaration, d. h. die Festlegung des Types einer Variablen zum Beispiel folgendermaßen aus: x : N (x ist eine Variable, deren Wert eine nat¨urliche Zahl sein soll). Sind solche Vereinbarungen vor dem Programmaufruf getroffen, kann die korrekte Verwendung von Funktionen u¨ berpr¨uft werden. Funktionen erhalten Signaturen, die denen der Mathematik a¨ hnlich sind: f : A 7! B entspricht der Signatur f A7!B oder f (A) = B usw. Hierbei sind A und B genau festgelegte Datenstrukturen. Von Beginn an wurden unterschieden: Zahlen, Zeichen und logische Werte, auch boolesche Werte genannt. Aus der Berechenbarkeitstheorie wissen wir, daß es v¨ollig ausreichend ist, mit nur einem dieser 3 Typen zu arbeiten. Die Unterscheidung erfolgt aus praktischen 195

      

Fixpunktzahlen oder Integer Gleitpunktzahlen oder Real Gleitpunktzahlen doppelter Genauigkeit oder Double Zeichen oder Character logische Werte oder Boolean Zeichenfolgen oder String Felder (Folgen gleichartiger Daten) oder Array

2. Zuordnung von Variablennamen und Datentypen: dies erfolgt durch Deklaration, z.B. in der Form n : integer st : string allgemein <

name >: < typ >

Dies erm¨oglicht:

  

passende Speicherzuteilung Sicherheit gegen Irrt¨umer des Programmierers bei der Benutzung der Variablen sprachliche Formulierungen f¨ur den Zugriff auf die einzelnen Daten

3. Strukturierung gr¨oßerer Datenmengen: Aus der Sicht der Speicherung wurden dazu Felder als Datentypen entwickelt. Es handelt sich dabei um parametisierte Datentypen. Parameter sind dabei der Elementtyp, die Dimension und Ausdehnung in jeder Dimension bzw. die Indizierung in jeder Dimension. H¨oherdimensionale Felder, d.h. ab Dimension 2 (f¨ur Matrizen) sind nicht durch den realen Speicher motiviert, der ja linear ist, sondern durch die Organisationsform der Daten, wie sie sich aus der Anwendung ergibt.

8.1. VON DATENTYPEN ZU DATENSTRUKTUREN

197

Beispiel 8.1.1 array [1 : : : 100; ;10 : : : 10] o f real array [50 : : : 99] o f boolean Neben die Felder traten als komplexere Datentypen zun¨achst die Records, auf deutsch: Verbunde. Darin werden Daten auch unterschiedlichen Typs zu einer Einheit zusammengefaßt, z.B. Name (als String), Alter (als Integer), Postleitzahl (als Integer), Wohnort (als String). Datentypen sind im wesentlichen als Mengen aller ihrer Werte definiert:

 

boolean: fTRUE, FALSEg character: fa,b,c,. . . g

8.2 Elementare Datenstrukturen Eine Datenstruktur wird durch eine Menge von Objekten und eine Menge von Funktionen beschrieben. Hierbei erfolgt die exakte Festlegung syntaktisch durch Konstanten- und Funktionsbeschreibungen, semantisch durch die inhaltliche Definition der Objekte und Funktionen. Als Hilfsmittel zur Beschreibung bzw Definition verwendet man Semantikdiagramme (=Signaturdiagramme), Signaturen, Spezifikationen und als rein mathematische Hilfsmittel die Algebren.

8.2.1 Boolean Boolean ist die Datenstruktur der booleschen Werte. Wertemenge:

usw. dabei stellt der Verbund ein cartesisches Produkt A1  Ak dar. Felder sind Mengen von Abbildungen von der Menge der Indizes in eine Grundmenge: jedes Element eines Feldes vom Typ array [50. . . 99] of boolean ist eine Abbildung f : f50 : : : 99g ! fT RUE ; FALSE g Mit dem Begriff Datenstrukturen verbindet sich die Vorstellung, daß diese nicht nur durch Mengen von Werten definiert sind, sondern auch durch typische Funktionen oder Operationen auf diesen Werten. Zur Beschreibung der Datenstrukturen geh¨oren daher

  

die Beschreibung der Wertemengen der Datenstrukturen evt. die Beschreibung weiterer Wertemengen die syntaktische Beschreibung der Funktionen durch Festlegung von Definitions- und Wertebereichen; dabei wird einer Funktion f : A1  An 7! B die sogenannte Signatur f A1 ;::: ;An 7!B zugeordnet.



die semantische, d.h. inhaltliche Beschreibung der Funktionen

Aus den Typbezeichnungen der Wertemengen und den Signaturen der Funktionen wird jeweils die Signatur der Datenstruktur gebildet.

KAPITEL 8. DATENSTRUKTUREN

198

Funktionen:

B = fT RU E ; FALSE g mit der Typbezeichnung boolean (kurz: bool) Eine mindestens funktional vollst¨andige Menge boolescher Funktionen, z.B. die folgende : not : B 7! B ^; _; ,: BB 7! B

Die Semantik der Funktionen wird durch die bekannten Wertetabellen der Aussagenlogik definiert. Wir f¨uhren nun zu boolean die zugeh¨orige Signatur der Datenstruktur ein. Definition 8.2.1 Die Signatur einer Datenstruktur ist ein Paar hS; F i, wobei S eine Menge sogenannter Sorten ist und F eine Menge von Funktionen. Jeder Funktion aus F ist eine Stelligkeit n zugeordnet, im Sinne von f (s1 ; : : : ; sn) 7! sn+1 , d. h. Funktion f erh¨alt n Argumente der Sorten s1 ; : : : ; sn und liefert Resultat der Sorte sn+1 . Im Fall von Boolean sieht die Signatur folgendermaßen aus: Signatur von Boolean: < fBg; fnot B7!B ; ^BB7!B ; _BB7!B ; ,BB7!B g > Besser lesbar sind oft die Signatur-Diagramme: Dies sind unmarkierte PetriNetze mit Mehrfachkanten, in denen die S-Elemente die Sorten darstellen, die T-Elemente die Funktionen und die verbindenden Pfeile den Informationsfluß bei den Funktionen.

8.2. ELEMENTARE DATENSTRUKTUREN

199

Signaturdiagramm von boolean:

KAPITEL 8. DATENSTRUKTUREN

200

8.2.2 Character Character ist die Datenstruktur f¨ur einen vorgegebenen Zeichensatz A, z. B.:

bool

Eine Algebra ist eine mathematische Struktur, welche z. B. Gruppe, Ring, K¨orper verallgemeinert, zugleich aber Datenstrukturen der Informatik erfaßt. Genaueres geh¨ort in das Gebiet der Theoretischen Informatik.

A

=

fa b c ;

;

z 0; 1; : : :; ?; j; &; : : :g

; : : :; ;

Wertemenge: A, geordnet Funktionen: succ : A 7! A, partielle Funktion, z. B. succ(a)=b pred :A 7! A, partielle Funktion, z. B. pred(b)=a =: A  A 7! B

8.2.3 Integer Dies ist die Datenstruktur der ganzen Zahlen. Sie ist in zwei Versionen unterteilt. Bei der ersten ist die Wertemenge unendlich, angelehnt an die Menge der ganzen Zahlen in der Mathematik (Bezeichnung: Z). Die zweite Version hat eine eingeschr¨ankte Wertemenge, das bedeutet, daß in dieser Datenstruktur nur die ganzen Zahlen enthalten sind, die sich gem¨aß einer Vorschrift auf einer Maschine darstellen lassen (Bezeichnung: ZM). Hierbei kann die Wertemenge nicht unendlich sein, was sich aus der Speicherbegrenzung ergibt. Funktionen: +, -, *, /, div, mod, = Fkt. Z ZM

+ * / div mod = total total total partiell partiell partiell total partiell partiell partiell partiell partiell partiell total

Spezifikation:

Typ Integer Hilfssorten: Funktionen: Axiome:

boolean

 Z7! Z

+: Z

ZM

 ZM 7! ZM

usw. x+y = y+x x + (y + z) = (x + y) + z usw.

Bemerkung: Auf ZM sind die Axiome z. T. dadurch verletzt, daß Bereichs¨uberschreitungen vorkommen k¨onnen, so k¨onnte z. B. x + (y + z) definiert sein, aber x + y und (x + y) + z nicht.

8.2. ELEMENTARE DATENSTRUKTUREN

201

8.2.4 Natural

Funktionen:

Dies ist die Datenstruktur f¨ur die nat¨urlichen Zahlen. In der Praxis ist diese jedoch meistens nur durch Einschr¨ankung der Datenstruktur Integer realisiert. Spezifikation

KAPITEL 8. DATENSTRUKTUREN

202

Typ: nat Hilfssorten: boolean Funktionen: 0 :7! nat, succ: nat 7! nat, +; ;; ; div; mod ; =; 6=; ; , usw. Axiome: x+0 = x x + succ(y) = succ(x + y) x0 = 0 x  succ(y) = x + (x  y) .. .

;; ; =; oft auch spezielle Funktionen: exp; sin; cos; : : :

+;

m

1 ; B

mit B als Basis der Zahldarstellung) gibt es folgenden Fall: x 6= y; aber x ; y = 0 Folgerung: if x = y = 0 then . . . // if x = y then . . . : verschiedene Wirkung!

;

8.2.7 Aufz¨ahlungstyp (enumeration type)

anschließend k¨urzen (ggT berechnen). Beispiel:

8.2.6 Real Real ist die Datenstruktur der reellen Zahlen. Wertemenge: R = f Menge der reellen Zahlen (Mathematik)g, bzw. RM = eine endliche Einschr¨ankung davon, auf rationalen Zahlen basierend! RM

Q

Wochentag: So, Mo, Di, . . . , Sa 1 2 3 7 Wertemenge: hx1 ; : : : ; xni, endliche geordnete Menge von Symbolen xi 2 A , A ein Alphabet Funktionen: succ; pred ; =; auch < endlich beschreibbar: succ(x1 ) = x2 ; succ(x2 ) = x3; : : : ; succ(xk;1 ) = xk (succ(xn )nicht definiert)

8.3. ZUSAMMENGESETZTE DATENSTRUKTUREN

203

8.2.8 Unterbereichstyp

KAPITEL 8. DATENSTRUKTUREN

204 Testoperationen = (string; string)

Text fehlt hier Die Datenstruktur der Aufz¨ahlungstypen wurde durch PASCAL eingef¨uhrt. Verwendung in Programmiersprachen



Unterscheide Standardtypen (gem¨aß Sprachbeschreibung vorgegeben) von benutzerdefinierten Typen (in der Sprache definierbar). Beispiel: Typen zu REAL: Standardtypen mit festgelegter Genauigkeit benutzerdefinierte Typen mit anderer Genauigkeit (z. B. ADA)



9 > > = > > ;

<

(i) Auff¨ullen nicht benutzter Stringpositionen mit speziellen Zeichen:

Zur Verarbeitung von Zeichenketten u¨ ber einem Alphabet A, geordnet. String wird in Abh¨angigkeit von A gebildet: parametrisierte Datenstruktur, z. B. String of char, String of boolean, . . . Operationen zur Konstruktion ε() : string : erzeugt einen leeren String : erzeugt einen String aus einem Zeichen ι(char) : string (string; string) : string : Konkatenation von Strings

x=

a b c d $ $ $ $ $ $ $ $ $

y=

u v w $ $ $ $ $ $ $ $ $ $

xy =

a b c d u v w $ $ $ $ $ $

konstante L¨ange n

(ii) Direkte L¨angenangabe: x= 4 a b c d

8.3 Die zusammengesetzten Datenstrukturen String, Feld, Verbund und Vereinigung 8.3.1 String

: bool : bool

String ist eine dynamische Datenstruktur im folgenden Sinn: Der ben¨otigte Speicherplatz ist variabel. Es k¨onnen auch Strings fester L¨ange verwendet werden, auf denen sich dann auch Strings k¨urzerer L¨ange speichern lassen, wenn zus¨atzlich die verwendete Stringl¨ange codiert werden kann:

Funktionen bleiben erhalten (bis auf Genauigkeit der Resultate)

Benutzerdefinierte Typen sind oft Einschr¨ankungen von Standardtypen (subtype). Beispiel: Typ [1..100] als Untertyp von Integer.

(string; string)

usw.

8.3.2 Feld Datenstruktur zur Speicherung gleichartiger Daten und Zugriff u¨ ber Indizes Indizes sind Elemente einer geordneten elementaren Datenstruktur, ausgenommen real, vorzugsweise integer.



1-dimensionale Felder: Typbezeichnung: Typ der Indizes: Typ der Elemente:

array index elem

Operationen zur Konstruktion: Zugriffsoperationen create(): array: access(string; nat ) : char : Zugriff auf n-tes Zeichen length(string) : nat : Zugriff auf L¨ange des Strings

erzeugt ein Feld bei vorgegebener Indexmenge, aber noch ohne Eintr¨age assign(array,index,elem): array: Eintrag eines Elementes

8.3. ZUSAMMENGESETZTE DATENSTRUKTUREN

205

Zugriffsoperation: access(array,index): elem:

Zugriff auf ein Element

KAPITEL 8. DATENSTRUKTUREN

206

Definition 8.3.3 (record) Gegeben seien k Typen m1 ; : : : ; mk und k Namen f¨ur Selektoren S1; : : : ; Sk . Die daraus gebildete Struktur eines Verbundes werde mit record(S1 : m1 ; : : : ; Sk : mk )

Beispiel 8.3.1 Typbezeichnung in Pascal:

bezeichnet. Jeder konkrete Verbund enth¨alt (bis zu) k Komponenten der Typen m1 bis mk , auf welche mit den Selektoren S1 bis Sk zugegriffen wird.

array[index] of elem array[1..100] of real

Programmiersprachliche Notation:

Es handelt sich also um einen parametrisierten Datentyp. ¨ Ubliche Schreibweisen:



a[i]:=e a[i]

statt a:=assign(a,i,e) statt access(a,i).

Mehrdimensionale Felder: Indexmenge ist ein Cartesisches Produkt mehrerer Komponenten, z. B. I = I1  I2  I3 konkret beispielsweise array[1..100,0..30,-20..20] of elem. Dies kann identifiziert werden mit array[I1] of array[I2] of array[I3] of elem. Das gibt Anlaß auf weitere Zugriffe: Bei 2-dimensionalen Feldern auf Zeilen, auf Spalten und auf Teilfelder. Entsprechend verallgemeinert f¨ur h¨ohere Dimensionen Beispiel 8.3.2 (Notationsbeispiele)

a[3,] : 2-dimensionales Feld, 3. Zeile a[,5] : 2-dimensionales Feld, 5. Spalte a[4..17] : 1-dimensionales Feld, Elemente 4 bis 17

8.3.3 Verbund Mit ’Verbund’ oder englisch ’record’ bzw. ’structure’ wird die folgende zusammengesetzte Datenstruktur bezeichnet: Es werden Komponenten i. a. verschiedener Arten zusammengef¨ugt. Der Zugriff erfolgt dann u¨ ber spezielle Namen f¨ur diese Komponenten. Diese heißen Selektoren.

r: record S1: m1; . . . Sk: mk; end; Zugriff auf i-te Komponente: r.Si Mathematisch betrachtet entspricht der Verbund dem Cartesischen Produkt.

8.3.4 Vereinigung Die Vereinigung von Datenstrukturen mit der Bezeichnung union (in Pascal durch varianten Record realisiert) entspricht der mengentheoretischen Vereinigung. Die wesentlichen Operationen sind die Injektion (i1; : : : ; ik ), die Projektion (p1; : : : ; pk) und der Typtest (test1; : : : ; testk). Programmiersprachliche Notation in PASCAL: r: record case FALL of 1: (S1: m1,...,Sl: ml); 2: ... . . . k: ... end end;

8.4 Die Speicherstrukturen Stack, Queue und Deque Diese Speicherstrukturen dienen dem Abspeichern unter bestimmten speziellen Zugriffsbedingungen. Dabei wird ein Typ f¨ur die zu speichernden Elemente zugrundegelegt.

8.4. DIE SPEICHERSTRUKTUREN STACK, QUEUE UND DEQUE

207

LIFO-Prinzip: Last-In-First-Out. Nach diesem Prinzip arbeitet der Stack push top 

-

KAPITEL 8. DATENSTRUKTUREN

208 1. top(push(e,s))=e 2. pop(push(e,s))=s (!) 3. empty(create)=TRUE

pop

4. empty(push(e,s))=FALSE. FIFO-Prinzip: First-In-First-Out. Dieses Prinzip charakterisiert die Queue, eine Warteschlange. head 



append

F¨ur die Datenstrukturen queue und deque wird entsprechend verfahren. Realisierung einer Queue als Array. Bei Zugriff auf die Elemente mod-Funktion verwenden. Dabei ist darauf zu achten, daß das Ende der Queue nicht den Anfang einholt (=) Queue Overflow).

tail

8.5 Listen, Mengen und Hash-Tabellen LIFO/FIFO-Kombination: Diese seltener erw¨ahnte Struktur heißt doubleended-queue oder kurz Deque und kann wahlweise wie ein Stack oder eine Queue benutzt werden. appendl headl 



appendr - headr

taill tailr F¨ur jede dieser Strukturen f¨uhren wir eine Operation create ohne Parameter ein, welche eine leere Struktur der jeweiligen Art erzeugt, sowie eine Testfunktion empty. Damit ergeben sich die folgenden Signaturen mit elem als Parameter f¨ur den Elementtyp stack, genauer stack of elem:

    

create(): stack push (elem, stack): stack pop (stack): STACK (!) top (stack): elem empty (stack): bool

Hierzu geh¨oren die folgenden Axiome:

Listen Listen sind eigentlich eine Verallgemeinerung von Strings, wobei statt char ein allgemeiner Typ elem zugelassen wird. Wir formatieren die Listen aber so, daß auch die Speicherstrukturen Stack, Queue und Deque darin sichtbar werden:

           

create(): list appendr(list, elem): list appendl(list, elem): list concat(list, list): list headr(list): elem headl(list): elem tailr(list): list taill(list): list length(list): nat access(list, nat): elem empty(list): bool equal(list, list): bool

8.5. LISTEN, MENGEN UND HASH-TABELLEN

209

Diese Struktur heißt list of elem. Wir erkl¨aren die Semantik direkt mit Hilfe der Repr¨asentation der Listen durch Tupel

he1

; : : :;

eni; n  0;



appendr(he1 ; : : : ; eni; e)=he1 ; : : : ; en; ei appendl(he1 ; : : : ; eni; e)=he; e1; : : : ; en i

card(set): nat

= : (set,set): bool

Die Semantik ergibt sich aus den bekannten mengentheoretischen Operationen.

concat(he1 ; : : : ; eni; he01 ; : : : ; e0mi)=he1 ; : : : ; en; e01; : : : ; e0mi

Hashorganisation (gestreute Speicherung)

headr(he1 ; : : : ; eni)=en

Prinzip: Eine Hash-Tabelle steht f¨ur die Aufnahme von m 2 N Records zur Verf¨ugung. Die Position, in der der Satz gespeichert wird, wird aus dessen Schl¨ussel berechnet. Sei S die Menge aller m¨oglichen Schl¨usselwerte, und h: S 7! f0; : : : ; m ; 1g eine Funktion ( Hash-Funktion“) ” Vorgehen: Der erste Satz (mit Schl¨ussel s1 ) wird in die Position h(s1 ) gespeichert, der zweite nach h(s2 ), usw. Dabei k¨onnen Kollisionen auftreten: wenn h(si ) = h(s j ) ist. F¨ur die Kollisionsbehandlung gibt es mehrere Verfahren:

headl(he1 ; : : : ; en i)=e1 tailr(he1; : : : ; eni)=he1 ; : : : ; en;1i taill(he1 ; : : : ; eni)=he2 ; : : : ; eni access(he1 ; : : : ; eni; i)=ei ; 1  i  n length(he1 ; : : : ; eni)=n empty(he1 ; : : : ; eni)=(n = 0 7! T RUE ; FALSE) (n

=

m

^

ei

=

e0i f¨ur alle i

7!

Mengen Definition 8.5.1 (set of elem) Eine Menge vom Typ set of elem ist eine Menge fe1 ; : : : ; eng mit e1 ; : : : ; en 2 E, wobei E die Menge der Elemente vom Typ elem ist. Darauf sind folgende Operationen definiert:

 create(): set  append(set,elem): set  \(set,set): set



  : (set,set): bool

create = hi

equal(he1 ; : : : ; en i; he01 ; : : : ; e0mi)= T RU E ; FALSE)

 [(set,set): set  2 : (elem,set): bool

mit Elementen ei vom Typ elem:

           

KAPITEL 8. DATENSTRUKTUREN

210

1. re-hashing: statt nur einer Hashfunktion sind m unterschiedliche Funktionen h0 ; : : : ; hm;1 gegeben. Bei Kollisionen wird die n¨achste Hashfunktion genommen. Beispiel 8.5.2 gegeben h0 = h: S 7! f0; : : : ; m ; 1g hi (s) = (h(s) + i) mod m. ¨ 2. Uberlaufliste“: Im Falle der Kollision wird der neue Satz in einer Liste ein” getragen. Im Falle des Aufsuchens muß diese Liste ggf durchsucht werden (zeitaufwendig, da sequentielles Durchsuchen). ¨ 3. m Uberlauflisten: bei jedem Element der Hash-Tabelle kann eine Liste be¨ ginnen. Diese nimmt alle Uberlaufs¨ atze mit gleichem Hash-Wert auf. ¨ Hash-Tabelle mit m Uberlauflisten

8.6. REKURSIVE DATENSTRUKTUREN UND ZEIGER 0

Schlüssel

Schlüssel

Schlüssel

Schlüssel

Schlüssel

211 nil

1 i

KAPITEL 8. DATENSTRUKTUREN

212

Dabei wird das Cartesische Produkt nicht assoziativ und nat¨urlich auch nicht kommutativ verstanden, d. h. wir unterscheiden

hu hv wii von hhu vi wi

nil

;

;

;

;

und

hu vi von hv ui. ;

m-1

nil

Forderungen an die Hashfunktion h: sie soll m¨oglichst gut streuen“, damit ei” ne gleichm¨aßige Belegung der Hash-Tabelle mit m¨oglichst wenig Kollisionen erreicht wird. Zeitaufwand f¨ur die Operationen: Aufsuchen,Einf¨ugen und L¨oschen jeweils ein Hashzugriff und im Kollisionsfall ggf. weitere Zugriffe. Vorteile des Hashings: bei guter Streuung sehr schnell; Nachteil: sortiertes Ausgeben aller S¨atze ist nicht m¨oglich.

8.6 Rekursive Datenstrukturen und Zeiger Die bisherigen Konstruktionen von zusammengesetzten Datenstrukturen erm¨oglichten die Bildung neuer Datenstrukturen auf der Grundlage bereits bekannter Datenstrukturen. Es ist aber auch m¨oglich und in manchen Anwendungen sinnvoll, neue Konstruktionen von vornherein in dieselbe Bildung einzubeziehen, die auf bereits bekannte Strukturen angewandt wird. Dies f¨uhrt zu rekursiven Definitionen. Wir betrachten solche rekursiven Datenstrukturdefinitionen auf zwei Stufen:

;

Was bedeutet nun eine solche rekursive Definition? Wir k¨onnen sie auch so formulieren: 1. Ein Atom a 2 A ist ein symbolischer Ausdruck, d. h. A  S. 2. Sind S1 , S2 symbolische Ausdr¨ucke, so auch das Paar hS1 ; S2i, d. h. S  S  S. 3. Dies sind alle M¨oglichkeiten, symbolische Ausdr¨ucke zu konstruieren. Man kann nun zeigen, daß dann folgendes gilt:

S

=

A [ [A  A] [ [A  (A  A)] [ [(A  A)  A] [ [A  (A  (A  A))] [ : : :

Zur Veranschaulichung stellt man die Elemente von S auch als Bin¨arb¨aume dar: s 2 A hat die Form:



s 2 A  A hat die Form:

a1

1. Stufe: Rekursive Mengendefinition 2. Stufe: Ausstattung der Struktur mit Operationen

8.6.1 Symbolische Ausdrucke ¨ von LISP Die funktionale Sprache LISP (List Processing) von John McCarthy gr¨undet sich auf die folgende Definition: Sei A eine vorgegebene Menge sogenannter Atome. Dann ist die Menge S der symbolischen Ausdr¨ucke u¨ ber A definiert durch S = A (Initialisierung), S = A [ [S  S].

a2

a1 s 2 A  [A  A] hat die Form:

a2

a3

¨ Zu geeigneten Operationen kommt man durch folgende Uberlegungen: Konstruktion der Komponenten:

 A braucht nicht konstruiert werden, da diese Menge vorgegeben ist  S  S muß aus S konstruiert werden: Dazu wird die Operation cons: S  S 7! S, cons(u v) = hu vi ;

;

8.6. REKURSIVE DATENSTRUKTUREN UND ZEIGER

213

eingef¨uhrt. Zugriff auf Komponenten:

 

KAPITEL 8. DATENSTRUKTUREN

214 Beispiel 8.6.2 arithmetische B¨aume der Tiefe 0

auf A hat man direkten Zugriff auf S  S hat man Zugriff durch

car: S 7! S, car(hu; vi) = u, cdr: S 7! S, cdr(hu; vi) = v.

a

Test auf Zugeh¨origkeit zu einer Komponente:

Test auf Gleichheit: Dieser wurde von McCarthy nur f¨ur Atome festgelegt:

8.6.2 Arithmetische B¨aume Wir gehen von einer Datenstruktur operand und einer Datenstruktur operator aus, so daß jedes Element vom Typ operator sich auf zwei Elemente vom Typ operand anwenden l¨aßt. Beispiel 8.6.1 Die Namen a; b; c; d ; e; : : : und die Zahlen aus Z bilden den Typ operand. Die Symbole +; ;; ; = bilden den Typ operator. F¨ur die rekursive Mengendefinition sei A die Menge der Operanden, P die Menge der Operatoren. Dann wird die Menge B der arithmetischen B¨aume erkl¨art durch B

=

A[BPB

Hierbei bedeute B  P  B die Menge der Tripel hb; p; b0i, b; b0 2 B, p 2 P. B enth¨alt demnach

  

Elemente a 2 A

Elemente ha; p; a0i, a; a0 2 A, p 2 P Elemente hha; p; a0i; p0 ; ai usw.

+

2

b

*

c b

4

17

3

*

 s 2 A wird durch atom: S 7! B getestet;  s 2 S  S wird durch die Negation zu atom getestet.

Hieraus ist ein Gleichheitstest f¨ur Elemente aus S programmierbar!

-

+ 1

(Die Bezeichnungen sind historisch; man k¨onnte sie durch left und right ersetzen)

eq: A  A 7! B .

-2

a

a

5

* 100

c

Als Operatoren k¨onnen wir hierzu anf¨uhren:

    

operation: B  P  B 7! B, operation(b1; p; b2) = hb1 ; p; b2i leftoperand: B 7! B, leftoperand(hb1; p; b2i) = b1

rightoperand: B 7! B, rightoperand(hb1; p; b2i) = b2 operator: B 7! B, operator(hb1; p; b2i) = p

basicoperand: B 7! B , basicoperand(b) = (b 2 A 7!TRUE, FALSE )

8.6.3 Der Stack als rekursive Datenstruktur Sei nil ein spezielles Element und E die Menge der Daten eines Typs elem. Dann sei S

=

fnil g[ S  E

mit folgenden Operationen

  

7 S, create = nil ! push: S  E 7! S, (wie cons bei LISP) pop: S 7! S, (wie car) create:

8.6. REKURSIVE DATENSTRUKTUREN UND ZEIGER

 

215

top: S 7! E, (wie cdr)

empty: S 7! B, (wie atom)

Bei der Implementation rekursiver Datenstrukturen tritt das folgende Problem auf: Wird eine Variable des betreffenden Typs definiert, so ist der Speicherbedarf immer noch variabel.

8.6.4 Zeiger (Referenzen, Access-Typen (so in Ada), Pointer) Motivation aus den rekursiven Datenstrukturen heraus: Der Speicherplatz f¨ur ein Datum einer rekursiven Datenstruktur ist unbeschr¨ankt groß (z. B. beliebig große B¨aume). F¨ur eine geordnete Speicherverwaltung ist eine feste Speicherplatzgr¨oße n¨utzlich. Prinzip: Zu jedem Typ wird ein Typ ref t (Bezeichnung nach ALGOL 68) definiert. Ein Datum vom Typ ref t ist eine Speicheradresse zu einem Datum vom Typ t. Anwendung auf LISP: Vorgegeben: Typ atom. Definiere neuen Typ s zusammen mit ref s s = union(atom,record(car: ref s,cdr: ref s)). Anwendung auf arithmetische B¨aume: b = union(operand,record(left: ref b,op: operator,right: ref b)) Zeiger allgemein: Man kann auch ohne rekursive Konstrukte Zeiger zur Adressenverwaltung einf¨uhren. Unterscheide:

 

Typ-unabh¨angige Zeiger, maschinennah, jede Adresse zuweisbar, Typ: pointer. Typ-abh¨angige Zeiger, ref t zu jedem t.

F¨ur die Festlegung von t unterscheidet man zwei F¨alle:

 

t beliebig: erm¨oglicht z. B. Typen real, ref real, ref ref real, . . . , refn real, n  0: ALGOL 68; schwer zu programmieren. t einschr¨anken auf nicht-ref-Typen.

216

KAPITEL 8. DATENSTRUKTUREN

218

Kapitel 9 Kontrollstrukturen

¨ call-by-reference: Der Parameter dient zur Ubergabe einer Adresse. Zu Beginn des Ablaufes des Unterprogrammes wird die Adresse aus dem aktuellen Parameter ermittelt. Dieser muß so beschaffen sein, daß er eine Adresse liefern kann (also z. B. kein Ausdruck, sonst gibt es einen Fehler). Bei Abarbeitung des Rumpfes wird an jeder Stelle, an der der formale Parameter auftritt, diese Adresse verwendet. Wird der Inhalt der Adresse w¨ahrend der Abarbeitung des Unterprogrammes ver¨andert, so bleibt dieser Wert auch nach der Beendigung des Unterprogrammes erhalten (Effekt nach außen). call-by-name:

¨ 9.1 Ubersicht

      

KAPITEL 9. KONTROLLSTRUKTUREN

Darstellungsform, syntaktisch und semantisch Ausdruck und Anweisung Sequenz und Nebenl¨aufigkeit

¨ Der Parameter dient zur Ubergabe einer Formel. Zu Beginn des Ablaufes des Unterprogrammes erfolgt keine Auswertung dieses Parameters. Erst bei Erreichen des formalen Parameters bei Abarbeitung des Rumpfes erfolgt eine unmittelbares Einsetzen des aktuellen Parameters, und dies jedes Mal neu. Eventuell keine Auswertung, wenn bei Ablauf der Parameter nicht erreicht wird. Bei Mehrfachauswertung ineffizient, dies ist jedoch f¨ur verz¨ogerte Auswertung (’lazy evaluation’) n¨utzlich. Diese Parameter¨ubergabe ist heute nur noch theoretisch wichtig, da sie relativ schwer nachvollziehbar ist und hohe Anforderungen an einen Compiler stellt. Eingef¨uhrt wurde diese Parameter¨ubergabe durch die Programmiersprache ALGOL60.

Alternativen: einseitig, zweiseitig, mehrseitig Schleifen zur Iteration unbeschr¨ankte Schleifen und Spr¨unge call-by-need:

legt nur fest, daß Auswertung der Parameter erst erfolgt, wenn er benutzt wird; heute: in funktionalen Sprachen

9.2 Unterprogramme

in-Parameter:

sofortige Auswertung; i. a. wird Wert erwartet (anderes aber nicht ausgeschlossen); im Rumpf keine Zuweisung darauf

Bei den Parametern eines Unterprogrammes unterscheiden wir zwischen verschiedenen Arten des Aufrufs: ¨ call-by-value: Der Parameter dient der Ubergabe eines Wertes (wertf¨ahige Ausdr¨ucke: z. B. 3, a+b, . . . ). Zu Beginn des Ablaufes des Unterprogrammes wird der aktuelle Parameter ausgewertet. Der ermittelte Wert wird dann im Rumpf an jeder Stelle verwendet, an der der formale Parameter auftritt.

out-Parameter:

sofortige Auswertung; Adresse erwartet; im Rumpf muß Zuweisung darauf vorkommen

in/out-Parameter

sofortige Auswertung; Adresse erwartet; zu Beginn wird Wert transportiert; R¨uckgabe eines Wertes erwartet

Unterprogramme

Zuweisungen an den formalen Parameter sind entweder unzul¨assig (Fehler) oder werden als Zuweisung an eine (lokale) Variable des Unterprogrammes angesehen, ohne Effekt nach außen. 217

Besonderheiten: Funktionen als Parameter bzw. Unterprogramme als Parameter) eigentlich call-by-value unter folgender Philosophie: Funktionen und Programme sind Werte vom Typ ’function’ bzw. ’program’; falls Funktionen mit Typen ausgestattet sind, dann geh¨ort zur Spezifikation evtl. auch die Spezifikation von deren Parametern ! Signaturen von Funktionen, z. B. f(real, integer, boolean):integer

KAPITEL 10. PROGRAMMIERSPRACHEN

220

Zielsetzung, Realisierung, Nutzung, Wirkung, Nebenwirkung, : : : insbesondere:



Kapitel 10

  

Programmiersprachen 10.1 Allgemeine Bemerkungen zu Programmiersprachen

Sprachfamilien alles was mit dem Erlernen der Sprache zusammenh¨angt Implementationsprobleme (;! Compilerbau)

10.1.2 Merkmale und Auspr¨agungen



M¨achtigkeit (Ausdruckskraft) exakte Beschreibbarkeit eines Problems, Problem der Semantik

10.1.1 Syntax, Semantik und Pragmatik Syntax

Lebenszyklus einer Sprache: Entwurf, Implementierung, Wartung, Standardisierung, Verbreitung, : : :

relative Beurteilung

Vergleiche M¨achtigkeit von Sprachen mit goto und von Sprachen mit Dijkstra-Kontrollstrukturen: L ist mindestens so m¨achtig wie L0 : L  L0

absolute Beurteilung

M¨achtigkeit der vollen Berechenbarkeit (alle partiell-rekursiven Funktionen oder alle primitivrekursiven Funktionen sind programmierbar). Bei Datenbanksprachen kommen weitere Maße hinzu.

legt die Programmiersprache als formale Sprache fest: Alphabet A, L 2 A so als reine Textsprache. Allgemeiner: Handlungssprache, z. B. Manipulation am Bildschirm. Der Fall L endlich ist selten (z. B. Aufz¨ahlung). Im allgemeinen wird L unendlich sein, wenigstens im Prinzip (Konsequenz der Schachtelung). Die Beschreibung von unendlichen formalen Sprachen erfolgt durch Grammatiken oder a¨ quivalente Konstrukte. Ziel ist es, die syntaktische Struktur so zu erkl¨aren, daß darauf die Erl¨auterung der Semantik (=Bedeutung) aufgebaut werden kann.

Semantik



(z. B. APL: interaktive Sprache und funktionaler Programmierstil, hier gemischt mit imperativen Stil)



Festlegung der Bedeutung:

praktisch:

funktionale Semantik: Bedeutung = Funktion zwischen Eingaben und Ausgaben. auch: Bedeutung auf Maschinenebene

219

Determinismus theoretisch: Es gibt viele Konzepte des Nichtdeterminismus: choice, success, failure, guarded commands,: : :

operationale Semantik: Bedeutung = Abl¨aufe auf einer realen oder virtuellen Maschine.

Pragmatik Die reale Seite der Sprache:

Interaktivit¨at



Nur wenige Sprachen verwenden systematisch nichtdeterministische Konstrukte. Alle Sprachen erlauben aber stillschweigend Random-Funktionen. Es handelt sich hierbei aber nur um Pseudozufallsfunktionen —Pseudo-Nichtdeterminismus.

Prozeduralit¨at

10.1. ALLGEMEINE BEMERKUNGEN ZU PROGRAMMIERSPRACHEN221

KAPITEL 10. PROGRAMMIERSPRACHEN

222

Ein Programm ist um so st¨arker prozedural, je pr¨aziser es seinen Ablauf direkt beschreibt. Das Sortierproblem ist ein gutes Beispiel hierf¨ur. Die Festlegung, die Elemente eines (endlichen) Feldes in eine aufsteigende Reihenfolge zu bringen, ist logisch klar genug, um sie automatisch ausf¨uhren zu lassen. Man k¨onnte ein Programm geringer Prozeduralit¨at also etwa so formulieren:

– Verwendung m¨oglichst vieler oder m¨oglichst weniger globaler Variablen

Beispiel 10.1.1 function sort (a: array[1. . . n]): array[1. . . n];

– h¨aufige Verwendung von Spr¨ungen

– starke/schwache Modularisierung – Vermeidung von Seiteneffekten – Ausnutzung und Bevorzugung von Seiteneffekten – Vermeidung von Spr¨ungen

begin

Beispiele f¨ur nicht imperative Programmiersprachen:

b: array[1. . . n];

b = permutation(a) ^ 1  i  n-1=) b[i]b[i-1];

– Verwendung von Mengen (z. B. SETL) – Verwendung von pr¨adikatenlogischen Formeln

result b;

– deklarative Beschreibung des Programmierzieles

end

– Verwendung von Zugriffsmustern (z. B. f(n+1)=n*f(n)) Entscheidend f¨ur die Ausf¨uhrbarkeit ist die Existenz eines allgemeinen Mechanismus, der die L¨osung schrittweise konstruiert. Ein st¨arker prozedurales Programm entsteht, wenn wir die L¨osung in PASCAL oder einer anderen imperativen Sprache beschreiben. Dann werden die L¨osungsschritte einzeln und in ihrer Reihenfolge festgelegt notiert. Von R. Kowalski, der PROLOG entwickelt hat, stammt die Formulierung Algorithm = Logic + Control Diese Formel soll folgendes aussagen: Zur Festlegung eines Algorithmus geh¨ort die logische Festlegung seines Resultats und unabh¨angig davon eine Ausf¨uhrungskontrolle. Vereinfachend spricht man von prozeduralen und nichtprozeduralen Programmen. Letztere vermeiden Kontrollangaben so weit wie m¨oglich. Von den beiden Formulierungen

10.2 Funktionale Programmierung ¨ 10.2.1 Ubersicht

   

APL LISP MIRANDA Grundlage λ-Kalk¨ul

Hinweis: Auf der Homepage von Michael David ist weiteres Material zu diesen Themen verf¨ugbar.

sortiere a[1. . . n]

10.2.2 APL

und sortiere a[1. . . n] durch Einsortieren von unten nach oben ist die erste am geringsten prozedural. Wir ordnen sie aber beide als nichtprozedural ein.



Stil bezeichnet eine allgemeine Vorgehensweise, die bei der Programmierung bevorzugt wird. Beispiele bei imperativen Programmiersprachen:

APL (=A Programming Language) ist eine Programmiersprache die circa 1960 von K. E. Iverson entworfen wurde und ein wichtiger Vorl¨aufer der modernen funktionalen Sprachen (MIRANDA) ist.. Sie ist hoch interaktiv und beruht auf der Idee, mathematische Konzepte in der Programmierung besser auszunutzen. APL liegt die funktionale Programmieridee zugrunde, und ist eine sehr redundanzarme Programmiersprache, d. h. der Source-Code ist sehr kurz, daf¨ur aber sehr kryptisch.

10.2. FUNKTIONALE PROGRAMMIERUNG

223

Datentypen APL unterscheidet nur zwei elementare Datentypen: Skalare und Felder. Skalare sind Typen der Dimension 0, die entweder numerisch oder literal sein k¨onnen (literal=character). Dabei schließt der numerische Typ ’boolean’ ein: 0 f¨ur false und 1 f¨ur true. Felder sind Typen beliebiger Dimension, die ebenso entweder numerisch oder literal sind. Deklarationen sind in APL nicht n¨otig, da der Interpreter sich immer den richtigen Typ heraussucht. Zum Beispiel ist bei der Zuweisung x 3 4 5 klar, daß es sich bei x um ein numerisches Feld handelt. Ebenso x ’a’: literaler Skalar. APL kennt aber Generierungsoperatoren f¨ur Felder: z. B. ι5

b

=

KAPITEL 10. PROGRAMMIERSPRACHEN

224

Fast jede beliebige Folge von Zeichen und Operatoren ist g¨ultig. Es darf nur ganz rechts kein Operator stehen. Der Operatorenfundus in APL ist reichhaltig, da alle Operatoren mit 2 Argumen¨ ten auch mit 1 Argument verwendet werden. Hier eine kleine Ubersicht:

1 2 3 4 5

oder 3 3 ρ0 1

00 = b @1

1 0 0 1 0 1 0

1 A

APL kennt keine Verbunde und keine Zeiger!

Ausdrucke ¨ APL unterscheidet zwischen elementaren und zusammengesetzten Ausdr¨ucken.

 

Elementare Ausdr¨ucke sind Konstanten, Variablen und niladische Operatoren (Operatoren ohne Argumente). Zusammengesetzte Ausdr¨ucke sind monadische Operatoren (Operatoren mit einem Argument, wie z. B. ι5) und dyadische Operatoren (Operatoren mit zwei Argumenten, wie z. B. a ρ b)

Dabei gilt f¨ur die Auswertung immer: Rechts hat Vorrang vor links!

b

D + X  C + X  B + X  A in APL =D + C  X + B  X2 + A  X 3 Die Regeln der Klammerung gelten wie gew¨ohnlich. Kombinationen aus Rechenschritten und Zuweisungen sind erlaubt: 3+X

Y +1

0a 1a 2a 3a 4a 5a 6a 7a

1 ; a2 sin a cos a tan p 2a a ;1 sinh a cosh a tanh a

; + p

;1  a arcsin a ;2  a arccos a ;3  a p arctan a ;4  a a2 + 1 ;5  a arcsinh a ;6  a arccosh a ;7  a arctanh a

Wird dabei ein Operator, der f¨ur einen Skalar definiert ist, auf ein Feld angewendet, erfolgt die Ausf¨uhrung komponentenweise. Bei der Operatoranwendung zwischen zwei Feldern wird auf gleichen Positionen entsprechend verkn¨upft. Desweiteren gibt es in APL den sogenannten Reduktionsoperator, dabei wird eine Operation f¨ur 2 Operanden auf n Operanden (n  0) ausgedehnt. Seine Anwendung auf ein Feld sieht allgemein so aus:

b

op/X =x1 op x2 op : : : op xn Beispiele f¨ur Reduktionsoperatoren sind:

b Summenbildung

+==

z. B. Z

a+b a;b ab ab ab a~b adb abb ajb a!b na

Arithmetische Operatoren dyadisch monadisch Summe +a Identit¨at Differenz ;a Negation Produkt a Signum Quotient a Reziprokwert ab a ea loga b ~a ln a Maximum da aufrunden Minimum ba abrunden Rest b=a ja Betrag b !a Fakult¨at a Kreisfunktionen a π  a

; =b Bilden einer alternierenden Summe =

10.2. FUNKTIONALE PROGRAMMIERUNG

225

 =b Produktbildung d =b Maximumsbildung

∇ SPHERE R [1] SURF 4 R  R [2] VOL SURF R  3 [3] ∇

=

=

Weitere dyadische Operatoren in APL: Durch A # B werden die ersten A Elemente aus B gestrichen. Durch A=B (A und B Vektoren gleicher L¨ange, wobei A ein boolescher Vektor ist) werden die Elemente aus B gestrichen, die in A mit 0 besetzt sind.

Kontrollstrukturen Text fehlt

Programmieren in APL APL unterscheidet grob zwischen zwei Modi: dem Tischrechnermodus oder Direktmodus und dem Funktionsdefintionsmodus. Im Tischrechnermodus werden alle Eingaben sofort ausgewertet und das Resultat auf dem Bildschirm angezeigt. Beispiel 10.2.1

KAPITEL 10. PROGRAMMIERSPRACHEN

226

Dabei ist [n] die Eingabeaufforderung des Computers f¨ur die n-te Zeile der Funktion. Abschluß einer Prozedur oder Funktion ist ebenfalls wieder ∇. Ein Prozeduraufruf ist jetzt zum Beispiel SPHERE 1.2 Ein- und Ausgaben werden in APL u¨ ber die Zeichen oder 0 realisiert. Dabei unterscheidet APL zwischen der Ein- und Ausgabe numerischer oder literaler Skalare und Felder. F¨ur literale Skalare und Felder muß anstelle von das Zeichen 0 verwendet werden. Ein Ausgabe bewirkt folgender Ausdruck:

hexpressioni

Eine Eingabe verlangt der Interpreter immer dann, wenn das Symbol oder 0 in einem Ausdruck auftaucht. Ausnahme ist nat¨urlich der Ausdruck f¨ur eine Ausgabe. Beispiel 10.2.3 Ausgabe

Eingabe Ausgabe ι3 1 2 3 x ι3 2 3 4 x+1 +/’e’=’eintext’ 2 Der Funktionsdefinitionsmodus dient zur Programmierung komplexerer Funktionen oder Prozeduren in APL. Allen Funktions- oder Prozedurvereinbarungen steht das Zeichen ∇ voran. Beispiele f¨ur Funktions- oder Prozedurk¨opfe sind: ∇F X ∇X FY ∇R F X ∇R F ∇R X FY ∇ F X; U;V Dabei ist F der Funktionsname, R das Resultat und X ; Y u¨ bergebene Parameter. Beispiel 10.2.2 (Eine Prozedur in APL)

: :

Eingabe X 1+ 3 ι4 X



+2

8 9 10 11 Spr¨unge werden in APL mit Hilfe der Zeilennummern oder Labeln (Textmarken) realisiert. Dabei werden konkret die folgenden Befehle verwendet:



! hlabeli ! hscalar expressioni Falls statt einem Skalar ein Feld auftritt, wird an die Stelle gesprungen, die in der ersten Komponente des Feldes angegeben ist.

 ! 0 wird als Ende der Funktion interpretiert. Ebenso wird bei einem Sprung auf eine nicht existierende Zeilennummer verfahren.



Falls als Sprungziel ein leerer Vektor angegeben ist, wird der Befehl einfach ignoriert. Die Funktionsabarbeitung wird fortgesetzt.

Beispiel 10.2.4 ! (A = B; A < B; A > B)=2 7 11

10.2. FUNKTIONALE PROGRAMMIERUNG

Programmbeispiele Beispiel 10.2.5 (Fakult¨atsberechnung ohne Verwendung des Operators) ∇Z FAC N [1] ! 4  ι N = 0 [2] Z N  FAC N ; 1 [3] ! 0 [4] Z 1 [5] ∇ Beispiel 10.2.6 (Berechnung der Fibonacci-Zahlen)

[1] [2] [3] [4]

X Y ∇F Z X Y Z Y ∇

1 X +Y

Beispiel 10.2.7 (Berechnung der Fibonacci-Zahl N)

[ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [10] [11] [12] [13]

∇ FIB N X Y 1 ! (N = 0; N = 1; N > 1)=3 3 5 1 !0 K 2 Z X +Y X Y Y Z ! (K = N )=12 K K +1 !6 Y ∇

227

228

KAPITEL 10. PROGRAMMIERSPRACHEN

230

KAPITEL 11. LITERATUR ZU INFORMATIK I UND II – Kupka, I.: Informatik I & II, WS 92/93, SS 93, erstellt von Michael Frank, Thomas Klein, Torsten Hiddessen, Jens Rehaag – Ecker, K.: Informatik I & II, WS 97/98, SS 1998, erstellt von, Thomas Klein, Michael Frank, Andreas Schlechte – Siehe Titelseite, erstellt von siehe Titelseite

Kapitel 11 Literatur zu Informatik I und II 

Nachschlagewerke: – Informatik Rechenberg, Pomberger: Informatik-Handbuch, Hanser, 1997, DM 98,– Mathematik und Informatik: Zeidler (Hrsg.): Teubner-Taschenbuch der Mathematik, Teil I, 1996, Teil II, 1995, Teubner Verlag – Wirtschaftsinformatik: Zilahi-Szabo: Kleines Lexikon der Informatik, Oldenbourg Verlag, 1995



Monographien: – Arbib, M. A., Kfoury, A. J., Moll, R. N.: A Basis for Theoretical Computer Science, Springer, 1981 – Dewdney, A. K.: Der Turing Omnibus, Eine Reise durch die Informatik mit 66 Stationen, Springer 1995 – Goos, G.: Vorlesungen uber ¨ Informatik, Band 1: Grundlagen und funktionales Programmieren, 2. Auflage, Springer, 1997 – Goos, G.: Vorlesungen uber ¨ Informatik, Band 2: Objektorientiertes Programmieren und Algorithmen, Springer, 1997, (2. Auflage 1999) – Goos, G.: Vorlesungen u¨ ber Informatik, Band 3: Berechenbarkeit, formale Sprachen, Spezifikationen, Springer, 1997 – Goos, G.: Vorlesungen u¨ ber Informatik, Band 4: Paralleles Rechnen und nicht-analytische L¨osungsverfahren, Springer, 1998 – Harel, D.: The Science of Computing, Exploring the Nature and Power of Algorithms, Addison-Wesley, 1989



Skripte: 229

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF