178 lines
4.8 KiB
Markdown
178 lines
4.8 KiB
Markdown
# Exercices : Calculabilité et Décidabilité
|
|
|
|
---
|
|
|
|
## Exercice 1 : Problèmes décidables ou non ?
|
|
|
|
Pour chaque problème ci-dessous, indiquez s'il est **décidable** ou **indécidable**. Justifiez votre réponse.
|
|
|
|
1. Déterminer si un nombre entier est premier.
|
|
|
|
2. Déterminer si une chaîne de caractères est un palindrome.
|
|
|
|
3. Déterminer si un programme Python quelconque va s'arrêter.
|
|
|
|
4. Déterminer si un nombre est divisible par 7.
|
|
|
|
5. Déterminer si deux programmes Python produisent toujours le même résultat pour toutes les entrées possibles.
|
|
|
|
---
|
|
|
|
## Exercice 2 : Écrire des prédicats
|
|
|
|
Un **prédicat** est une fonction qui renvoie un booléen. Écrivez en Python les prédicats suivants :
|
|
|
|
### 2.1 Prédicat `est_puissance_de_2`
|
|
|
|
```python
|
|
def est_puissance_de_2(n):
|
|
"""
|
|
Renvoie True si n est une puissance de 2, False sinon.
|
|
Exemples : 1, 2, 4, 8, 16, 32... sont des puissances de 2.
|
|
"""
|
|
# À compléter
|
|
pass
|
|
```
|
|
|
|
### 2.2 Prédicat `est_parfait`
|
|
|
|
Un nombre parfait est un entier positif égal à la somme de ses diviseurs propres (diviseurs stricts, c'est-à-dire sans compter le nombre lui-même).
|
|
|
|
Exemple : 6 = 1 + 2 + 3 est parfait.
|
|
|
|
```python
|
|
def est_parfait(n):
|
|
"""
|
|
Renvoie True si n est un nombre parfait, False sinon.
|
|
"""
|
|
# À compléter
|
|
pass
|
|
```
|
|
|
|
### 2.3 Prédicat `contient_doublon`
|
|
|
|
```python
|
|
def contient_doublon(liste):
|
|
"""
|
|
Renvoie True si la liste contient au moins un élément en double.
|
|
"""
|
|
# À compléter
|
|
pass
|
|
```
|
|
|
|
---
|
|
|
|
## Exercice 3 : Thèse de Church-Turing
|
|
|
|
### 3.1 Questions de cours
|
|
|
|
1. Qui est Alonzo Church et quelle est sa contribution à l'informatique théorique ?
|
|
|
|
2. Qu'affirme la thèse de Church-Turing ?
|
|
|
|
3. Pourquoi parle-t-on de "thèse" et non de "théorème" ?
|
|
|
|
### 3.2 Réflexion
|
|
|
|
Si un algorithme fonctionne en Python, peut-il être traduit dans n'importe quel autre langage de programmation ? Justifiez en vous appuyant sur la thèse de Church-Turing.
|
|
|
|
---
|
|
|
|
## Exercice 4 : Le problème de l'arrêt
|
|
|
|
### 4.1 Compréhension
|
|
|
|
Considérez le programme suivant :
|
|
|
|
```python
|
|
def mystere(n):
|
|
while n != 1:
|
|
if n % 2 == 0:
|
|
n = n // 2
|
|
else:
|
|
n = 3 * n + 1
|
|
return n
|
|
```
|
|
|
|
1. Testez ce programme avec les valeurs 6, 11, 27. Que constatez-vous ?
|
|
|
|
2. Ce programme s'arrête-t-il toujours ? (Indice : c'est la conjecture de Syracuse, non résolue à ce jour !)
|
|
|
|
3. En quoi cet exemple illustre-t-il le problème de l'arrêt ?
|
|
|
|
### 4.2 Démonstration par l'absurde
|
|
|
|
Expliquez avec vos propres mots pourquoi le problème de l'arrêt est indécidable. Utilisez le raisonnement par l'absurde vu en cours.
|
|
|
|
---
|
|
|
|
## Exercice 5 : Machine de Turing
|
|
|
|
### 5.1 Addition binaire
|
|
|
|
Utilisez l'algorithme de la machine de Turing (activité TURING.md) pour calculer :
|
|
|
|
1. 11₂ + 1 = ?
|
|
2. 111₂ + 1 = ?
|
|
3. 1111₂ + 1 = ?
|
|
|
|
### 5.2 Réflexion
|
|
|
|
Que remarquez-vous sur le nombre d'étapes nécessaires quand tous les bits sont à 1 ?
|
|
|
|
---
|
|
|
|
## Exercice 6 : QCM de révision
|
|
|
|
### Question 1
|
|
Un prédicat est une fonction qui :
|
|
- [ ] A. Prend un booléen en paramètre
|
|
- [ ] B. Renvoie un booléen
|
|
- [ ] C. Ne s'arrête jamais
|
|
- [ ] D. Est toujours récursive
|
|
|
|
### Question 2
|
|
Le problème de l'arrêt est :
|
|
- [ ] A. Décidable et calculable
|
|
- [ ] B. Indécidable
|
|
- [ ] C. Résolu par Alan Turing en 1936
|
|
- [ ] D. Un problème simple à résoudre
|
|
|
|
### Question 3
|
|
Selon la thèse de Church-Turing :
|
|
- [ ] A. Python est le meilleur langage de programmation
|
|
- [ ] B. Tout ce qui est calculable peut l'être par une machine de Turing
|
|
- [ ] C. Certains langages sont plus puissants que d'autres
|
|
- [ ] D. Les ordinateurs quantiques peuvent tout calculer
|
|
|
|
### Question 4
|
|
Un problème est dit décidable si :
|
|
- [ ] A. On peut toujours trouver une solution
|
|
- [ ] B. Il existe un algorithme qui répond oui ou non en temps fini
|
|
- [ ] C. Il n'a pas de solution
|
|
- [ ] D. Il nécessite un supercalculateur
|
|
|
|
---
|
|
|
|
## Exercice 7 : Pour aller plus loin
|
|
|
|
### Le paradoxe de Russell
|
|
|
|
Bertrand Russell a proposé le paradoxe suivant en 1901 :
|
|
|
|
> « Dans un village, le barbier rase tous ceux qui ne se rasent pas eux-mêmes, et seulement ceux-là. Qui rase le barbier ? »
|
|
|
|
1. Expliquez pourquoi ce paradoxe n'a pas de solution logique.
|
|
|
|
2. En quoi ce paradoxe est-il similaire au problème de l'arrêt ?
|
|
|
|
3. (Bonus) Recherchez le "paradoxe du menteur" et expliquez son lien avec l'indécidabilité.
|
|
|
|
---
|
|
|
|
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>.
|