Theoretische Grundlagen der Informatik – 5. Tutorium

Tagesthemen

Many-to-One-Reduzierbarkeit

Sei \Sigma ein Alphabet und B \subseteq \Sigma^* (semi-)entscheidbar, sowie A \subseteq \Sigma^*.

Wenn es eine berechenbare Funktion f: \Sigma^* \to \Sigma^* gibt, sodass für alle w \in \Sigma^* gilt w \in A \Leftrightarrow f(w) \in B dann ist auch A (semi-)entscheidbar.

Man schreibt diesfalls A \leq_m B.

Satz von Rice

Sei R die Menge aller Turing-berechenbaren Funktionen und S \subset R eine nicht-triviale Teilmenge (\emptyset \neq S \neq R) hiervon. Dann ist die Menge

L(S) = \{ \langle M \rangle : M berechnet ein f \in S \}

nicht entscheidbar.

Satz von Rice: Beispiel 1

Die Sprache VIRUS enthalte alle Prpgramme, die bei leerer Eingabe die Ausgabe I LOVE YOU produzieren.

VIRUS := \{ \langle M \rangle : M(\epsilon) = "I LOVE YOU" \}

Zeigen Sie: VIRUS ist nicht entscheidbar.

Satz von Rice: Beispiel 2

Motivation: Fixen Sie folgendes Java-Programm.

/**
 * Computes the mean of two integers.
 *
 * The result is rounded towards zero.
 *
 * @param n1
 *         the first number
 *
 * @param n2
 *         the second number
 *
 * @returns
 *         floor((n1 + n2) / 2)
 *
 */
int mean(int n1, int n2) {
    // FIXME: This can overflow.
    return (n1 + n2) / 2;
}

Satz von Rice: Beispiel 2

Die Sprache EQUIV enthalte alle Programmdupel, die bei identischer Eingabe dieselbe Ausgabe produzieren.

EQUIV := \{ (\langle M_1 \rangle, \langle M_2 \rangle) : \forall w \in \Sigma^*: M_1(w) = M_2(w) \}

Zeigen Sie: EQUIV ist nicht entscheidbar.

Kodierungsschema

Sei \Pi ein Problem und \Sigma ein Alphabet. Ein Kodierungsschema ist eine Abbildung

  s: \Pi \to     \Sigma^*
     I   \mapsto \langle I \rangle

die jeder Instanz I des Problems eine Kodierung \langle I \rangle zuordnet.

Die Größe einer Probleminstanz I im Kodierungsschema s ist die Länge der Codierung |s(I)|.

Probleme

Entscheidungssprache

Sei \Pi ein Entscheiodungsproblem, \Sigma ein Alphabet und s: \Pi \to \Sigma^* ein Kodierungsschema.

Die Sprache L[\Pi, s] enthält alle in s kodierten Ja-Instanzen von \Pi.

Verifizierer

Seien \Sigma und \Gamma Alphabete, L \subseteq \Sigma^* und V eine Zweiband-Turingmaschine mit Eingabealphabeten \Sigma und \Gamma.

V ist ein Verifizierer für L genau dann wenn für alle w \in \Sigma^* gilt

w \in L \Leftrightarrow \exists c \in \Gamma^*: V akzeptiert (w,c)

Ein solches c heißt Zeuge (oder Zertifikat) für w.

Zeugen

947 \times 653 ist ein Zeuge für 618391 \in COMPOSITE.

Die Sprachklassen \mathcal{P} und \mathcal{NP}

Die Klasse \mathcal{P} enthält alle Sprachen, für die es einen deterministischen Entscheider (Turingmaschine) gibt, der für alle Worte der Länge n nach höchstens p(n) Berechnungsschritten hält, für ein festes Polynom p: \mathbb{N}_0 \to \mathbb{N}_0.

Die Klasse \mathcal{NP} enthält alle Sprachen, für die es einen deterministischen Verifizierer (bzw einen nichtdeterministischen Entscheider) gibt, der für alle Worte der Länge n nach höchstens p(n) Berechnungsschritten hält, für ein festes Polynom p: \mathbb{N}_0 \to \mathbb{N}_0.


Valid XHTML 1.0 Strict