Mathematische Grundlagen der Informatik Universität Konstanz Fachbereich Informatik & Informationswissenschaft WS 2016/2017 Prof. Dr. Sven Kosub / Michael Strecke, Nadja Willenborg 9. Übungsblatt Ausgabe: 23.12.2016 Abgabe: 13.01.2017, bis spätestens 12:00 per Mail an den Tutor Aufgabe 25: Kongruenz modulo n 10 Punkte Für eine beliebige natürliche Zahl n ∈ N+ betrachten wir die Kongruenzrelation modulo n auf den natürlichen Zahlen, d.h. die folgende Äquivalenzrelation R ⊆ N × N: R =def { (x, y) | x, y ∈ N ∧ |x − y| ist durch n teilbar } (a) Zeigen oder widerlegen Sie, dass [x]R + [y]R = [x + y]R für alle n ∈ N+ , x, y ∈ N gilt. (b) Zeigen oder widerlegen Sie, dass [x]R · [y]R = [x · y]R für alle n ∈ N+ , x, y ∈ N gilt. (c) Zeigen oder widerlegen Sie, dass [x]R ˆ[y]R = [xˆy]R für alle n ∈ N+ , x, y ∈ N gilt. Hinweis: Für beliebige Mengen A, B ⊆ N und eine beliebige Operation (eigentlich: eine Funktion) ◦ : N × N → N definieren wir: A ◦ B =def { z | z ∈ N ∧ (∃x ∈ A)(∃y ∈ B)[z = x ◦ y]} Zum Beispiel gilt für A = {0, 3, 4} und B = {1, 2, 5} sowie für ◦ ∈ {+, ·, ˆ}: {0, 3, 4} + {1, 2, 5} = {1, 2, 4, 5, 6, 8, 9} {0, 3, 4} · {1, 2, 5} = {0, 3, 4, 6, 8, 15, 20} {0, 3, 4}ˆ{1, 2, 5} = {0, 3, 4, 9, 16, 729, 1024} Hierbei steht ˆ für die Exponentiation: xˆy =def xy . Aufgabe 26: Halbordnungen 10 Punkte Die folgenden Relationen R ⊆ A×A sind noch keine Halbordnungen. Fügen Sie den Relationen so wenig wie möglich Elemente hinzu bzw. entfernen Sie so wenig wie möglich Elemente aus den Relationen, so dass jeweils eine Halbordnung entsteht. (a) A =def {−3, −2, −1, 0, 1, 2, 3}, R =def { (x, y) | x < y }, (b) A =def {−3, −2, −1, 0, 1, 2, 3}, R =def { (x, y) | |x| ≤ |y| }, (c) A =def {−3, −2, −1, 0, 1, 2, 3}, R =def { (x, y) | x = y ∨ x + 1 = y }. Aufgabe 27: Reflexive und transitive Hülle 10 Punkte Im Rahmen eines Software Maintenance-Projektes sind Sie auf eine undokumentierte Methode gcd gestoßen, die Sie als Implementierung des Euklidischen Algorithmus zur Bestimmung des größten gemeinsamen Teilers zweier natürlicher Zahlen identifizieren: public static int gcd(int x, int y) { if (y==0) return x; if (y>x) return gcd(y,x); return gcd(y, x % y); } Um sich die davon zu überzeugen, dass diese rekursive Methode für x, y ≥ 0 stets terminiert, definieren Sie auf den natürlichen Zahlen die Rekursionsrelation ≺gcd : (x1 , y1 ) ≺gcd (x2 , y2 ) ⇐⇒def bei Eingabe (x2 , y2 ) ruft die Methode gcd sich selbst mit der Eingabe (x1 , y1 ) auf Sie wollen die Rekursionsrelation ordnungstheoretisch auffassen. Dazu bilden Sie die reflexive und transitive Hülle von ≺gcd : (x1 , y1 ) ≤gcd (x2 , y2 ) ⇐⇒def (x1 , y1 ) = (x2 , y2 ) oder es gibt ein n ∈ N und (a0 , b0 ), (a1 , b1 ), . . . , (an , bn ) ∈ N × N, so dass (x1 , y1 ) = (a0 , b0 ) ≺gcd (a1 , b1 ) ≺gcd (a2 , b2 ) ≺gcd · · · ≺gcd (an , bn ) = (x2 , y2 ) (a) Begründen Sie, dass die Relation ≤gcd ⊆ N2 × N2 antisymmetrisch (und damit eine Halbordnung) ist. (b) Was würde es für das Terminierungsverhalten von gcd bedeuten, wenn die Relation ≤gcd ⊆ N2 × N2 nicht antisymmetrisch wäre? (c) Ist die Relation ≤gcd ⊆ N2 × N2 total? (d) Für welche Eingabe aus {0, 1, 2, 3, 4, 5}2 werden die meisten rekursiven Aufrufe von gcd getätigt? Frohe Weihnachten und einen guten Rutsch ins Jahr 2017!