Calculabilité et décidabilité⚓︎
Fiche de révision — Terminale NSI
Fiche complète, concise et lisible sur la calculabilité et la décidabilité : programme comme donnée, problème de l'arrêt et sa preuve, notions de décidabilité / calculabilité. La partie P / NP est un approfondissement hors programme.
1. Programme comme donnée⚓︎
| Terme | Définition |
|---|---|
| Programme | Suite d'instructions réalisant une tâche. |
| Entrée | Données fournies au programme. |
| Sortie | Résultat produit par le programme. |
| Code source | Texte du programme. |
| Exécution | Lancement du programme sur une entrée. |
| Programme passé en paramètre | Un programme reçu comme donnée par un autre programme. |
Un programme peut manipuler du code
Un programme peut prendre le code d'un autre programme — voire son propre code — comme donnée d'entrée. C'est cette idée qui rend possible le raisonnement sur le problème de l'arrêt.
Quine
Un quine est un programme qui affiche son propre code source, sans le lire depuis un fichier : illustration concrète d'un programme qui se manipule lui-même.
2. Terminaison⚓︎
def countdown(n):
while n != 0:
n = n - 1
return 0
- programme qui termine : pour
n ≥ 0,natteint0; - boucle infinie : pour
n < 0,nne vaut jamais0; - analyse d'un cas particulier : ici, on peut raisonner facilement ;
- décision universelle : décider pour tout programme et toute entrée est une tout autre question.
Attention
Le fait qu'un programme tourne longtemps ne permet pas de conclure avec certitude qu'il ne terminera jamais (il pourrait s'arrêter plus tard).
3. Programme hypothétique halt⚓︎
On imagine un programme :
halt(prog, x)
- renverrait
Truesiprog(x)termine ; - renverrait
Falsesinon.
Programme supposé
Ce programme n'existe pas. On le suppose uniquement pour mener une preuve par l'absurde.
4. Preuve du problème de l'arrêt⚓︎
On construit un programme sym à partir de halt :
def sym(prog):
if halt(prog, prog): # si halt annonce que prog(prog) termine…
while True: # …sym BOUCLE
pass
else:
return 1 # sinon, sym RENVOIE 1 (termine)
On exécute alors sym(sym) :
Réponse de halt |
Conséquence réelle | Contradiction |
|---|---|---|
True |
sym(sym) boucle |
il était annoncé qu'il terminerait |
False |
sym(sym) renvoie 1 |
il était annoncé qu'il ne terminerait pas |
Conclusion
Dans les deux cas, on aboutit à une contradiction : le programme halt
ne peut pas exister. Le problème de l'arrêt est indécidable.
5. Définitions essentielles⚓︎
| Terme | Définition |
|---|---|
| Problème de décision | Problème dont la réponse est oui / non. |
| Problème décidable | Il existe un algorithme qui répond toujours correctement. |
| Problème indécidable | Aucun algorithme ne peut répondre dans tous les cas. |
| Fonction calculable | Il existe un algorithme qui la calcule. |
| Fonction non calculable | Aucun algorithme ne peut la calculer. |
| Raisonnement par l'absurde | Supposer le contraire pour aboutir à une contradiction. |
| Problème de l'arrêt | Décider si un programme termine sur une entrée donnée. |
Énoncé à retenir
« Aucun algorithme universel ne peut déterminer, pour tout programme P et
toute entrée E, si P(E) terminera. »
6. Turing, Church et Rice⚓︎
- Alan Turing, 1936 : formalise le calcul et démontre l'indécidabilité de l'arrêt ;
- machine de Turing : modèle théorique du calcul ;
- Alonzo Church : lambda-calcul, autre formalisation équivalente du calcul ;
- David Hilbert : projet de décision universelle (résoudre tout problème par un algorithme) — montré impossible ;
- théorème de Rice : toute propriété sémantique non triviale d'un programme est indécidable.
Questions indécidables universellement
- le programme termine-t-il ?
- renvoie-t-il une valeur donnée ?
- provoque-t-il une erreur ?
7. Machine de Turing⚓︎
- modèle théorique d'un algorithme ;
- outil pour étudier ce qui est calculable ;
- une machine universelle reçoit une machine
Met une entréee… - …et simule l'exécution de
M(e); - c'est l'ancêtre conceptuel de l'ordinateur programmable (un même appareil exécute n'importe quel programme).
8. Calculabilité et complexité⚓︎
| Question | Domaine |
|---|---|
| Existe-t-il un algorithme ? | calculabilité |
| Cet algorithme est-il efficace ? | complexité |
| Aucun algorithme ne convient | indécidable / non calculable |
| Algorithme existant mais très coûteux | calculable mais difficile |
Distinction essentielle
Indécidable ne signifie pas seulement « lent ». Un problème indécidable n'a aucun algorithme, même infiniment lent ; un problème seulement difficile a un algorithme, mais coûteux.
9. Approfondissement : P, NP et NP-complet⚓︎
Hors programme du bac
Cette partie est un approfondissement : elle n'est pas un attendu du bac.
- P : problèmes résolus en temps polynomial ;
- NP : problèmes de décision dont une solution se vérifie en temps polynomial ;
P ⊆ NP: tout problème de P est dans NP ;- question ouverte :
P = NP ?(non résolue).
Exemples (versions décisionnelles)
Sudoku, factorisation, sac à dos, voyageur de commerce.
Problème NP-complet
Un problème NP-complet est parmi les plus difficiles de NP : un algorithme
polynomial pour un seul d'entre eux fournirait un algorithme polynomial
pour tous les problèmes de NP (et donc P = NP).
Prix du millénaire
La question P = NP ? fait partie des problèmes du prix du millénaire
(récompensés s'ils sont résolus).
10. Méthodes bac⚓︎
Procédures à appliquer
- expliquer pourquoi un programme est une donnée (il peut être passé en paramètre) ;
- présenter l'hypothèse
halt(programme supposé qui décide la terminaison) ; - analyser
sym(boucle sihaltannonce l'arrêt, renvoie1sinon) ; - étudier les deux cas de
sym(sym); - repérer chaque contradiction ;
- formuler la conclusion d'indécidabilité ;
- distinguer calculabilité (existe-t-il un algorithme ?) et efficacité (est-il rapide ?) ;
- distinguer P et NP (résoudre vs vérifier).
11. Pièges⚓︎
Erreurs fréquentes à éviter
- détecter certaines boucles ≠ résoudre universellement l'arrêt ;
- programme lent ≠ programme non calculable ;
- exponentiel ≠ indécidable ;
- oublier que
haltest hypothétique (il n'existe pas) ; - croire qu'une simulation dit toujours si le programme terminera plus tard ;
- croire que NP signifie « non polynomial » (faux : c'est « vérifiable en temps polynomial ») ;
- affirmer que
P ≠ NPest démontré (c'est ouvert) ; - confondre vérifier une solution et la trouver.
12. Entraînement⚓︎
Conseil d'utilisation
Cherche la réponse, puis déplie la correction.
1. Pourquoi dit-on qu'un programme peut être une donnée ?
Parce qu'il peut être passé en paramètre à un autre programme (voire à lui-même), sous forme de code source.
2. countdown(n) termine-t-il pour tout n entier ?
Non : il termine pour n ≥ 0, mais boucle indéfiniment pour n < 0
(n n'atteint jamais 0).
3. Pourquoi une longue exécution ne prouve-t-elle pas la non-terminaison ?
Le programme pourrait s'arrêter plus tard : observer qu'il tourne longtemps ne permet pas de conclure.
4. Que renverrait halt(prog, x) s'il existait ?
True si prog(x) termine, False sinon.
5. Que fait sym(prog) selon la réponse de halt ?
Si halt(prog, prog) annonce un arrêt, sym boucle ; sinon, sym
renvoie 1.
6. Quelle contradiction apparaît si halt(sym, sym) = True ?
halt annonce que sym(sym) termine, mais sym(sym) boucle → contradiction.
7. Quelle est la conclusion de la preuve ?
Le programme halt ne peut pas exister : le problème de l'arrêt est indécidable.
8. Qu'est-ce qu'un problème décidable ?
Un problème pour lequel il existe un algorithme qui répond toujours correctement (oui / non).
9. À quoi sert la machine de Turing ?
C'est un modèle théorique du calcul, servant à étudier ce qui est calculable.
10. Qu'affirme le théorème de Rice ?
Toute propriété sémantique non triviale d'un programme est indécidable.
11. « Indécidable » signifie-t-il « très lent » ?
Non : un problème indécidable n'a aucun algorithme ; un problème lent en a un, mais coûteux.
12. Que signifie réellement « NP » ?
Une solution se vérifie en temps polynomial — et non « non polynomial ».
À retenir absolument⚓︎
Problème de l'arrêt
« Aucun algorithme universel ne peut déterminer, pour tout programme P et
toute entrée E, si P(E) terminera. » → indécidable.
Étapes de la preuve par contradiction
- supposer que
haltexiste ; - construire
sym(boucle si arrêt annoncé, renvoie1sinon) ; - exécuter
sym(sym); - les deux cas mènent à une contradiction ;
- conclure que
haltn'existe pas.
Distinctions clés
- décidable : un algorithme répond toujours ; indécidable : aucun ne le peut ;
- calculable : un algorithme calcule la fonction ; non calculable : impossible ;
- calculabilité (existe-t-il ?) ≠ complexité (est-il efficace ?).
Machine de Turing & P/NP
- Machine de Turing : modèle théorique du calcul ; une machine universelle
simule
M(e). - (Hors programme)
P ⊆ NP, et la questionP = NP ?reste ouverte.