Théorie de la démonstration TD3: preuves par induction

Théorie de la démonstration
TD3: preuves par induction
28 septembre 2015
Induction sur les entiers (ou récurrence)
Dans sa forme la plus simple, le principe d’induction (appelé aussi principe
de récurrence) permet de prouver des propriétés de la forme
nN.A(n),
c’est-à-dire, que la propriété Aest vraie pour tout entier non-négatif n. Il
s’énonce de la manière suivante (on suppose implicitement que m, n N) :
(A(0) ∧ ∀m.(A(m)A(m+ 1))) ⇒ ∀n.A(n).
Autrement dit, si la propriété Aest vraie pour 0et si, en supposant que A
soit vraie pour un entier générique mon arrive a démontrer qu’elle vraie aussi
pour m+1, alors Aest vraie pour n’importe quel entier. On pourrait l’appeler
« principe du domino » : si le premier domino tombe (A(0)) et si la chute de
chauqe domino implique la chute du suivant (m.A(m)A(m+ 1)), alors
tous les dominos tomberont (n.A(n)).
Concrètement, une preuve par induction sur les entiers comporte deux
étapes :
base : on démontre que Aest vraie pour 0;
induction : on suppose que Aest vraie pour met, en utilisant cette
hypothèse (que l’on appelle hypothèse d’induction ou de récurrence),
on démontre que Aest vraie pour m+ 1.
Exercice 1. Montrer les identités suivantes par induction sur n:
1. (formule de Gauss)
n
X
i=1
i=n(n+ 1)
2
1
2. (série géométrique)
n
X
i=0
qi=qn+1 1
q1
Exercice 2. Considérer la fonction suivante :
int bidon(n : int)
{
if (n == 0) return 1;
return bidon(n-1) * bidon(n-1) * bidon(n-1) * bidon(n-1);
}
On suppose que le type int n’a pas de valeurs négatives. Prouver que :
1. l’execution de la fonction bidon termine toujours ;
2. pour tout n,bidon(n)=1.
Induction générale
Le principe d’induction s’applique en fait à des situations beaucoup plus
générales. Il suffit d’avoir un ordre bien fondé, c’est-à-dire, un ensemble S
muni d’une relation d’ordre tel qu’il n’existe pas de chaine descendante
infinie : a0> a1> a2> a3>· · · . Quelques exemples :
les entiers non-négatifs Navec leur ordre habituel ;
les arbres finis, étiquetés ou pas, avec l’ordre induit par la relation
« être sous-arbre de » ; les preuves du calcul des séquents sont un cas
particulier de cet exemple ;
si (S1,1)et (S2,2)sont deux ordres bien fondés, le produit Carté-
sien S1×S2est aussi bien fondé avec l’ordre lexicographique :
(a, b)(a0, b0)ssi a1a0ou a=a0et b2b0;
si (S0,0)est un ordre bien fondé, l’ensemble des multiensembles finis
sur S0est aussi bien fondé avec l’ordre suivant :
µνssi ν= (µρ) + σ,
σet ρsont tels que, pour tout aσet bρ,a0b. Autrement
dit, µνlorsque le multiset νest obtenu à partir du multiset µen
supprimant un certain nombre d’éléments (y compris zéro) et en les
remplaçant par des éléments qui ne sont pas plus grands.
2
Le principe d’induction générale s’énonce de la manière suivante :
(b.(c.c < b A(c)) A(b)) ⇒ ∀a.A(a).
C’est-à-dire, si, en supposant que Asoit vraie pour tous les éléments cstric-
tement plus petits qu’un élément générique b, on arrive à démontrer que A
est vraie pour blui-même, alors Aest vraie pour tous les éléments.
Concrètement, une preuve par induction sur l’ordre bien fondé (S, )a
la forme suivante : on essaie de démontrer que Aest vraie pour un bS
générique en supposant que Aest vraie pour n’importe quel cstrictement
plus petit que b(cette derniere est appelée hypothèse d’induction). Il y a
maintenant deux situations :
1. best minimal, c’est-à-dire, il n’y pas de c < b ; dans ce cas, l’hypothèse
d’induction est inutile et la démonstration sera directe ;
2. bn’est pas minimal ; on utilise alors l’hypothèse d’induction.
Dans le cas particulier où S=Net est l’ordre habituel des entiers, on
reconnaîtra dans (1) et (2) respectivement le cas de base et d’induction du
principe de récurrence formulé ci-dessus.
Exercice 3. (Fonction d’Ackermann) Considérer la fonction suivante :
int ack(int m, int n)
{
if (m == 0) return n + 1;
else
if (n == 0) return ack(m - 1, 1);
else return ack(m - 1, ack(m, n - 1));
}
Prouver que, pour tout m, n 0, le calcul de la fonction ack termine. (La
fonction d’Ackermann est une drôle de bête : bien qu’elle soit totale, c.-à-d.
son calcul termine toujours, il est impossible de la programmer à l’aide de
seules boucles for, il faut impérativement utiliser quelque part des boucles
while, ou bien faire une récursion imbriquée comme dans la définition ci-
dessus).
Excerice 4. (Admissibilité de l’affaiblissement) Démontrer que la
règle de l’affaiblissement
`Γ
`Γ, A
3
est admissible dans le calcul suivant :
`Γ,¬A, A
`Γ, A, B
`Γ, A B
`Γ, A `Γ, B
`Γ, A B
`Γ
`Γ, ` Γ,>
En d’autres termes, démontrer que, pour toute dérivation πde `Γutilisant
les règles ci-dessus et l’affaiblissement, il existe une preuve de `Γutilisant
uniquement les règles ci-dessus (et pas d’affaiblissement). On fera la preuve
par induction sur π.
Dans certains cas, l’ensemble Xdes objets pour lesquels on veut démon-
trer la propriété An’est pas muni d’un ordre bien fondé, ou l’ordre bien
fondé naturel ne convient pas. Dans cette situation, il est parfois possible de
démontrer que tout élément de Xjouit de la propriété Aen définissant une
fonction p:XSSest bien fondé. L’élément p(x)est appelé poids,
ou mesure de x. On démontre alors la propriété suivante, qui implique en
particulier x.A(x):
a.x.(p(x) = aA(x))
Cette formule étant de la forme a.B(a), on peut la démontrer par induction.
Exercice 5.
1. Écrire la formule B(a)dont il est question ci-dessus.
2. Pourquoi est-ce que a.x.(f(x) = aA(x)) implique x.A(x)?
Exercice 6. Considérer la suivante modification de la fonction bidon défi-
nie à l’exo 2 :
int bidon(n : bidon)
{
if (n <= 0) return 1;
else return bidon(n - 7) * bidon(n - 42) * bidon(n - 2);
}
Démontrer que bidon(n)=1pour tout n:int, où int le vrai type des
entiers en C, c.-à-d. npeut prendre des valeurs négatives.
4
Exercice 7. Considérer la fonction suivante :
int zarbi(int n)
{
if (n > 100) return n - 10;
else return f(f(n + 1) + 10);
}
Comme dans l’exo précédent, int est le vrai type des entiers en C, c.-à-d. n
peut prendre des valeurs négatives. Montrer que, pour tout n,zarbi(n)91.
5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !