Nombre réels 2 : les réels comme corps ordonné
Ordre total strict <
Theorem Rlt_irrefl : ∀ (x : R), ~(x < x).
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Une relation d'ordre strict est par définition transitive :
Noter qu'en général, coq ne peut pas deviner avec quel r2
(valeur "du milieu") appliquer la transitivité, alors que pour le r1 et le
r3 (valeurs "au bord"), il sait souvent le faire.
Donc, le plus souvent, pour prouver une inégalité par transitivité, ça donne
apply (Rlt_trans _ bidule).
avec bidule à remplacer.
Voici une petite application (à but purement pédagogique) :
Exercice : Prouver le théorème suivant.
Theorem exercice_trans :
∀ x y z, x < y → y < z → z < x → False.
Proof.
(* Indication : pour prouver False, il suffit de prouver x < x *)
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
∀ x y z, x < y → y < z → z < x → False.
Proof.
(* Indication : pour prouver False, il suffit de prouver x < x *)
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
On pourrait munir R d'une infinité de relations d'ordre strict. Mais ce qui
rend vraiment l'ordre usuel unique est qu'il est compatible avec
l'addition et la multiplication par un nombre strictement positif.
On suppose maintenant acquis (Brique 13) que la construction des réels
fournit la compatibilité avec l'addition à gauche :
Theorem Rplus_lt_compat_r : ∀ r r1 r2, r1 < r2 → r1 + r < r2 + r.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rplus_lt_reg_l : ∀ r r1 r2 : R, r + r1 < r + r2 → r1 < r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Ropp_lt_contravar : ∀ r1 r2 : R, r2 < r1 → - r1 < - r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Ensuite, passons à la compatibilité avec la multiplication par un réel
positif.
Theorem Rmult_lt_compat_r :
∀ r r1 r2, 0 < r → r1 < r2 → r1 × r < r2 × r.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
∀ r r1 r2, 0 < r → r1 < r2 → r1 × r < r2 × r.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Certaines propriétés font intervenir > mais y > x est la même chose que
x < y.
Print Rgt. (* gt pour "greater than", supérieur à *)
Pour s'en convaincre, voir l'exemble suivant :
Theorem Rgt_lt : ∀ r1 r2, r1 > r2 → r2 < r1.
Proof.
intros r1 r2 H.
(* En fait, le type de H est _convertible_ avec celui du but, il n'y a
même pas besoin d'unfold
(mais rien ne vous interdit d'unfold si vous voulez). *)
exact H.
Qed.
Proof.
intros r1 r2 H.
(* En fait, le type de H est _convertible_ avec celui du but, il n'y a
même pas besoin d'unfold
(mais rien ne vous interdit d'unfold si vous voulez). *)
exact H.
Qed.
Theorem Rmult_gt_0_compat :
∀ r1 r2 : R, r1 > 0 → r2 > 0 → r1 × r2 > 0.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
∀ r1 r2 : R, r1 > 0 → r2 > 0 → r1 × r2 > 0.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
On peut multiplier des inégalités entres elles, sous conditions de
positivité.
Exercice : Prouver le théorème suivant.
Theorem Rmult_gt_0_lt_compat : ∀ r1 r2 r3 r4,
r3 > 0 → r2 > 0 → r1 < r2 → r3 < r4 → r1 × r3 < r2 × r4.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
r3 > 0 → r2 > 0 → r1 < r2 → r3 < r4 → r1 × r3 < r2 × r4.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
La dernière propriété que l'on admet sur l'ordre < est
que c'est un ordre total (brique 15) : pour deux réels
x et y, on a
soit x < y
soit x = y
soit y < x.
Print Rle. (* le pour "less or equal to" *)
Quelques exercices rapides : penser à unfold Rle.
Exercice : Prouver le théorème suivant.
L'ordre non strict est (comme tous les ordres non stricts) réflexif :
Theorem Rle_refl : ∀ r, r ≤ r.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rlt_or_le : ∀ r1 r2 : R, r1 < r2 ∨ r2 ≤ r1.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rlt_le : ∀ r1 r2, r1 < r2 → r1 ≤ r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
L'ordre ≤ est aussi (comme tous les ordres non stricts) antisymétrique :
Exercice : Prouver le théorème suivant.
Theorem Rle_antisym : ∀ r1 r2 : R, r1 ≤ r2 → r2 ≤ r1 → r1 = r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rle_trans : ∀ r1 r2 r3, r1 ≤ r2 → r2 ≤ r3 → r1 ≤ r3.
Proof.
intros r1 r2 r3 [H1 | H1].
- intros [H2 | H2].
+ left; apply (Rlt_trans _ r2).
× exact H1.
× exact H2.
+ rewrite <-H2. left. exact H1.
- intros H2. rewrite H1. exact H2.
Qed.
Proof.
intros r1 r2 r3 [H1 | H1].
- intros [H2 | H2].
+ left; apply (Rlt_trans _ r2).
× exact H1.
× exact H2.
+ rewrite <-H2. left. exact H1.
- intros H2. rewrite H1. exact H2.
Qed.
Theorem Rle_lt_trans : ∀ r1 r2 r3 : R, r1 ≤ r2 → r2 < r3 → r1 < r3.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Tous les carrés sont positifs
Print Rsqr. (* Nom de la fonction *)
Un petit exemple en fait bien utile :
On a besoin d'un certain nombre de résultats intermédiaires.
Exercice : Prouver le théorème suivant.
Theorem Ropp_involutive : ∀ r : R, - - r = r.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Ropp_mult_distr_r : ∀ r1 r2 : R, - (r1 × r2) = r1 × - r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rmult_opp_opp : ∀ r1 r2 : R, - r1 × - r2 = r1 × r2.
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Theorem Rle_0_sqr: ∀ r : R, 0 ≤ r².
Proof.
(* Indice : unfold Rsqr et raisonner par cas sur l'ordre entre 0 et r. *)
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Proof.
(* Indice : unfold Rsqr et raisonner par cas sur l'ordre entre 0 et r. *)
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Comme jolie et importante application : 1 est plus grand que 0 :D C'est l'occasion d'introduire une nouvelle tactique et un petit théorème
utile. Le théorème eq_sym permet, avec apply de changer le sens d'une égalité.
Theorem eq_sym : ∀ (A : Type) (x y : A), x = y → y = x.
Proof.
intros A x y H. rewrite H. reflexivity.
Qed.
La tactique assert permet (dans cet ordre)
1. d'énoncer une nouvelle hypothèse
2. de la prouver dans le contexte actuel
3. de l'utiliser dans la suite de la preuve.
Elle est typique du raisonnement "vers l'avant" souvent utilisé
en mathématiques.
Voici un exemple idiot.
Theorem exemple_assert : ∀ x y, 3 ≤ x → x ≤ 3 → y = 3 → x = y.
Proof.
intros x y H1 H2 H3.
assert (x = 3) as H. {
(* preuve de l'assertion *)
apply Rle_antisym.
- exact H2.
- exact H1.
}
(* suite de la preuve : on peut utiliser H *)
rewrite H.
apply eq_sym.
exact H3.
Qed.
Theorem Rlt_0_1: 0 < 1.
Proof.
(* Indice : 1 est un carré, et la propriété R1_neq_R0 dit que 1 n'est pas
égal à 0. *)
(* On commence par prouver que 0 ≤ 1. *)
assert (0 ≤ 1) as I.
(* Remplir la preuve ici *)
Admitted. (* Remplacer cette ligne par Qed. *)
Close Scope R_scope.