TD 1 – Techniques de preuve

publicité
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 1 – Techniques de preuve
A. Preuve par construction
De nombreux théorèmes stipulent qu'un objet particulier existe. Une technique pour prouver un tel théorème est
de montrer comment construire cet objet. Cette technique est appelée preuve par construction.
Exemple
Un graphe non orienté G est défini par le couple (S, A), S étant un ensemble de sommets, A ⊂ S2 un ensemble
d'arrêtes. On appelle le degré d'un sommet le nombre d'arrêtes reliées à ce sommet. Un graphe est dit k-régulier
si tous ses sommets sont de degré k.
Théorème : Pour tout entier n pair, n > 2, il existe un graphe 3-régulier composé de n sommets.
Preuve : exercice.
B. Preuve par contradiction
Cette technique consiste à supposer que le théorème est faux, puis à montrer que cette hypothèse conduit
systématiquement à une conséquence fausse, appelée contradiction.
Exemple
Un nombre x est rationnel s'il existe deux entiers m et n tels que x = m / n. Par exemple, 3 / 4 est un nombre
rationnel. Un nombre non rationnel est appelé un nombre irrationnel.
Théorème : √2 est irrationnel.
Preuve : exercice.
Théorème : Soit R une relation binaire définie sur un ensemble fini A, et soient a et b deux éléments de A. S’il
existe un chemin de a vers b dans R, alors il existe un chemin de longueur au plus |A|.
Preuve : exercice.
C. Preuve par récurrence, ou induction
Cette technique de preuve permet de montrer que tous les éléments d'une suite infinie vérifient une certaine
propriété P. Elle comporte deux étapes :
- étape de base : on montre que P(k) est vraie ;
- pas d'induction : pour i ≥ k, on montre que si P(i) est vraie, alors P(i+1) est également vraie.
P(n) est alors vraie, pour tout n ≥ k, parce que P(k) est vraie (étape de base), donc P(k+1) est vraie (pas
d'induction pour i = k), donc P(k+2) est vraie, etc.
Exemple
Théorème : n4 – 4n2 est divisible par 3.
Preuve : exercice.
1 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 2 – Machines de Turing simples
A. Exemple
1. Soit Σ = {a, b}. Construisez une machine de Turing qui transforme les a en b, les b en a, retourne à la position
initiale puis s’arrête.
B. Les machines de Turing pour reconnaître un langage
1. Construisez une machine de Turing qui accepte L = {anbncn | n ∈ N}.
2. Quel est le langage reconnu par la machine suivante ?
x / xD
q0
# / #D
q1
q5
# / #D
q2
b / yD
a / aD
y / yD
y / yD
# / #D
q6
a / xD
b / bD
z / zD
y / yD
z / zD
q3
c / zG
q4
a / aG
b / bG
y / yG
z / zG
3. Soit Σ = {a, b}. Construisez une machine de Turing qui décide L dans les cas suivants :
- L = a*ba*b
- L = {w ∈ {a, b, c}* | w contient abc mais ne contient pas bb}
- L = {anbn | n ∈ N}
- L = {a2^n | n ∈ N}
- L = {ww | w ∈ {a, b}*}
C. Les machines de Turing pour calculer des fonctions
1. Construisez une machine de Turing qui calcule la fonction add : N2 → N telle que add(m,n) = m + n, m et n
étant représentés en unaire.
2. Construisez une machine de Turing qui calcule la fonction f : N → N telle que f(x) = x + 1, x étant représenté
en binaire.
3. Soit Σ = {a, b}.
- construisez une machine de Turing calculant la fonction f : Σ* → Σ* qui décale tout mot w d'une case
vers la droite.
- construisez une machine de Turing calculant la fonction f : Σ* → Σ* qui à tout mot w associe le mot
miroir wR.
2 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 3 – Combinaisons de machines de Turing
A. Opérations sur les chaînes
1. Construisez la machine de Turing C sous forme de combinaison de machines de Turing élémentaires qui
effectue une copie : (q0, #σ1…σn) ├C* (qf, #σ1…σn#σ1…σn).
2. Déroulez C sur l’exemple (q0, #aba).
3. Construisez la machine de Turing qui calcule la fonction f : ∑* → ∑* telle que f(w) = ww, ∀ w ∈ ∑*.
B. Opérations arithmétiques
1. Construisez une machine de Turing qui fasse la soustraction non négative de deux entiers écrits en notation
unaire.
Plus précisément cette machine calculera la fonction f : N × N → N telle que f(n,m) = n − m si n ≥ m et 0 sinon.
2. Même chose pour la multiplication en notation unaire.
3. Construisez une machine de Turing qui réalise la conversion unaire → binaire.
3 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 4 – Machines de Turing à plusieurs rubans
1. Soit Σ = {a, b}.
a)
Construire une machine de Turing qui prend un mot u sur son ruban d'entrée et écrit uu sur un ruban de
sortie.
b) Construire une machine de Turing qui décide le langage L = {w ∈ Σ* | w = wR}.
c) Construire une machine de Turing qui décide le langage L = {w ∈ Σ* | |w|a = |w|b}.
2. Soit Σ = {0, 1}.
a)
Construire une machine de Turing qui
- ne s'arrête pas si le mot en entrée contient le symbole 1,
- écrit en binaire, sur son ruban de sortie, le nombre de 0 du mot en entrée avant de s'arrêter.
b) Construire une machine de Turing qui convertit en unaire un entier entré en binaire.
c) Construire une machine de Turing qui convertit en binaire un entier entré en unaire.
4 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 5 – Grammaires (générales)
1. Soit la grammaire (donnée en cours)
G = (V, ∑, R, S) où :
- V = { S, A, B, C, Ta, Tb, Tc }
- ∑ = { a, b, c }
- R = { (1)
S → ABCS,
(2)
S → T c,
(3)
CA → AC,
(4)
BA → AB,
(5)
CB → BC,
(6)
CTc →Tcc,
(7)
CTc → Tbc,
(8)
BTb →Tbb,
(9)
BTb → Tab,
(10) ATa →Taa,
(11) Ta → e }
Prouvez que le langage généré est { anbncn | n ≥ 1}.
2. On considère le langage L = {aibjck | i, j, k ∈ N et i ≤ j ≤ k}.
Définissez une grammaire G telle que L(G) = L. Prouvez que L(G) = L.
3. Une grammaire G calcule une fonction f si et seulement si pour tout mot w ∈ Σ*, on a
SwS ⇒* v si et seulement si f(w) = v.
Définissez une grammaire Gi calculant la fonction fi dans chacun des cas suivants :
d) f1(I n) = I n+1
e) f2(n) = n + 1 (les entiers seront représentés en binaires)
f) f3(w) = wR avec Σ = {a, b}
g) f4(w) = ww avec Σ = {a, b}
5 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 6 – Fonctions numériques
A. Fonctions récursives
1. Montrez que les fonctions suivantes sont primitives récursives :
a) la fonction factorielle(n)
b) la fonction pgcd(m, n)
c) le prédicat prem(n) qui vaut 1 si n est un nombre premier, 0 sinon
2. Soit f : N → N une fonction primitive récursive, on note F la fonction définie à partir de f par :
F : N → N et F(n) = f(f(...f(n)...)) où il y a n compositions de la fonction f.
Montrez que la fonction F est aussi une fonction primitive récursive.
B. Fonctions µ-récursives
1. Montrez que la fonction logarithme est une fonction µ-récursive.
2. Utilisez l’opérateur de minimisation pour définir les fonctions :
⎧⎢ m ⎥
⎪
si n > 0
quot (m, n) = ⎨⎢⎣ n ⎥⎦
⎪⎩0 sinon
⎧
⎢ m ⎥
⎪m − ⎢ ⎥ .n si n > 0
mod( m, n) = ⎨
⎣ n ⎦
⎪⎩0 sinon
3. On suppose connu le prédicat prem(n) qui vaut 1 si n est un nombre premier, 0 sinon. Montrez que la fonction
nprem(n) qui renvoie le nème nombre premier est une fonction µ-récursive.
6 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 7 – Fonctions et langages
L’objectif de cet exercice est de décider des langages avec des prédicats µ-récursifs. Les fonctions numériques
étant définies sur les entiers uniquement, on va chercher à coder les mots sous forme d’entiers.
1. Soit un alphabet Σ quelconque. Comment coder Σ en termes d’entiers ? Comment représenter le mot vide ? et
les autres mots de Σ* ?
2. On considère à présent l’alphabet Σ = {a,b}, et on va utiliser le codage précédent pour reconnaître des
langages.
Soient les trois langages suivants :
h) L1 = {w ∈ Σ* | w contient un nombre impair de a}
i) L2 = a*
j) L3 = (a∪b)*ab(a∪b)*
Ecrivez des prédicats primitifs récursifs décidant ces langages, c’est-à-dire retournant 1 si le codage du mot en
entrée appartient au langage, 0 sinon. Formellement, on cherche à déterminer fi tel que fi("w") = 1 ssi w ∈ Li.
3. Le langage L4 = {w ∈ Σ* | w contient un nombre premier de a} peut-il être reconnu par un prédicat primitif
récursif ? par un prédicat µ-récursif ?
7 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 8 – Décidabilité
A. Un problème indécidable classique
Soit p(x1, x2, …, xn) un polynôme à coefficients entiers. Déterminer si l’équation p(x1, x2, …, xn) = 0 a une
solution dans le domaine des entiers (dixième problème de Hilbert) est un problème indécidable.
Par exemple, x2 – 4 a une solution entière, x2 – 2 n’en a pas.
B. Décidabilité des classes de langages
1. Les langages rationnels sont-ils décidables ? Justifiez.
2. Les langages algébriques sont-ils décidables ? Justifiez.
C. Problèmes indécidables à propos des grammaires algébriques
1. Montrez que le problème suivant est indécidable :
Soit G une grammaire algébrique. Est-ce que L(G) = ∑* ?
2. Montrez que le problème suivant est indécidable :
Soient G1 et G2 deux grammaires algébriques. Est-ce que L(G1) ∩L(G2) = ∅ ?
D. Problèmes indécidables à propos des machines de Turing
1. Soient M1 et M2 deux machines de Turing. Montrez que déterminer si M1 et M2 acceptent le même langage est
un problème indécidable.
2. Soit L un langage accepté par une machine de Turing, et soit LR le langage constitué des mots de L vus dans
un miroir. Par exemple, L = {a, ab, abb, abbb}, LR = {a, ba, bba, bbba}.
Montrez que le problème qui consiste à montrer que L = LR est un problème indécidable.
8 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 9 – complexité – langages de la classe P
On rappelle les principes du calcul des propositions.
Domaine à 2 valeurs
- T : vrai,
- ⊥ : faux.
Quatre opérations
- ∧ : conjonction (et),
- ∨ : disjonction (ou),
- ¬ : négation (non),
- ⊃ : implication (si alors).
Forme normale conjonctive
E1 ∧ E2 ∧ … ∧ En
(chaque Ei est une clause)
Une clause est une disjonction de variables propositionnelles ou de leur négation :
E = x1 ∨ x2 ∨ … ∨ xn
(chaque xi est un littéral)
Un littéral est une expression de la forme p ou ¬p pour une variable propositionnelle p.
Tables de vérité
p
T
T
⊥
⊥
q
T
⊥
T
⊥
p⊃q
T
⊥
T
T
¬p ∨ q
T
⊥
T
T
Evaluation d'une expression booléenne (à l'aide des tables de vérité) :
Par exemple, l'expression (T ∧ (⊥∨ (¬T))) ⊃ ⊥ vaut T.
Calcul des propositions (on remplace les valeurs de vérité) :
Par exemple, (p ∧ (q∨ (¬r))) ⊃ s est une expression du calcul des propositions.
Fonction d'interprétation :
Par exemple {p ← T, q ← ⊥, r ← T, s ← ⊥} ⇒ l'expression (p ∧ (q∨ (¬r))) ⊃ s vaut T.
Expression valide : expression valant T pour toute fonction d'interprétation
Par exemple, (p ∧ q) ⊃ p est valide.
Expression satisfaisable : expression pour laquelle il existe au moins une fonction d'interprétation qui la rend T.
Par exemple, p ∧ q est satisfaisable (mais non valide), p ∧ ¬p n'est pas satisfaisable ni valide.
Soient les deux problèmes suivants :
2-SAT :
Soit une forme normale conjonctive F dans laquelle chaque clause a exactement 2 littéraux.
F est-elle satisfaisable ?
2-COLOR :
Soit un graphe G = (V, E).
Existe-t-il une fonction c : V à {0, 1} telle que pour toute arête (u, v) de G, c(u) ≠ c(v) ?
1. Rappeler la définition de la réduction polynomiale et son intérêt.
2. Démontrez que le langage L2-COLOR associé à 2-COLOR se réduit polynomialement à L2-SAT. En déduire qu’il
est dans P.
3. Prouvez directement que L2-COLOR est dans P.
4. Prouvez directement que L2-SAT est dans P.
9 / 10
M1 Informatique – Lyon-1
MIF15 – Calculabilité et complexité
2013 – 2014
Exercices de TD
TD 10 – complexité – langages de la classe NP
Rappel :
Un langage L est NP-complet si
- L ∈ NP,
- Pour tout langage L' ∈ NP, il existe une réduction polynomiale de L' dans L,
ou
- Pour un langage L'' NP-complet, il existe une réduction polynomiale de L'' dans L.
Tout langage de NP étant décidé par une machine de Turing non déterministe polynomialement bornée M, pour
montrer que SAT est NP-complet (théorème de Cook), on montre comment construire (de manière polynomiale)
une forme normale conjonctive F, à partir de M et d’un mot w telle que F est satisfaisable ssi M décide w.
Soient les deux problèmes suivants :
3-COLOR :
Soit un graphe G = (V, E).
Existe-t-il une fonction c : V à {0, 1, 2} telle que pour toute arête (u, v) de G, c(u) ≠ c(v) ?
TSP (Traveling Salesman Path) :
Soient G = (V, E) un graphe complet, c une fonction de S × S à Z, k ∈ Z.
Existe-t-il un cycle hamiltonien de coût ≤ k ?
1. Montrez que 3-COLOR est NP-complet.
2. Montrez que TSP est NP-complet.
10 / 10
Téléchargement