Sie sind auf Seite 1von 8

Studiengang: Platzziffer: Punkte:

M_AI _________ Note:


Fakultät Elektrotechnik, Medientechnik und Informatik
Modul TheoretischeInformatik - Prüfungssemester: WS 18
Kurs: Fach Semantik, Berechenbarkeit und 90 Min.
Komplexitätstheorie Prüfungsdauer:
(Modulprüfung)
Prüfer: Prof. Dr. Peter Jüttner Prüfungsdatum: 31.1.2019

 Keinen Rotstift verwenden!  zugelassene Hilsmittel: Alle

 nur an den vorgesehenen Stellen antworten!  ggf. Rückseiten nutzen!

Preliminary Remarks:

 This examination sheet is part of the examination of the module


Theoretische Informatik (Theoretical Computer Science) It contains the
examination questions of the course Semantik, Berechenbarkeit und
Komplexitätstheorie (Semantics, Computability and Theory of
Complexity)
 Separate examination sheets will be given for the other courses of this
module
 The programming language for the Turing Machine is the one used
during the course/exercise for the Turing Machine simulator. The syntax
is defined in the appendix.
 The German translation of the examination questions is only for
information. The English version is relevant.
 Answers may be given in German or English

Vorbemerkungen:

 Dieses Aufgabenblatt beinhaltet im Rahmen der Modulprüfung


Praktische Informatik die Fragen zum Fach Theoretische Informatik.
 Für weitere Fächer des Moduls werden separate Aufgabenblätter verteilt.
 Die Programmiersprache der Turing Maschine ist die in der Vorlesung /
Übung für den Simulator verwendetet. Die Syntax ist im Anhang erläu-
tert.
 Die deutsche Übersetzung der Aufgaben ist lediglich eine
Zusatzinformation. Die englische Version ist maßgeblich.
 Aufgaben dürfen in Deutsch oder Englisch bearbeitet werden.
Fixedpointsemantics / Fixpunktsemantik
1. Fixedpoints / Fixpunkte

Let  be the set of natural numbers (including 0), {} is  extended by the
element  (undefined)) with the order ≤ (x ≤ y  x =  or x = y,  x, y  {}).
Let F be a functional with the following definition

F: ({}  {})  ({}  {})

F(f)(x) := if (x==0) return 0 else return f(x-1)+1

with an order ≤ where f1 ≤ f2  f1(x) ≤ f2(x)  x, y  {}

a) Show that the function f(x) = x is a fixedpoint of F. (5 points)

F(f) = if (x==0) return 0 else return f(x-1) + 1 = if (x==0) return 0 else return x-1+1 = if
(x==0) return 0 else return x = f(x)

b) Show that the function f is the only fixedpoint of F, i.e. there is no other fixedpoint.

(5 points)

Hints:
 f is a fixedpoint of F (shown in a))
 It is sufficient to argue with first 3 iterations f 0, f1, f2 with f0 = (x), fi+1(x) =
F(fi)(x).
 Alternatively you can consider the set of defined values of each iteration step.

With each iteration f1, f2 , … the set of defined result values gets a new element.
Therefor the sup fi is a total function. I.e. the minimal fixedpoint is a total function.
As f is a total function it must be the only fixedpoint

 sei die Menge der Natürlichen Zahlen einschließlich der 0, {} ist  erweitert
um das Element  (undefiniert)) mit der Ordnung ≤ (x ≤ y  x =  oder x = y,  x, y
 {}). Sei F ein Funktional mit folgender Definition

F: ({}  {})  ({}  {})

F(f)(x) := if (x==0) return 0 else return F(x-1)+1

mit der Ordnung ≤ mit f1 ≤ f2  f1(x) ≤ f2(x)  x, y  {}

a) Zeigen Sie, dass die Funktion f(x) = x ein Fixpunkt von F ist. (5 Punkte).
b) Zeigen Sie, dass die Funktion f der einzige Fixpunkt von F ist.

Hinweis:
 f ist gemäß a) ein Fixpunkt von F
 Es genügt mit den ersten drei Iterationen f 0, f1, f2 mit f0 = (x), fi+1(x) = F(fi)(x)
zu argumentieren.
 Andernfalls können Sie auch die Menge der definierten Werte bei jeder
Iteration betrachten.

Operative Semantik

2. What is the common approach of the Axiomatic and Operative Semantics to proof
characteristics of programs? (2 Points)

Welchen Ansatz haben Axiomatische und Operative Semantik gemeinsam, um


Eigenschaften von Programmen zu beweisen?

Both use rules to show properties of programs.

Axiomatic Semantics / Axiomatische Semantik

3. Consider the following program segment with variables a and b of type unsigned
int. (representing natural numbers including 0)

a = 2*b + 3;
if (a < 5)
{ a = a*2; }
else
{a = a * 2 + 2;};
a = a / 2;

Consider { b > 1 } as a precondition before the execution of the program segment


starts. Use this precondition to calculate the postcondition for Variable a after the
execution of the program segment. (8 points)

Hints:
 Calculate forward starting with the first statement a = 2*b + 3; with
precondition { b > 1 }
 What is the resulting postcondition after the execution of a = 2*b + 3;?
 Use this postcondition as precondition for the if-else-statement. Calculate the
resulting postcondition.
 Continue with the last statement a = a / 2; in the same way.

precondition { b > 1 } before a = 2*b + 3; leads to postcondition { a > 5 }


precondition { a > 5 } before if (a<5) leads to the execution of the else branch
with the postcondition { a > 12 }
precondition { a > 12 } befor a = a / 2; leads to postcondition { a > 6 }

Gegeben ist das folgende Programmsegment mit den Variablen a und b des Typs
unsigned int. (Darstellung der Natürlichen Zahlen einschließlich 0)

a = 2*b + 3;
if (a < 5)
{ a = a*2; }
else
{a = a * 2 + 2;};
a = a / 2;

Die Vorbedingung { b > 1 } sei gegeben vor der Ausführung des Programmseg-
ments. Nutzen Sie diese Vorbedingung um die Nachbedingung bezgl. a zu be-
rechnen, die nach der Ausführung des Programmsegments gilt.

Hinweise:
 Führen Sie die Berechnung von vorne nach hinten durch, in dem Sie mit der
ersten Anweisung a = 2*b + 3; starten.
 Welche Nachbedingung ergibt sich daraus für a?
 Verwenden Sie diese Nachbedingung als Vorbedingung für das if-else-
Statement. Berechnen Sie die resultierende Nachbedingung.
 Setzen Sie die Berechnung mit dem letzten Statement a = a / 2; in gleicher
Weise fort.

Computability / Turing Machines

4. Write a Turing program (for a Single Tape Turing Machine) that checks if a binary
number on the tape is an odd number (i.e. the last digit is 1).
In this case a 1 shall be written one cell after the first free cell after the number on
the right side, otherwise a 0 shall be written.
After that Turing Machines shall stop.
Before program start the head is on the first left position bevor the binary number.
The number does not contain blanks. Only 0, 1, and blank are the used
characters on the tape. Leading 0’s are allowed. The number on the tape must
not be changed. Error handling (wrong characters, unexpected blanks, head on
wrong position) is not necessary.

For example the binary number …_101010101_... results in 101010101_1 (…_


and _... stands for the blanks before and after the number). The binary number
…_10100_... results in …_10100_0_....

(12 Points)

Schreiben Sie ein Turing-Programm (für eine Ein Band Turing Maschine), das
überprüft, ob die Binärzahl auf dem Band eine ungerade Zahl (d.h. die letzte
Binärziffer ist 1) ist.
Ist das der Fall, so soll eine 1 geschrieben werden, eine Zelle nach der ersten
freien Zelle rechts von der Zahl, andernfalls soll dort eine 0 geschrieben werden.
Danach soll die Turing Maschine anhalten.
Vor Programmstart befindet sich der Kopf auf der ersten Position links von der
Binärzahl. Die Zahl selbst enthält nur die Zeichen 0 und 1, keine Leerzeichen,
führende Nullen sind erlaubt. Sonst befinden sich auf dem Band nur Leerzeichen.
Die Binärzahl selbst darf nicht verändert werden. Eine Fehlerbehandlung (z.B.
falsches Zeichen, Kopf auf falscher Position) ist nicht notwendig.

Zum Beispiel führt die Binärzahl …_101010101_... zum Ergebnis


…_101010101_1 (…_ und _... stehen hier für die Leerzeichen vor und nach der
Zahl). Die Binärzahl …_10100_... führt zum Ergebnis …_10100_0_...

; Machine starts in state 0.

0 _ _ r 1; Read first blank


0 * * l 7; goto 7 if does not start with blank

1 0 0 r 1; overread 0
1 1 1 r 1; overread 1
1 _ _ l 2; blank at the end found
1 * * l 7; illegal char on the tape found

2 1 1 r 3; check last digit


2 0 0 r 5; check last digit

3 * * r 4; overread last digit


4 * 0 r halt; write 0, stop

5 * * r 6; overread last digit


6 * 1 r halt; wite 1, stop

7 0 0 l 7; error found, go left


7 1 1 l 7; error found, go left
7 _ F l halt; write F for error

5. Consider the following while-Program, that calculates a mathematical function


with input value 5. Show that the result (value of x0 at the end of the execution)
can also be calculated by a loop program. (6 Points)

x0 = 1;
x1 = 5;
while (x1 != 0)
{
x0 = x0 * x1;
x1 = x1 – 1;
}

Hint: What is the difference between while- and loop-programs in terms of


computability?
As the while-loop terminates as variable xi is decreased with each loop execution
it reaches the value 0. This means the while-loop terminated. This means that the
program calculates a total function. Total function can also be calculated by loop
programs.
(Alternatively a equivalent loop program can be written)

Betrachten Sie das obige while-Programm, das eine mathematischec Funktion für
die Eingabe 5 berechnet. Zeigen Sie, dass das Ergebnis (Wert der Variablen x0
am Ende der Ausführung) auch mittels eines Loop Programms berechnet werden
kann.

Hinweis: Denken Sie an den Unterschied zwischen While- und Loop-Programmen


bzgl. Berechenbarkeit.

Komplexitätstheorie
6. Multiplication of two matrices

Consider the multiplication of two matrices A and B of dimension (n x n), i.e. n


lines, n colums. The elements of A and B are real numbers.

The multiplication E = A * B is defined with given matrices A and B as follows:

a11, a12, …, a1n b11, b12, …, b1n e11, e12, …, e1n


a21, a22, …, a2n b21, b22, …, b2n e21, e22, …, e2n
A= … B= … E= …
an1, an2, …, ann bn1, bn2, …, bnn en1, en2, …, enn
*j
𝑛
with eij = ∑ (aik ∗ bkj )
𝑘=1

Calculate the Complexity class related to the number of mathematical operations


of this matrix multiplication and give it in the form O(f(n)) depending on the value
n. Give a reason for your calculation.

O(n3) as each line of A has to be multiplied by each column B (scalar


multiplication, n-multiplications per one line and one column in A and B to create
one element in E). E has n2 elements  n3 multiplications are necessary

(7 Points)

Betrachten Sie die Multiplikation zweier (n x n) – Matrizen A und B, d.h. Matrizen


A und B haben jeweils n Zeilen und n Spalten. Die Elemente von A und B seien
reelle Zahlen. Die Multiplikation E = A * B ist wie oben dargestellt definiert.

Berechnen Sie, zu welcher Komplexitätsklasse bzgl. der Anzahl mathematischer


Operationen die Matrixmultiplikation gehört und geben Sie diese in der Form
O(f(n)) abhängig vom Wert n an. Begründen Sie Ihre Berechnung.
Appendix / Anhang

Turing Machine

Syntax:

 Each line should contain one tuple of the form '<current state>
<current symbol> <new symbol> <direction> <new state>'.
 You can use any number or word for <current state> and <new state>,
eg. 10, a, state1. State labels are case-sensitive.
 You can use any character for <current symbol> and <new symbol>, or
'_' to represent blank (space). Symbols are case-sensitive.
 <direction> should be 'l', 'r' or '*', denoting 'move left', 'move right' or 'do
not move', respectively.
 Anything after a ';' is a comment and is ignored.
 The machine halts when it reaches any state starting with 'halt', eg. halt,
halt-accept.

Also:

 '*' can be used as a wildcard in <current symbol> or <current state>


to match any character or state.
 '*' can be used in <new symbol> or <new state> to mean 'no change'.
 '!' can be used at the end of a line to set a breakpoint, eg '1 a b r 2 !'. The
machine will automatically pause after executing this line.
 You can specify the starting position for the head using '*' in the initial input.

While Program Syntax:

While-Programs consist of … / hast he following rules

• variables x0, x1, x2, … (type unsigned int)


• constants c1, c2, c3, … (type unsigned int)
• symbols ; =
• operands +, -
(one operand of + and - must be a constant!)
• assignments e.g. xi = xj+ck;
• sequences P1; P2 where P1, P2 are While-Programs
• A While-Program calculating a n-digit function f (i.e. f:n) starts with the
parameters in the variables x1, …, xn and the results is in variable x0 when the program
terminates.
• The + - operator is defined as usual
• The - - operator is modifed in the following way:
if b>a then a-b = 0
• while (xi != 0) { P; }, where P is a While-Program