Sunteți pe pagina 1din 6

Preuve du théorème de division euclidienne

Thomas Dedieu

Dans ces notes je rédige complètement la preuve du théorème de division euclidienne, dans
sa version ci-dessous. Il s’agit de vous donner un modèle duquel vous inspirer pour écrire
correctement des preuves. Si le style vous paraît obscur voire incompréhensible, je vous rappelle
qu’en cours nous tâchons de décrypter pour vous cette langue étrange ; si c’est insuffisant, venez
poser des questions.

(A) Théorème. Soient a ∈ Z et b ∈ N∗ . Il existe un unique couple (q, r) ∈ Z × Z tel que :


(
a = qb + r,
(1)
0 6 r 6 b − 1.

Les entiers q et r sont respectivement appelés quotient et reste de la division euclidienne de


a par b. On appelle a le dividende et b le diviseur.
On démontre séparément l’existence et l’unicité d’un couple (q, r) ∈ Z2 solution de (1). On
donne une preuve algorithmique de l’existence, bien qu’il existe une preuve plus simple mais
abstraite de l’existence.

1 – Existence d’une division euclidienne


Dans cette partie, on démontre l’existence d’une division euclidienne. Autrement dit, on dé-
montre l’énoncé suivant.

(1.1) Proposition. Soient a ∈ Z et b ∈ N∗ . Il existe (au moins) un couple (q, r) ∈ Z × Z tel


que : (
a = qb + r,
0 6 r 6 b − 1.

On va donner une preuve constructive, basée sur l’algorithme suivant.

(1.2) Algorithme de division euclidienne.


q := 0 // q est le nombre de paquets de b déjà rassemblés
r := a // r est ce qui reste à être traité
si (a >= 0) alors
tant que (r >= b) faire
r := r - b
q := q + 1
fin tant que
sinon
tant que (r < 0) faire
r := r + b
q := q - 1
fin tant que;
fin si
rendre (q,r)

1
1.1 – Terminaison de l’algorithme de division euclidienne
Ici, on démontre la terminaison de l’algorithme (1.2). Autrement dit, on démontre l’énoncé
suivant.

(1.3) Lemme. Soient a ∈ Z et b ∈ N∗ . En appliquant l’algorithme (1.2), on obtient un couple


(q, r) ∈ Z2 après un nombre fini d’opérations.

Preuve. On distingue les deux cas suivants, pour lesquels les instructions contenues dans l’algo-
rithme sont différentes. Dans les deux cas, on considère la suite (rn )n∈N des valeurs contenues
dans la variable r après n passages dans la boucle tant que, et on démontre qu’après un nombre
fini de passages dans la boucle la condition de passage dans la boucle n’est plus vérifiée.

a) Cas a > 0.
Montrons que la suite (rn )n∈N est strictement décroissante. Soit n ∈ N. Lors d’un passage
dans la boucle tant que (r>=b), la seule opération modifiant la valeur de r est r:=r-b. On a
donc rn+1 = rn − b. Puisque b > 0, ceci implique rn+1 < rn . Ainsi, la suite (rn )n∈N est bien
strictement décroissante.
Montrons que la suite (rn )n∈N est une suite de nombre entiers. On procède par récurrence
sur n ∈ N. Puisque la variable r est initialisée par l’instruction r:=a, on a r0 = a qui est
un entier par hypothèse. Soit n ∈ N, et supposons que rn ∈ Z. On a établi plus haut que
rn+1 = rn − b. Puisque b ∈ Z et rn ∈ Z, on déduit de cette relation que rn+1 ∈ Z. Ainsi, par
récurrence, rn ∈ Z pour tout n ∈ N comme annoncé.
Puisque toute suite strictement décroissante d’entiers tend vers −∞ (Théorème (1.5)), il ex-
iste un entier n0 ∈ N tel que rn0 < b. Ceci implique qu’on peut passer au plus n0 fois dans la
boucle tant que (r>=b). Or une fois sorti de cette boucle, l’algorithme rend un couple (q, r)
et s’arrête. Ceci termine la preuve du lemme dans ce cas.

b) Cas a < 0.
Montrons que la suite (rn )n∈N est strictement croissante. Soit n ∈ N. Lors d’un passage
dans la boucle tant que (r<0), la seule opération modifiant la valeur de r est r:=r+b. On a
donc rn+1 = rn + b. Puisque b > 0, ceci implique rn+1 > rn . Ainsi, la suite (rn )n∈N est bien
strictement croissante.
Montrons que la suite (rn )n∈N est une suite de nombre entiers. On procède par récurrence
sur n ∈ N. Puisque la variable r est initialisée par l’instruction r:=a, on a r0 = a qui est
un entier par hypothèse. Soit n ∈ N, et supposons que rn ∈ Z. On a établi plus haut que
rn+1 = rn + b. Puisque b ∈ Z et rn ∈ Z, on déduit de cette relation que rn+1 ∈ Z. Ainsi, par
récurrence, rn ∈ Z pour tout n ∈ N comme annoncé.
Puisque toute suite strictement croissante d’entiers tend vers +∞ (Théorème (1.5)), il existe
un entier n0 ∈ N tel que rn0 > 0. Ceci implique qu’on peut passer au plus n0 fois dans la
boucle tant que (r<0). Or une fois sorti de cette boucle, l’algorithme rend un couple (q, r) et
s’arrête. Ceci termine la preuve du lemme dans ce cas.

Puisque les cas a) et b) sont les deux seuls cas possible, la terminaison de l’algorithme est
maintenant démontrée. 2

(1.3.1) Remarque. Le lecteur attentif aura remarqué que je n’ai pas démontré dans la preuve
ci-dessus que le q rendu est un entier. On peut le démontrer par récurrence en considérant la
suite (qn ) des valeurs successives prises par la variable q, et en utilisant le fait que qn+1 = qn + 1
dans le cas a) et qn+1 = qn − 1 dans le cas b) ; dans les deux cas, on a q0 = 0 ∈ Z. Je vous
invite à le faire en exercice.

2
1.2 – Correction de l’algorithme de division euclidienne
Ici, on démontre la correction de l’algorithme (1.2). Autrement dit, on démontre l’énoncé
suivant.

(1.4) Lemme. Soient a ∈ Z et b ∈ N∗ . Le couple (q, r) ∈ Z2 obtenu en appliquant l’algorithme (1.2)


(ce couple existe d’après le Lemme (1.3)) vérifie les conditions
(
a = qb + r,
0 6 r 6 b − 1.

On rappelle que puisque r et b sont entiers, les conditions r 6 b−1 et r < b sont équivalentes.
À nouveau, il faut distinguer les deux cas suivants.

Preuve dans le cas a > 0.


Dans ce cas, la preuve se fonde sur l’invariant de boucle :

(1.4.1) a = bq + r et r > 0.

Nous allons ainsi démontrer par récurrence sur le nombre de passages dans la boucle tant que
(r>=b) que pour tout état e du système consécutif à un passage dans la boucle, on a

a = bq(e) + r(e) et r(e) > 0.

(Rappel : a et b sont deux nombres entiers relatifs, et q et r sont des variables, c’est-à-dire des
fonctions de l’état du système).
Soit e0 l’état initial du système. Puisque q et r sont initialisées par les instructions q:=0 et
r:=a, on a q(e0 ) = 0 et r(e0 ) = a. On a donc bien

bq(e0 ) + r(e0 ) = b × 0 + a = a et r(e0 ) = a > 0.

Considérons à présent deux états du système e0 et e00 respectivement avant et après un


même passage dans la boucle tant que (r>=b), et supposons que (1.4.1) soit vrai en l’état e0 ,
autrement dit que
a = bq(e0 ) + r(e0 ) et r(e0 ) > 0.
Nous allons montrer qu’alors (1.4.1) est vrai en l’état e00 . Puisque lors du passage dans la boucle
les variables q et r sont modifiées seulement par les instructions r:=r-b et q:=q+1, on a

q(e00 ) = q(e0 ) + 1 et r(e00 ) = r(e0 ) − b.

On a donc tout d’abord

bq(e00 ) + r(e00 ) = b(q(e0 ) + 1) + r(e0 ) − b


= bq(e0 ) + r(e0 ) + b − b
= bq(e0 ) + r(e0 ),

et cette dernière quantité vaut a par hypothèse de récurrence. D’autre part, on sait que r(e0 ) > b,
car sinon on ne passe pas dans la boucle tant que (r>=b). On en déduit que

r(e00 ) = r(e0 ) − b > b − b = 0.

Ainsi, (1.4.1) est bien vraie en l’état e00 .

3
Nous avons à présent démontré par récurrence que les conditions (1.4.1) sont vraies après
chaque passage dans la boucle. Soit efin l’état final du système. Puisque après efin on ne passe
plus dans la boucle tant que (r>=b), on a nécessairement r(efin ) < b. D’autre part, puisque
(1.4.1) est vrai en efin , on a a = bq(efin ) + r(efin ) et r(efin ) > 0. On a donc bien toutes les
conditions requises (
a = q(efin )b + r(efin ),
0 6 r(efin ) 6 b − 1,
et le lemme est démontré dans le cas a > 0. 2

Preuve dans le cas a < 0.


La preuve dans ce cas est parfaitement semblable à celle du cas b), mais je l’écris pour que
personne ne se sente arnaqué. Dans ce cas, la preuve se fonde sur l’invariant de boucle :

(1.4.2) a = bq + r et r < b.

Nous allons ainsi démontrer par récurrence sur le nombre de passages dans la boucle tant que
(r<0) que pour tout état e du système consécutif à un passage dans la boucle, on a

a = bq(e) + r(e) et r(e) < b.

Soit e0 l’état initial du système. Puisque q et r sont initialisées par les instructions q:=0 et
r:=a, on a q(e0 ) = 0 et r(e0 ) = a. Puisque a < 0 et b > 0, on a bien

bq(e0 ) + r(e0 ) = b × 0 + a = a et r(e0 ) = a < b.

Considérons à présent deux états du système e0 et e00 respectivement avant et après un


même passage dans la boucle tant que (r<0), et supposons que (1.4.2) soit vrai en l’état e0 ,
autrement dit que
a = bq(e0 ) + r(e0 ) et r(e0 ) < b.
Nous allons montrer qu’alors (1.4.2) est vrai en l’état e00 . Puisque lors du passage dans la boucle
les variables q et r sont modifiées seulement par les instructions r:=r+b et q:=q-1, on a

q(e00 ) = q(e0 ) − 1 et r(e00 ) = r(e0 ) + b.

On a donc tout d’abord

bq(e00 ) + r(e00 ) = b(q(e0 ) − 1) + r(e0 ) + b


= bq(e0 ) + r(e0 ) − b + b
= bq(e0 ) + r(e0 ),

et cette dernière quantité vaut a par hypothèse de récurrence. D’autre part, on sait que r(e0 ) < 0,
car sinon on ne passe pas dans la boucle tant que (r<0). On en déduit que

r(e00 ) = r(e0 ) + b < b.

Ainsi, (1.4.2) est bien vraie en l’état e00 .


Nous avons à présent démontré par récurrence que les conditions (1.4.2) sont vraies après
chaque passage dans la boucle. Soit efin l’état final du système. Puisque après efin on ne passe
plus dans la boucle tant que (r<0), on a nécessairement r(efin ) > 0. D’autre part, puisque

4
(1.4.2) est vrai en efin , on a a = bq(efin ) + r(efin ) et r(efin ) < b. On a donc bien toutes les
conditions requises (
a = q(efin )b + r(efin ),
0 6 r(efin ) 6 b − 1,
et le lemme est démontré dans le cas b) également. 2

1.3 – Preuve de l’existence d’une division euclidienne


Preuve de la Proposition (1.1). Soient a ∈ Z et b ∈ N∗ . En appliquant l’algorithme (1.2) à a
et b, on obtient d’après les Lemmes (1.3) et (1.4) un couple (q, r) d’entiers relatifs tel que
(
a = qb + r,
0 6 r 6 b − 1.

Il n’y a rien d’autre à démontrer. 2

1.4 – Résultats admis et utilisés dans la preuve


(1.5) Théorème. Soit (un )n∈N une suite d’entiers strictement décroissante, et A un nombre
réel. Il existe n0 ∈ N tel que pour tout entier n > n0 , on a

un < A.

Soit (un )n∈N une suite d’entiers strictement croissante, et A un nombre réel. Il existe n0 ∈ N
tel que pour tout entier n > n0 , on a
un > A.

On retiendra que « toute suite strictement croissante d’entiers tend vers +∞ » et « toute
suite strictement décroissante d’entiers tend vers −∞ ».

2 – Unicité de la division euclidienne


Dans cette partie, on démontre l’unicité de la division euclidienne. Autrement dit, on démontre
l’énoncé suivant.

(2.1) Proposition. Soient a ∈ Z et b ∈ N∗ . Il existe au plus un couple (q, r) ∈ Z × Z tel que :


(
a = qb + r,
(2.1.1)
0 6 r 6 b − 1.

Preuve. Considérons deux couples (q 0 , r0 ), (q 00 , r00 ) ∈ Z2 tous les deux solutions de (2.1.1). On
va démontrer que
(q 0 , r0 ) = (q 00 , r00 ).

5
On a

r0 − r00 = (a − q 0 b) − (a − q 00 b)
= (q 00 − q 0 )b

donc r0 − r00 est un multiple de b. D’autre part, on a

0 6 r0 6b−1
et − (b − 1) 6 −r00 6 0,

donc, en additionnant ces deux doubles inégalités,

−(b − 1) 6 r0 − r00 6 b − 1.

Or le seul entier multiple de b compris entre −(b − 1) et b − 1 est 0, donc r0 − r00 = 0, autrement
dit r0 = r00 . D’autre part, on a vu que

(q 00 − q 0 )b = r0 − r00 ,

donc r0 − r00 = 0 implique q 00 − q 0 = 0, autrement dit q 00 = q 0 . On a donc démontré que r0 = r00


et q 0 = q 00 comme il fallait. 2

S-ar putea să vă placă și