LOGIQUE ET COMPLEXITÉ (B. Mariou - UFR 6

publicité
Université Paris 8 – UFR MITSIC
Licence de Mathématiques – Printemps 2016
LOGIQUE ET COMPLEXITÉ (B. Mariou)
–
Devoir surveillé du 7 juin 2016
La carte d’étudiant est obligatoire.
Aucun appareil électronique n’est autorisé
Une page A4 manuscrite par vous-même est autorisée.
Pas de communication
Indiquez sur chaque copie, nom, prénom, numéro.
Ni sac, ni vêtements à votre place.
Durée : 2h30
Pas de sortie avant 45 minutes
–
Barème : 7 3 2 2 3 3
Exercice 1 Questions de cours
a) Y a-t-il une différence entre “calculable par machine de Turing” et “calculable par machine à
registres” ? (Justifiez.)
b) Existe-t-il un sous-ensemble de IN qui n’est pas décidable par machine de Turing ? (Justifiez.)
c) Existe-t-il des fonctions qui ne sont pas calculables par machines à registres. (Justifiez.)
d) Donnez la définition de la classe des fonctions récursives.
e) Citez une fonction récursive, définie partout, mais pas récursive primitive.
f) Existe-t-il une fonction calculable par machine de Turing et pas récursive ? (Justifiez.)
g) Qu’affirme la Thèse de Church - Turing ?
Exercice 2
Soit f la fonction IN × IN
a,b
→
7
→
IN
1
a mod b
si b 6 1
si b > 2.
a) Décrivez la fonction g qu’on obtient en appliquant l’opération de minimisation M à la fonction f .
Vous donnerez la liste des valeurs g(0), g(1), . . . , g(9).
b) La fonction g est-elle récursive ? récursive primitive ?
Exercice 3 Soit X ⊂ IN tel qu’il existe deux fonctions calculables f et g telles que f est définie
seulement sur X, et g est définie seulement sur X. Montrez que X est décidable.
Exercice 4
a) Soient a et b deux entiers, que vaut 1 -̇ ((a -̇ b) + (b -̇ a)) ?
b) Déduisez-en que si f : IN → IN est définie partout et récursive, alors Z = {a ∈ IN | f (a) = a}
est récursif.
Soit h la fonction à 1 argument, suivante :
– elle n’est pas définie en 0,
– h(1) = 1,
– h(k) = 0 si k > 2.
Constuisez une machine à registres ou, au choix, une machine de Turing dont vous préciserez
l’alphabet, qui calcule la fonction h.
Exercice 5
Exercice 6 On s’intéresse aux fonctions IN → IN définies partout (pas nécessairement récursives). On veut vérifier qu’une liste quelconque (fk )k∈IN de telles fonctions n’est pas la liste de
toutes ces fonctions.
a) Soit une telle liste (fk )k∈IN . On pose, pour tout k ∈ IN , F (k) = fk (k) + 1.
Montrez que la fonction F ainsi obtenue est une fonction de IN dans IN , définie partout mais qui
n’est pas dans la liste (fk )k∈IN .
b) Comment s’appelle le type de raisonnement de la question précédente ?
c) L’ensemble des fonctions de IN dans IN , définies partout, est-il dénombrable ?
Corrigé du devoir surveillé du 7 juin 2016
Exercice 1
a) On peut répondre que les machines de Turing et les machines à registres sont des machines
totalement différentes, des modèles du calcul différents ; et par conséquent calculer sur machine de Turing
est assez différent de calculer sur machine à registres.
En revanche, les deux notions évoquées concernent les mêmes fonctions, i.e. pour une fonction donnée, il
est équivalent d’être calculable par MdT ou calculable par MàR.
b) Il existe une multitude de sous-ensembles de IN qui ne sont pas décidables par MdT, pour des raisons
de cardinalité (voir le cours, chapitre 6).
c) De même, il existe des multitudes de fonctions non calculables par machines à registres (question de
cardinalité, cours, chapitre 6).
d) Voir le cours, chapitre 8.
e) La fonction d’Ackermann a les propriétés requises (cours, chapitre 8).
f) Non, toutes les fonctions calculables par machine de Turing sont récursives (chapitre 8).
g) Voir chapitre 10.
Exercice 2
a)
Il faut regarder l’énoncé, la fonction f ne s’annule pas lorsque b = 0 et b = 1.
La fonction f s’annule pour le couple (a, b) lorsque
b>2
a est multiple de b.
et
De plus, il faut observer que f est définie partout.
Donc, pour un a ∈ IN , f (a, b) ne s’annule pas lorsque b = 0 et b = 1 mais elle est définie. On peut donc
continuer à chercher le plus petit b > 1 qui fait s’annuler f (a, b).
Il s’agit donc de considérer des valeurs plus grandes que 2 pour b. Et donc le critère d’annulation de f est
le fait que b est un diviseur de a ou pas. On cherche donc le plus petit diviseur non trivial de a.
Pour a = 0, on a f (a, 2) = 0 et donc g(0) = 2.
Pour a = 1, on a f (a, b) = 1 pour tout b ∈ IN , et donc
g n’est pas définie pour a = 1
(1 n’a pas de diviseur non
trivial).
Pour a > 2, g(a) est simplement le plus petit diviseur
non trivial de a. Donc g(2) = g(4) = g(6) = g(8) = 2,
g(3) = g(9) = 3, g(5) = 5 et g(7) = 7.
Valeurs prises par f et valeur de g en conséquence
a\b 0 1 2 3 4 5 6 7
g(a)
0
1
2
3
4
5
6
7
8
9
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
0
2
0
2
0
2
0
2
1
1
1
3
4
0
3
4
5
1
1
6
0
0
0
2
pas défini
2
3
2
5
2
7
2
3
b) La fonction f est récursive (car, par exemple, elle est calculable). Comme la fonction g est obtenue par
minimisation à partir d’une fonction récursive, elle est récursive.
Mais comme elle n’est pas définie partout, elle ne peut être récursive primitive.
(Cela signifie qu’on ne peut
pas obtenir g à partir des fonctions initiales sans utiliser la minimisation.).
Exercice 3
On peut résoudre cet exercice en regardant revenant aux définitions ou en se référant aux
thééorèmes du cours.
• Première version. D’après l’énoncé, on a deux algorithmes A et B qui calculent les fonctions f et g.
Puisque f est définie sur X et g est définie sur X, on a, pour tout entier a :
– soit a ∈ X et alors A s’arrête pour l’entrée a, B ne s’arrête pas pour l’entrée a,
– soit a ∈
/ X et alors B s’arrête pour l’entrée a, A ne s’arrête pas pour l’entrée a.
On construit alors l’algorithme C qui consiste, pour une entrée a ∈ IN , à exécuter alternativement un pas
du calcul de A pour l’entrée a et un pas du calcul de B pour l’entrée a. Que a soit dans X ou dans X, un
et un seul de ces deux calculs se termine. Si c’est le calcul de A l’entrée a qui se termine, alors l’algorithme
C donne la réponse 1, si c’est le calcul de B pour l’entrée a qui se termine alors l’agorithme C donne la
réponse 0. De telle sorte que C s’arrête toujours pour l’entrée a et donne la réponse 1 si a ∈ X et la réponse
0 si a ∈
/ X. Donc l’algorithme C décide X.
• Seconde version. Utilisez les théorèmes 7.7 et 7.9.
Exercice 4
a) La valeur de a -̇ b dépend de l’ordre de a et b : a -̇ b = 0 ssi a 6 b, sinon a -̇ b > 0.
De même, b -̇ a = 0 ssi b 6 a, sinon b -̇ a > 0.
On distingue donc trois cas.
Si a > b, alors a -̇ b > 0 et b -̇ a = 0 donc (a -̇ b) + (b -̇ a) > 0 et donc 1 -̇ (a -̇ b) + (b -̇ a) = 0.
Si a = b, alors a -̇ b = b -̇ a = 0 donc (a -̇ b) + (b -̇ a) = 0 et donc 1 -̇ (a -̇ b) + (b -̇ a) = 1.
Si a < b alors a -̇ b = 0 et b -̇ a > 0 donc la somme n’est pas nulle et donc 1 -̇ (a -̇ b) + (b -̇ a) = 0.
Donc la quantité étudiée vaut 1 si a = b et vaut 0 si a 6= b.
b) Posons egal(a, b) = 1 -̇ ((a -̇ b) + (b -̇ a)). On a vu que egal(a, b) vaut 1 si a = b et vaut 0 si a 6= b.
Pour un entier a, l’énoncé nous dit que f est toujours définie en a on a donc
– si a = f (a) (i.e. si a ∈ Z) alors egal(a, f (a)) = 1,
– si a 6= f (a) (i.e. a ∈
/ Z) alors egal(a, f (a)) = 0.
Autrement dit, g : a 7→ egal(a, f (a)) est la fonction caractéristique de Z.
Si on sait, en plus, que f est récursive, alors g est obtenue par composition de focntions récursives, et est
donc aussi récursive ; ce qui signifie exactement que Z est récursif.
Exercice 5
Machine à registres prise sur une copie.
La valeur de l’argument a est stockée dans R2 avant l’exécution.
Le résultat se trouvera dans le registre R1 , qui est donc mis à 0 au début du processus.
Pour ne pas perdre le contenu de R2 , on le duplique dans le registre local S1 , avec
lequel on va effectuer les manipulations.
Première décrémentation : si le registre est vide (i.e. a = 0), la machine reste indéfiniment à cette étape. Boucle infinie pour la machine, qui coïncide avec le fait que la
fontion n’est pas définie pour a = 0.
Deuxième décrémentation : si S1 est maintenant vide, c’est qu’il contenait 1 au début
(i.e. a = 1) donc on sort et on incrémente R1 car h(1) = 1.
Boucle de décrementation : si on est arrivé ici, c’est que S1 contenait au moins 2 (i.e.
a > 2) et donc h(a) = 0. La boucle sert à remettre S1 à 0, puis on sort et on laisse
R1 vide.
Exercice 6
a) Soit un entier naturel k. La fonction fk existe et est définie partout. Notamment, fk (k)
est un nombre entier naturel, et on peut parler de fk (k) + 1, qui est aussi entier naturel. Donc F est définie
pour l’argument k.
Ainsi F est une fonction qui, à chaque entier naturel, associe un entier naturel. Donc F va de IN dans IN
et elle est définie partout.
Par ailleurs, pour tout entier k, on a F (k) = fk (k) + 1 6= fk (k), donc F 6= fk . Donc F ne fait pas partie de
la liste (fk )k∈IN .
b) Il s’agit d’un argument diagonal (voir le cours).
c) Si l’ensemble des fonctions de IN dans IN définies partout était dénombrable, cela signifierait précisément
qu’il existe (fk )k∈IN , liste exhaustive de toutes ces fonctions, indéxée par IN .
Or les questions précédentes montrent que toute liste, indexée par IN , de fonctions définies partout IN → IN
est une liste qui est incomplète. Donc il n’y a pas de liste exhaustive de toutes ces fonctions, qui soit indexée
par IN .
Donc l’ensemble des fonctions IN → IN , totales, n’est pas dénombrable.
Téléchargement