Fachrichtung 6.2 — Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Aufgaben für die Zusatztutorien: 1 (Induktion) 1 natürliche Induktion Aufgabe 1.1 Zeigen Sie mittels Induktion: (a) ∀n ∈ N \ {0} : 6 | (3n − 3) (b) ∀n ∈ N \ {0} : 3 + 7 + 11 + ... + (4n − 1) = 2n2 + n (c) ∀n ∈ N : n ≥ 4 ⇒ n! > 2n Aufgabe 1.2 Schreiben Sie mit Hilfe der mathematischen Prozedur iter : N × X × (X → X) → X iter(0, x, f ) = x iter(n, x, f ) = iter(n − 1, f x, f ) für n > 0 eine mathematische Prozedur faki: N → N, die die Fakultät für natürliche Zahlen berechnet. Beweisen Sie, dass Ihre Prozedur die Funktion λn ∈ N.n! berechnet. Aufgabe 1.3 Beweisen Sie die folgenden Aussagen durch natürliche Induktion: (a) ∀x, y ∈ N : x · y = iter(x, 0, λx ∈ N.x + y) (b) ∀x, y ∈ N : x + y = iter(y, x, λx ∈ N.x + 1) Überlegen Sie sich, worüber Sie in jedem Fall Induktion führen sollten. Sie dürfen die Vertauschungseigenschaft von iter aus dem Buch verwenden. Aufgabe 1.4 Zeigen Sie für die folgenden Prozeduren jeweils mittels Induktion, dass p die Funktion f berechnet, also dass ∀z ∈ Dom f : p z = f z gilt. (a) p : N2 → N p (0, y) = y p (x, y) = 1 + p(x − 1, y) für x > 0 f = λ(x, y) ∈ N2 . x + y (b) p:N→N p0=3 p x = 1 + p(x − 1) f = λn ∈ N. n + 3 1 für x > 0 2 strukturelle Induktion Aufgabe 1.5 (rev) Sei X eine Menge. Beweisen Sie, dass für alle Listen xs, ys ∈ L(X) gilt: (a) xs@nil = xs (b) rev(xs@ys) = rev ys@rev xs (c) rev(rev xs) = xs Aufgabe 1.6 Listen lassen sich mit einer endrekursiven Prozedur reversieren, die die folgende Funktion berechnet: revi ∈L(X) × L(X) → L(X) revi(xs, ys) = (rev ys)@xs (a) Konstruieren Sie eine endrekursive Prozedur revi, die die Funktion revi berechnet. (Es dürfen keine Hilfsprozeduren verwendet werden.) (b) Beweisen Sie die Korrektheit Ihrer Prozedur. Hinweis: Sie dürfen die Assoziativität der Konkatenation verwenden. Aufgabe 1.7 Seien X, Y Mengen. Wir map : (X → Y ) × L(X) map f nil map f (x :: xr) formulieren die mathematische Prozedur map wie folgt: → L(Y ) = nil = f x :: map f xr Beweisen Sie, dass für alle f : X → Y und xs, ys ∈ L(X) gilt: (a) map f (xs @ ys) = (map f xs) @ (map f ys) (b) map f (rev xs) = rev (map f xs) Hinweis: Sie dürfen annehmen, dass xs @ nil = xs gilt. Aufgabe 1.8 Zeigen Sie mittels Induktion die folgenden Aussagen. Überlegen Sie sich jeweils zuvor, ob Sie die Induktionshypothese verstärken müssen. (a) ∀xs ∈ L(X).|xs| = f oldl(f, 0, xs) mit f = λ(x, a) ∈ X × N.a + 1 (b) ∀xs ∈ L(X).f oldl(f, nil, xs) = rev(map(g, xs)) mit f = λ(x, xs) ∈ X × L(X).g(x) :: xs und map ∈ (X → Y ) × L(X) → L(Y ) map(f, nil) = nil map(f, x :: xs) = f (x) :: map(f, xs) Aufgabe 1.9 (Binomialbäume) Ein Binomialbaum Bk ∈ B der Ordnung k ist ein geordneter Baum und rekursiv definiert: (a) B0 ist der Baum mit einem Knoten. B0 = [] (b) Bk besteht aus zwei Kopien von Bk−1 . Die Wurzel der einen Kopie wird das linkeste Kind der Wurzel der anderen Kopie. Bk = [Bk−1 , B10 , ...Bn0 ] wenn Bk−1 = B10 ...Bn0 . Außerdem sei s wie in Kapitel 10.5 des Buches gegeben. Beweisen Sie: sBk = 2k . 2