Bases mathématiques de la progammation récursive. Première partie. Option informatique 2016-2017

publicité
Bases mathématiques de la progammation
récursive. Première partie.
Option informatique 2016-2017
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
• on propose une première structure (plutôt impérative)
permettant une écriture parfois plus légère et lisible,
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
• on propose une première structure (plutôt impérative)
permettant une écriture parfois plus légère et lisible,
• en particulier dans les filtrages : test conditionnel ;
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
• on propose une première structure (plutôt impérative)
permettant une écriture parfois plus légère et lisible,
• en particulier dans les filtrages : test conditionnel ;
• En Caml il s’agit de la structure if condition then
expression1 else expression2 ;
1 # if condition then expression1 else
expression2
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
• on propose une première structure (plutôt impérative)
permettant une écriture parfois plus légère et lisible,
• en particulier dans les filtrages : test conditionnel ;
• En Caml il s’agit de la structure if condition then
expression1 else expression2 ;
1 # if condition then expression1 else
expression2
• C’est elle-même une expression, dont la valeur est
expression1 si la condition est vraie et expression2 sinon ;
Un pas vers la programmation impérative : test
conditionnel en Caml
• Jusqu’à présent programmation purement fonctionnelle ;
• on propose une première structure (plutôt impérative)
permettant une écriture parfois plus légère et lisible,
• en particulier dans les filtrages : test conditionnel ;
• En Caml il s’agit de la structure if condition then
expression1 else expression2 ;
1 # if condition then expression1 else
expression2
• C’est elle-même une expression, dont la valeur est
expression1 si la condition est vraie et expression2 sinon ;
• Pour cause de typage il est indispensable que expression1 et
expression2 soient du même type
Un pas vers la programmation impérative : test
conditionnel en Caml
• Si le else est omis, il est implicitement remplacé par ()
Un pas vers la programmation impérative : test
conditionnel en Caml
• Si le else est omis, il est implicitement remplacé par ()
• Et donc il faut que expression1 soit de type unit ...
Un pas vers la programmation impérative : test
conditionnel en Caml
• Si le else est omis, il est implicitement remplacé par ()
• Et donc il faut que expression1 soit de type unit ...
• pas de elif en Caml
Un pas vers la programmation impérative : test
conditionnel en Caml
• Si le else est omis, il est implicitement remplacé par ()
• Et donc il faut que expression1 soit de type unit ...
• pas de elif en Caml
• Exemple fonction factorielle :
1 # let rec fact n =
2
if n = 0 then 0
3
else n * fact ( n - 1) ;;
4 fact : int -> int = <fun>
Un pas vers la programmation impérative : test
conditionnel en Caml
• Si le else est omis, il est implicitement remplacé par ()
• Et donc il faut que expression1 soit de type unit ...
• pas de elif en Caml
• Exemple fonction factorielle :
1 # let rec fact n =
2
if n = 0 then 0
3
else n * fact ( n - 1) ;;
4 fact : int -> int = <fun>
• Fonction valeur absolue sur les entiers.
1 # let abs x = if x > 0 then x else -x ;;
2 abs : int -> int = <fun>
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
• Soit P un prédicat 1 défini sur N, tel que P(0) est vrai,
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
• Soit P un prédicat 1 défini sur N, tel que P(0) est vrai,
• ainsi que l’implication ∀n ∈ N∗ , P(n − 1) =⇒ P(n).
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
• Soit P un prédicat 1 défini sur N, tel que P(0) est vrai,
• ainsi que l’implication ∀n ∈ N∗ , P(n − 1) =⇒ P(n).
• Alors pour tout entier n ∈ N, P(n) est vrai.
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
• Soit P un prédicat 1 défini sur N, tel que P(0) est vrai,
• ainsi que l’implication ∀n ∈ N∗ , P(n − 1) =⇒ P(n).
• Alors pour tout entier n ∈ N, P(n) est vrai.
• Cette présentation : définition d’un cadre formel plus général
que simple principe de récurrence pour prouver la terminaison
et la correction des fonctions récursives.
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Introduction
• Jusqu’à présent, définition très informelle de la récursivité : est
récursive toute fonction qui intervient dans sa définition.
• Comme pour toute fonction, se posent trois questions :
• Terminaison
• Correction
• Complexité.
• Rapport évident avec le principe de récurrence :
• Soit P un prédicat 1 défini sur N, tel que P(0) est vrai,
• ainsi que l’implication ∀n ∈ N∗ , P(n − 1) =⇒ P(n).
• Alors pour tout entier n ∈ N, P(n) est vrai.
• Cette présentation : définition d’un cadre formel plus général
que simple principe de récurrence pour prouver la terminaison
et la correction des fonctions récursives.
• Commençons par comprendre ce qui est à l’origine de la
terminaison d’une fonction récursive, puis nous passerons à
quelques rappels mathématiques avant d’énoncer le théorème
qui nous sera très utile...
1. Un prédicat est une fonction à valeurs booléennes, true ou false
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
• Quel est le problème ?
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
• Quel est le problème ?
• Pas de cas de base !
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
• Quel est le problème ?
• Pas de cas de base !
• Soit la fonction suivante
1 # let rec f n =
2
match n with
3
| 0 -> 0
4
| n -> f ( n * n ) ;;
5 f : int -> int = <fun>
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
• Quel est le problème ?
• Pas de cas de base !
• Soit la fonction suivante
1 # let rec f n =
2
match n with
3
| 0 -> 0
4
| n -> f ( n * n ) ;;
5 f : int -> int = <fun>
• Quel est le problème ?
Condition de terminaison d’une fonction récursive
• Soit la fonction suivante
1 # let rec f n = f ( n - 1) ;;
2 f : int -> ’a = <fun>
• Quel est le problème ?
• Pas de cas de base !
• Soit la fonction suivante
1 # let rec f n =
2
match n with
3
| 0 -> 0
4
| n -> f ( n * n ) ;;
5 f : int -> int = <fun>
• Quel est le problème ?
• Si appel avec n > 0, on n’arrivera jamais sur le cas de base !
Condition de terminaison d’une fonction récursive
• Conclusion informelle : il faut donc un (des) cas de base et
une décroissance stricte du paramètre
Condition de terminaison d’une fonction récursive
• Conclusion informelle : il faut donc un (des) cas de base et
une décroissance stricte du paramètre
• Et pour la fonction suivante ?
1 # let rec fortier a b =
2
match a , b with
3
| 0 , _ -> b
4
| _ , 0 -> a
5
| _ , _ when a mod 2 = 0 -> 2 +
fortier ( b + 1) ( a - 3)
6
| _ -> 1 + fortier ( b - 2) ( a + 1)
;;
7 fortier : int -> int -> int = <fun>
Condition de terminaison d’une fonction récursive
• Conclusion informelle : il faut donc un (des) cas de base et
une décroissance stricte du paramètre
• Et pour la fonction suivante ?
1 # let rec fortier a b =
2
match a , b with
3
| 0 , _ -> b
4
| _ , 0 -> a
5
| _ , _ when a mod 2 = 0 -> 2 +
fortier ( b + 1) ( a - 3)
6
| _ -> 1 + fortier ( b - 2) ( a + 1)
;;
7 fortier : int -> int -> int = <fun>
• Se termine-t-elle ? Que fait-elle ?
Condition de terminaison d’une fonction récursive
• Conclusion informelle : il faut donc un (des) cas de base et
une décroissance stricte du paramètre
• Et pour la fonction suivante ?
1 # let rec fortier a b =
2
match a , b with
3
| 0 , _ -> b
4
| _ , 0 -> a
5
| _ , _ when a mod 2 = 0 -> 2 +
fortier ( b + 1) ( a - 3)
6
| _ -> 1 + fortier ( b - 2) ( a + 1)
;;
7 fortier : int -> int -> int = <fun>
• Se termine-t-elle ? Que fait-elle ?
• Réponse plus tard...
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
• Antisymétrique : ∀x , y ∈ E 2 , x Ry et y Rx =⇒ x = z
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
• Antisymétrique : ∀x , y ∈ E 2 , x Ry et y Rx =⇒ x = z
• Transitive : ∀x , y , z ∈ E 3 , x Ry et y Rz =⇒ x Rz
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
• Antisymétrique : ∀x , y ∈ E 2 , x Ry et y Rx =⇒ x = z
• Transitive : ∀x , y , z ∈ E 3 , x Ry et y Rz =⇒ x Rz
• On note plutôt 4 les relations d’ordre. Un ensemble muni
d’un ordre est un ensemble ordonné.
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
• Antisymétrique : ∀x , y ∈ E 2 , x Ry et y Rx =⇒ x = z
• Transitive : ∀x , y , z ∈ E 3 , x Ry et y Rz =⇒ x Rz
• On note plutôt 4 les relations d’ordre. Un ensemble muni
d’un ordre est un ensemble ordonné.
• Si (E , 4) est un ensemble ordonné, A une partie non vide de
E et a ∈ A, on dit que :
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Rappels mathématiques, définitions 2
• Une relation binaire R sur un ensemble E est un ordre s’il elle
est :
• Réflexive :∀x ∈ E , x Rx
• Antisymétrique : ∀x , y ∈ E 2 , x Ry et y Rx =⇒ x = z
• Transitive : ∀x , y , z ∈ E 3 , x Ry et y Rz =⇒ x Rz
• On note plutôt 4 les relations d’ordre. Un ensemble muni
d’un ordre est un ensemble ordonné.
• Si (E , 4) est un ensemble ordonné, A une partie non vide de
E et a ∈ A, on dit que :
• a est un élément minimal de A lorsque pour tout
x ∈ A, x 4 a =⇒ x = a ;
2. Un peu de programmation éloigne des mathématiques. Beaucoup de programmation y ramène. Xavier Leroy, un des fondateurs d’objective Caml
Définitions
• On dit qu’un ensemble ordonné (E , 4) est bien fondé (ou
que 4 est un ordre bien fondé) lorsque toute partie non vide
possède (au moins) un élément minimal
Définitions
• Caractérisation équivalente : un ensemble ordonné (E , 4) est
bien fondé si et seulement s’il n’existe pas de suite infinie
strictement décroissante dans E .
Définitions
• Caractérisation équivalente : un ensemble ordonné (E , 4) est
bien fondé si et seulement s’il n’existe pas de suite infinie
strictement décroissante dans E .
• ou encore : dans un ensemble bien fondé, toute suite infinie
décroissante est stationnaire (constante à partir d’un certain
rang).
Exemples : les ensembles ordonnées suivants sont-ils bien
fondés ?
• (N, 6)
Exemples : les ensembles ordonnées suivants sont-ils bien
fondés ?
• (N, 6)
• (N ∪ {−1}, 6)
Exemples : les ensembles ordonnées suivants sont-ils bien
fondés ?
• (N, 6)
• (N ∪ {−1}, 6)
• (Z, 6)
Exemples : les ensembles ordonnées suivants sont-ils bien
fondés ?
• (N, 6)
• (N ∪ {−1}, 6)
• (Z, 6)
• (N, |) (relation d’ordre a|b ⇐⇒
a divise b)
Définitions
• On définit l’ordre produit sur deux ensembles ordonnés
(E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et seulement si
x1 41 y1 et x2 42 y2 .
Définitions
• On définit l’ordre produit sur deux ensembles ordonnés
(E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et seulement si
x1 41 y1 et x2 42 y2 .
• On montre que l’ordre produit de deux ordres bien fondés est
bien fondé.
Définitions
• On définit l’ordre produit sur deux ensembles ordonnés
(E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et seulement si
x1 41 y1 et x2 42 y2 .
• On montre que l’ordre produit de deux ordres bien fondés est
bien fondé.
• Exemple : N2 muni de l’ordre produit :
(a, b) 4 (a0 , b 0 ) ⇐⇒ a 6 a0 et b 6 b 0 , est un ensemble bien
fondé
Définitions
• On définit l’ordre produit sur deux ensembles ordonnés
(E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et seulement si
x1 41 y1 et x2 42 y2 .
• On montre que l’ordre produit de deux ordres bien fondés est
bien fondé.
• Exemple : N2 muni de l’ordre produit :
(a, b) 4 (a0 , b 0 ) ⇐⇒ a 6 a0 et b 6 b 0 , est un ensemble bien
fondé
• Schéma de l’ensemble des éléments plus petits qu’un élément
donné.
Définitions
• On définit l’ordre lexicographique sur deux ensembles
ordonnés (E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et
seulement si x1 ≺1 y1 ou (x1 = y1 et x2 42 y2 ).
Définitions
• On définit l’ordre lexicographique sur deux ensembles
ordonnés (E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et
seulement si x1 ≺1 y1 ou (x1 = y1 et x2 42 y2 ).
• On montre que l’ordre lexicographique de deux ordres bien
fondés est bien fondé.
Définitions
• On définit l’ordre lexicographique sur deux ensembles
ordonnés (E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et
seulement si x1 ≺1 y1 ou (x1 = y1 et x2 42 y2 ).
• On montre que l’ordre lexicographique de deux ordres bien
fondés est bien fondé.
• Exemple : (a, b) 4 (a0 , b 0 ) ⇐⇒ a < a0 ou (a = a0 et b 6 b 0 ),
N2 est bien fondé.
Définitions
• On définit l’ordre lexicographique sur deux ensembles
ordonnés (E1 , 41 ) et (E2 , 42 ) par (x1 , x2 ) 4 (y1 , y2 ) si et
seulement si x1 ≺1 y1 ou (x1 = y1 et x2 42 y2 ).
• On montre que l’ordre lexicographique de deux ordres bien
fondés est bien fondé.
• Exemple : (a, b) 4 (a0 , b 0 ) ⇐⇒ a < a0 ou (a = a0 et b 6 b 0 ),
N2 est bien fondé.
• Schéma de l’ensemble des éléments plus petits qu’un élément
donné.
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
• le calcul de f (x ) se termine pour tous les éléments x ∈ M ;
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
• le calcul de f (x ) se termine pour tous les éléments x ∈ M ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ).
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
• le calcul de f (x ) se termine pour tous les éléments x ∈ M ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ).
• Alors le calcul de f (x ) se termine pour toute valeur de x ∈ A .
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
• le calcul de f (x ) se termine pour tous les éléments x ∈ M ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ).
• Alors le calcul de f (x ) se termine pour toute valeur de x ∈ A .
• Idée de la preuve.
Théorème de terminaison d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• On fait les hypothèses suivantes :
• le calcul de f (x ) se termine pour tous les éléments x ∈ M ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ).
• Alors le calcul de f (x ) se termine pour toute valeur de x ∈ A .
• Idée de la preuve.
• Si ne terminait pas on pourrait former une suite infinie
(un )n∈N strictement décroissante d’éléments de E .
Théorème de terminaison d’une fonction récursive
• Très souvent A = E = N et ϕ(n) = n
Théorème de terminaison d’une fonction récursive
• Très souvent A = E = N et ϕ(n) = n
• Alors M = {0}. n = 0 sera le cas de base
Théorème de terminaison d’une fonction récursive
• Très souvent A = E = N et ϕ(n) = n
• Alors M = {0}. n = 0 sera le cas de base
• Il suffit que pour le calcul de f (n) la fonction n’utilise que des
appels avec des valeurs m < n
Théorème de terminaison d’une fonction récursive
• Très souvent A = E = N et ϕ(n) = n
• Alors M = {0}. n = 0 sera le cas de base
• Il suffit que pour le calcul de f (n) la fonction n’utilise que des
appels avec des valeurs m < n
• pour que la fonction termine.
Théorème de terminaison d’une fonction récursive
• Très souvent A = E = N et ϕ(n) = n
• Alors M = {0}. n = 0 sera le cas de base
• Il suffit que pour le calcul de f (n) la fonction n’utilise que des
appels avec des valeurs m < n
• pour que la fonction termine.
• Exemple 1 fonction fact
1 # let rec fact n =
2
match n with
3
| 0 -> 1
4
| _ -> n * fact ( n - 1) ;;
5 fact : int -> int = <fun>
Théorème de terminaison d’une fonction récursive
• Exemple 2 : longueur d’une liste
1 # let rec longueur liste =
2
match liste with
3
| [] -> 0
4
| _ :: queue -> 1 + longueur queue
;;
5 longueur : ’a list -> int = <fun>
Théorème de terminaison d’une fonction récursive
• Exemple 2 : longueur d’une liste
1 # let rec longueur liste =
2
match liste with
3
| [] -> 0
4
| _ :: queue -> 1 + longueur queue
;;
5 longueur : ’a list -> int = <fun>
• A =?, B =?, M =?, ϕ =?
Théorème de terminaison d’une fonction récursive
• Exemple 3 : fonction fortier
1 # let rec fortier a b =
2
match a , b with
3
| 0 , _ -> b
4
| _ , 0 -> a
5
| _ , _ when a mod 2 = 0 -> 2 +
fortier ( b + 1) ( a - 3)
6
| _ -> 1 + fortier ( b - 2) ( a + 1)
;;
7 fortier : int -> int -> int = <fun>
Théorème de terminaison d’une fonction récursive
• Exemple 3 : fonction fortier
1 # let rec fortier a b =
2
match a , b with
3
| 0 , _ -> b
4
| _ , 0 -> a
5
| _ , _ when a mod 2 = 0 -> 2 +
fortier ( b + 1) ( a - 3)
6
| _ -> 1 + fortier ( b - 2) ( a + 1)
;;
7 fortier : int -> int -> int = <fun>
• A =?, B =?, M =?, ϕ =?
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• Soit P(x ) un prédicat faisant intervenir f (x ).
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• Soit P(x ) un prédicat faisant intervenir f (x ).
• On fait les hypothèses suivantes :
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• Soit P(x ) un prédicat faisant intervenir f (x ).
• On fait les hypothèses suivantes :
• ∀x ∈ M, P(x ) est vrai ;
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• Soit P(x ) un prédicat faisant intervenir f (x ).
• On fait les hypothèses suivantes :
• ∀x ∈ M, P(x ) est vrai ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ) et si
P(y1 ) ∧ · · · ∧ P(yk ) =⇒ P(x )
Preuve de la correction d’une fonction récursive
• Soit (E , 4) un ensemble muni d’un ordre bien fondé
• Soit A et B deux ensembles et f : A → B une fonction
récursive
• Soit ϕ : A → E une application.
• On note M = {x ∈ A t.q. ϕ(x ) est minimal dans ϕ(A)}
• Soit P(x ) un prédicat faisant intervenir f (x ).
• On fait les hypothèses suivantes :
• ∀x ∈ M, P(x ) est vrai ;
• ∀x ∈ A , le calcul de f (x ), n’utilise qu’un nombre fini de
calculs f (y1 ), · · · , f (yk ) où ϕ(yi ) ≺ ϕ(x ) et si
P(y1 ) ∧ · · · ∧ P(yk ) =⇒ P(x )
• Alors ∀x ∈ A P(x ) est vrai.
Résumé : méthodologie
• Pour la preuve de la correction, on prendra pour P : « f (x )
calcule bien ce qu’il faut »
Résumé : méthodologie
• Trouver un ordre bien fondé adapté au problème ;
Résumé : méthodologie
• Trouver un ordre bien fondé adapté au problème ;
• Quels sont les cas de base pour lesquels on renvoie
directement le résultat ? Les éléments « minimaux » sont-ils
bien inclus dans les cas de base ?
Résumé : méthodologie
• Trouver un ordre bien fondé adapté au problème ;
• Quels sont les cas de base pour lesquels on renvoie
directement le résultat ? Les éléments « minimaux » sont-ils
bien inclus dans les cas de base ?
• (La partie cruciale). Soit x un élément arbitraire. En
supposant que l’on sache calculer f (y ) pour tous les éléments
y ≺ x , comment en déduire le calcul de f (x ) en n’utilisant
qu’un nombre fini d’éléments strictement inférieurs ?
Résumé : méthodologie
• Trouver un ordre bien fondé adapté au problème ;
• Quels sont les cas de base pour lesquels on renvoie
directement le résultat ? Les éléments « minimaux » sont-ils
bien inclus dans les cas de base ?
• (La partie cruciale). Soit x un élément arbitraire. En
supposant que l’on sache calculer f (y ) pour tous les éléments
y ≺ x , comment en déduire le calcul de f (x ) en n’utilisant
qu’un nombre fini d’éléments strictement inférieurs ?
• La terminaison et la correction de la fonction découlent des
raisonnements précédents.
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
• trois tiges sur lesquelles peuvent être enfilés n disques de
diamètres différents.
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
• trois tiges sur lesquelles peuvent être enfilés n disques de
diamètres différents.
• Au début du jeu, ces disques sont tous enfilés sur la même
tige, du plus grand au plus petit
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
• trois tiges sur lesquelles peuvent être enfilés n disques de
diamètres différents.
• Au début du jeu, ces disques sont tous enfilés sur la même
tige, du plus grand au plus petit
• but du jeu : déplacer tous ces disques sur une autre tige en
respectant les règles suivantes :
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
• trois tiges sur lesquelles peuvent être enfilés n disques de
diamètres différents.
• Au début du jeu, ces disques sont tous enfilés sur la même
tige, du plus grand au plus petit
• but du jeu : déplacer tous ces disques sur une autre tige en
respectant les règles suivantes :
• un seul disque peut être déplacé à la fois ;
Un exemple d’algorithme récursif : les tours de Hanoï
• Puzzle inventé par le mathématicien français Édouard Lucas :
• trois tiges sur lesquelles peuvent être enfilés n disques de
diamètres différents.
• Au début du jeu, ces disques sont tous enfilés sur la même
tige, du plus grand au plus petit
• but du jeu : déplacer tous ces disques sur une autre tige en
respectant les règles suivantes :
• un seul disque peut être déplacé à la fois ;
• on ne peut jamais poser un disque sur un disque de diamètre
inférieur.
Un exemple d’algorithme récursif : les tours de Hanoï
• Proposer un algorithme récursif pour résoudre le problème
Un exemple d’algorithme récursif : les tours de Hanoï
• Proposer un algorithme récursif pour résoudre le problème
• Proposer une représentation de la description des mouvements
à effectuer
Un exemple d’algorithme récursif : les tours de Hanoï
• Proposer un algorithme récursif pour résoudre le problème
• Proposer une représentation de la description des mouvements
à effectuer
• Écrire une fonction Caml résolvant le puzzle
Un exemple d’algorithme récursif : les tours de Hanoï
• Proposer un algorithme récursif pour résoudre le problème
• Proposer une représentation de la description des mouvements
à effectuer
• Écrire une fonction Caml résolvant le puzzle
• Calculer le nombre de mouvements nécessaires
Téléchargement