Formal Methods in Computer Science Hochschule Darmstadt WS

Werbung
Formal Methods in Computer Science
Hochschule Darmstadt WS 2008/09
Klausurrelevante Themen
Dr. Dieter Hofbauer
BA Nordhessen
Januar 2009
1
Ersetzungssysteme
1. Term als Baum zeichnen. Positionen in einem Term angeben.
• Beispiel: f (g(f (a, b)), f (b, g(a))).
2. Gegebene Substitution auf gegebenen Term anwenden.
• Beispiel: tσ für t = f (g(y), f (x, y)) und σ = {x 7→ g(y), y 7→ f (a, x)}
angeben.
3. Für gegebenes Ersetzungssystem R und gegebene Terme/Wörter s und t:
Gilt s →R t, gilt s →∗R t, gilt s ↔∗R t?
• Beispiel: Man beantworte die Fragen für das Wortersetzungssystem
R = {a → b, c → b} und jeweils für die Wörter
(1)
(2)
(3)
(4)
s = bca und t = bba
s = aaa und t = ccc
s = abc und t = bbb
s = abab und t = babab
4. Für gegebenes Ersetzungssystem R und gegebene Terme/Wörter Normalformen berechnen. Beispiel:
• Man berechne alle Normalformen des Terms f (g(g(a))) bezüglich des
Termersetzungssystems R = {f (g(x)) → g(f (x)), g(x) → h(x, x)}.
• Welche Normalformen sind mit einer Innermost-Strategie erreichbar?
Und welche mit einer Outermost-Strategie?
5. Existenz von Normalformen (hat jeder Term eine Normalform?). Eindeutigkeit von Normalformen (hat jeder Term höchstens eine Normalform?).
6. Verständnisfragen zum Thema Konfluenz und Termination.
7. Lokale Konfluenz: Nichttriviale kritische Paare berechnen (eins oder alle)
und auf Harmlosigkeit prüfen. Beispiele:
1
• R1 = {f (g(x)) → g(f (x)), g(x) → h(x)}
• R2 = {f (g(x)) → g(f (x)), f (x) → g(x)}
• R3 = {f (g(x)) → g(f (x)), g(f (x)) → h(x, x)}
• S = {a(a(x, y), z) → a(x, a(y, z))}
• T = {f (a(x, y)) → a(f (x), f (y)), f (f (x)) → x}
8. Unifikation von Termen: Für gegebene Terme s und t feststellen, ob die
Terme unifizierbar sind, gegebenenfalls einen allgemeinsten Unifikator angeben. Variante: Einen Unifikator angeben, der nicht allgemeinster Unifikator ist.
Beispiele (hier seien x, y, z, u, v Variablen):
• s = f (g(u), h(u, v)) und t = f (z, h(f (y, y), z))
• s = h(x, h(x, f (y))) und t = h(h(g(y), y), z)
• s = h(h(x, y), x) und t = h(h(f (y), z), g(z))
• s = h(h(g(x), f (y)), f (z)) und t = h(h(g(z), f (f (x))), f (y))
9. Knuth-Bendix-Vervollständigung: Nicht klausurrelevant.
10. Für gegebenes Ersetzungssystem Termination prüfen; Antwort begründen
(etwa mit Interpretation oder rekursiver Pfadordnung). Beispiele:
• {f (x ◦ y) → f (x) ◦ f (y)}
• {(x ∧ y) ∨ z → (x ∨ z) ∧ (y ∨ z)}
11. Entscheiden, ob eine gegebene monotone Interpretation die Termination
eines gegebenen Ersetzungssystems zeigt. Beispiel:
• Termination von {(x ◦ y) ◦ z → x ◦ (y ◦ z), x ◦ (y ◦ z) → y ◦ y mit
der Interpretation τ auf N, wobei ◦τ (n, m) = m(m + n) auf einem
geeigneten Abschnitt von N gewählt sei.
2
Funkionales Programmieren / Haskell
1. Ausdrücke, Funktionen, Typen (inklusive Typvariablen): Den Wert eines
gegebenen Ausdrucks angeben. Den Typ einer gegebenen Funktion bzw.
eines gegebenen Ausdrucks angeben. Umgekehrt eine Funktion zu gegebenem Typ angeben.
Beispiel: Hier sei succ :: Int -> Int definiert als succ n = n+1.
• Wert und Typ von [1,2,3]
• Wert und Typ von [succ 1, succ 2, succ 3]
• Wert und Typ von map succ [1,2,3]
• Typ von map succ
• Typ von map
• Typ von map fst
2
2. Verständnisfragen zu Haskell-Typen (Tupel, Listen etc.).
3. Verständnisfragen zu Listen-Comprehension. Beispiel:
• Wert von [n+2 | n <- [7..9]]
4. Eine Haskell-Funktion nach verbaler Spezifikation schreiben, inklusive Typangabe. Beispiel:
• Schreiben Sie eine Haskell-Funktion minAndMax, die zwei Argumente
vom Typ Int besitzt und die ein Paar vom Typ (Int,Int) berechnet,
nämlich das Paar aus dem Minimum und dem Maximum der beiden
Argumente (in dieser Reihenfolge). Beispiel: minAndMax 7 3 liefert
(3,7).
• Schreiben Sie eine Haskell-Funktion replicate, die zu gegebener
Zahl n und gegebenem Element x (beliebigen Typs) eine Liste der
Länge n liefert, deren Einträge alle gleich x sind. Beispiel: replicate
3 7 liefert [7,7,7]. (Zusatzfrage: Was berechnet Ihre Funktion für
negatives n?)
• Schreiben Sie eine Haskell-Funktion flatten, die eine Liste von Listen in eine einzige Liste umrechnet, indem die Listen konkateniert
werden. Beispiel: flatten [[3,1],[],[7,7,2]] liefert [3,1,7,7,2].
5. Eine gebebene Haskell-Funktion auf Beispiele anwenden und allgemein
erklären. Beispiel:
• Die Funktion filter :: (a -> Bool) -> [a] -> [a] ist definiert
als filter p xs = [ x | x <- xs, p x ]. Sei big n = n>2. Welchen Wert hat dann filter big [3,1,5]? Begründung? Allgemeine
Funktionsweise?
6. Verständnisfragen zum Pattern-Matching in Haskell.
7. Verständnisfragen zur Auswertungsstrategie von Haskell (lazy evaluation).
8. Funktionales Programmieren in objektorientierten Sprachen: Nicht klausurrelevant.
3
Logisches Programmieren / Prolog
1. Syntax: Terme und Formeln. Semantik: Terme und Formeln in einem gegebenen Modell auswerten.
2. Erfüllbarkeit / Widersprüchlichkeit / Allgemeingültigkeit von Formeln
prüfen: Nicht klausurrelevant.
3. Ableiten: Schnittregel / Resolutionsregel auf gegebene Beispielformeln anwenden können (Beispiele VL-Folie 37). (Notwendige Voraussetzung für
Resolution: Unifikation.)
4. Prolog als Programmiersprache: Nicht klausurrelevant. (Insbesondere: Gegebenes Prolog-Programm auf Beispiel-Goals anwenden und allgemein erklären; ein Prolog-Programm nach verbaler Spezifikation schreiben; Verständnisfragen zur Auswertungsstrategie von Prolog.)
3
Herunterladen