Files
TermNSI/Calculabilité/TP_Paradoxes.md

290 lines
8.9 KiB
Markdown
Raw Normal View History

# TP : Le Barbier, le Menteur et la Machine — Paradoxes et Indécidabilité
> **Thème** : Comprendre l'indécidabilité à travers les paradoxes logiques
---
## Contexte
En 2026, les intelligences artificielles comme ChatGPT, Claude ou Gemini impressionnent par leurs capacités. Mais peuvent-elles *tout* calculer ? Peuvent-elles répondre à *toutes* les questions ?
Dans ce TP, vous allez découvrir que certaines questions n'ont **pas de réponse calculable**, et ce depuis bien avant l'invention des ordinateurs. Des mathématiciens comme Bertrand Russell, Kurt Gödel et Alan Turing ont prouvé qu'il existe des **limites fondamentales** à ce que les machines peuvent faire.
---
## Partie 1 : Le Paradoxe du Menteur
### L'énoncé
Considérez la phrase suivante :
> « Cette phrase est fausse. »
### Questions
1. Si cette phrase est **vraie**, que peut-on en déduire ?
2. Si cette phrase est **fausse**, que peut-on en déduire ?
3. Pourquoi dit-on que c'est un paradoxe ?
### Variante moderne : le tweet impossible
Imaginez un bot Twitter/X programmé ainsi :
```
SI le tweet dit "Ce tweet est faux" ALORS :
SI le tweet est vrai → marquer comme faux
SI le tweet est faux → marquer comme vrai
```
Que se passe-t-il quand le bot analyse le tweet « Ce tweet est faux » ?
---
## Partie 2 : Le Paradoxe du Barbier
### L'énoncé (Bertrand Russell, 1901)
> Dans un village, il y a un barbier qui rase **tous** les hommes qui ne se rasent pas eux-mêmes, et **seulement** ceux-là.
>
> **Question : Le barbier se rase-t-il lui-même ?**
### Analyse
1. **Hypothèse 1** : Le barbier se rase lui-même.
- Que peut-on en déduire d'après la règle ?
2. **Hypothèse 2** : Le barbier ne se rase pas lui-même.
- Que peut-on en déduire d'après la règle ?
3. Conclusion : pourquoi ce paradoxe n'a-t-il pas de solution ?
### Application en informatique
Imaginez une fonction Python `barbier(personne)` qui renvoie `True` si le barbier rase cette personne :
```python
def barbier(personne):
"""
Renvoie True si le barbier rase cette personne.
Règle : le barbier rase ceux qui ne se rasent pas eux-mêmes.
"""
return not se_rase_soi_meme(personne)
```
Que renvoie `barbier("barbier")` si le barbier est une personne du village ?
---
## Partie 3 : L'Ensemble de tous les ensembles
### Le paradoxe de Russell (version mathématique)
Considérons l'ensemble R défini ainsi :
> R = { tous les ensembles qui ne se contiennent pas eux-mêmes }
**Question** : R se contient-il lui-même ?
### Analyse
1. Si R ∈ R (R se contient), alors par définition de R, R ne devrait pas se contenir. **Contradiction.**
2. Si R ∉ R (R ne se contient pas), alors par définition de R, R devrait se contenir. **Contradiction.**
### Impact historique
Ce paradoxe a provoqué une **crise des fondements des mathématiques** au début du XXe siècle. Les mathématiciens ont dû repenser la notion même d'ensemble pour éviter ces contradictions.
---
## Partie 4 : Du Paradoxe au Problème de l'Arrêt
### Le lien avec l'informatique
Alan Turing a utilisé une structure similaire pour prouver que le **problème de l'arrêt** est indécidable.
### Rappel du problème de l'arrêt
> Existe-t-il un programme `arret(P, x)` qui, pour tout programme P et toute entrée x, répond :
> - `True` si P(x) s'arrête
> - `False` si P(x) boucle indéfiniment ?
### La démonstration de Turing (simplifiée)
**Étape 1** : Supposons qu'un tel programme `arret` existe.
**Étape 2** : Construisons le programme `paradoxe` suivant :
```python
def paradoxe(programme):
if arret(programme, programme):
# Si le programme s'arrête sur lui-même, on boucle
while True:
pass
else:
# Si le programme boucle sur lui-même, on s'arrête
return True
```
**Étape 3** : Que se passe-t-il si on appelle `paradoxe(paradoxe)` ?
Complétez le raisonnement :
- Si `arret(paradoxe, paradoxe)` renvoie `True` → ...
- Si `arret(paradoxe, paradoxe)` renvoie `False` → ...
**Étape 4** : Conclusion
Quelle conclusion peut-on tirer sur l'existence de la fonction `arret` ?
---
## Partie 5 : Simulation d'une Machine de Turing en Python
### Objectif
Implémenter une machine de Turing simplifiée qui effectue l'addition de 1 à un nombre binaire.
### Structure de la machine
```python
class MachineDeTuring:
def __init__(self, ruban_initial):
"""
Initialise la machine avec un ruban.
Le ruban est une liste de caractères ('0', '1', ou ' ' pour vide).
"""
self.ruban = list(ruban_initial)
self.position = 0 # Position de la tête de lecture
self.etat = "chercher_fin" # État initial
def lire(self):
"""Lit le symbole sous la tête de lecture."""
if 0 <= self.position < len(self.ruban):
return self.ruban[self.position]
return ' ' # Case vide
def ecrire(self, symbole):
"""Écrit un symbole sous la tête de lecture."""
# Étendre le ruban si nécessaire
while self.position >= len(self.ruban):
self.ruban.append(' ')
while self.position < 0:
self.ruban.insert(0, ' ')
self.position += 1
self.ruban[self.position] = symbole
def gauche(self):
"""Déplace la tête vers la gauche."""
self.position -= 1
def droite(self):
"""Déplace la tête vers la droite."""
self.position += 1
def afficher(self):
"""Affiche l'état actuel du ruban."""
ruban_str = ''.join(self.ruban)
curseur = ' ' * self.position + 'V'
print(f"État: {self.etat}")
print(curseur)
print(ruban_str)
print()
```
### Exercice : Implémenter l'algorithme d'addition
Complétez la méthode `ajouter_un` qui implémente l'algorithme d'addition de 1 :
```python
def ajouter_un(self):
"""
Ajoute 1 au nombre binaire sur le ruban.
Algorithme :
1. Aller à droite jusqu'à une case vide
2. Revenir à gauche et appliquer la règle d'addition avec retenue
"""
# Étape 1 : Aller à droite jusqu'à une case vide
while self.lire() != ' ':
self.droite()
# Étape 2 : Revenir à gauche et ajouter 1
self.gauche()
# À compléter : implémenter la logique d'addition avec retenue
# Tant qu'on a une retenue à propager...
pass # Remplacez par votre code
```
### Test
```python
# Créer une machine avec le nombre binaire 101 (= 5)
machine = MachineDeTuring("101")
machine.afficher()
# Ajouter 1
machine.ajouter_un()
machine.afficher()
# Résultat attendu : 110 (= 6)
```
---
## Partie 6 : Réflexion finale
### Questions de synthèse
1. **Lien entre les paradoxes** : Quel point commun voyez-vous entre le paradoxe du menteur, le paradoxe du barbier et le problème de l'arrêt ?
2. **Auto-référence** : Qu'est-ce que l'auto-référence ? Pourquoi pose-t-elle problème ?
3. **Limites des machines** : Si le problème de l'arrêt est indécidable, cela signifie-t-il que les ordinateurs sont "stupides" ? Justifiez.
4. **IA et indécidabilité** : Une intelligence artificielle, aussi avancée soit-elle, peut-elle résoudre le problème de l'arrêt ? Pourquoi ?
### Débat : Les limites de l'IA
En 2026, les IA génératives sont partout. Mais elles sont soumises aux mêmes limites fondamentales que n'importe quel programme.
Discutez en groupe :
- Une IA peut-elle savoir si elle va boucler indéfiniment sur une tâche ?
- Une IA peut-elle vérifier qu'elle n'a pas de bugs ?
- Quelles sont les implications pour la sécurité des systèmes autonomes ?
---
## Résumé des notions
| Concept | Description |
|---------|-------------|
| **Paradoxe** | Situation logique contradictoire, sans solution |
| **Auto-référence** | Quand un énoncé parle de lui-même |
| **Problème de l'arrêt** | Peut-on décider si un programme s'arrête ? (Non !) |
| **Indécidabilité** | Existence de problèmes sans algorithme de résolution |
| **Machine de Turing** | Modèle théorique de calcul universel |
---
## Bonus : Le théorème d'incomplétude de Gödel
En 1931, Kurt Gödel a prouvé qu'en mathématiques, il existe des énoncés **vrais mais indémontrables**.
Plus précisément : dans tout système logique assez puissant pour exprimer l'arithmétique, il existe des propositions qui ne peuvent être ni prouvées, ni réfutées.
C'est une autre facette de l'indécidabilité : même les mathématiques ont leurs limites !
Recherchez et expliquez avec vos mots ce que signifie ce théorème.
---
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.