diff options
Diffstat (limited to 'theories/Reals/Rtopology.v')
-rw-r--r-- | theories/Reals/Rtopology.v | 3175 |
1 files changed, 1611 insertions, 1564 deletions
diff --git a/theories/Reals/Rtopology.v b/theories/Reals/Rtopology.v index 84f3b081..aa47d72f 100644 --- a/theories/Reals/Rtopology.v +++ b/theories/Reals/Rtopology.v @@ -5,8 +5,8 @@ (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (************************************************************************) - -(*i $Id: Rtopology.v 5920 2004-07-16 20:01:26Z herbelin $ i*) + +(*i $Id: Rtopology.v 9245 2006-10-17 12:53:34Z notin $ i*) Require Import Rbase. Require Import Rfunctions. @@ -15,10 +15,13 @@ Require Import RList. Require Import Classical_Prop. Require Import Classical_Pred_Type. Open Local Scope R_scope. + +(** * General definitions and propositions *) + Definition included (D1 D2:R -> Prop) : Prop := forall x:R, D1 x -> D2 x. Definition disc (x:R) (delta:posreal) (y:R) : Prop := Rabs (y - x) < delta. Definition neighbourhood (V:R -> Prop) (x:R) : Prop := - exists delta : posreal, included (disc x delta) V. + exists delta : posreal, included (disc x delta) V. Definition open_set (D:R -> Prop) : Prop := forall x:R, D x -> neighbourhood D x. Definition complementary (D:R -> Prop) (c:R) : Prop := ~ D c. @@ -28,15 +31,17 @@ Definition union_domain (D1 D2:R -> Prop) (c:R) : Prop := D1 c \/ D2 c. Definition interior (D:R -> Prop) (x:R) : Prop := neighbourhood D x. Lemma interior_P1 : forall D:R -> Prop, included (interior D) D. -intros; unfold included in |- *; unfold interior in |- *; intros; - unfold neighbourhood in H; elim H; intros; unfold included in H0; - apply H0; unfold disc in |- *; unfold Rminus in |- *; - rewrite Rplus_opp_r; rewrite Rabs_R0; apply (cond_pos x0). +Proof. + intros; unfold included in |- *; unfold interior in |- *; intros; + unfold neighbourhood in H; elim H; intros; unfold included in H0; + apply H0; unfold disc in |- *; unfold Rminus in |- *; + rewrite Rplus_opp_r; rewrite Rabs_R0; apply (cond_pos x0). Qed. Lemma interior_P2 : forall D:R -> Prop, open_set D -> included D (interior D). -intros; unfold open_set in H; unfold included in |- *; intros; - assert (H1 := H _ H0); unfold interior in |- *; apply H1. +Proof. + intros; unfold open_set in H; unfold included in |- *; intros; + assert (H1 := H _ H0); unfold interior in |- *; apply H1. Qed. Definition point_adherent (D:R -> Prop) (x:R) : Prop := @@ -45,94 +50,100 @@ Definition point_adherent (D:R -> Prop) (x:R) : Prop := Definition adherence (D:R -> Prop) (x:R) : Prop := point_adherent D x. Lemma adherence_P1 : forall D:R -> Prop, included D (adherence D). -intro; unfold included in |- *; intros; unfold adherence in |- *; - unfold point_adherent in |- *; intros; exists x; - unfold intersection_domain in |- *; split. -unfold neighbourhood in H0; elim H0; intros; unfold included in H1; apply H1; - unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply (cond_pos x0). -apply H. +Proof. + intro; unfold included in |- *; intros; unfold adherence in |- *; + unfold point_adherent in |- *; intros; exists x; + unfold intersection_domain in |- *; split. + unfold neighbourhood in H0; elim H0; intros; unfold included in H1; apply H1; + unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply (cond_pos x0). + apply H. Qed. Lemma included_trans : - forall D1 D2 D3:R -> Prop, - included D1 D2 -> included D2 D3 -> included D1 D3. -unfold included in |- *; intros; apply H0; apply H; apply H1. + forall D1 D2 D3:R -> Prop, + included D1 D2 -> included D2 D3 -> included D1 D3. +Proof. + unfold included in |- *; intros; apply H0; apply H; apply H1. Qed. Lemma interior_P3 : forall D:R -> Prop, open_set (interior D). -intro; unfold open_set, interior in |- *; unfold neighbourhood in |- *; - intros; elim H; intros. -exists x0; unfold included in |- *; intros. -set (del := x0 - Rabs (x - x1)). -cut (0 < del). -intro; exists (mkposreal del H2); intros. -cut (included (disc x1 (mkposreal del H2)) (disc x x0)). -intro; assert (H5 := included_trans _ _ _ H4 H0). -apply H5; apply H3. -unfold included in |- *; unfold disc in |- *; intros. -apply Rle_lt_trans with (Rabs (x3 - x1) + Rabs (x1 - x)). -replace (x3 - x) with (x3 - x1 + (x1 - x)); [ apply Rabs_triang | ring ]. -replace (pos x0) with (del + Rabs (x1 - x)). -do 2 rewrite <- (Rplus_comm (Rabs (x1 - x))); apply Rplus_lt_compat_l; - apply H4. -unfold del in |- *; rewrite <- (Rabs_Ropp (x - x1)); rewrite Ropp_minus_distr; - ring. -unfold del in |- *; apply Rplus_lt_reg_r with (Rabs (x - x1)); - rewrite Rplus_0_r; - replace (Rabs (x - x1) + (x0 - Rabs (x - x1))) with (pos x0); - [ idtac | ring ]. -unfold disc in H1; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H1. +Proof. + intro; unfold open_set, interior in |- *; unfold neighbourhood in |- *; + intros; elim H; intros. + exists x0; unfold included in |- *; intros. + set (del := x0 - Rabs (x - x1)). + cut (0 < del). + intro; exists (mkposreal del H2); intros. + cut (included (disc x1 (mkposreal del H2)) (disc x x0)). + intro; assert (H5 := included_trans _ _ _ H4 H0). + apply H5; apply H3. + unfold included in |- *; unfold disc in |- *; intros. + apply Rle_lt_trans with (Rabs (x3 - x1) + Rabs (x1 - x)). + replace (x3 - x) with (x3 - x1 + (x1 - x)); [ apply Rabs_triang | ring ]. + replace (pos x0) with (del + Rabs (x1 - x)). + do 2 rewrite <- (Rplus_comm (Rabs (x1 - x))); apply Rplus_lt_compat_l; + apply H4. + unfold del in |- *; rewrite <- (Rabs_Ropp (x - x1)); rewrite Ropp_minus_distr; + ring. + unfold del in |- *; apply Rplus_lt_reg_r with (Rabs (x - x1)); + rewrite Rplus_0_r; + replace (Rabs (x - x1) + (x0 - Rabs (x - x1))) with (pos x0); + [ idtac | ring ]. + unfold disc in H1; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H1. Qed. Lemma complementary_P1 : - forall D:R -> Prop, - ~ (exists y : R, intersection_domain D (complementary D) y). -intro; red in |- *; intro; elim H; intros; - unfold intersection_domain, complementary in H0; elim H0; - intros; elim H2; assumption. + forall D:R -> Prop, + ~ (exists y : R, intersection_domain D (complementary D) y). +Proof. + intro; red in |- *; intro; elim H; intros; + unfold intersection_domain, complementary in H0; elim H0; + intros; elim H2; assumption. Qed. Lemma adherence_P2 : - forall D:R -> Prop, closed_set D -> included (adherence D) D. -unfold closed_set in |- *; unfold open_set, complementary in |- *; intros; - unfold included, adherence in |- *; intros; assert (H1 := classic (D x)); - elim H1; intro. -assumption. -assert (H3 := H _ H2); assert (H4 := H0 _ H3); elim H4; intros; - unfold intersection_domain in H5; elim H5; intros; - elim H6; assumption. + forall D:R -> Prop, closed_set D -> included (adherence D) D. +Proof. + unfold closed_set in |- *; unfold open_set, complementary in |- *; intros; + unfold included, adherence in |- *; intros; assert (H1 := classic (D x)); + elim H1; intro. + assumption. + assert (H3 := H _ H2); assert (H4 := H0 _ H3); elim H4; intros; + unfold intersection_domain in H5; elim H5; intros; + elim H6; assumption. Qed. Lemma adherence_P3 : forall D:R -> Prop, closed_set (adherence D). -intro; unfold closed_set, adherence in |- *; - unfold open_set, complementary, point_adherent in |- *; - intros; - set - (P := - fun V:R -> Prop => - neighbourhood V x -> exists y : R, intersection_domain V D y); - assert (H0 := not_all_ex_not _ P H); elim H0; intros V0 H1; - unfold P in H1; assert (H2 := imply_to_and _ _ H1); - unfold neighbourhood in |- *; elim H2; intros; unfold neighbourhood in H3; - elim H3; intros; exists x0; unfold included in |- *; - intros; red in |- *; intro. -assert (H8 := H7 V0); - cut (exists delta : posreal, (forall x:R, disc x1 delta x -> V0 x)). -intro; assert (H10 := H8 H9); elim H4; assumption. -cut (0 < x0 - Rabs (x - x1)). -intro; set (del := mkposreal _ H9); exists del; intros; - unfold included in H5; apply H5; unfold disc in |- *; - apply Rle_lt_trans with (Rabs (x2 - x1) + Rabs (x1 - x)). -replace (x2 - x) with (x2 - x1 + (x1 - x)); [ apply Rabs_triang | ring ]. -replace (pos x0) with (del + Rabs (x1 - x)). -do 2 rewrite <- (Rplus_comm (Rabs (x1 - x))); apply Rplus_lt_compat_l; - apply H10. -unfold del in |- *; simpl in |- *; rewrite <- (Rabs_Ropp (x - x1)); - rewrite Ropp_minus_distr; ring. -apply Rplus_lt_reg_r with (Rabs (x - x1)); rewrite Rplus_0_r; - replace (Rabs (x - x1) + (x0 - Rabs (x - x1))) with (pos x0); - [ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H6 | ring ]. +Proof. + intro; unfold closed_set, adherence in |- *; + unfold open_set, complementary, point_adherent in |- *; + intros; + set + (P := + fun V:R -> Prop => + neighbourhood V x -> exists y : R, intersection_domain V D y); + assert (H0 := not_all_ex_not _ P H); elim H0; intros V0 H1; + unfold P in H1; assert (H2 := imply_to_and _ _ H1); + unfold neighbourhood in |- *; elim H2; intros; unfold neighbourhood in H3; + elim H3; intros; exists x0; unfold included in |- *; + intros; red in |- *; intro. + assert (H8 := H7 V0); + cut (exists delta : posreal, (forall x:R, disc x1 delta x -> V0 x)). + intro; assert (H10 := H8 H9); elim H4; assumption. + cut (0 < x0 - Rabs (x - x1)). + intro; set (del := mkposreal _ H9); exists del; intros; + unfold included in H5; apply H5; unfold disc in |- *; + apply Rle_lt_trans with (Rabs (x2 - x1) + Rabs (x1 - x)). + replace (x2 - x) with (x2 - x1 + (x1 - x)); [ apply Rabs_triang | ring ]. + replace (pos x0) with (del + Rabs (x1 - x)). + do 2 rewrite <- (Rplus_comm (Rabs (x1 - x))); apply Rplus_lt_compat_l; + apply H10. + unfold del in |- *; simpl in |- *; rewrite <- (Rabs_Ropp (x - x1)); + rewrite Ropp_minus_distr; ring. + apply Rplus_lt_reg_r with (Rabs (x - x1)); rewrite Rplus_0_r; + replace (Rabs (x - x1) + (x0 - Rabs (x - x1))) with (pos x0); + [ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H6 | ring ]. Qed. Definition eq_Dom (D1 D2:R -> Prop) : Prop := @@ -141,231 +152,243 @@ Definition eq_Dom (D1 D2:R -> Prop) : Prop := Infix "=_D" := eq_Dom (at level 70, no associativity). Lemma open_set_P1 : forall D:R -> Prop, open_set D <-> D =_D interior D. -intro; split. -intro; unfold eq_Dom in |- *; split. -apply interior_P2; assumption. -apply interior_P1. -intro; unfold eq_Dom in H; elim H; clear H; intros; unfold open_set in |- *; - intros; unfold included, interior in H; unfold included in H0; - apply (H _ H1). +Proof. + intro; split. + intro; unfold eq_Dom in |- *; split. + apply interior_P2; assumption. + apply interior_P1. + intro; unfold eq_Dom in H; elim H; clear H; intros; unfold open_set in |- *; + intros; unfold included, interior in H; unfold included in H0; + apply (H _ H1). Qed. Lemma closed_set_P1 : forall D:R -> Prop, closed_set D <-> D =_D adherence D. -intro; split. -intro; unfold eq_Dom in |- *; split. -apply adherence_P1. -apply adherence_P2; assumption. -unfold eq_Dom in |- *; unfold included in |- *; intros; - assert (H0 := adherence_P3 D); unfold closed_set in H0; - unfold closed_set in |- *; unfold open_set in |- *; - unfold open_set in H0; intros; assert (H2 : complementary (adherence D) x). -unfold complementary in |- *; unfold complementary in H1; red in |- *; intro; - elim H; clear H; intros _ H; elim H1; apply (H _ H2). -assert (H3 := H0 _ H2); unfold neighbourhood in |- *; - unfold neighbourhood in H3; elim H3; intros; exists x0; - unfold included in |- *; unfold included in H4; intros; - assert (H6 := H4 _ H5); unfold complementary in H6; - unfold complementary in |- *; red in |- *; intro; - elim H; clear H; intros H _; elim H6; apply (H _ H7). +Proof. + intro; split. + intro; unfold eq_Dom in |- *; split. + apply adherence_P1. + apply adherence_P2; assumption. + unfold eq_Dom in |- *; unfold included in |- *; intros; + assert (H0 := adherence_P3 D); unfold closed_set in H0; + unfold closed_set in |- *; unfold open_set in |- *; + unfold open_set in H0; intros; assert (H2 : complementary (adherence D) x). + unfold complementary in |- *; unfold complementary in H1; red in |- *; intro; + elim H; clear H; intros _ H; elim H1; apply (H _ H2). + assert (H3 := H0 _ H2); unfold neighbourhood in |- *; + unfold neighbourhood in H3; elim H3; intros; exists x0; + unfold included in |- *; unfold included in H4; intros; + assert (H6 := H4 _ H5); unfold complementary in H6; + unfold complementary in |- *; red in |- *; intro; + elim H; clear H; intros H _; elim H6; apply (H _ H7). Qed. Lemma neighbourhood_P1 : - forall (D1 D2:R -> Prop) (x:R), - included D1 D2 -> neighbourhood D1 x -> neighbourhood D2 x. -unfold included, neighbourhood in |- *; intros; elim H0; intros; exists x0; - intros; unfold included in |- *; unfold included in H1; - intros; apply (H _ (H1 _ H2)). + forall (D1 D2:R -> Prop) (x:R), + included D1 D2 -> neighbourhood D1 x -> neighbourhood D2 x. +Proof. + unfold included, neighbourhood in |- *; intros; elim H0; intros; exists x0; + intros; unfold included in |- *; unfold included in H1; + intros; apply (H _ (H1 _ H2)). Qed. Lemma open_set_P2 : - forall D1 D2:R -> Prop, - open_set D1 -> open_set D2 -> open_set (union_domain D1 D2). -unfold open_set in |- *; intros; unfold union_domain in H1; elim H1; intro. -apply neighbourhood_P1 with D1. -unfold included, union_domain in |- *; tauto. -apply H; assumption. -apply neighbourhood_P1 with D2. -unfold included, union_domain in |- *; tauto. -apply H0; assumption. + forall D1 D2:R -> Prop, + open_set D1 -> open_set D2 -> open_set (union_domain D1 D2). +Proof. + unfold open_set in |- *; intros; unfold union_domain in H1; elim H1; intro. + apply neighbourhood_P1 with D1. + unfold included, union_domain in |- *; tauto. + apply H; assumption. + apply neighbourhood_P1 with D2. + unfold included, union_domain in |- *; tauto. + apply H0; assumption. Qed. Lemma open_set_P3 : - forall D1 D2:R -> Prop, - open_set D1 -> open_set D2 -> open_set (intersection_domain D1 D2). -unfold open_set in |- *; intros; unfold intersection_domain in H1; elim H1; - intros. -assert (H4 := H _ H2); assert (H5 := H0 _ H3); - unfold intersection_domain in |- *; unfold neighbourhood in H4, H5; - elim H4; clear H; intros del1 H; elim H5; clear H0; - intros del2 H0; cut (0 < Rmin del1 del2). -intro; set (del := mkposreal _ H6). -exists del; unfold included in |- *; intros; unfold included in H, H0; - unfold disc in H, H0, H7. -split. -apply H; apply Rlt_le_trans with (pos del). -apply H7. -unfold del in |- *; simpl in |- *; apply Rmin_l. -apply H0; apply Rlt_le_trans with (pos del). -apply H7. -unfold del in |- *; simpl in |- *; apply Rmin_r. -unfold Rmin in |- *; case (Rle_dec del1 del2); intro. -apply (cond_pos del1). -apply (cond_pos del2). + forall D1 D2:R -> Prop, + open_set D1 -> open_set D2 -> open_set (intersection_domain D1 D2). +Proof. + unfold open_set in |- *; intros; unfold intersection_domain in H1; elim H1; + intros. + assert (H4 := H _ H2); assert (H5 := H0 _ H3); + unfold intersection_domain in |- *; unfold neighbourhood in H4, H5; + elim H4; clear H; intros del1 H; elim H5; clear H0; + intros del2 H0; cut (0 < Rmin del1 del2). + intro; set (del := mkposreal _ H6). + exists del; unfold included in |- *; intros; unfold included in H, H0; + unfold disc in H, H0, H7. + split. + apply H; apply Rlt_le_trans with (pos del). + apply H7. + unfold del in |- *; simpl in |- *; apply Rmin_l. + apply H0; apply Rlt_le_trans with (pos del). + apply H7. + unfold del in |- *; simpl in |- *; apply Rmin_r. + unfold Rmin in |- *; case (Rle_dec del1 del2); intro. + apply (cond_pos del1). + apply (cond_pos del2). Qed. Lemma open_set_P4 : open_set (fun x:R => False). -unfold open_set in |- *; intros; elim H. +Proof. + unfold open_set in |- *; intros; elim H. Qed. Lemma open_set_P5 : open_set (fun x:R => True). -unfold open_set in |- *; intros; unfold neighbourhood in |- *. -exists (mkposreal 1 Rlt_0_1); unfold included in |- *; intros; trivial. +Proof. + unfold open_set in |- *; intros; unfold neighbourhood in |- *. + exists (mkposreal 1 Rlt_0_1); unfold included in |- *; intros; trivial. Qed. Lemma disc_P1 : forall (x:R) (del:posreal), open_set (disc x del). -intros; assert (H := open_set_P1 (disc x del)). -elim H; intros; apply H1. -unfold eq_Dom in |- *; split. -unfold included, interior, disc in |- *; intros; - cut (0 < del - Rabs (x - x0)). -intro; set (del2 := mkposreal _ H3). -exists del2; unfold included in |- *; intros. -apply Rle_lt_trans with (Rabs (x1 - x0) + Rabs (x0 - x)). -replace (x1 - x) with (x1 - x0 + (x0 - x)); [ apply Rabs_triang | ring ]. -replace (pos del) with (del2 + Rabs (x0 - x)). -do 2 rewrite <- (Rplus_comm (Rabs (x0 - x))); apply Rplus_lt_compat_l. -apply H4. -unfold del2 in |- *; simpl in |- *; rewrite <- (Rabs_Ropp (x - x0)); - rewrite Ropp_minus_distr; ring. -apply Rplus_lt_reg_r with (Rabs (x - x0)); rewrite Rplus_0_r; - replace (Rabs (x - x0) + (del - Rabs (x - x0))) with (pos del); - [ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H2 | ring ]. -apply interior_P1. +Proof. + intros; assert (H := open_set_P1 (disc x del)). + elim H; intros; apply H1. + unfold eq_Dom in |- *; split. + unfold included, interior, disc in |- *; intros; + cut (0 < del - Rabs (x - x0)). + intro; set (del2 := mkposreal _ H3). + exists del2; unfold included in |- *; intros. + apply Rle_lt_trans with (Rabs (x1 - x0) + Rabs (x0 - x)). + replace (x1 - x) with (x1 - x0 + (x0 - x)); [ apply Rabs_triang | ring ]. + replace (pos del) with (del2 + Rabs (x0 - x)). + do 2 rewrite <- (Rplus_comm (Rabs (x0 - x))); apply Rplus_lt_compat_l. + apply H4. + unfold del2 in |- *; simpl in |- *; rewrite <- (Rabs_Ropp (x - x0)); + rewrite Ropp_minus_distr; ring. + apply Rplus_lt_reg_r with (Rabs (x - x0)); rewrite Rplus_0_r; + replace (Rabs (x - x0) + (del - Rabs (x - x0))) with (pos del); + [ rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H2 | ring ]. + apply interior_P1. Qed. Lemma continuity_P1 : - forall (f:R -> R) (x:R), - continuity_pt f x <-> - (forall W:R -> Prop, + forall (f:R -> R) (x:R), + continuity_pt f x <-> + (forall W:R -> Prop, neighbourhood W (f x) -> - exists V : R -> Prop, + exists V : R -> Prop, neighbourhood V x /\ (forall y:R, V y -> W (f y))). -intros; split. -intros; unfold neighbourhood in H0. -elim H0; intros del1 H1. -unfold continuity_pt in H; unfold continue_in in H; unfold limit1_in in H; - unfold limit_in in H; simpl in H; unfold R_dist in H. -assert (H2 := H del1 (cond_pos del1)). -elim H2; intros del2 H3. -elim H3; intros. -exists (disc x (mkposreal del2 H4)). -intros; unfold included in H1; split. -unfold neighbourhood, disc in |- *. -exists (mkposreal del2 H4). -unfold included in |- *; intros; assumption. -intros; apply H1; unfold disc in |- *; case (Req_dec y x); intro. -rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - apply (cond_pos del1). -apply H5; split. -unfold D_x, no_cond in |- *; split. -trivial. -apply (sym_not_eq (A:=R)); apply H7. -unfold disc in H6; apply H6. -intros; unfold continuity_pt in |- *; unfold continue_in in |- *; - unfold limit1_in in |- *; unfold limit_in in |- *; - intros. -assert (H1 := H (disc (f x) (mkposreal eps H0))). -cut (neighbourhood (disc (f x) (mkposreal eps H0)) (f x)). -intro; assert (H3 := H1 H2). -elim H3; intros D H4; elim H4; intros; unfold neighbourhood in H5; elim H5; - intros del1 H7. -exists (pos del1); split. -apply (cond_pos del1). -intros; elim H8; intros; simpl in H10; unfold R_dist in H10; simpl in |- *; - unfold R_dist in |- *; apply (H6 _ (H7 _ H10)). -unfold neighbourhood, disc in |- *; exists (mkposreal eps H0); - unfold included in |- *; intros; assumption. +Proof. + intros; split. + intros; unfold neighbourhood in H0. + elim H0; intros del1 H1. + unfold continuity_pt in H; unfold continue_in in H; unfold limit1_in in H; + unfold limit_in in H; simpl in H; unfold R_dist in H. + assert (H2 := H del1 (cond_pos del1)). + elim H2; intros del2 H3. + elim H3; intros. + exists (disc x (mkposreal del2 H4)). + intros; unfold included in H1; split. + unfold neighbourhood, disc in |- *. + exists (mkposreal del2 H4). + unfold included in |- *; intros; assumption. + intros; apply H1; unfold disc in |- *; case (Req_dec y x); intro. + rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + apply (cond_pos del1). + apply H5; split. + unfold D_x, no_cond in |- *; split. + trivial. + apply (sym_not_eq (A:=R)); apply H7. + unfold disc in H6; apply H6. + intros; unfold continuity_pt in |- *; unfold continue_in in |- *; + unfold limit1_in in |- *; unfold limit_in in |- *; + intros. + assert (H1 := H (disc (f x) (mkposreal eps H0))). + cut (neighbourhood (disc (f x) (mkposreal eps H0)) (f x)). + intro; assert (H3 := H1 H2). + elim H3; intros D H4; elim H4; intros; unfold neighbourhood in H5; elim H5; + intros del1 H7. + exists (pos del1); split. + apply (cond_pos del1). + intros; elim H8; intros; simpl in H10; unfold R_dist in H10; simpl in |- *; + unfold R_dist in |- *; apply (H6 _ (H7 _ H10)). + unfold neighbourhood, disc in |- *; exists (mkposreal eps H0); + unfold included in |- *; intros; assumption. Qed. Definition image_rec (f:R -> R) (D:R -> Prop) (x:R) : Prop := D (f x). (**********) Lemma continuity_P2 : - forall (f:R -> R) (D:R -> Prop), - continuity f -> open_set D -> open_set (image_rec f D). -intros; unfold open_set in H0; unfold open_set in |- *; intros; - assert (H2 := continuity_P1 f x); elim H2; intros H3 _; - assert (H4 := H3 (H x)); unfold neighbourhood, image_rec in |- *; - unfold image_rec in H1; assert (H5 := H4 D (H0 (f x) H1)); - elim H5; intros V0 H6; elim H6; intros; unfold neighbourhood in H7; - elim H7; intros del H9; exists del; unfold included in H9; - unfold included in |- *; intros; apply (H8 _ (H9 _ H10)). + forall (f:R -> R) (D:R -> Prop), + continuity f -> open_set D -> open_set (image_rec f D). +Proof. + intros; unfold open_set in H0; unfold open_set in |- *; intros; + assert (H2 := continuity_P1 f x); elim H2; intros H3 _; + assert (H4 := H3 (H x)); unfold neighbourhood, image_rec in |- *; + unfold image_rec in H1; assert (H5 := H4 D (H0 (f x) H1)); + elim H5; intros V0 H6; elim H6; intros; unfold neighbourhood in H7; + elim H7; intros del H9; exists del; unfold included in H9; + unfold included in |- *; intros; apply (H8 _ (H9 _ H10)). Qed. (**********) Lemma continuity_P3 : - forall f:R -> R, - continuity f <-> - (forall D:R -> Prop, open_set D -> open_set (image_rec f D)). -intros; split. -intros; apply continuity_P2; assumption. -intros; unfold continuity in |- *; unfold continuity_pt in |- *; - unfold continue_in in |- *; unfold limit1_in in |- *; - unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; - intros; cut (open_set (disc (f x) (mkposreal _ H0))). -intro; assert (H2 := H _ H1). -unfold open_set, image_rec in H2; cut (disc (f x) (mkposreal _ H0) (f x)). -intro; assert (H4 := H2 _ H3). -unfold neighbourhood in H4; elim H4; intros del H5. -exists (pos del); split. -apply (cond_pos del). -intros; unfold included in H5; apply H5; elim H6; intros; apply H8. -unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply H0. -apply disc_P1. + forall f:R -> R, + continuity f <-> + (forall D:R -> Prop, open_set D -> open_set (image_rec f D)). +Proof. + intros; split. + intros; apply continuity_P2; assumption. + intros; unfold continuity in |- *; unfold continuity_pt in |- *; + unfold continue_in in |- *; unfold limit1_in in |- *; + unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; + intros; cut (open_set (disc (f x) (mkposreal _ H0))). + intro; assert (H2 := H _ H1). + unfold open_set, image_rec in H2; cut (disc (f x) (mkposreal _ H0) (f x)). + intro; assert (H4 := H2 _ H3). + unfold neighbourhood in H4; elim H4; intros del H5. + exists (pos del); split. + apply (cond_pos del). + intros; unfold included in H5; apply H5; elim H6; intros; apply H8. + unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply H0. + apply disc_P1. Qed. (**********) Theorem Rsepare : - forall x y:R, - x <> y -> + forall x y:R, + x <> y -> exists V : R -> Prop, - (exists W : R -> Prop, + (exists W : R -> Prop, neighbourhood V x /\ neighbourhood W y /\ ~ (exists y : R, intersection_domain V W y)). -intros x y Hsep; set (D := Rabs (x - y)). -cut (0 < D / 2). -intro; exists (disc x (mkposreal _ H)). -exists (disc y (mkposreal _ H)); split. -unfold neighbourhood in |- *; exists (mkposreal _ H); unfold included in |- *; - tauto. -split. -unfold neighbourhood in |- *; exists (mkposreal _ H); unfold included in |- *; - tauto. -red in |- *; intro; elim H0; intros; unfold intersection_domain in H1; - elim H1; intros. -cut (D < D). -intro; elim (Rlt_irrefl _ H4). -change (Rabs (x - y) < D) in |- *; - apply Rle_lt_trans with (Rabs (x - x0) + Rabs (x0 - y)). -replace (x - y) with (x - x0 + (x0 - y)); [ apply Rabs_triang | ring ]. -rewrite (double_var D); apply Rplus_lt_compat. -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H2. -apply H3. -unfold Rdiv in |- *; apply Rmult_lt_0_compat. -unfold D in |- *; apply Rabs_pos_lt; apply (Rminus_eq_contra _ _ Hsep). -apply Rinv_0_lt_compat; prove_sup0. +Proof. + intros x y Hsep; set (D := Rabs (x - y)). + cut (0 < D / 2). + intro; exists (disc x (mkposreal _ H)). + exists (disc y (mkposreal _ H)); split. + unfold neighbourhood in |- *; exists (mkposreal _ H); unfold included in |- *; + tauto. + split. + unfold neighbourhood in |- *; exists (mkposreal _ H); unfold included in |- *; + tauto. + red in |- *; intro; elim H0; intros; unfold intersection_domain in H1; + elim H1; intros. + cut (D < D). + intro; elim (Rlt_irrefl _ H4). + change (Rabs (x - y) < D) in |- *; + apply Rle_lt_trans with (Rabs (x - x0) + Rabs (x0 - y)). + replace (x - y) with (x - x0 + (x0 - y)); [ apply Rabs_triang | ring ]. + rewrite (double_var D); apply Rplus_lt_compat. + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H2. + apply H3. + unfold Rdiv in |- *; apply Rmult_lt_0_compat. + unfold D in |- *; apply Rabs_pos_lt; apply (Rminus_eq_contra _ _ Hsep). + apply Rinv_0_lt_compat; prove_sup0. Qed. Record family : Type := mkfamily {ind : R -> Prop; - f :> R -> R -> Prop; - cond_fam : forall x:R, (exists y : R, f x y) -> ind x}. + f :> R -> R -> Prop; + cond_fam : forall x:R, (exists y : R, f x y) -> ind x}. Definition family_open_set (f:family) : Prop := forall x:R, open_set (f x). Definition domain_finite (D:R -> Prop) : Prop := - exists l : Rlist, (forall x:R, D x <-> In x l). + exists l : Rlist, (forall x:R, D x <-> In x l). Definition family_finite (f:family) : Prop := domain_finite (ind f). @@ -379,897 +402,913 @@ Definition covering_finite (D:R -> Prop) (f:family) : Prop := covering D f /\ family_finite f. Lemma restriction_family : - forall (f:family) (D:R -> Prop) (x:R), - (exists y : R, (fun z1 z2:R => f z1 z2 /\ D z1) x y) -> - intersection_domain (ind f) D x. -intros; elim H; intros; unfold intersection_domain in |- *; elim H0; intros; - split. -apply (cond_fam f0); exists x0; assumption. -assumption. + forall (f:family) (D:R -> Prop) (x:R), + (exists y : R, (fun z1 z2:R => f z1 z2 /\ D z1) x y) -> + intersection_domain (ind f) D x. +Proof. + intros; elim H; intros; unfold intersection_domain in |- *; elim H0; intros; + split. + apply (cond_fam f0); exists x0; assumption. + assumption. Qed. Definition subfamily (f:family) (D:R -> Prop) : family := mkfamily (intersection_domain (ind f) D) (fun x y:R => f x y /\ D x) - (restriction_family f D). + (restriction_family f D). Definition compact (X:R -> Prop) : Prop := forall f:family, covering_open_set X f -> - exists D : R -> Prop, covering_finite X (subfamily f D). + exists D : R -> Prop, covering_finite X (subfamily f D). (**********) Lemma family_P1 : - forall (f:family) (D:R -> Prop), - family_open_set f -> family_open_set (subfamily f D). -unfold family_open_set in |- *; intros; unfold subfamily in |- *; - simpl in |- *; assert (H0 := classic (D x)). -elim H0; intro. -cut (open_set (f0 x) -> open_set (fun y:R => f0 x y /\ D x)). -intro; apply H2; apply H. -unfold open_set in |- *; unfold neighbourhood in |- *; intros; elim H3; - intros; assert (H6 := H2 _ H4); elim H6; intros; exists x1; - unfold included in |- *; intros; split. -apply (H7 _ H8). -assumption. -cut (open_set (fun y:R => False) -> open_set (fun y:R => f0 x y /\ D x)). -intro; apply H2; apply open_set_P4. -unfold open_set in |- *; unfold neighbourhood in |- *; intros; elim H3; - intros; elim H1; assumption. + forall (f:family) (D:R -> Prop), + family_open_set f -> family_open_set (subfamily f D). +Proof. + unfold family_open_set in |- *; intros; unfold subfamily in |- *; + simpl in |- *; assert (H0 := classic (D x)). + elim H0; intro. + cut (open_set (f0 x) -> open_set (fun y:R => f0 x y /\ D x)). + intro; apply H2; apply H. + unfold open_set in |- *; unfold neighbourhood in |- *; intros; elim H3; + intros; assert (H6 := H2 _ H4); elim H6; intros; exists x1; + unfold included in |- *; intros; split. + apply (H7 _ H8). + assumption. + cut (open_set (fun y:R => False) -> open_set (fun y:R => f0 x y /\ D x)). + intro; apply H2; apply open_set_P4. + unfold open_set in |- *; unfold neighbourhood in |- *; intros; elim H3; + intros; elim H1; assumption. Qed. Definition bounded (D:R -> Prop) : Prop := - exists m : R, (exists M : R, (forall x:R, D x -> m <= x <= M)). + exists m : R, (exists M : R, (forall x:R, D x -> m <= x <= M)). Lemma open_set_P6 : - forall D1 D2:R -> Prop, open_set D1 -> D1 =_D D2 -> open_set D2. -unfold open_set in |- *; unfold neighbourhood in |- *; intros. -unfold eq_Dom in H0; elim H0; intros. -assert (H4 := H _ (H3 _ H1)). -elim H4; intros. -exists x0; apply included_trans with D1; assumption. + forall D1 D2:R -> Prop, open_set D1 -> D1 =_D D2 -> open_set D2. +Proof. + unfold open_set in |- *; unfold neighbourhood in |- *; intros. + unfold eq_Dom in H0; elim H0; intros. + assert (H4 := H _ (H3 _ H1)). + elim H4; intros. + exists x0; apply included_trans with D1; assumption. Qed. (**********) Lemma compact_P1 : forall X:R -> Prop, compact X -> bounded X. -intros; unfold compact in H; set (D := fun x:R => True); - set (g := fun x y:R => Rabs y < x); - cut (forall x:R, (exists y : _, g x y) -> True); - [ intro | intro; trivial ]. -set (f0 := mkfamily D g H0); assert (H1 := H f0); - cut (covering_open_set X f0). -intro; assert (H3 := H1 H2); elim H3; intros D' H4; - unfold covering_finite in H4; elim H4; intros; unfold family_finite in H6; - unfold domain_finite in H6; elim H6; intros l H7; - unfold bounded in |- *; set (r := MaxRlist l). -exists (- r); exists r; intros. -unfold covering in H5; assert (H9 := H5 _ H8); elim H9; intros; - unfold subfamily in H10; simpl in H10; elim H10; intros; - assert (H13 := H7 x0); simpl in H13; cut (intersection_domain D D' x0). -elim H13; clear H13; intros. -assert (H16 := H13 H15); unfold g in H11; split. -cut (x0 <= r). -intro; cut (Rabs x < r). -intro; assert (H19 := Rabs_def2 x r H18); elim H19; intros; left; assumption. -apply Rlt_le_trans with x0; assumption. -apply (MaxRlist_P1 l x0 H16). -cut (x0 <= r). -intro; apply Rle_trans with (Rabs x). -apply RRle_abs. -apply Rle_trans with x0. -left; apply H11. -assumption. -apply (MaxRlist_P1 l x0 H16). -unfold intersection_domain, D in |- *; tauto. -unfold covering_open_set in |- *; split. -unfold covering in |- *; intros; simpl in |- *; exists (Rabs x + 1); - unfold g in |- *; pattern (Rabs x) at 1 in |- *; rewrite <- Rplus_0_r; - apply Rplus_lt_compat_l; apply Rlt_0_1. -unfold family_open_set in |- *; intro; case (Rtotal_order 0 x); intro. -apply open_set_P6 with (disc 0 (mkposreal _ H2)). -apply disc_P1. -unfold eq_Dom in |- *; unfold f0 in |- *; simpl in |- *; - unfold g, disc in |- *; split. -unfold included in |- *; intros; unfold Rminus in H3; rewrite Ropp_0 in H3; - rewrite Rplus_0_r in H3; apply H3. -unfold included in |- *; intros; unfold Rminus in |- *; rewrite Ropp_0; - rewrite Rplus_0_r; apply H3. -apply open_set_P6 with (fun x:R => False). -apply open_set_P4. -unfold eq_Dom in |- *; split. -unfold included in |- *; intros; elim H3. -unfold included, f0 in |- *; simpl in |- *; unfold g in |- *; intros; elim H2; - intro; - [ rewrite <- H4 in H3; assert (H5 := Rabs_pos x0); - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)) - | assert (H6 := Rabs_pos x0); assert (H7 := Rlt_trans _ _ _ H3 H4); - elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H6 H7)) ]. +Proof. + intros; unfold compact in H; set (D := fun x:R => True); + set (g := fun x y:R => Rabs y < x); + cut (forall x:R, (exists y : _, g x y) -> True); + [ intro | intro; trivial ]. + set (f0 := mkfamily D g H0); assert (H1 := H f0); + cut (covering_open_set X f0). + intro; assert (H3 := H1 H2); elim H3; intros D' H4; + unfold covering_finite in H4; elim H4; intros; unfold family_finite in H6; + unfold domain_finite in H6; elim H6; intros l H7; + unfold bounded in |- *; set (r := MaxRlist l). + exists (- r); exists r; intros. + unfold covering in H5; assert (H9 := H5 _ H8); elim H9; intros; + unfold subfamily in H10; simpl in H10; elim H10; intros; + assert (H13 := H7 x0); simpl in H13; cut (intersection_domain D D' x0). + elim H13; clear H13; intros. + assert (H16 := H13 H15); unfold g in H11; split. + cut (x0 <= r). + intro; cut (Rabs x < r). + intro; assert (H19 := Rabs_def2 x r H18); elim H19; intros; left; assumption. + apply Rlt_le_trans with x0; assumption. + apply (MaxRlist_P1 l x0 H16). + cut (x0 <= r). + intro; apply Rle_trans with (Rabs x). + apply RRle_abs. + apply Rle_trans with x0. + left; apply H11. + assumption. + apply (MaxRlist_P1 l x0 H16). + unfold intersection_domain, D in |- *; tauto. + unfold covering_open_set in |- *; split. + unfold covering in |- *; intros; simpl in |- *; exists (Rabs x + 1); + unfold g in |- *; pattern (Rabs x) at 1 in |- *; rewrite <- Rplus_0_r; + apply Rplus_lt_compat_l; apply Rlt_0_1. + unfold family_open_set in |- *; intro; case (Rtotal_order 0 x); intro. + apply open_set_P6 with (disc 0 (mkposreal _ H2)). + apply disc_P1. + unfold eq_Dom in |- *; unfold f0 in |- *; simpl in |- *; + unfold g, disc in |- *; split. + unfold included in |- *; intros; unfold Rminus in H3; rewrite Ropp_0 in H3; + rewrite Rplus_0_r in H3; apply H3. + unfold included in |- *; intros; unfold Rminus in |- *; rewrite Ropp_0; + rewrite Rplus_0_r; apply H3. + apply open_set_P6 with (fun x:R => False). + apply open_set_P4. + unfold eq_Dom in |- *; split. + unfold included in |- *; intros; elim H3. + unfold included, f0 in |- *; simpl in |- *; unfold g in |- *; intros; elim H2; + intro; + [ rewrite <- H4 in H3; assert (H5 := Rabs_pos x0); + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H5 H3)) + | assert (H6 := Rabs_pos x0); assert (H7 := Rlt_trans _ _ _ H3 H4); + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H6 H7)) ]. Qed. (**********) Lemma compact_P2 : forall X:R -> Prop, compact X -> closed_set X. -intros; assert (H0 := closed_set_P1 X); elim H0; clear H0; intros _ H0; - apply H0; clear H0. -unfold eq_Dom in |- *; split. -apply adherence_P1. -unfold included in |- *; unfold adherence in |- *; - unfold point_adherent in |- *; intros; unfold compact in H; - assert (H1 := classic (X x)); elim H1; clear H1; intro. -assumption. -cut (forall y:R, X y -> 0 < Rabs (y - x) / 2). -intro; set (D := X); - set (g := fun y z:R => Rabs (y - z) < Rabs (y - x) / 2 /\ D y); - cut (forall x:R, (exists y : _, g x y) -> D x). -intro; set (f0 := mkfamily D g H3); assert (H4 := H f0); - cut (covering_open_set X f0). -intro; assert (H6 := H4 H5); elim H6; clear H6; intros D' H6. -unfold covering_finite in H6; decompose [and] H6; - unfold covering, subfamily in H7; simpl in H7; - unfold family_finite, subfamily in H8; simpl in H8; - unfold domain_finite in H8; elim H8; clear H8; intros l H8; - set (alp := MinRlist (AbsList l x)); cut (0 < alp). -intro; assert (H10 := H0 (disc x (mkposreal _ H9))); - cut (neighbourhood (disc x (mkposreal alp H9)) x). -intro; assert (H12 := H10 H11); elim H12; clear H12; intros y H12; - unfold intersection_domain in H12; elim H12; clear H12; - intros; assert (H14 := H7 _ H13); elim H14; clear H14; - intros y0 H14; elim H14; clear H14; intros; unfold g in H14; - elim H14; clear H14; intros; unfold disc in H12; simpl in H12; - cut (alp <= Rabs (y0 - x) / 2). -intro; assert (H18 := Rlt_le_trans _ _ _ H12 H17); - cut (Rabs (y0 - x) < Rabs (y0 - x)). -intro; elim (Rlt_irrefl _ H19). -apply Rle_lt_trans with (Rabs (y0 - y) + Rabs (y - x)). -replace (y0 - x) with (y0 - y + (y - x)); [ apply Rabs_triang | ring ]. -rewrite (double_var (Rabs (y0 - x))); apply Rplus_lt_compat; assumption. -apply (MinRlist_P1 (AbsList l x) (Rabs (y0 - x) / 2)); apply AbsList_P1; - elim (H8 y0); clear H8; intros; apply H8; unfold intersection_domain in |- *; - split; assumption. -assert (H11 := disc_P1 x (mkposreal alp H9)); unfold open_set in H11; - apply H11. -unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply H9. -unfold alp in |- *; apply MinRlist_P2; intros; - assert (H10 := AbsList_P2 _ _ _ H9); elim H10; clear H10; - intros z H10; elim H10; clear H10; intros; rewrite H11; - apply H2; elim (H8 z); clear H8; intros; assert (H13 := H12 H10); - unfold intersection_domain, D in H13; elim H13; clear H13; - intros; assumption. -unfold covering_open_set in |- *; split. -unfold covering in |- *; intros; exists x0; simpl in |- *; unfold g in |- *; - split. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - unfold Rminus in H2; apply (H2 _ H5). -apply H5. -unfold family_open_set in |- *; intro; simpl in |- *; unfold g in |- *; - elim (classic (D x0)); intro. -apply open_set_P6 with (disc x0 (mkposreal _ (H2 _ H5))). -apply disc_P1. -unfold eq_Dom in |- *; split. -unfold included, disc in |- *; simpl in |- *; intros; split. -rewrite <- (Rabs_Ropp (x0 - x1)); rewrite Ropp_minus_distr; apply H6. -apply H5. -unfold included, disc in |- *; simpl in |- *; intros; elim H6; intros; - rewrite <- (Rabs_Ropp (x1 - x0)); rewrite Ropp_minus_distr; - apply H7. -apply open_set_P6 with (fun z:R => False). -apply open_set_P4. -unfold eq_Dom in |- *; split. -unfold included in |- *; intros; elim H6. -unfold included in |- *; intros; elim H6; intros; elim H5; assumption. -intros; elim H3; intros; unfold g in H4; elim H4; clear H4; intros _ H4; - apply H4. -intros; unfold Rdiv in |- *; apply Rmult_lt_0_compat. -apply Rabs_pos_lt; apply Rminus_eq_contra; red in |- *; intro; - rewrite H3 in H2; elim H1; apply H2. -apply Rinv_0_lt_compat; prove_sup0. +Proof. + intros; assert (H0 := closed_set_P1 X); elim H0; clear H0; intros _ H0; + apply H0; clear H0. + unfold eq_Dom in |- *; split. + apply adherence_P1. + unfold included in |- *; unfold adherence in |- *; + unfold point_adherent in |- *; intros; unfold compact in H; + assert (H1 := classic (X x)); elim H1; clear H1; intro. + assumption. + cut (forall y:R, X y -> 0 < Rabs (y - x) / 2). + intro; set (D := X); + set (g := fun y z:R => Rabs (y - z) < Rabs (y - x) / 2 /\ D y); + cut (forall x:R, (exists y : _, g x y) -> D x). + intro; set (f0 := mkfamily D g H3); assert (H4 := H f0); + cut (covering_open_set X f0). + intro; assert (H6 := H4 H5); elim H6; clear H6; intros D' H6. + unfold covering_finite in H6; decompose [and] H6; + unfold covering, subfamily in H7; simpl in H7; + unfold family_finite, subfamily in H8; simpl in H8; + unfold domain_finite in H8; elim H8; clear H8; intros l H8; + set (alp := MinRlist (AbsList l x)); cut (0 < alp). + intro; assert (H10 := H0 (disc x (mkposreal _ H9))); + cut (neighbourhood (disc x (mkposreal alp H9)) x). + intro; assert (H12 := H10 H11); elim H12; clear H12; intros y H12; + unfold intersection_domain in H12; elim H12; clear H12; + intros; assert (H14 := H7 _ H13); elim H14; clear H14; + intros y0 H14; elim H14; clear H14; intros; unfold g in H14; + elim H14; clear H14; intros; unfold disc in H12; simpl in H12; + cut (alp <= Rabs (y0 - x) / 2). + intro; assert (H18 := Rlt_le_trans _ _ _ H12 H17); + cut (Rabs (y0 - x) < Rabs (y0 - x)). + intro; elim (Rlt_irrefl _ H19). + apply Rle_lt_trans with (Rabs (y0 - y) + Rabs (y - x)). + replace (y0 - x) with (y0 - y + (y - x)); [ apply Rabs_triang | ring ]. + rewrite (double_var (Rabs (y0 - x))); apply Rplus_lt_compat; assumption. + apply (MinRlist_P1 (AbsList l x) (Rabs (y0 - x) / 2)); apply AbsList_P1; + elim (H8 y0); clear H8; intros; apply H8; unfold intersection_domain in |- *; + split; assumption. + assert (H11 := disc_P1 x (mkposreal alp H9)); unfold open_set in H11; + apply H11. + unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply H9. + unfold alp in |- *; apply MinRlist_P2; intros; + assert (H10 := AbsList_P2 _ _ _ H9); elim H10; clear H10; + intros z H10; elim H10; clear H10; intros; rewrite H11; + apply H2; elim (H8 z); clear H8; intros; assert (H13 := H12 H10); + unfold intersection_domain, D in H13; elim H13; clear H13; + intros; assumption. + unfold covering_open_set in |- *; split. + unfold covering in |- *; intros; exists x0; simpl in |- *; unfold g in |- *; + split. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + unfold Rminus in H2; apply (H2 _ H5). + apply H5. + unfold family_open_set in |- *; intro; simpl in |- *; unfold g in |- *; + elim (classic (D x0)); intro. + apply open_set_P6 with (disc x0 (mkposreal _ (H2 _ H5))). + apply disc_P1. + unfold eq_Dom in |- *; split. + unfold included, disc in |- *; simpl in |- *; intros; split. + rewrite <- (Rabs_Ropp (x0 - x1)); rewrite Ropp_minus_distr; apply H6. + apply H5. + unfold included, disc in |- *; simpl in |- *; intros; elim H6; intros; + rewrite <- (Rabs_Ropp (x1 - x0)); rewrite Ropp_minus_distr; + apply H7. + apply open_set_P6 with (fun z:R => False). + apply open_set_P4. + unfold eq_Dom in |- *; split. + unfold included in |- *; intros; elim H6. + unfold included in |- *; intros; elim H6; intros; elim H5; assumption. + intros; elim H3; intros; unfold g in H4; elim H4; clear H4; intros _ H4; + apply H4. + intros; unfold Rdiv in |- *; apply Rmult_lt_0_compat. + apply Rabs_pos_lt; apply Rminus_eq_contra; red in |- *; intro; + rewrite H3 in H2; elim H1; apply H2. + apply Rinv_0_lt_compat; prove_sup0. Qed. (**********) Lemma compact_EMP : compact (fun _:R => False). -unfold compact in |- *; intros; exists (fun x:R => False); - unfold covering_finite in |- *; split. -unfold covering in |- *; intros; elim H0. -unfold family_finite in |- *; unfold domain_finite in |- *; exists nil; intro. -split. -simpl in |- *; unfold intersection_domain in |- *; intros; elim H0. -elim H0; clear H0; intros _ H0; elim H0. -simpl in |- *; intro; elim H0. +Proof. + unfold compact in |- *; intros; exists (fun x:R => False); + unfold covering_finite in |- *; split. + unfold covering in |- *; intros; elim H0. + unfold family_finite in |- *; unfold domain_finite in |- *; exists nil; intro. + split. + simpl in |- *; unfold intersection_domain in |- *; intros; elim H0. + elim H0; clear H0; intros _ H0; elim H0. + simpl in |- *; intro; elim H0. Qed. Lemma compact_eqDom : - forall X1 X2:R -> Prop, compact X1 -> X1 =_D X2 -> compact X2. -unfold compact in |- *; intros; unfold eq_Dom in H0; elim H0; clear H0; - unfold included in |- *; intros; assert (H3 : covering_open_set X1 f0). -unfold covering_open_set in |- *; unfold covering_open_set in H1; elim H1; - clear H1; intros; split. -unfold covering in H1; unfold covering in |- *; intros; - apply (H1 _ (H0 _ H4)). -apply H3. -elim (H _ H3); intros D H4; exists D; unfold covering_finite in |- *; - unfold covering_finite in H4; elim H4; intros; split. -unfold covering in H5; unfold covering in |- *; intros; - apply (H5 _ (H2 _ H7)). -apply H6. + forall X1 X2:R -> Prop, compact X1 -> X1 =_D X2 -> compact X2. +Proof. + unfold compact in |- *; intros; unfold eq_Dom in H0; elim H0; clear H0; + unfold included in |- *; intros; assert (H3 : covering_open_set X1 f0). + unfold covering_open_set in |- *; unfold covering_open_set in H1; elim H1; + clear H1; intros; split. + unfold covering in H1; unfold covering in |- *; intros; + apply (H1 _ (H0 _ H4)). + apply H3. + elim (H _ H3); intros D H4; exists D; unfold covering_finite in |- *; + unfold covering_finite in H4; elim H4; intros; split. + unfold covering in H5; unfold covering in |- *; intros; + apply (H5 _ (H2 _ H7)). + apply H6. Qed. -(* Borel-Lebesgue's lemma *) +(** Borel-Lebesgue's lemma *) Lemma compact_P3 : forall a b:R, compact (fun c:R => a <= c <= b). -intros; case (Rle_dec a b); intro. -unfold compact in |- *; intros; - set - (A := - fun x:R => - a <= x <= b /\ - (exists D : R -> Prop, - covering_finite (fun c:R => a <= c <= x) (subfamily f0 D))); - cut (A a). -intro; cut (bound A). -intro; cut (exists a0 : R, A a0). -intro; assert (H3 := completeness A H1 H2); elim H3; clear H3; intros m H3; - unfold is_lub in H3; cut (a <= m <= b). -intro; unfold covering_open_set in H; elim H; clear H; intros; - unfold covering in H; assert (H6 := H m H4); elim H6; - clear H6; intros y0 H6; unfold family_open_set in H5; - assert (H7 := H5 y0); unfold open_set in H7; assert (H8 := H7 m H6); - unfold neighbourhood in H8; elim H8; clear H8; intros eps H8; - cut (exists x : R, A x /\ m - eps < x <= m). -intro; elim H9; clear H9; intros x H9; elim H9; clear H9; intros; - case (Req_dec m b); intro. -rewrite H11 in H10; rewrite H11 in H8; unfold A in H9; elim H9; clear H9; - intros; elim H12; clear H12; intros Dx H12; - set (Db := fun x:R => Dx x \/ x = y0); exists Db; - unfold covering_finite in |- *; split. -unfold covering in |- *; unfold covering_finite in H12; elim H12; clear H12; - intros; unfold covering in H12; case (Rle_dec x0 x); - intro. -cut (a <= x0 <= x). -intro; assert (H16 := H12 x0 H15); elim H16; clear H16; intros; exists x1; - simpl in H16; simpl in |- *; unfold Db in |- *; elim H16; - clear H16; intros; split; [ apply H16 | left; apply H17 ]. -split. -elim H14; intros; assumption. -assumption. -exists y0; simpl in |- *; split. -apply H8; unfold disc in |- *; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; - rewrite Rabs_right. -apply Rlt_trans with (b - x). -unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_gt_contravar; - auto with real. -elim H10; intros H15 _; apply Rplus_lt_reg_r with (x - eps); - replace (x - eps + (b - x)) with (b - eps); - [ replace (x - eps + eps) with x; [ apply H15 | ring ] | ring ]. -apply Rge_minus; apply Rle_ge; elim H14; intros _ H15; apply H15. -unfold Db in |- *; right; reflexivity. -unfold family_finite in |- *; unfold domain_finite in |- *; - unfold covering_finite in H12; elim H12; clear H12; - intros; unfold family_finite in H13; unfold domain_finite in H13; - elim H13; clear H13; intros l H13; exists (cons y0 l); - intro; split. -intro; simpl in H14; unfold intersection_domain in H14; elim (H13 x0); - clear H13; intros; case (Req_dec x0 y0); intro. -simpl in |- *; left; apply H16. -simpl in |- *; right; apply H13. -simpl in |- *; unfold intersection_domain in |- *; unfold Db in H14; - decompose [and or] H14. -split; assumption. -elim H16; assumption. -intro; simpl in H14; elim H14; intro; simpl in |- *; - unfold intersection_domain in |- *. -split. -apply (cond_fam f0); rewrite H15; exists m; apply H6. -unfold Db in |- *; right; assumption. -simpl in |- *; unfold intersection_domain in |- *; elim (H13 x0). -intros _ H16; assert (H17 := H16 H15); simpl in H17; - unfold intersection_domain in H17; split. -elim H17; intros; assumption. -unfold Db in |- *; left; elim H17; intros; assumption. -set (m' := Rmin (m + eps / 2) b); cut (A m'). -intro; elim H3; intros; unfold is_upper_bound in H13; - assert (H15 := H13 m' H12); cut (m < m'). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H15 H16)). -unfold m' in |- *; unfold Rmin in |- *; case (Rle_dec (m + eps / 2) b); intro. -pattern m at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l; - unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ]. -elim H4; intros. -elim H17; intro. -assumption. -elim H11; assumption. -unfold A in |- *; split. -split. -apply Rle_trans with m. -elim H4; intros; assumption. -unfold m' in |- *; unfold Rmin in |- *; case (Rle_dec (m + eps / 2) b); intro. -pattern m at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left; - unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ]. -elim H4; intros. -elim H13; intro. -assumption. -elim H11; assumption. -unfold m' in |- *; apply Rmin_r. -unfold A in H9; elim H9; clear H9; intros; elim H12; clear H12; intros Dx H12; - set (Db := fun x:R => Dx x \/ x = y0); exists Db; - unfold covering_finite in |- *; split. -unfold covering in |- *; unfold covering_finite in H12; elim H12; clear H12; - intros; unfold covering in H12; case (Rle_dec x0 x); - intro. -cut (a <= x0 <= x). -intro; assert (H16 := H12 x0 H15); elim H16; clear H16; intros; exists x1; - simpl in H16; simpl in |- *; unfold Db in |- *. -elim H16; clear H16; intros; split; [ apply H16 | left; apply H17 ]. -elim H14; intros; split; assumption. -exists y0; simpl in |- *; split. -apply H8; unfold disc in |- *; unfold Rabs in |- *; case (Rcase_abs (x0 - m)); - intro. -rewrite Ropp_minus_distr; apply Rlt_trans with (m - x). -unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_gt_contravar; - auto with real. -apply Rplus_lt_reg_r with (x - eps); - replace (x - eps + (m - x)) with (m - eps). -replace (x - eps + eps) with x. -elim H10; intros; assumption. -ring. -ring. -apply Rle_lt_trans with (m' - m). -unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- m)); - apply Rplus_le_compat_l; elim H14; intros; assumption. -apply Rplus_lt_reg_r with m; replace (m + (m' - m)) with m'. -apply Rle_lt_trans with (m + eps / 2). -unfold m' in |- *; apply Rmin_l. -apply Rplus_lt_compat_l; apply Rmult_lt_reg_l with 2. -prove_sup0. -unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; - rewrite <- Rinv_r_sym. -rewrite Rmult_1_l; pattern (pos eps) at 1 in |- *; rewrite <- Rplus_0_r; - rewrite double; apply Rplus_lt_compat_l; apply (cond_pos eps). -discrR. -ring. -unfold Db in |- *; right; reflexivity. -unfold family_finite in |- *; unfold domain_finite in |- *; - unfold covering_finite in H12; elim H12; clear H12; - intros; unfold family_finite in H13; unfold domain_finite in H13; - elim H13; clear H13; intros l H13; exists (cons y0 l); - intro; split. -intro; simpl in H14; unfold intersection_domain in H14; elim (H13 x0); - clear H13; intros; case (Req_dec x0 y0); intro. -simpl in |- *; left; apply H16. -simpl in |- *; right; apply H13; simpl in |- *; - unfold intersection_domain in |- *; unfold Db in H14; - decompose [and or] H14. -split; assumption. -elim H16; assumption. -intro; simpl in H14; elim H14; intro; simpl in |- *; - unfold intersection_domain in |- *. -split. -apply (cond_fam f0); rewrite H15; exists m; apply H6. -unfold Db in |- *; right; assumption. -elim (H13 x0); intros _ H16. -assert (H17 := H16 H15). -simpl in H17. -unfold intersection_domain in H17. -split. -elim H17; intros; assumption. -unfold Db in |- *; left; elim H17; intros; assumption. -elim (classic (exists x : R, A x /\ m - eps < x <= m)); intro. -assumption. -elim H3; intros; cut (is_upper_bound A (m - eps)). -intro; assert (H13 := H11 _ H12); cut (m - eps < m). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H13 H14)). -pattern m at 2 in |- *; rewrite <- Rplus_0_r; unfold Rminus in |- *; - apply Rplus_lt_compat_l; apply Ropp_lt_cancel; rewrite Ropp_involutive; - rewrite Ropp_0; apply (cond_pos eps). -set (P := fun n:R => A n /\ m - eps < n <= m); - assert (H12 := not_ex_all_not _ P H9); unfold P in H12; - unfold is_upper_bound in |- *; intros; - assert (H14 := not_and_or _ _ (H12 x)); elim H14; - intro. -elim H15; apply H13. -elim (not_and_or _ _ H15); intro. -case (Rle_dec x (m - eps)); intro. -assumption. -elim H16; auto with real. -unfold is_upper_bound in H10; assert (H17 := H10 x H13); elim H16; apply H17. -elim H3; clear H3; intros. -unfold is_upper_bound in H3. -split. -apply (H3 _ H0). -apply (H4 b); unfold is_upper_bound in |- *; intros; unfold A in H5; elim H5; - clear H5; intros H5 _; elim H5; clear H5; intros _ H5; - apply H5. -exists a; apply H0. -unfold bound in |- *; exists b; unfold is_upper_bound in |- *; intros; - unfold A in H1; elim H1; clear H1; intros H1 _; elim H1; - clear H1; intros _ H1; apply H1. -unfold A in |- *; split. -split; [ right; reflexivity | apply r ]. -unfold covering_open_set in H; elim H; clear H; intros; unfold covering in H; - cut (a <= a <= b). -intro; elim (H _ H1); intros y0 H2; set (D' := fun x:R => x = y0); exists D'; - unfold covering_finite in |- *; split. -unfold covering in |- *; simpl in |- *; intros; cut (x = a). -intro; exists y0; split. -rewrite H4; apply H2. -unfold D' in |- *; reflexivity. -elim H3; intros; apply Rle_antisym; assumption. -unfold family_finite in |- *; unfold domain_finite in |- *; - exists (cons y0 nil); intro; split. -simpl in |- *; unfold intersection_domain in |- *; intro; elim H3; clear H3; - intros; unfold D' in H4; left; apply H4. -simpl in |- *; unfold intersection_domain in |- *; intro; elim H3; intro. -split; [ rewrite H4; apply (cond_fam f0); exists a; apply H2 | apply H4 ]. -elim H4. -split; [ right; reflexivity | apply r ]. -apply compact_eqDom with (fun c:R => False). -apply compact_EMP. -unfold eq_Dom in |- *; split. -unfold included in |- *; intros; elim H. -unfold included in |- *; intros; elim H; clear H; intros; - assert (H1 := Rle_trans _ _ _ H H0); elim n; apply H1. +Proof. + intros; case (Rle_dec a b); intro. + unfold compact in |- *; intros; + set + (A := + fun x:R => + a <= x <= b /\ + (exists D : R -> Prop, + covering_finite (fun c:R => a <= c <= x) (subfamily f0 D))); + cut (A a). + intro; cut (bound A). + intro; cut (exists a0 : R, A a0). + intro; assert (H3 := completeness A H1 H2); elim H3; clear H3; intros m H3; + unfold is_lub in H3; cut (a <= m <= b). + intro; unfold covering_open_set in H; elim H; clear H; intros; + unfold covering in H; assert (H6 := H m H4); elim H6; + clear H6; intros y0 H6; unfold family_open_set in H5; + assert (H7 := H5 y0); unfold open_set in H7; assert (H8 := H7 m H6); + unfold neighbourhood in H8; elim H8; clear H8; intros eps H8; + cut (exists x : R, A x /\ m - eps < x <= m). + intro; elim H9; clear H9; intros x H9; elim H9; clear H9; intros; + case (Req_dec m b); intro. + rewrite H11 in H10; rewrite H11 in H8; unfold A in H9; elim H9; clear H9; + intros; elim H12; clear H12; intros Dx H12; + set (Db := fun x:R => Dx x \/ x = y0); exists Db; + unfold covering_finite in |- *; split. + unfold covering in |- *; unfold covering_finite in H12; elim H12; clear H12; + intros; unfold covering in H12; case (Rle_dec x0 x); + intro. + cut (a <= x0 <= x). + intro; assert (H16 := H12 x0 H15); elim H16; clear H16; intros; exists x1; + simpl in H16; simpl in |- *; unfold Db in |- *; elim H16; + clear H16; intros; split; [ apply H16 | left; apply H17 ]. + split. + elim H14; intros; assumption. + assumption. + exists y0; simpl in |- *; split. + apply H8; unfold disc in |- *; rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; + rewrite Rabs_right. + apply Rlt_trans with (b - x). + unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_gt_contravar; + auto with real. + elim H10; intros H15 _; apply Rplus_lt_reg_r with (x - eps); + replace (x - eps + (b - x)) with (b - eps); + [ replace (x - eps + eps) with x; [ apply H15 | ring ] | ring ]. + apply Rge_minus; apply Rle_ge; elim H14; intros _ H15; apply H15. + unfold Db in |- *; right; reflexivity. + unfold family_finite in |- *; unfold domain_finite in |- *; + unfold covering_finite in H12; elim H12; clear H12; + intros; unfold family_finite in H13; unfold domain_finite in H13; + elim H13; clear H13; intros l H13; exists (cons y0 l); + intro; split. + intro; simpl in H14; unfold intersection_domain in H14; elim (H13 x0); + clear H13; intros; case (Req_dec x0 y0); intro. + simpl in |- *; left; apply H16. + simpl in |- *; right; apply H13. + simpl in |- *; unfold intersection_domain in |- *; unfold Db in H14; + decompose [and or] H14. + split; assumption. + elim H16; assumption. + intro; simpl in H14; elim H14; intro; simpl in |- *; + unfold intersection_domain in |- *. + split. + apply (cond_fam f0); rewrite H15; exists m; apply H6. + unfold Db in |- *; right; assumption. + simpl in |- *; unfold intersection_domain in |- *; elim (H13 x0). + intros _ H16; assert (H17 := H16 H15); simpl in H17; + unfold intersection_domain in H17; split. + elim H17; intros; assumption. + unfold Db in |- *; left; elim H17; intros; assumption. + set (m' := Rmin (m + eps / 2) b); cut (A m'). + intro; elim H3; intros; unfold is_upper_bound in H13; + assert (H15 := H13 m' H12); cut (m < m'). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H15 H16)). + unfold m' in |- *; unfold Rmin in |- *; case (Rle_dec (m + eps / 2) b); intro. + pattern m at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_lt_compat_l; + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ]. + elim H4; intros. + elim H17; intro. + assumption. + elim H11; assumption. + unfold A in |- *; split. + split. + apply Rle_trans with m. + elim H4; intros; assumption. + unfold m' in |- *; unfold Rmin in |- *; case (Rle_dec (m + eps / 2) b); intro. + pattern m at 1 in |- *; rewrite <- Rplus_0_r; apply Rplus_le_compat_l; left; + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply (cond_pos eps) | apply Rinv_0_lt_compat; prove_sup0 ]. + elim H4; intros. + elim H13; intro. + assumption. + elim H11; assumption. + unfold m' in |- *; apply Rmin_r. + unfold A in H9; elim H9; clear H9; intros; elim H12; clear H12; intros Dx H12; + set (Db := fun x:R => Dx x \/ x = y0); exists Db; + unfold covering_finite in |- *; split. + unfold covering in |- *; unfold covering_finite in H12; elim H12; clear H12; + intros; unfold covering in H12; case (Rle_dec x0 x); + intro. + cut (a <= x0 <= x). + intro; assert (H16 := H12 x0 H15); elim H16; clear H16; intros; exists x1; + simpl in H16; simpl in |- *; unfold Db in |- *. + elim H16; clear H16; intros; split; [ apply H16 | left; apply H17 ]. + elim H14; intros; split; assumption. + exists y0; simpl in |- *; split. + apply H8; unfold disc in |- *; unfold Rabs in |- *; case (Rcase_abs (x0 - m)); + intro. + rewrite Ropp_minus_distr; apply Rlt_trans with (m - x). + unfold Rminus in |- *; apply Rplus_lt_compat_l; apply Ropp_lt_gt_contravar; + auto with real. + apply Rplus_lt_reg_r with (x - eps); + replace (x - eps + (m - x)) with (m - eps). + replace (x - eps + eps) with x. + elim H10; intros; assumption. + ring. + ring. + apply Rle_lt_trans with (m' - m). + unfold Rminus in |- *; do 2 rewrite <- (Rplus_comm (- m)); + apply Rplus_le_compat_l; elim H14; intros; assumption. + apply Rplus_lt_reg_r with m; replace (m + (m' - m)) with m'. + apply Rle_lt_trans with (m + eps / 2). + unfold m' in |- *; apply Rmin_l. + apply Rplus_lt_compat_l; apply Rmult_lt_reg_l with 2. + prove_sup0. + unfold Rdiv in |- *; rewrite <- (Rmult_comm (/ 2)); rewrite <- Rmult_assoc; + rewrite <- Rinv_r_sym. + rewrite Rmult_1_l; pattern (pos eps) at 1 in |- *; rewrite <- Rplus_0_r; + rewrite double; apply Rplus_lt_compat_l; apply (cond_pos eps). + discrR. + ring. + unfold Db in |- *; right; reflexivity. + unfold family_finite in |- *; unfold domain_finite in |- *; + unfold covering_finite in H12; elim H12; clear H12; + intros; unfold family_finite in H13; unfold domain_finite in H13; + elim H13; clear H13; intros l H13; exists (cons y0 l); + intro; split. + intro; simpl in H14; unfold intersection_domain in H14; elim (H13 x0); + clear H13; intros; case (Req_dec x0 y0); intro. + simpl in |- *; left; apply H16. + simpl in |- *; right; apply H13; simpl in |- *; + unfold intersection_domain in |- *; unfold Db in H14; + decompose [and or] H14. + split; assumption. + elim H16; assumption. + intro; simpl in H14; elim H14; intro; simpl in |- *; + unfold intersection_domain in |- *. + split. + apply (cond_fam f0); rewrite H15; exists m; apply H6. + unfold Db in |- *; right; assumption. + elim (H13 x0); intros _ H16. + assert (H17 := H16 H15). + simpl in H17. + unfold intersection_domain in H17. + split. + elim H17; intros; assumption. + unfold Db in |- *; left; elim H17; intros; assumption. + elim (classic (exists x : R, A x /\ m - eps < x <= m)); intro. + assumption. + elim H3; intros; cut (is_upper_bound A (m - eps)). + intro; assert (H13 := H11 _ H12); cut (m - eps < m). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H13 H14)). + pattern m at 2 in |- *; rewrite <- Rplus_0_r; unfold Rminus in |- *; + apply Rplus_lt_compat_l; apply Ropp_lt_cancel; rewrite Ropp_involutive; + rewrite Ropp_0; apply (cond_pos eps). + set (P := fun n:R => A n /\ m - eps < n <= m); + assert (H12 := not_ex_all_not _ P H9); unfold P in H12; + unfold is_upper_bound in |- *; intros; + assert (H14 := not_and_or _ _ (H12 x)); elim H14; + intro. + elim H15; apply H13. + elim (not_and_or _ _ H15); intro. + case (Rle_dec x (m - eps)); intro. + assumption. + elim H16; auto with real. + unfold is_upper_bound in H10; assert (H17 := H10 x H13); elim H16; apply H17. + elim H3; clear H3; intros. + unfold is_upper_bound in H3. + split. + apply (H3 _ H0). + apply (H4 b); unfold is_upper_bound in |- *; intros; unfold A in H5; elim H5; + clear H5; intros H5 _; elim H5; clear H5; intros _ H5; + apply H5. + exists a; apply H0. + unfold bound in |- *; exists b; unfold is_upper_bound in |- *; intros; + unfold A in H1; elim H1; clear H1; intros H1 _; elim H1; + clear H1; intros _ H1; apply H1. + unfold A in |- *; split. + split; [ right; reflexivity | apply r ]. + unfold covering_open_set in H; elim H; clear H; intros; unfold covering in H; + cut (a <= a <= b). + intro; elim (H _ H1); intros y0 H2; set (D' := fun x:R => x = y0); exists D'; + unfold covering_finite in |- *; split. + unfold covering in |- *; simpl in |- *; intros; cut (x = a). + intro; exists y0; split. + rewrite H4; apply H2. + unfold D' in |- *; reflexivity. + elim H3; intros; apply Rle_antisym; assumption. + unfold family_finite in |- *; unfold domain_finite in |- *; + exists (cons y0 nil); intro; split. + simpl in |- *; unfold intersection_domain in |- *; intro; elim H3; clear H3; + intros; unfold D' in H4; left; apply H4. + simpl in |- *; unfold intersection_domain in |- *; intro; elim H3; intro. + split; [ rewrite H4; apply (cond_fam f0); exists a; apply H2 | apply H4 ]. + elim H4. + split; [ right; reflexivity | apply r ]. + apply compact_eqDom with (fun c:R => False). + apply compact_EMP. + unfold eq_Dom in |- *; split. + unfold included in |- *; intros; elim H. + unfold included in |- *; intros; elim H; clear H; intros; + assert (H1 := Rle_trans _ _ _ H H0); elim n; apply H1. Qed. Lemma compact_P4 : - forall X F:R -> Prop, compact X -> closed_set F -> included F X -> compact F. -unfold compact in |- *; intros; elim (classic (exists z : R, F z)); - intro Hyp_F_NE. -set (D := ind f0); set (g := f f0); unfold closed_set in H0. -set (g' := fun x y:R => f0 x y \/ complementary F y /\ D x). -set (D' := D). -cut (forall x:R, (exists y : R, g' x y) -> D' x). -intro; set (f' := mkfamily D' g' H3); cut (covering_open_set X f'). -intro; elim (H _ H4); intros DX H5; exists DX. -unfold covering_finite in |- *; unfold covering_finite in H5; elim H5; - clear H5; intros. -split. -unfold covering in |- *; unfold covering in H5; intros. -elim (H5 _ (H1 _ H7)); intros y0 H8; exists y0; simpl in H8; simpl in |- *; - elim H8; clear H8; intros. -split. -unfold g' in H8; elim H8; intro. -apply H10. -elim H10; intros H11 _; unfold complementary in H11; elim H11; apply H7. -apply H9. -unfold family_finite in |- *; unfold domain_finite in |- *; - unfold family_finite in H6; unfold domain_finite in H6; - elim H6; clear H6; intros l H6; exists l; intro; assert (H7 := H6 x); - elim H7; clear H7; intros. -split. -intro; apply H7; simpl in |- *; unfold intersection_domain in |- *; - simpl in H9; unfold intersection_domain in H9; unfold D' in |- *; - apply H9. -intro; assert (H10 := H8 H9); simpl in H10; unfold intersection_domain in H10; - simpl in |- *; unfold intersection_domain in |- *; - unfold D' in H10; apply H10. -unfold covering_open_set in |- *; unfold covering_open_set in H2; elim H2; - clear H2; intros. -split. -unfold covering in |- *; unfold covering in H2; intros. -elim (classic (F x)); intro. -elim (H2 _ H6); intros y0 H7; exists y0; simpl in |- *; unfold g' in |- *; - left; assumption. -cut (exists z : R, D z). -intro; elim H7; clear H7; intros x0 H7; exists x0; simpl in |- *; - unfold g' in |- *; right. -split. -unfold complementary in |- *; apply H6. -apply H7. -elim Hyp_F_NE; intros z0 H7. -assert (H8 := H2 _ H7). -elim H8; clear H8; intros t H8; exists t; apply (cond_fam f0); exists z0; - apply H8. -unfold family_open_set in |- *; intro; simpl in |- *; unfold g' in |- *; - elim (classic (D x)); intro. -apply open_set_P6 with (union_domain (f0 x) (complementary F)). -apply open_set_P2. -unfold family_open_set in H4; apply H4. -apply H0. -unfold eq_Dom in |- *; split. -unfold included, union_domain, complementary in |- *; intros. -elim H6; intro; [ left; apply H7 | right; split; assumption ]. -unfold included, union_domain, complementary in |- *; intros. -elim H6; intro; [ left; apply H7 | right; elim H7; intros; apply H8 ]. -apply open_set_P6 with (f0 x). -unfold family_open_set in H4; apply H4. -unfold eq_Dom in |- *; split. -unfold included, complementary in |- *; intros; left; apply H6. -unfold included, complementary in |- *; intros. -elim H6; intro. -apply H7. -elim H7; intros _ H8; elim H5; apply H8. -intros; elim H3; intros y0 H4; unfold g' in H4; elim H4; intro. -apply (cond_fam f0); exists y0; apply H5. -elim H5; clear H5; intros _ H5; apply H5. + forall X F:R -> Prop, compact X -> closed_set F -> included F X -> compact F. +Proof. + unfold compact in |- *; intros; elim (classic (exists z : R, F z)); + intro Hyp_F_NE. + set (D := ind f0); set (g := f f0); unfold closed_set in H0. + set (g' := fun x y:R => f0 x y \/ complementary F y /\ D x). + set (D' := D). + cut (forall x:R, (exists y : R, g' x y) -> D' x). + intro; set (f' := mkfamily D' g' H3); cut (covering_open_set X f'). + intro; elim (H _ H4); intros DX H5; exists DX. + unfold covering_finite in |- *; unfold covering_finite in H5; elim H5; + clear H5; intros. + split. + unfold covering in |- *; unfold covering in H5; intros. + elim (H5 _ (H1 _ H7)); intros y0 H8; exists y0; simpl in H8; simpl in |- *; + elim H8; clear H8; intros. + split. + unfold g' in H8; elim H8; intro. + apply H10. + elim H10; intros H11 _; unfold complementary in H11; elim H11; apply H7. + apply H9. + unfold family_finite in |- *; unfold domain_finite in |- *; + unfold family_finite in H6; unfold domain_finite in H6; + elim H6; clear H6; intros l H6; exists l; intro; assert (H7 := H6 x); + elim H7; clear H7; intros. + split. + intro; apply H7; simpl in |- *; unfold intersection_domain in |- *; + simpl in H9; unfold intersection_domain in H9; unfold D' in |- *; + apply H9. + intro; assert (H10 := H8 H9); simpl in H10; unfold intersection_domain in H10; + simpl in |- *; unfold intersection_domain in |- *; + unfold D' in H10; apply H10. + unfold covering_open_set in |- *; unfold covering_open_set in H2; elim H2; + clear H2; intros. + split. + unfold covering in |- *; unfold covering in H2; intros. + elim (classic (F x)); intro. + elim (H2 _ H6); intros y0 H7; exists y0; simpl in |- *; unfold g' in |- *; + left; assumption. + cut (exists z : R, D z). + intro; elim H7; clear H7; intros x0 H7; exists x0; simpl in |- *; + unfold g' in |- *; right. + split. + unfold complementary in |- *; apply H6. + apply H7. + elim Hyp_F_NE; intros z0 H7. + assert (H8 := H2 _ H7). + elim H8; clear H8; intros t H8; exists t; apply (cond_fam f0); exists z0; + apply H8. + unfold family_open_set in |- *; intro; simpl in |- *; unfold g' in |- *; + elim (classic (D x)); intro. + apply open_set_P6 with (union_domain (f0 x) (complementary F)). + apply open_set_P2. + unfold family_open_set in H4; apply H4. + apply H0. + unfold eq_Dom in |- *; split. + unfold included, union_domain, complementary in |- *; intros. + elim H6; intro; [ left; apply H7 | right; split; assumption ]. + unfold included, union_domain, complementary in |- *; intros. + elim H6; intro; [ left; apply H7 | right; elim H7; intros; apply H8 ]. + apply open_set_P6 with (f0 x). + unfold family_open_set in H4; apply H4. + unfold eq_Dom in |- *; split. + unfold included, complementary in |- *; intros; left; apply H6. + unfold included, complementary in |- *; intros. + elim H6; intro. + apply H7. + elim H7; intros _ H8; elim H5; apply H8. + intros; elim H3; intros y0 H4; unfold g' in H4; elim H4; intro. + apply (cond_fam f0); exists y0; apply H5. + elim H5; clear H5; intros _ H5; apply H5. (* Cas ou F est l'ensemble vide *) -cut (compact F). -intro; apply (H3 f0 H2). -apply compact_eqDom with (fun _:R => False). -apply compact_EMP. -unfold eq_Dom in |- *; split. -unfold included in |- *; intros; elim H3. -assert (H3 := not_ex_all_not _ _ Hyp_F_NE); unfold included in |- *; intros; - elim (H3 x); apply H4. + cut (compact F). + intro; apply (H3 f0 H2). + apply compact_eqDom with (fun _:R => False). + apply compact_EMP. + unfold eq_Dom in |- *; split. + unfold included in |- *; intros; elim H3. + assert (H3 := not_ex_all_not _ _ Hyp_F_NE); unfold included in |- *; intros; + elim (H3 x); apply H4. Qed. (**********) Lemma compact_P5 : forall X:R -> Prop, closed_set X -> bounded X -> compact X. -intros; unfold bounded in H0. -elim H0; clear H0; intros m H0. -elim H0; clear H0; intros M H0. -assert (H1 := compact_P3 m M). -apply (compact_P4 (fun c:R => m <= c <= M) X H1 H H0). +Proof. + intros; unfold bounded in H0. + elim H0; clear H0; intros m H0. + elim H0; clear H0; intros M H0. + assert (H1 := compact_P3 m M). + apply (compact_P4 (fun c:R => m <= c <= M) X H1 H H0). Qed. (**********) Lemma compact_carac : - forall X:R -> Prop, compact X <-> closed_set X /\ bounded X. -intro; split. -intro; split; [ apply (compact_P2 _ H) | apply (compact_P1 _ H) ]. -intro; elim H; clear H; intros; apply (compact_P5 _ H H0). + forall X:R -> Prop, compact X <-> closed_set X /\ bounded X. +Proof. + intro; split. + intro; split; [ apply (compact_P2 _ H) | apply (compact_P1 _ H) ]. + intro; elim H; clear H; intros; apply (compact_P5 _ H H0). Qed. Definition image_dir (f:R -> R) (D:R -> Prop) (x:R) : Prop := - exists y : R, x = f y /\ D y. + exists y : R, x = f y /\ D y. (**********) Lemma continuity_compact : - forall (f:R -> R) (X:R -> Prop), - (forall x:R, continuity_pt f x) -> compact X -> compact (image_dir f X). -unfold compact in |- *; intros; unfold covering_open_set in H1. -elim H1; clear H1; intros. -set (D := ind f1). -set (g := fun x y:R => image_rec f0 (f1 x) y). -cut (forall x:R, (exists y : R, g x y) -> D x). -intro; set (f' := mkfamily D g H3). -cut (covering_open_set X f'). -intro; elim (H0 f' H4); intros D' H5; exists D'. -unfold covering_finite in H5; elim H5; clear H5; intros; - unfold covering_finite in |- *; split. -unfold covering, image_dir in |- *; simpl in |- *; unfold covering in H5; - intros; elim H7; intros y H8; elim H8; intros; assert (H11 := H5 _ H10); - simpl in H11; elim H11; intros z H12; exists z; unfold g in H12; - unfold image_rec in H12; rewrite H9; apply H12. -unfold family_finite in H6; unfold domain_finite in H6; - unfold family_finite in |- *; unfold domain_finite in |- *; - elim H6; intros l H7; exists l; intro; elim (H7 x); - intros; split; intro. -apply H8; simpl in H10; simpl in |- *; apply H10. -apply (H9 H10). -unfold covering_open_set in |- *; split. -unfold covering in |- *; intros; simpl in |- *; unfold covering in H1; - unfold image_dir in H1; unfold g in |- *; unfold image_rec in |- *; - apply H1. -exists x; split; [ reflexivity | apply H4 ]. -unfold family_open_set in |- *; unfold family_open_set in H2; intro; - simpl in |- *; unfold g in |- *; - cut ((fun y:R => image_rec f0 (f1 x) y) = image_rec f0 (f1 x)). -intro; rewrite H4. -apply (continuity_P2 f0 (f1 x) H (H2 x)). -reflexivity. -intros; apply (cond_fam f1); unfold g in H3; unfold image_rec in H3; elim H3; - intros; exists (f0 x0); apply H4. + forall (f:R -> R) (X:R -> Prop), + (forall x:R, continuity_pt f x) -> compact X -> compact (image_dir f X). +Proof. + unfold compact in |- *; intros; unfold covering_open_set in H1. + elim H1; clear H1; intros. + set (D := ind f1). + set (g := fun x y:R => image_rec f0 (f1 x) y). + cut (forall x:R, (exists y : R, g x y) -> D x). + intro; set (f' := mkfamily D g H3). + cut (covering_open_set X f'). + intro; elim (H0 f' H4); intros D' H5; exists D'. + unfold covering_finite in H5; elim H5; clear H5; intros; + unfold covering_finite in |- *; split. + unfold covering, image_dir in |- *; simpl in |- *; unfold covering in H5; + intros; elim H7; intros y H8; elim H8; intros; assert (H11 := H5 _ H10); + simpl in H11; elim H11; intros z H12; exists z; unfold g in H12; + unfold image_rec in H12; rewrite H9; apply H12. + unfold family_finite in H6; unfold domain_finite in H6; + unfold family_finite in |- *; unfold domain_finite in |- *; + elim H6; intros l H7; exists l; intro; elim (H7 x); + intros; split; intro. + apply H8; simpl in H10; simpl in |- *; apply H10. + apply (H9 H10). + unfold covering_open_set in |- *; split. + unfold covering in |- *; intros; simpl in |- *; unfold covering in H1; + unfold image_dir in H1; unfold g in |- *; unfold image_rec in |- *; + apply H1. + exists x; split; [ reflexivity | apply H4 ]. + unfold family_open_set in |- *; unfold family_open_set in H2; intro; + simpl in |- *; unfold g in |- *; + cut ((fun y:R => image_rec f0 (f1 x) y) = image_rec f0 (f1 x)). + intro; rewrite H4. + apply (continuity_P2 f0 (f1 x) H (H2 x)). + reflexivity. + intros; apply (cond_fam f1); unfold g in H3; unfold image_rec in H3; elim H3; + intros; exists (f0 x0); apply H4. Qed. Lemma Rlt_Rminus : forall a b:R, a < b -> 0 < b - a. -intros; apply Rplus_lt_reg_r with a; rewrite Rplus_0_r; - replace (a + (b - a)) with b; [ assumption | ring ]. +Proof. + intros; apply Rplus_lt_reg_r with a; rewrite Rplus_0_r; + replace (a + (b - a)) with b; [ assumption | ring ]. Qed. Lemma prolongement_C0 : - forall (f:R -> R) (a b:R), - a <= b -> - (forall c:R, a <= c <= b -> continuity_pt f c) -> + forall (f:R -> R) (a b:R), + a <= b -> + (forall c:R, a <= c <= b -> continuity_pt f c) -> exists g : R -> R, - continuity g /\ (forall c:R, a <= c <= b -> g c = f c). -intros; elim H; intro. -set - (h := - fun x:R => - match Rle_dec x a with - | left _ => f0 a - | right _ => - match Rle_dec x b with - | left _ => f0 x - | right _ => f0 b - end - end). -assert (H2 : 0 < b - a). -apply Rlt_Rminus; assumption. -exists h; split. -unfold continuity in |- *; intro; case (Rtotal_order x a); intro. -unfold continuity_pt in |- *; unfold continue_in in |- *; - unfold limit1_in in |- *; unfold limit_in in |- *; - simpl in |- *; unfold R_dist in |- *; intros; exists (a - x); - split. -change (0 < a - x) in |- *; apply Rlt_Rminus; assumption. -intros; elim H5; clear H5; intros _ H5; unfold h in |- *. -case (Rle_dec x a); intro. -case (Rle_dec x0 a); intro. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. -elim n; left; apply Rplus_lt_reg_r with (- x); - do 2 rewrite (Rplus_comm (- x)); apply Rle_lt_trans with (Rabs (x0 - x)). -apply RRle_abs. -assumption. -elim n; left; assumption. -elim H3; intro. -assert (H5 : a <= a <= b). -split; [ right; reflexivity | left; assumption ]. -assert (H6 := H0 _ H5); unfold continuity_pt in H6; unfold continue_in in H6; - unfold limit1_in in H6; unfold limit_in in H6; simpl in H6; - unfold R_dist in H6; unfold continuity_pt in |- *; - unfold continue_in in |- *; unfold limit1_in in |- *; - unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; - intros; elim (H6 _ H7); intros; exists (Rmin x0 (b - a)); - split. -unfold Rmin in |- *; case (Rle_dec x0 (b - a)); intro. -elim H8; intros; assumption. -change (0 < b - a) in |- *; apply Rlt_Rminus; assumption. -intros; elim H9; clear H9; intros _ H9; cut (x1 < b). -intro; unfold h in |- *; case (Rle_dec x a); intro. -case (Rle_dec x1 a); intro. -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. -case (Rle_dec x1 b); intro. -elim H8; intros; apply H12; split. -unfold D_x, no_cond in |- *; split. -trivial. -red in |- *; intro; elim n; right; symmetry in |- *; assumption. -apply Rlt_le_trans with (Rmin x0 (b - a)). -rewrite H4 in H9; apply H9. -apply Rmin_l. -elim n0; left; assumption. -elim n; right; assumption. -apply Rplus_lt_reg_r with (- a); do 2 rewrite (Rplus_comm (- a)); - rewrite H4 in H9; apply Rle_lt_trans with (Rabs (x1 - a)). -apply RRle_abs. -apply Rlt_le_trans with (Rmin x0 (b - a)). -assumption. -apply Rmin_r. -case (Rtotal_order x b); intro. -assert (H6 : a <= x <= b). -split; left; assumption. -assert (H7 := H0 _ H6); unfold continuity_pt in H7; unfold continue_in in H7; - unfold limit1_in in H7; unfold limit_in in H7; simpl in H7; - unfold R_dist in H7; unfold continuity_pt in |- *; - unfold continue_in in |- *; unfold limit1_in in |- *; - unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; - intros; elim (H7 _ H8); intros; elim H9; clear H9; - intros. -assert (H11 : 0 < x - a). -apply Rlt_Rminus; assumption. -assert (H12 : 0 < b - x). -apply Rlt_Rminus; assumption. -exists (Rmin x0 (Rmin (x - a) (b - x))); split. -unfold Rmin in |- *; case (Rle_dec (x - a) (b - x)); intro. -case (Rle_dec x0 (x - a)); intro. -assumption. -assumption. -case (Rle_dec x0 (b - x)); intro. -assumption. -assumption. -intros; elim H13; clear H13; intros; cut (a < x1 < b). -intro; elim H15; clear H15; intros; unfold h in |- *; case (Rle_dec x a); - intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). -case (Rle_dec x b); intro. -case (Rle_dec x1 a); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H15)). -case (Rle_dec x1 b); intro. -apply H10; split. -assumption. -apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). -assumption. -apply Rmin_l. -elim n1; left; assumption. -elim n0; left; assumption. -split. -apply Ropp_lt_cancel; apply Rplus_lt_reg_r with x; - apply Rle_lt_trans with (Rabs (x1 - x)). -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. -apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). -assumption. -apply Rle_trans with (Rmin (x - a) (b - x)). -apply Rmin_r. -apply Rmin_l. -apply Rplus_lt_reg_r with (- x); do 2 rewrite (Rplus_comm (- x)); - apply Rle_lt_trans with (Rabs (x1 - x)). -apply RRle_abs. -apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). -assumption. -apply Rle_trans with (Rmin (x - a) (b - x)); apply Rmin_r. -elim H5; intro. -assert (H7 : a <= b <= b). -split; [ left; assumption | right; reflexivity ]. -assert (H8 := H0 _ H7); unfold continuity_pt in H8; unfold continue_in in H8; - unfold limit1_in in H8; unfold limit_in in H8; simpl in H8; - unfold R_dist in H8; unfold continuity_pt in |- *; - unfold continue_in in |- *; unfold limit1_in in |- *; - unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; - intros; elim (H8 _ H9); intros; exists (Rmin x0 (b - a)); - split. -unfold Rmin in |- *; case (Rle_dec x0 (b - a)); intro. -elim H10; intros; assumption. -change (0 < b - a) in |- *; apply Rlt_Rminus; assumption. -intros; elim H11; clear H11; intros _ H11; cut (a < x1). -intro; unfold h in |- *; case (Rle_dec x a); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). -case (Rle_dec x1 a); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H12)). -case (Rle_dec x b); intro. -case (Rle_dec x1 b); intro. -rewrite H6; elim H10; intros; elim r0; intro. -apply H14; split. -unfold D_x, no_cond in |- *; split. -trivial. -red in |- *; intro; rewrite <- H16 in H15; elim (Rlt_irrefl _ H15). -rewrite H6 in H11; apply Rlt_le_trans with (Rmin x0 (b - a)). -apply H11. -apply Rmin_l. -rewrite H15; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - assumption. -rewrite H6; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - assumption. -elim n1; right; assumption. -rewrite H6 in H11; apply Ropp_lt_cancel; apply Rplus_lt_reg_r with b; - apply Rle_lt_trans with (Rabs (x1 - b)). -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. -apply Rlt_le_trans with (Rmin x0 (b - a)). -assumption. -apply Rmin_r. -unfold continuity_pt in |- *; unfold continue_in in |- *; - unfold limit1_in in |- *; unfold limit_in in |- *; - simpl in |- *; unfold R_dist in |- *; intros; exists (x - b); - split. -change (0 < x - b) in |- *; apply Rlt_Rminus; assumption. -intros; elim H8; clear H8; intros. -assert (H10 : b < x0). -apply Ropp_lt_cancel; apply Rplus_lt_reg_r with x; - apply Rle_lt_trans with (Rabs (x0 - x)). -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. -assumption. -unfold h in |- *; case (Rle_dec x a); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). -case (Rle_dec x b); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H6)). -case (Rle_dec x0 a); intro. -elim (Rlt_irrefl _ (Rlt_trans _ _ _ H1 (Rlt_le_trans _ _ _ H10 r))). -case (Rle_dec x0 b); intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10)). -unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. -intros; elim H3; intros; unfold h in |- *; case (Rle_dec c a); intro. -elim r; intro. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 H6)). -rewrite H6; reflexivity. -case (Rle_dec c b); intro. -reflexivity. -elim n0; assumption. -exists (fun _:R => f0 a); split. -apply derivable_continuous; apply (derivable_const (f0 a)). -intros; elim H2; intros; rewrite H1 in H3; cut (b = c). -intro; rewrite <- H5; rewrite H1; reflexivity. -apply Rle_antisym; assumption. + continuity g /\ (forall c:R, a <= c <= b -> g c = f c). +Proof. + intros; elim H; intro. + set + (h := + fun x:R => + match Rle_dec x a with + | left _ => f0 a + | right _ => + match Rle_dec x b with + | left _ => f0 x + | right _ => f0 b + end + end). + assert (H2 : 0 < b - a). + apply Rlt_Rminus; assumption. + exists h; split. + unfold continuity in |- *; intro; case (Rtotal_order x a); intro. + unfold continuity_pt in |- *; unfold continue_in in |- *; + unfold limit1_in in |- *; unfold limit_in in |- *; + simpl in |- *; unfold R_dist in |- *; intros; exists (a - x); + split. + change (0 < a - x) in |- *; apply Rlt_Rminus; assumption. + intros; elim H5; clear H5; intros _ H5; unfold h in |- *. + case (Rle_dec x a); intro. + case (Rle_dec x0 a); intro. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. + elim n; left; apply Rplus_lt_reg_r with (- x); + do 2 rewrite (Rplus_comm (- x)); apply Rle_lt_trans with (Rabs (x0 - x)). + apply RRle_abs. + assumption. + elim n; left; assumption. + elim H3; intro. + assert (H5 : a <= a <= b). + split; [ right; reflexivity | left; assumption ]. + assert (H6 := H0 _ H5); unfold continuity_pt in H6; unfold continue_in in H6; + unfold limit1_in in H6; unfold limit_in in H6; simpl in H6; + unfold R_dist in H6; unfold continuity_pt in |- *; + unfold continue_in in |- *; unfold limit1_in in |- *; + unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; + intros; elim (H6 _ H7); intros; exists (Rmin x0 (b - a)); + split. + unfold Rmin in |- *; case (Rle_dec x0 (b - a)); intro. + elim H8; intros; assumption. + change (0 < b - a) in |- *; apply Rlt_Rminus; assumption. + intros; elim H9; clear H9; intros _ H9; cut (x1 < b). + intro; unfold h in |- *; case (Rle_dec x a); intro. + case (Rle_dec x1 a); intro. + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. + case (Rle_dec x1 b); intro. + elim H8; intros; apply H12; split. + unfold D_x, no_cond in |- *; split. + trivial. + red in |- *; intro; elim n; right; symmetry in |- *; assumption. + apply Rlt_le_trans with (Rmin x0 (b - a)). + rewrite H4 in H9; apply H9. + apply Rmin_l. + elim n0; left; assumption. + elim n; right; assumption. + apply Rplus_lt_reg_r with (- a); do 2 rewrite (Rplus_comm (- a)); + rewrite H4 in H9; apply Rle_lt_trans with (Rabs (x1 - a)). + apply RRle_abs. + apply Rlt_le_trans with (Rmin x0 (b - a)). + assumption. + apply Rmin_r. + case (Rtotal_order x b); intro. + assert (H6 : a <= x <= b). + split; left; assumption. + assert (H7 := H0 _ H6); unfold continuity_pt in H7; unfold continue_in in H7; + unfold limit1_in in H7; unfold limit_in in H7; simpl in H7; + unfold R_dist in H7; unfold continuity_pt in |- *; + unfold continue_in in |- *; unfold limit1_in in |- *; + unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; + intros; elim (H7 _ H8); intros; elim H9; clear H9; + intros. + assert (H11 : 0 < x - a). + apply Rlt_Rminus; assumption. + assert (H12 : 0 < b - x). + apply Rlt_Rminus; assumption. + exists (Rmin x0 (Rmin (x - a) (b - x))); split. + unfold Rmin in |- *; case (Rle_dec (x - a) (b - x)); intro. + case (Rle_dec x0 (x - a)); intro. + assumption. + assumption. + case (Rle_dec x0 (b - x)); intro. + assumption. + assumption. + intros; elim H13; clear H13; intros; cut (a < x1 < b). + intro; elim H15; clear H15; intros; unfold h in |- *; case (Rle_dec x a); + intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). + case (Rle_dec x b); intro. + case (Rle_dec x1 a); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r0 H15)). + case (Rle_dec x1 b); intro. + apply H10; split. + assumption. + apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). + assumption. + apply Rmin_l. + elim n1; left; assumption. + elim n0; left; assumption. + split. + apply Ropp_lt_cancel; apply Rplus_lt_reg_r with x; + apply Rle_lt_trans with (Rabs (x1 - x)). + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. + apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). + assumption. + apply Rle_trans with (Rmin (x - a) (b - x)). + apply Rmin_r. + apply Rmin_l. + apply Rplus_lt_reg_r with (- x); do 2 rewrite (Rplus_comm (- x)); + apply Rle_lt_trans with (Rabs (x1 - x)). + apply RRle_abs. + apply Rlt_le_trans with (Rmin x0 (Rmin (x - a) (b - x))). + assumption. + apply Rle_trans with (Rmin (x - a) (b - x)); apply Rmin_r. + elim H5; intro. + assert (H7 : a <= b <= b). + split; [ left; assumption | right; reflexivity ]. + assert (H8 := H0 _ H7); unfold continuity_pt in H8; unfold continue_in in H8; + unfold limit1_in in H8; unfold limit_in in H8; simpl in H8; + unfold R_dist in H8; unfold continuity_pt in |- *; + unfold continue_in in |- *; unfold limit1_in in |- *; + unfold limit_in in |- *; simpl in |- *; unfold R_dist in |- *; + intros; elim (H8 _ H9); intros; exists (Rmin x0 (b - a)); + split. + unfold Rmin in |- *; case (Rle_dec x0 (b - a)); intro. + elim H10; intros; assumption. + change (0 < b - a) in |- *; apply Rlt_Rminus; assumption. + intros; elim H11; clear H11; intros _ H11; cut (a < x1). + intro; unfold h in |- *; case (Rle_dec x a); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). + case (Rle_dec x1 a); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H12)). + case (Rle_dec x b); intro. + case (Rle_dec x1 b); intro. + rewrite H6; elim H10; intros; elim r0; intro. + apply H14; split. + unfold D_x, no_cond in |- *; split. + trivial. + red in |- *; intro; rewrite <- H16 in H15; elim (Rlt_irrefl _ H15). + rewrite H6 in H11; apply Rlt_le_trans with (Rmin x0 (b - a)). + apply H11. + apply Rmin_l. + rewrite H15; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + assumption. + rewrite H6; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + assumption. + elim n1; right; assumption. + rewrite H6 in H11; apply Ropp_lt_cancel; apply Rplus_lt_reg_r with b; + apply Rle_lt_trans with (Rabs (x1 - b)). + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. + apply Rlt_le_trans with (Rmin x0 (b - a)). + assumption. + apply Rmin_r. + unfold continuity_pt in |- *; unfold continue_in in |- *; + unfold limit1_in in |- *; unfold limit_in in |- *; + simpl in |- *; unfold R_dist in |- *; intros; exists (x - b); + split. + change (0 < x - b) in |- *; apply Rlt_Rminus; assumption. + intros; elim H8; clear H8; intros. + assert (H10 : b < x0). + apply Ropp_lt_cancel; apply Rplus_lt_reg_r with x; + apply Rle_lt_trans with (Rabs (x0 - x)). + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply RRle_abs. + assumption. + unfold h in |- *; case (Rle_dec x a); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H4)). + case (Rle_dec x b); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H6)). + case (Rle_dec x0 a); intro. + elim (Rlt_irrefl _ (Rlt_trans _ _ _ H1 (Rlt_le_trans _ _ _ H10 r))). + case (Rle_dec x0 b); intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ r H10)). + unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; assumption. + intros; elim H3; intros; unfold h in |- *; case (Rle_dec c a); intro. + elim r; intro. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H4 H6)). + rewrite H6; reflexivity. + case (Rle_dec c b); intro. + reflexivity. + elim n0; assumption. + exists (fun _:R => f0 a); split. + apply derivable_continuous; apply (derivable_const (f0 a)). + intros; elim H2; intros; rewrite H1 in H3; cut (b = c). + intro; rewrite <- H5; rewrite H1; reflexivity. + apply Rle_antisym; assumption. Qed. (**********) Lemma continuity_ab_maj : - forall (f:R -> R) (a b:R), - a <= b -> - (forall c:R, a <= c <= b -> continuity_pt f c) -> + forall (f:R -> R) (a b:R), + a <= b -> + (forall c:R, a <= c <= b -> continuity_pt f c) -> exists Mx : R, (forall c:R, a <= c <= b -> f c <= f Mx) /\ a <= Mx <= b. -intros; - cut - (exists g : R -> R, - continuity g /\ (forall c:R, a <= c <= b -> g c = f0 c)). -intro HypProl. -elim HypProl; intros g Hcont_eq. -elim Hcont_eq; clear Hcont_eq; intros Hcont Heq. -assert (H1 := compact_P3 a b). -assert (H2 := continuity_compact g (fun c:R => a <= c <= b) Hcont H1). -assert (H3 := compact_P2 _ H2). -assert (H4 := compact_P1 _ H2). -cut (bound (image_dir g (fun c:R => a <= c <= b))). -cut (exists x : R, image_dir g (fun c:R => a <= c <= b) x). -intros; assert (H7 := completeness _ H6 H5). -elim H7; clear H7; intros M H7; cut (image_dir g (fun c:R => a <= c <= b) M). -intro; unfold image_dir in H8; elim H8; clear H8; intros Mxx H8; elim H8; - clear H8; intros; exists Mxx; split. -intros; rewrite <- (Heq c H10); rewrite <- (Heq Mxx H9); intros; - rewrite <- H8; unfold is_lub in H7; elim H7; clear H7; - intros H7 _; unfold is_upper_bound in H7; apply H7; - unfold image_dir in |- *; exists c; split; [ reflexivity | apply H10 ]. -apply H9. -elim (classic (image_dir g (fun c:R => a <= c <= b) M)); intro. -assumption. -cut - (exists eps : posreal, - (forall y:R, - ~ - intersection_domain (disc M eps) - (image_dir g (fun c:R => a <= c <= b)) y)). -intro; elim H9; clear H9; intros eps H9; unfold is_lub in H7; elim H7; - clear H7; intros; - cut (is_upper_bound (image_dir g (fun c:R => a <= c <= b)) (M - eps)). -intro; assert (H12 := H10 _ H11); cut (M - eps < M). -intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H12 H13)). -pattern M at 2 in |- *; rewrite <- Rplus_0_r; unfold Rminus in |- *; - apply Rplus_lt_compat_l; apply Ropp_lt_cancel; rewrite Ropp_0; - rewrite Ropp_involutive; apply (cond_pos eps). -unfold is_upper_bound, image_dir in |- *; intros; cut (x <= M). -intro; case (Rle_dec x (M - eps)); intro. -apply r. -elim (H9 x); unfold intersection_domain, disc, image_dir in |- *; split. -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; rewrite Rabs_right. -apply Rplus_lt_reg_r with (x - eps); - replace (x - eps + (M - x)) with (M - eps). -replace (x - eps + eps) with x. -auto with real. -ring. -ring. -apply Rge_minus; apply Rle_ge; apply H12. -apply H11. -apply H7; apply H11. -cut - (exists V : R -> Prop, - neighbourhood V M /\ - (forall y:R, - ~ intersection_domain V (image_dir g (fun c:R => a <= c <= b)) y)). -intro; elim H9; intros V H10; elim H10; clear H10; intros. -unfold neighbourhood in H10; elim H10; intros del H12; exists del; intros; - red in |- *; intro; elim (H11 y). -unfold intersection_domain in |- *; unfold intersection_domain in H13; - elim H13; clear H13; intros; split. -apply (H12 _ H13). -apply H14. -cut (~ point_adherent (image_dir g (fun c:R => a <= c <= b)) M). -intro; unfold point_adherent in H9. -assert - (H10 := - not_all_ex_not _ - (fun V:R -> Prop => - neighbourhood V M -> +Proof. + intros; + cut + (exists g : R -> R, + continuity g /\ (forall c:R, a <= c <= b -> g c = f0 c)). + intro HypProl. + elim HypProl; intros g Hcont_eq. + elim Hcont_eq; clear Hcont_eq; intros Hcont Heq. + assert (H1 := compact_P3 a b). + assert (H2 := continuity_compact g (fun c:R => a <= c <= b) Hcont H1). + assert (H3 := compact_P2 _ H2). + assert (H4 := compact_P1 _ H2). + cut (bound (image_dir g (fun c:R => a <= c <= b))). + cut (exists x : R, image_dir g (fun c:R => a <= c <= b) x). + intros; assert (H7 := completeness _ H6 H5). + elim H7; clear H7; intros M H7; cut (image_dir g (fun c:R => a <= c <= b) M). + intro; unfold image_dir in H8; elim H8; clear H8; intros Mxx H8; elim H8; + clear H8; intros; exists Mxx; split. + intros; rewrite <- (Heq c H10); rewrite <- (Heq Mxx H9); intros; + rewrite <- H8; unfold is_lub in H7; elim H7; clear H7; + intros H7 _; unfold is_upper_bound in H7; apply H7; + unfold image_dir in |- *; exists c; split; [ reflexivity | apply H10 ]. + apply H9. + elim (classic (image_dir g (fun c:R => a <= c <= b) M)); intro. + assumption. + cut + (exists eps : posreal, + (forall y:R, + ~ + intersection_domain (disc M eps) + (image_dir g (fun c:R => a <= c <= b)) y)). + intro; elim H9; clear H9; intros eps H9; unfold is_lub in H7; elim H7; + clear H7; intros; + cut (is_upper_bound (image_dir g (fun c:R => a <= c <= b)) (M - eps)). + intro; assert (H12 := H10 _ H11); cut (M - eps < M). + intro; elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ H12 H13)). + pattern M at 2 in |- *; rewrite <- Rplus_0_r; unfold Rminus in |- *; + apply Rplus_lt_compat_l; apply Ropp_lt_cancel; rewrite Ropp_0; + rewrite Ropp_involutive; apply (cond_pos eps). + unfold is_upper_bound, image_dir in |- *; intros; cut (x <= M). + intro; case (Rle_dec x (M - eps)); intro. + apply r. + elim (H9 x); unfold intersection_domain, disc, image_dir in |- *; split. + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; rewrite Rabs_right. + apply Rplus_lt_reg_r with (x - eps); + replace (x - eps + (M - x)) with (M - eps). + replace (x - eps + eps) with x. + auto with real. + ring. + ring. + apply Rge_minus; apply Rle_ge; apply H12. + apply H11. + apply H7; apply H11. + cut + (exists V : R -> Prop, + neighbourhood V M /\ + (forall y:R, + ~ intersection_domain V (image_dir g (fun c:R => a <= c <= b)) y)). + intro; elim H9; intros V H10; elim H10; clear H10; intros. + unfold neighbourhood in H10; elim H10; intros del H12; exists del; intros; + red in |- *; intro; elim (H11 y). + unfold intersection_domain in |- *; unfold intersection_domain in H13; + elim H13; clear H13; intros; split. + apply (H12 _ H13). + apply H14. + cut (~ point_adherent (image_dir g (fun c:R => a <= c <= b)) M). + intro; unfold point_adherent in H9. + assert + (H10 := + not_all_ex_not _ + (fun V:R -> Prop => + neighbourhood V M -> exists y : R, - intersection_domain V (image_dir g (fun c:R => a <= c <= b)) y) H9). -elim H10; intros V0 H11; exists V0; assert (H12 := imply_to_and _ _ H11); - elim H12; clear H12; intros. -split. -apply H12. -apply (not_ex_all_not _ _ H13). -red in |- *; intro; cut (adherence (image_dir g (fun c:R => a <= c <= b)) M). -intro; elim (closed_set_P1 (image_dir g (fun c:R => a <= c <= b))); - intros H11 _; assert (H12 := H11 H3). -elim H8. -unfold eq_Dom in H12; elim H12; clear H12; intros. -apply (H13 _ H10). -apply H9. -exists (g a); unfold image_dir in |- *; exists a; split. -reflexivity. -split; [ right; reflexivity | apply H ]. -unfold bound in |- *; unfold bounded in H4; elim H4; clear H4; intros m H4; - elim H4; clear H4; intros M H4; exists M; unfold is_upper_bound in |- *; - intros; elim (H4 _ H5); intros _ H6; apply H6. -apply prolongement_C0; assumption. + intersection_domain V (image_dir g (fun c:R => a <= c <= b)) y) H9). + elim H10; intros V0 H11; exists V0; assert (H12 := imply_to_and _ _ H11); + elim H12; clear H12; intros. + split. + apply H12. + apply (not_ex_all_not _ _ H13). + red in |- *; intro; cut (adherence (image_dir g (fun c:R => a <= c <= b)) M). + intro; elim (closed_set_P1 (image_dir g (fun c:R => a <= c <= b))); + intros H11 _; assert (H12 := H11 H3). + elim H8. + unfold eq_Dom in H12; elim H12; clear H12; intros. + apply (H13 _ H10). + apply H9. + exists (g a); unfold image_dir in |- *; exists a; split. + reflexivity. + split; [ right; reflexivity | apply H ]. + unfold bound in |- *; unfold bounded in H4; elim H4; clear H4; intros m H4; + elim H4; clear H4; intros M H4; exists M; unfold is_upper_bound in |- *; + intros; elim (H4 _ H5); intros _ H6; apply H6. + apply prolongement_C0; assumption. Qed. (**********) Lemma continuity_ab_min : - forall (f:R -> R) (a b:R), - a <= b -> - (forall c:R, a <= c <= b -> continuity_pt f c) -> + forall (f:R -> R) (a b:R), + a <= b -> + (forall c:R, a <= c <= b -> continuity_pt f c) -> exists mx : R, (forall c:R, a <= c <= b -> f mx <= f c) /\ a <= mx <= b. -intros. -cut (forall c:R, a <= c <= b -> continuity_pt (- f0) c). -intro; assert (H2 := continuity_ab_maj (- f0)%F a b H H1); elim H2; - intros x0 H3; exists x0; intros; split. -intros; rewrite <- (Ropp_involutive (f0 x0)); - rewrite <- (Ropp_involutive (f0 c)); apply Ropp_le_contravar; - elim H3; intros; unfold opp_fct in H5; apply H5; apply H4. -elim H3; intros; assumption. -intros. -assert (H2 := H0 _ H1). -apply (continuity_pt_opp _ _ H2). +Proof. + intros. + cut (forall c:R, a <= c <= b -> continuity_pt (- f0) c). + intro; assert (H2 := continuity_ab_maj (- f0)%F a b H H1); elim H2; + intros x0 H3; exists x0; intros; split. + intros; rewrite <- (Ropp_involutive (f0 x0)); + rewrite <- (Ropp_involutive (f0 c)); apply Ropp_le_contravar; + elim H3; intros; unfold opp_fct in H5; apply H5; apply H4. + elim H3; intros; assumption. + intros. + assert (H2 := H0 _ H1). + apply (continuity_pt_opp _ _ H2). Qed. (********************************************************) -(* Proof of Bolzano-Weierstrass theorem *) +(** * Proof of Bolzano-Weierstrass theorem *) (********************************************************) Definition ValAdh (un:nat -> R) (x:R) : Prop := @@ -1280,66 +1319,69 @@ Definition intersection_family (f:family) (x:R) : Prop := forall y:R, ind f y -> f y x. Lemma ValAdh_un_exists : - forall (un:nat -> R) (D:=fun x:R => exists n : nat, x = INR n) - (f:= - fun x:R => - adherence + forall (un:nat -> R) (D:=fun x:R => exists n : nat, x = INR n) + (f:= + fun x:R => + adherence (fun y:R => (exists p : nat, y = un p /\ x <= INR p) /\ D x)) - (x:R), (exists y : R, f x y) -> D x. -intros; elim H; intros; unfold f in H0; unfold adherence in H0; - unfold point_adherent in H0; - assert (H1 : neighbourhood (disc x0 (mkposreal _ Rlt_0_1)) x0). -unfold neighbourhood, disc in |- *; exists (mkposreal _ Rlt_0_1); - unfold included in |- *; trivial. -elim (H0 _ H1); intros; unfold intersection_domain in H2; elim H2; intros; - elim H4; intros; apply H6. + (x:R), (exists y : R, f x y) -> D x. +Proof. + intros; elim H; intros; unfold f in H0; unfold adherence in H0; + unfold point_adherent in H0; + assert (H1 : neighbourhood (disc x0 (mkposreal _ Rlt_0_1)) x0). + unfold neighbourhood, disc in |- *; exists (mkposreal _ Rlt_0_1); + unfold included in |- *; trivial. + elim (H0 _ H1); intros; unfold intersection_domain in H2; elim H2; intros; + elim H4; intros; apply H6. Qed. Definition ValAdh_un (un:nat -> R) : R -> Prop := let D := fun x:R => exists n : nat, x = INR n in - let f := - fun x:R => - adherence + let f := + fun x:R => + adherence (fun y:R => (exists p : nat, y = un p /\ x <= INR p) /\ D x) in - intersection_family (mkfamily D f (ValAdh_un_exists un)). + intersection_family (mkfamily D f (ValAdh_un_exists un)). Lemma ValAdh_un_prop : - forall (un:nat -> R) (x:R), ValAdh un x <-> ValAdh_un un x. -intros; split; intro. -unfold ValAdh in H; unfold ValAdh_un in |- *; - unfold intersection_family in |- *; simpl in |- *; - intros; elim H0; intros N H1; unfold adherence in |- *; - unfold point_adherent in |- *; intros; elim (H V N H2); - intros; exists (un x0); unfold intersection_domain in |- *; - elim H3; clear H3; intros; split. -assumption. -split. -exists x0; split; [ reflexivity | rewrite H1; apply (le_INR _ _ H3) ]. -exists N; assumption. -unfold ValAdh in |- *; intros; unfold ValAdh_un in H; - unfold intersection_family in H; simpl in H; - assert - (H1 : - adherence - (fun y0:R => - (exists p : nat, y0 = un p /\ INR N <= INR p) /\ - (exists n : nat, INR N = INR n)) x). -apply H; exists N; reflexivity. -unfold adherence in H1; unfold point_adherent in H1; assert (H2 := H1 _ H0); - elim H2; intros; unfold intersection_domain in H3; - elim H3; clear H3; intros; elim H4; clear H4; intros; - elim H4; clear H4; intros; elim H4; clear H4; intros; - exists x1; split. -apply (INR_le _ _ H6). -rewrite H4 in H3; apply H3. + forall (un:nat -> R) (x:R), ValAdh un x <-> ValAdh_un un x. +Proof. + intros; split; intro. + unfold ValAdh in H; unfold ValAdh_un in |- *; + unfold intersection_family in |- *; simpl in |- *; + intros; elim H0; intros N H1; unfold adherence in |- *; + unfold point_adherent in |- *; intros; elim (H V N H2); + intros; exists (un x0); unfold intersection_domain in |- *; + elim H3; clear H3; intros; split. + assumption. + split. + exists x0; split; [ reflexivity | rewrite H1; apply (le_INR _ _ H3) ]. + exists N; assumption. + unfold ValAdh in |- *; intros; unfold ValAdh_un in H; + unfold intersection_family in H; simpl in H; + assert + (H1 : + adherence + (fun y0:R => + (exists p : nat, y0 = un p /\ INR N <= INR p) /\ + (exists n : nat, INR N = INR n)) x). + apply H; exists N; reflexivity. + unfold adherence in H1; unfold point_adherent in H1; assert (H2 := H1 _ H0); + elim H2; intros; unfold intersection_domain in H3; + elim H3; clear H3; intros; elim H4; clear H4; intros; + elim H4; clear H4; intros; elim H4; clear H4; intros; + exists x1; split. + apply (INR_le _ _ H6). + rewrite H4 in H3; apply H3. Qed. Lemma adherence_P4 : - forall F G:R -> Prop, included F G -> included (adherence F) (adherence G). -unfold adherence, included in |- *; unfold point_adherent in |- *; intros; - elim (H0 _ H1); unfold intersection_domain in |- *; - intros; elim H2; clear H2; intros; exists x0; split; - [ assumption | apply (H _ H3) ]. + forall F G:R -> Prop, included F G -> included (adherence F) (adherence G). +Proof. + unfold adherence, included in |- *; unfold point_adherent in |- *; intros; + elim (H0 _ H1); unfold intersection_domain in |- *; + intros; elim H2; clear H2; intros; exists x0; split; + [ assumption | apply (H _ H3) ]. Qed. Definition family_closed_set (f:family) : Prop := @@ -1355,471 +1397,476 @@ Definition intersection_vide_finite_in (D:R -> Prop) (**********) Lemma compact_P6 : - forall X:R -> Prop, - compact X -> - (exists z : R, X z) -> - forall g:family, - family_closed_set g -> - intersection_vide_in X g -> + forall X:R -> Prop, + compact X -> + (exists z : R, X z) -> + forall g:family, + family_closed_set g -> + intersection_vide_in X g -> exists D : R -> Prop, intersection_vide_finite_in X (subfamily g D). -intros X H Hyp g H0 H1. -set (D' := ind g). -set (f' := fun x y:R => complementary (g x) y /\ D' x). -assert (H2 : forall x:R, (exists y : R, f' x y) -> D' x). -intros; elim H2; intros; unfold f' in H3; elim H3; intros; assumption. -set (f0 := mkfamily D' f' H2). -unfold compact in H; assert (H3 : covering_open_set X f0). -unfold covering_open_set in |- *; split. -unfold covering in |- *; intros; unfold intersection_vide_in in H1; - elim (H1 x); intros; unfold intersection_family in H5; - assert - (H6 := not_ex_all_not _ (fun y:R => forall y0:R, ind g y0 -> g y0 y) H5 x); - assert (H7 := not_all_ex_not _ (fun y0:R => ind g y0 -> g y0 x) H6); - elim H7; intros; exists x0; elim (imply_to_and _ _ H8); - intros; unfold f0 in |- *; simpl in |- *; unfold f' in |- *; - split; [ apply H10 | apply H9 ]. -unfold family_open_set in |- *; intro; elim (classic (D' x)); intro. -apply open_set_P6 with (complementary (g x)). -unfold family_closed_set in H0; unfold closed_set in H0; apply H0. -unfold f0 in |- *; simpl in |- *; unfold f' in |- *; unfold eq_Dom in |- *; - split. -unfold included in |- *; intros; split; [ apply H4 | apply H3 ]. -unfold included in |- *; intros; elim H4; intros; assumption. -apply open_set_P6 with (fun _:R => False). -apply open_set_P4. -unfold eq_Dom in |- *; unfold included in |- *; split; intros; - [ elim H4 - | simpl in H4; unfold f' in H4; elim H4; intros; elim H3; assumption ]. -elim (H _ H3); intros SF H4; exists SF; - unfold intersection_vide_finite_in in |- *; split. -unfold intersection_vide_in in |- *; simpl in |- *; intros; split. -intros; unfold included in |- *; intros; unfold intersection_vide_in in H1; - elim (H1 x); intros; elim H6; intros; apply H7. -unfold intersection_domain in H5; elim H5; intros; assumption. -assumption. -elim (classic (exists y : R, intersection_domain (ind g) SF y)); intro Hyp'. -red in |- *; intro; elim H5; intros; unfold intersection_family in H6; - simpl in H6. -cut (X x0). -intro; unfold covering_finite in H4; elim H4; clear H4; intros H4 _; - unfold covering in H4; elim (H4 x0 H7); intros; simpl in H8; - unfold intersection_domain in H6; cut (ind g x1 /\ SF x1). -intro; assert (H10 := H6 x1 H9); elim H10; clear H10; intros H10 _; elim H8; - clear H8; intros H8 _; unfold f' in H8; unfold complementary in H8; - elim H8; clear H8; intros H8 _; elim H8; assumption. -split. -apply (cond_fam f0). -exists x0; elim H8; intros; assumption. -elim H8; intros; assumption. -unfold intersection_vide_in in H1; elim Hyp'; intros; assert (H8 := H6 _ H7); - elim H8; intros; cut (ind g x1). -intro; elim (H1 x1); intros; apply H12. -apply H11. -apply H9. -apply (cond_fam g); exists x0; assumption. -unfold covering_finite in H4; elim H4; clear H4; intros H4 _; - cut (exists z : R, X z). -intro; elim H5; clear H5; intros; unfold covering in H4; elim (H4 x0 H5); - intros; simpl in H6; elim Hyp'; exists x1; elim H6; - intros; unfold intersection_domain in |- *; split. -apply (cond_fam f0); exists x0; apply H7. -apply H8. -apply Hyp. -unfold covering_finite in H4; elim H4; clear H4; intros; - unfold family_finite in H5; unfold domain_finite in H5; - unfold family_finite in |- *; unfold domain_finite in |- *; - elim H5; clear H5; intros l H5; exists l; intro; elim (H5 x); - intros; split; intro; - [ apply H6; simpl in |- *; simpl in H8; apply H8 | apply (H7 H8) ]. +Proof. + intros X H Hyp g H0 H1. + set (D' := ind g). + set (f' := fun x y:R => complementary (g x) y /\ D' x). + assert (H2 : forall x:R, (exists y : R, f' x y) -> D' x). + intros; elim H2; intros; unfold f' in H3; elim H3; intros; assumption. + set (f0 := mkfamily D' f' H2). + unfold compact in H; assert (H3 : covering_open_set X f0). + unfold covering_open_set in |- *; split. + unfold covering in |- *; intros; unfold intersection_vide_in in H1; + elim (H1 x); intros; unfold intersection_family in H5; + assert + (H6 := not_ex_all_not _ (fun y:R => forall y0:R, ind g y0 -> g y0 y) H5 x); + assert (H7 := not_all_ex_not _ (fun y0:R => ind g y0 -> g y0 x) H6); + elim H7; intros; exists x0; elim (imply_to_and _ _ H8); + intros; unfold f0 in |- *; simpl in |- *; unfold f' in |- *; + split; [ apply H10 | apply H9 ]. + unfold family_open_set in |- *; intro; elim (classic (D' x)); intro. + apply open_set_P6 with (complementary (g x)). + unfold family_closed_set in H0; unfold closed_set in H0; apply H0. + unfold f0 in |- *; simpl in |- *; unfold f' in |- *; unfold eq_Dom in |- *; + split. + unfold included in |- *; intros; split; [ apply H4 | apply H3 ]. + unfold included in |- *; intros; elim H4; intros; assumption. + apply open_set_P6 with (fun _:R => False). + apply open_set_P4. + unfold eq_Dom in |- *; unfold included in |- *; split; intros; + [ elim H4 + | simpl in H4; unfold f' in H4; elim H4; intros; elim H3; assumption ]. + elim (H _ H3); intros SF H4; exists SF; + unfold intersection_vide_finite_in in |- *; split. + unfold intersection_vide_in in |- *; simpl in |- *; intros; split. + intros; unfold included in |- *; intros; unfold intersection_vide_in in H1; + elim (H1 x); intros; elim H6; intros; apply H7. + unfold intersection_domain in H5; elim H5; intros; assumption. + assumption. + elim (classic (exists y : R, intersection_domain (ind g) SF y)); intro Hyp'. + red in |- *; intro; elim H5; intros; unfold intersection_family in H6; + simpl in H6. + cut (X x0). + intro; unfold covering_finite in H4; elim H4; clear H4; intros H4 _; + unfold covering in H4; elim (H4 x0 H7); intros; simpl in H8; + unfold intersection_domain in H6; cut (ind g x1 /\ SF x1). + intro; assert (H10 := H6 x1 H9); elim H10; clear H10; intros H10 _; elim H8; + clear H8; intros H8 _; unfold f' in H8; unfold complementary in H8; + elim H8; clear H8; intros H8 _; elim H8; assumption. + split. + apply (cond_fam f0). + exists x0; elim H8; intros; assumption. + elim H8; intros; assumption. + unfold intersection_vide_in in H1; elim Hyp'; intros; assert (H8 := H6 _ H7); + elim H8; intros; cut (ind g x1). + intro; elim (H1 x1); intros; apply H12. + apply H11. + apply H9. + apply (cond_fam g); exists x0; assumption. + unfold covering_finite in H4; elim H4; clear H4; intros H4 _; + cut (exists z : R, X z). + intro; elim H5; clear H5; intros; unfold covering in H4; elim (H4 x0 H5); + intros; simpl in H6; elim Hyp'; exists x1; elim H6; + intros; unfold intersection_domain in |- *; split. + apply (cond_fam f0); exists x0; apply H7. + apply H8. + apply Hyp. + unfold covering_finite in H4; elim H4; clear H4; intros; + unfold family_finite in H5; unfold domain_finite in H5; + unfold family_finite in |- *; unfold domain_finite in |- *; + elim H5; clear H5; intros l H5; exists l; intro; elim (H5 x); + intros; split; intro; + [ apply H6; simpl in |- *; simpl in H8; apply H8 | apply (H7 H8) ]. Qed. Theorem Bolzano_Weierstrass : - forall (un:nat -> R) (X:R -> Prop), - compact X -> (forall n:nat, X (un n)) -> exists l : R, ValAdh un l. -intros; cut (exists l : R, ValAdh_un un l). -intro; elim H1; intros; exists x; elim (ValAdh_un_prop un x); intros; - apply (H4 H2). -assert (H1 : exists z : R, X z). -exists (un 0%nat); apply H0. -set (D := fun x:R => exists n : nat, x = INR n). -set - (g := - fun x:R => - adherence (fun y:R => (exists p : nat, y = un p /\ x <= INR p) /\ D x)). -assert (H2 : forall x:R, (exists y : R, g x y) -> D x). -intros; elim H2; intros; unfold g in H3; unfold adherence in H3; - unfold point_adherent in H3. -assert (H4 : neighbourhood (disc x0 (mkposreal _ Rlt_0_1)) x0). -unfold neighbourhood in |- *; exists (mkposreal _ Rlt_0_1); - unfold included in |- *; trivial. -elim (H3 _ H4); intros; unfold intersection_domain in H5; decompose [and] H5; - assumption. -set (f0 := mkfamily D g H2). -assert (H3 := compact_P6 X H H1 f0). -elim (classic (exists l : R, ValAdh_un un l)); intro. -assumption. -cut (family_closed_set f0). -intro; cut (intersection_vide_in X f0). -intro; assert (H7 := H3 H5 H6). -elim H7; intros SF H8; unfold intersection_vide_finite_in in H8; elim H8; - clear H8; intros; unfold intersection_vide_in in H8; - elim (H8 0); intros _ H10; elim H10; unfold family_finite in H9; - unfold domain_finite in H9; elim H9; clear H9; intros l H9; - set (r := MaxRlist l); cut (D r). -intro; unfold D in H11; elim H11; intros; exists (un x); - unfold intersection_family in |- *; simpl in |- *; - unfold intersection_domain in |- *; intros; split. -unfold g in |- *; apply adherence_P1; split. -exists x; split; - [ reflexivity - | rewrite <- H12; unfold r in |- *; apply MaxRlist_P1; elim (H9 y); intros; - apply H14; simpl in |- *; apply H13 ]. -elim H13; intros; assumption. -elim H13; intros; assumption. -elim (H9 r); intros. -simpl in H12; unfold intersection_domain in H12; cut (In r l). -intro; elim (H12 H13); intros; assumption. -unfold r in |- *; apply MaxRlist_P2; - cut (exists z : R, intersection_domain (ind f0) SF z). -intro; elim H13; intros; elim (H9 x); intros; simpl in H15; - assert (H17 := H15 H14); exists x; apply H17. -elim (classic (exists z : R, intersection_domain (ind f0) SF z)); intro. -assumption. -elim (H8 0); intros _ H14; elim H1; intros; - assert - (H16 := - not_ex_all_not _ (fun y:R => intersection_family (subfamily f0 SF) y) H14); - assert - (H17 := - not_ex_all_not _ (fun z:R => intersection_domain (ind f0) SF z) H13); - assert (H18 := H16 x); unfold intersection_family in H18; - simpl in H18; - assert - (H19 := - not_all_ex_not _ (fun y:R => intersection_domain D SF y -> g y x /\ SF y) - H18); elim H19; intros; assert (H21 := imply_to_and _ _ H20); - elim (H17 x0); elim H21; intros; assumption. -unfold intersection_vide_in in |- *; intros; split. -intro; simpl in H6; unfold f0 in |- *; simpl in |- *; unfold g in |- *; - apply included_trans with (adherence X). -apply adherence_P4. -unfold included in |- *; intros; elim H7; intros; elim H8; intros; elim H10; - intros; rewrite H11; apply H0. -apply adherence_P2; apply compact_P2; assumption. -apply H4. -unfold family_closed_set in |- *; unfold f0 in |- *; simpl in |- *; - unfold g in |- *; intro; apply adherence_P3. + forall (un:nat -> R) (X:R -> Prop), + compact X -> (forall n:nat, X (un n)) -> exists l : R, ValAdh un l. +Proof. + intros; cut (exists l : R, ValAdh_un un l). + intro; elim H1; intros; exists x; elim (ValAdh_un_prop un x); intros; + apply (H4 H2). + assert (H1 : exists z : R, X z). + exists (un 0%nat); apply H0. + set (D := fun x:R => exists n : nat, x = INR n). + set + (g := + fun x:R => + adherence (fun y:R => (exists p : nat, y = un p /\ x <= INR p) /\ D x)). + assert (H2 : forall x:R, (exists y : R, g x y) -> D x). + intros; elim H2; intros; unfold g in H3; unfold adherence in H3; + unfold point_adherent in H3. + assert (H4 : neighbourhood (disc x0 (mkposreal _ Rlt_0_1)) x0). + unfold neighbourhood in |- *; exists (mkposreal _ Rlt_0_1); + unfold included in |- *; trivial. + elim (H3 _ H4); intros; unfold intersection_domain in H5; decompose [and] H5; + assumption. + set (f0 := mkfamily D g H2). + assert (H3 := compact_P6 X H H1 f0). + elim (classic (exists l : R, ValAdh_un un l)); intro. + assumption. + cut (family_closed_set f0). + intro; cut (intersection_vide_in X f0). + intro; assert (H7 := H3 H5 H6). + elim H7; intros SF H8; unfold intersection_vide_finite_in in H8; elim H8; + clear H8; intros; unfold intersection_vide_in in H8; + elim (H8 0); intros _ H10; elim H10; unfold family_finite in H9; + unfold domain_finite in H9; elim H9; clear H9; intros l H9; + set (r := MaxRlist l); cut (D r). + intro; unfold D in H11; elim H11; intros; exists (un x); + unfold intersection_family in |- *; simpl in |- *; + unfold intersection_domain in |- *; intros; split. + unfold g in |- *; apply adherence_P1; split. + exists x; split; + [ reflexivity + | rewrite <- H12; unfold r in |- *; apply MaxRlist_P1; elim (H9 y); intros; + apply H14; simpl in |- *; apply H13 ]. + elim H13; intros; assumption. + elim H13; intros; assumption. + elim (H9 r); intros. + simpl in H12; unfold intersection_domain in H12; cut (In r l). + intro; elim (H12 H13); intros; assumption. + unfold r in |- *; apply MaxRlist_P2; + cut (exists z : R, intersection_domain (ind f0) SF z). + intro; elim H13; intros; elim (H9 x); intros; simpl in H15; + assert (H17 := H15 H14); exists x; apply H17. + elim (classic (exists z : R, intersection_domain (ind f0) SF z)); intro. + assumption. + elim (H8 0); intros _ H14; elim H1; intros; + assert + (H16 := + not_ex_all_not _ (fun y:R => intersection_family (subfamily f0 SF) y) H14); + assert + (H17 := + not_ex_all_not _ (fun z:R => intersection_domain (ind f0) SF z) H13); + assert (H18 := H16 x); unfold intersection_family in H18; + simpl in H18; + assert + (H19 := + not_all_ex_not _ (fun y:R => intersection_domain D SF y -> g y x /\ SF y) + H18); elim H19; intros; assert (H21 := imply_to_and _ _ H20); + elim (H17 x0); elim H21; intros; assumption. + unfold intersection_vide_in in |- *; intros; split. + intro; simpl in H6; unfold f0 in |- *; simpl in |- *; unfold g in |- *; + apply included_trans with (adherence X). + apply adherence_P4. + unfold included in |- *; intros; elim H7; intros; elim H8; intros; elim H10; + intros; rewrite H11; apply H0. + apply adherence_P2; apply compact_P2; assumption. + apply H4. + unfold family_closed_set in |- *; unfold f0 in |- *; simpl in |- *; + unfold g in |- *; intro; apply adherence_P3. Qed. (********************************************************) -(* Proof of Heine's theorem *) +(** * Proof of Heine's theorem *) (********************************************************) Definition uniform_continuity (f:R -> R) (X:R -> Prop) : Prop := forall eps:posreal, - exists delta : posreal, + exists delta : posreal, (forall x y:R, - X x -> X y -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps). + X x -> X y -> Rabs (x - y) < delta -> Rabs (f x - f y) < eps). Lemma is_lub_u : - forall (E:R -> Prop) (x y:R), is_lub E x -> is_lub E y -> x = y. -unfold is_lub in |- *; intros; elim H; elim H0; intros; apply Rle_antisym; - [ apply (H4 _ H1) | apply (H2 _ H3) ]. + forall (E:R -> Prop) (x y:R), is_lub E x -> is_lub E y -> x = y. +Proof. + unfold is_lub in |- *; intros; elim H; elim H0; intros; apply Rle_antisym; + [ apply (H4 _ H1) | apply (H2 _ H3) ]. Qed. Lemma domain_P1 : - forall X:R -> Prop, - ~ (exists y : R, X y) \/ - (exists y : R, X y /\ (forall x:R, X x -> x = y)) \/ - (exists x : R, (exists y : R, X x /\ X y /\ x <> y)). -intro; elim (classic (exists y : R, X y)); intro. -right; elim H; intros; elim (classic (exists y : R, X y /\ y <> x)); intro. -right; elim H1; intros; elim H2; intros; exists x; exists x0; intros. -split; - [ assumption - | split; [ assumption | apply (sym_not_eq (A:=R)); assumption ] ]. -left; exists x; split. -assumption. -intros; case (Req_dec x0 x); intro. -assumption. -elim H1; exists x0; split; assumption. -left; assumption. + forall X:R -> Prop, + ~ (exists y : R, X y) \/ + (exists y : R, X y /\ (forall x:R, X x -> x = y)) \/ + (exists x : R, (exists y : R, X x /\ X y /\ x <> y)). +Proof. + intro; elim (classic (exists y : R, X y)); intro. + right; elim H; intros; elim (classic (exists y : R, X y /\ y <> x)); intro. + right; elim H1; intros; elim H2; intros; exists x; exists x0; intros. + split; + [ assumption + | split; [ assumption | apply (sym_not_eq (A:=R)); assumption ] ]. + left; exists x; split. + assumption. + intros; case (Req_dec x0 x); intro. + assumption. + elim H1; exists x0; split; assumption. + left; assumption. Qed. Theorem Heine : - forall (f:R -> R) (X:R -> Prop), - compact X -> - (forall x:R, X x -> continuity_pt f x) -> uniform_continuity f X. -intros f0 X H0 H; elim (domain_P1 X); intro Hyp. + forall (f:R -> R) (X:R -> Prop), + compact X -> + (forall x:R, X x -> continuity_pt f x) -> uniform_continuity f X. +Proof. + intros f0 X H0 H; elim (domain_P1 X); intro Hyp. (* X est vide *) -unfold uniform_continuity in |- *; intros; exists (mkposreal _ Rlt_0_1); - intros; elim Hyp; exists x; assumption. -elim Hyp; clear Hyp; intro Hyp. + unfold uniform_continuity in |- *; intros; exists (mkposreal _ Rlt_0_1); + intros; elim Hyp; exists x; assumption. + elim Hyp; clear Hyp; intro Hyp. (* X possède un seul élément *) -unfold uniform_continuity in |- *; intros; exists (mkposreal _ Rlt_0_1); - intros; elim Hyp; clear Hyp; intros; elim H4; clear H4; - intros; assert (H6 := H5 _ H1); assert (H7 := H5 _ H2); - rewrite H6; rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; apply (cond_pos eps). + unfold uniform_continuity in |- *; intros; exists (mkposreal _ Rlt_0_1); + intros; elim Hyp; clear Hyp; intros; elim H4; clear H4; + intros; assert (H6 := H5 _ H1); assert (H7 := H5 _ H2); + rewrite H6; rewrite H7; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; apply (cond_pos eps). (* X possède au moins deux éléments distincts *) -assert - (X_enc : - exists m : R, (exists M : R, (forall x:R, X x -> m <= x <= M) /\ m < M)). -assert (H1 := compact_P1 X H0); unfold bounded in H1; elim H1; intros; - elim H2; intros; exists x; exists x0; split. -apply H3. -elim Hyp; intros; elim H4; intros; decompose [and] H5; - assert (H10 := H3 _ H6); assert (H11 := H3 _ H8); - elim H10; intros; elim H11; intros; case (total_order_T x x0); - intro. -elim s; intro. -assumption. -rewrite b in H13; rewrite b in H7; elim H9; apply Rle_antisym; - apply Rle_trans with x0; assumption. -elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H13 H14) r)). -elim X_enc; clear X_enc; intros m X_enc; elim X_enc; clear X_enc; - intros M X_enc; elim X_enc; clear X_enc Hyp; intros X_enc Hyp; - unfold uniform_continuity in |- *; intro; - assert (H1 : forall t:posreal, 0 < t / 2). -intro; unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ apply (cond_pos t) | apply Rinv_0_lt_compat; prove_sup0 ]. -set - (g := - fun x y:R => - X x /\ - (exists del : posreal, - (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ - is_lub - (fun zeta:R => + assert + (X_enc : + exists m : R, (exists M : R, (forall x:R, X x -> m <= x <= M) /\ m < M)). + assert (H1 := compact_P1 X H0); unfold bounded in H1; elim H1; intros; + elim H2; intros; exists x; exists x0; split. + apply H3. + elim Hyp; intros; elim H4; intros; decompose [and] H5; + assert (H10 := H3 _ H6); assert (H11 := H3 _ H8); + elim H10; intros; elim H11; intros; case (total_order_T x x0); + intro. + elim s; intro. + assumption. + rewrite b in H13; rewrite b in H7; elim H9; apply Rle_antisym; + apply Rle_trans with x0; assumption. + elim (Rlt_irrefl _ (Rle_lt_trans _ _ _ (Rle_trans _ _ _ H13 H14) r)). + elim X_enc; clear X_enc; intros m X_enc; elim X_enc; clear X_enc; + intros M X_enc; elim X_enc; clear X_enc Hyp; intros X_enc Hyp; + unfold uniform_continuity in |- *; intro; + assert (H1 : forall t:posreal, 0 < t / 2). + intro; unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ apply (cond_pos t) | apply Rinv_0_lt_compat; prove_sup0 ]. + set + (g := + fun x y:R => + X x /\ + (exists del : posreal, + (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ + is_lub + (fun zeta:R => 0 < zeta <= M - m /\ (forall z:R, Rabs (z - x) < zeta -> Rabs (f0 z - f0 x) < eps / 2)) - del /\ disc x (mkposreal (del / 2) (H1 del)) y)). -assert (H2 : forall x:R, (exists y : R, g x y) -> X x). -intros; elim H2; intros; unfold g in H3; elim H3; clear H3; intros H3 _; - apply H3. -set (f' := mkfamily X g H2); unfold compact in H0; - assert (H3 : covering_open_set X f'). -unfold covering_open_set in |- *; split. -unfold covering in |- *; intros; exists x; simpl in |- *; unfold g in |- *; - split. -assumption. -assert (H4 := H _ H3); unfold continuity_pt in H4; unfold continue_in in H4; - unfold limit1_in in H4; unfold limit_in in H4; simpl in H4; - unfold R_dist in H4; elim (H4 (eps / 2) (H1 eps)); - intros; - set - (E := - fun zeta:R => - 0 < zeta <= M - m /\ - (forall z:R, Rabs (z - x) < zeta -> Rabs (f0 z - f0 x) < eps / 2)); - assert (H6 : bound E). -unfold bound in |- *; exists (M - m); unfold is_upper_bound in |- *; - unfold E in |- *; intros; elim H6; clear H6; intros H6 _; - elim H6; clear H6; intros _ H6; apply H6. -assert (H7 : exists x : R, E x). -elim H5; clear H5; intros; exists (Rmin x0 (M - m)); unfold E in |- *; intros; - split. -split. -unfold Rmin in |- *; case (Rle_dec x0 (M - m)); intro. -apply H5. -apply Rlt_Rminus; apply Hyp. -apply Rmin_r. -intros; case (Req_dec x z); intro. -rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - apply (H1 eps). -apply H7; split. -unfold D_x, no_cond in |- *; split; [ trivial | assumption ]. -apply Rlt_le_trans with (Rmin x0 (M - m)); [ apply H8 | apply Rmin_l ]. -assert (H8 := completeness _ H6 H7); elim H8; clear H8; intros; - cut (0 < x1 <= M - m). -intro; elim H8; clear H8; intros; exists (mkposreal _ H8); split. -intros; cut (exists alp : R, Rabs (z - x) < alp <= x1 /\ E alp). -intros; elim H11; intros; elim H12; clear H12; intros; unfold E in H13; - elim H13; intros; apply H15. -elim H12; intros; assumption. -elim (classic (exists alp : R, Rabs (z - x) < alp <= x1 /\ E alp)); intro. -assumption. -assert - (H12 := - not_ex_all_not _ (fun alp:R => Rabs (z - x) < alp <= x1 /\ E alp) H11); - unfold is_lub in p; elim p; intros; cut (is_upper_bound E (Rabs (z - x))). -intro; assert (H16 := H14 _ H15); - elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H10 H16)). -unfold is_upper_bound in |- *; intros; unfold is_upper_bound in H13; - assert (H16 := H13 _ H15); case (Rle_dec x2 (Rabs (z - x))); - intro. -assumption. -elim (H12 x2); split; [ split; [ auto with real | assumption ] | assumption ]. -split. -apply p. -unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; - rewrite Rabs_R0; simpl in |- *; unfold Rdiv in |- *; - apply Rmult_lt_0_compat; [ apply H8 | apply Rinv_0_lt_compat; prove_sup0 ]. -elim H7; intros; unfold E in H8; elim H8; intros H9 _; elim H9; intros H10 _; - unfold is_lub in p; elim p; intros; unfold is_upper_bound in H12; - unfold is_upper_bound in H11; split. -apply Rlt_le_trans with x2; [ assumption | apply (H11 _ H8) ]. -apply H12; intros; unfold E in H13; elim H13; intros; elim H14; intros; - assumption. -unfold family_open_set in |- *; intro; simpl in |- *; elim (classic (X x)); - intro. -unfold g in |- *; unfold open_set in |- *; intros; elim H4; clear H4; - intros _ H4; elim H4; clear H4; intros; elim H4; clear H4; - intros; unfold neighbourhood in |- *; case (Req_dec x x0); - intro. -exists (mkposreal _ (H1 x1)); rewrite <- H6; unfold included in |- *; intros; - split. -assumption. -exists x1; split. -apply H4. -split. -elim H5; intros; apply H8. -apply H7. -set (d := x1 / 2 - Rabs (x0 - x)); assert (H7 : 0 < d). -unfold d in |- *; apply Rlt_Rminus; elim H5; clear H5; intros; - unfold disc in H7; apply H7. -exists (mkposreal _ H7); unfold included in |- *; intros; split. -assumption. -exists x1; split. -apply H4. -elim H5; intros; split. -assumption. -unfold disc in H8; simpl in H8; unfold disc in |- *; simpl in |- *; - unfold disc in H10; simpl in H10; - apply Rle_lt_trans with (Rabs (x2 - x0) + Rabs (x0 - x)). -replace (x2 - x) with (x2 - x0 + (x0 - x)); [ apply Rabs_triang | ring ]. -replace (x1 / 2) with (d + Rabs (x0 - x)); [ idtac | unfold d in |- *; ring ]. -do 2 rewrite <- (Rplus_comm (Rabs (x0 - x))); apply Rplus_lt_compat_l; - apply H8. -apply open_set_P6 with (fun _:R => False). -apply open_set_P4. -unfold eq_Dom in |- *; unfold included in |- *; intros; split. -intros; elim H4. -intros; unfold g in H4; elim H4; clear H4; intros H4 _; elim H3; apply H4. -elim (H0 _ H3); intros DF H4; unfold covering_finite in H4; elim H4; clear H4; - intros; unfold family_finite in H5; unfold domain_finite in H5; - unfold covering in H4; simpl in H4; simpl in H5; elim H5; - clear H5; intros l H5; unfold intersection_domain in H5; - cut - (forall x:R, - In x l -> - exists del : R, - 0 < del /\ - (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ - included (g x) (fun z:R => Rabs (z - x) < del / 2)). -intros; - assert - (H7 := - Rlist_P1 l - (fun x del:R => - 0 < del /\ - (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ - included (g x) (fun z:R => Rabs (z - x) < del / 2)) H6); - elim H7; clear H7; intros l' H7; elim H7; clear H7; - intros; set (D := MinRlist l'); cut (0 < D / 2). -intro; exists (mkposreal _ H9); intros; assert (H13 := H4 _ H10); elim H13; - clear H13; intros xi H13; assert (H14 : In xi l). -unfold g in H13; decompose [and] H13; elim (H5 xi); intros; apply H14; split; - assumption. -elim (pos_Rl_P2 l xi); intros H15 _; elim (H15 H14); intros i H16; elim H16; - intros; apply Rle_lt_trans with (Rabs (f0 x - f0 xi) + Rabs (f0 xi - f0 y)). -replace (f0 x - f0 y) with (f0 x - f0 xi + (f0 xi - f0 y)); - [ apply Rabs_triang | ring ]. -rewrite (double_var eps); apply Rplus_lt_compat. -assert (H19 := H8 i H17); elim H19; clear H19; intros; rewrite <- H18 in H20; - elim H20; clear H20; intros; apply H20; unfold included in H21; - apply Rlt_trans with (pos_Rl l' i / 2). -apply H21. -elim H13; clear H13; intros; assumption. -unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2. -prove_sup0. -rewrite Rmult_comm; rewrite Rmult_assoc; rewrite <- Rinv_l_sym. -rewrite Rmult_1_r; pattern (pos_Rl l' i) at 1 in |- *; rewrite <- Rplus_0_r; - rewrite double; apply Rplus_lt_compat_l; apply H19. -discrR. -assert (H19 := H8 i H17); elim H19; clear H19; intros; rewrite <- H18 in H20; - elim H20; clear H20; intros; rewrite <- Rabs_Ropp; - rewrite Ropp_minus_distr; apply H20; unfold included in H21; - elim H13; intros; assert (H24 := H21 x H22); - apply Rle_lt_trans with (Rabs (y - x) + Rabs (x - xi)). -replace (y - xi) with (y - x + (x - xi)); [ apply Rabs_triang | ring ]. -rewrite (double_var (pos_Rl l' i)); apply Rplus_lt_compat. -apply Rlt_le_trans with (D / 2). -rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H12. -unfold Rdiv in |- *; do 2 rewrite <- (Rmult_comm (/ 2)); - apply Rmult_le_compat_l. -left; apply Rinv_0_lt_compat; prove_sup0. -unfold D in |- *; apply MinRlist_P1; elim (pos_Rl_P2 l' (pos_Rl l' i)); - intros; apply H26; exists i; split; - [ rewrite <- H7; assumption | reflexivity ]. -assumption. -unfold Rdiv in |- *; apply Rmult_lt_0_compat; - [ unfold D in |- *; apply MinRlist_P2; intros; elim (pos_Rl_P2 l' y); intros; - elim (H10 H9); intros; elim H12; intros; rewrite H14; - rewrite <- H7 in H13; elim (H8 x H13); intros; - apply H15 - | apply Rinv_0_lt_compat; prove_sup0 ]. -intros; elim (H5 x); intros; elim (H8 H6); intros; - set - (E := - fun zeta:R => - 0 < zeta <= M - m /\ - (forall z:R, Rabs (z - x) < zeta -> Rabs (f0 z - f0 x) < eps / 2)); - assert (H11 : bound E). -unfold bound in |- *; exists (M - m); unfold is_upper_bound in |- *; - unfold E in |- *; intros; elim H11; clear H11; intros H11 _; - elim H11; clear H11; intros _ H11; apply H11. -assert (H12 : exists x : R, E x). -assert (H13 := H _ H9); unfold continuity_pt in H13; - unfold continue_in in H13; unfold limit1_in in H13; - unfold limit_in in H13; simpl in H13; unfold R_dist in H13; - elim (H13 _ (H1 eps)); intros; elim H12; clear H12; - intros; exists (Rmin x0 (M - m)); unfold E in |- *; - intros; split. -split; - [ unfold Rmin in |- *; case (Rle_dec x0 (M - m)); intro; - [ apply H12 | apply Rlt_Rminus; apply Hyp ] - | apply Rmin_r ]. -intros; case (Req_dec x z); intro. -rewrite H16; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; - apply (H1 eps). -apply H14; split; - [ unfold D_x, no_cond in |- *; split; [ trivial | assumption ] - | apply Rlt_le_trans with (Rmin x0 (M - m)); [ apply H15 | apply Rmin_l ] ]. -assert (H13 := completeness _ H11 H12); elim H13; clear H13; intros; - cut (0 < x0 <= M - m). -intro; elim H13; clear H13; intros; exists x0; split. -assumption. -split. -intros; cut (exists alp : R, Rabs (z - x) < alp <= x0 /\ E alp). -intros; elim H16; intros; elim H17; clear H17; intros; unfold E in H18; - elim H18; intros; apply H20; elim H17; intros; assumption. -elim (classic (exists alp : R, Rabs (z - x) < alp <= x0 /\ E alp)); intro. -assumption. -assert - (H17 := - not_ex_all_not _ (fun alp:R => Rabs (z - x) < alp <= x0 /\ E alp) H16); - unfold is_lub in p; elim p; intros; cut (is_upper_bound E (Rabs (z - x))). -intro; assert (H21 := H19 _ H20); - elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H15 H21)). -unfold is_upper_bound in |- *; intros; unfold is_upper_bound in H18; - assert (H21 := H18 _ H20); case (Rle_dec x1 (Rabs (z - x))); - intro. -assumption. -elim (H17 x1); split. -split; [ auto with real | assumption ]. -assumption. -unfold included, g in |- *; intros; elim H15; intros; elim H17; intros; - decompose [and] H18; cut (x0 = x2). -intro; rewrite H20; apply H22. -unfold E in p; eapply is_lub_u. -apply p. -apply H21. -elim H12; intros; unfold E in H13; elim H13; intros H14 _; elim H14; - intros H15 _; unfold is_lub in p; elim p; intros; - unfold is_upper_bound in H16; unfold is_upper_bound in H17; - split. -apply Rlt_le_trans with x1; [ assumption | apply (H16 _ H13) ]. -apply H17; intros; unfold E in H18; elim H18; intros; elim H19; intros; - assumption. + del /\ disc x (mkposreal (del / 2) (H1 del)) y)). + assert (H2 : forall x:R, (exists y : R, g x y) -> X x). + intros; elim H2; intros; unfold g in H3; elim H3; clear H3; intros H3 _; + apply H3. + set (f' := mkfamily X g H2); unfold compact in H0; + assert (H3 : covering_open_set X f'). + unfold covering_open_set in |- *; split. + unfold covering in |- *; intros; exists x; simpl in |- *; unfold g in |- *; + split. + assumption. + assert (H4 := H _ H3); unfold continuity_pt in H4; unfold continue_in in H4; + unfold limit1_in in H4; unfold limit_in in H4; simpl in H4; + unfold R_dist in H4; elim (H4 (eps / 2) (H1 eps)); + intros; + set + (E := + fun zeta:R => + 0 < zeta <= M - m /\ + (forall z:R, Rabs (z - x) < zeta -> Rabs (f0 z - f0 x) < eps / 2)); + assert (H6 : bound E). + unfold bound in |- *; exists (M - m); unfold is_upper_bound in |- *; + unfold E in |- *; intros; elim H6; clear H6; intros H6 _; + elim H6; clear H6; intros _ H6; apply H6. + assert (H7 : exists x : R, E x). + elim H5; clear H5; intros; exists (Rmin x0 (M - m)); unfold E in |- *; intros; + split. + split. + unfold Rmin in |- *; case (Rle_dec x0 (M - m)); intro. + apply H5. + apply Rlt_Rminus; apply Hyp. + apply Rmin_r. + intros; case (Req_dec x z); intro. + rewrite H9; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + apply (H1 eps). + apply H7; split. + unfold D_x, no_cond in |- *; split; [ trivial | assumption ]. + apply Rlt_le_trans with (Rmin x0 (M - m)); [ apply H8 | apply Rmin_l ]. + assert (H8 := completeness _ H6 H7); elim H8; clear H8; intros; + cut (0 < x1 <= M - m). + intro; elim H8; clear H8; intros; exists (mkposreal _ H8); split. + intros; cut (exists alp : R, Rabs (z - x) < alp <= x1 /\ E alp). + intros; elim H11; intros; elim H12; clear H12; intros; unfold E in H13; + elim H13; intros; apply H15. + elim H12; intros; assumption. + elim (classic (exists alp : R, Rabs (z - x) < alp <= x1 /\ E alp)); intro. + assumption. + assert + (H12 := + not_ex_all_not _ (fun alp:R => Rabs (z - x) < alp <= x1 /\ E alp) H11); + unfold is_lub in p; elim p; intros; cut (is_upper_bound E (Rabs (z - x))). + intro; assert (H16 := H14 _ H15); + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H10 H16)). + unfold is_upper_bound in |- *; intros; unfold is_upper_bound in H13; + assert (H16 := H13 _ H15); case (Rle_dec x2 (Rabs (z - x))); + intro. + assumption. + elim (H12 x2); split; [ split; [ auto with real | assumption ] | assumption ]. + split. + apply p. + unfold disc in |- *; unfold Rminus in |- *; rewrite Rplus_opp_r; + rewrite Rabs_R0; simpl in |- *; unfold Rdiv in |- *; + apply Rmult_lt_0_compat; [ apply H8 | apply Rinv_0_lt_compat; prove_sup0 ]. + elim H7; intros; unfold E in H8; elim H8; intros H9 _; elim H9; intros H10 _; + unfold is_lub in p; elim p; intros; unfold is_upper_bound in H12; + unfold is_upper_bound in H11; split. + apply Rlt_le_trans with x2; [ assumption | apply (H11 _ H8) ]. + apply H12; intros; unfold E in H13; elim H13; intros; elim H14; intros; + assumption. + unfold family_open_set in |- *; intro; simpl in |- *; elim (classic (X x)); + intro. + unfold g in |- *; unfold open_set in |- *; intros; elim H4; clear H4; + intros _ H4; elim H4; clear H4; intros; elim H4; clear H4; + intros; unfold neighbourhood in |- *; case (Req_dec x x0); + intro. + exists (mkposreal _ (H1 x1)); rewrite <- H6; unfold included in |- *; intros; + split. + assumption. + exists x1; split. + apply H4. + split. + elim H5; intros; apply H8. + apply H7. + set (d := x1 / 2 - Rabs (x0 - x)); assert (H7 : 0 < d). + unfold d in |- *; apply Rlt_Rminus; elim H5; clear H5; intros; + unfold disc in H7; apply H7. + exists (mkposreal _ H7); unfold included in |- *; intros; split. + assumption. + exists x1; split. + apply H4. + elim H5; intros; split. + assumption. + unfold disc in H8; simpl in H8; unfold disc in |- *; simpl in |- *; + unfold disc in H10; simpl in H10; + apply Rle_lt_trans with (Rabs (x2 - x0) + Rabs (x0 - x)). + replace (x2 - x) with (x2 - x0 + (x0 - x)); [ apply Rabs_triang | ring ]. + replace (x1 / 2) with (d + Rabs (x0 - x)); [ idtac | unfold d in |- *; ring ]. + do 2 rewrite <- (Rplus_comm (Rabs (x0 - x))); apply Rplus_lt_compat_l; + apply H8. + apply open_set_P6 with (fun _:R => False). + apply open_set_P4. + unfold eq_Dom in |- *; unfold included in |- *; intros; split. + intros; elim H4. + intros; unfold g in H4; elim H4; clear H4; intros H4 _; elim H3; apply H4. + elim (H0 _ H3); intros DF H4; unfold covering_finite in H4; elim H4; clear H4; + intros; unfold family_finite in H5; unfold domain_finite in H5; + unfold covering in H4; simpl in H4; simpl in H5; elim H5; + clear H5; intros l H5; unfold intersection_domain in H5; + cut + (forall x:R, + In x l -> + exists del : R, + 0 < del /\ + (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ + included (g x) (fun z:R => Rabs (z - x) < del / 2)). + intros; + assert + (H7 := + Rlist_P1 l + (fun x del:R => + 0 < del /\ + (forall z:R, Rabs (z - x) < del -> Rabs (f0 z - f0 x) < eps / 2) /\ + included (g x) (fun z:R => Rabs (z - x) < del / 2)) H6); + elim H7; clear H7; intros l' H7; elim H7; clear H7; + intros; set (D := MinRlist l'); cut (0 < D / 2). + intro; exists (mkposreal _ H9); intros; assert (H13 := H4 _ H10); elim H13; + clear H13; intros xi H13; assert (H14 : In xi l). + unfold g in H13; decompose [and] H13; elim (H5 xi); intros; apply H14; split; + assumption. + elim (pos_Rl_P2 l xi); intros H15 _; elim (H15 H14); intros i H16; elim H16; + intros; apply Rle_lt_trans with (Rabs (f0 x - f0 xi) + Rabs (f0 xi - f0 y)). + replace (f0 x - f0 y) with (f0 x - f0 xi + (f0 xi - f0 y)); + [ apply Rabs_triang | ring ]. + rewrite (double_var eps); apply Rplus_lt_compat. + assert (H19 := H8 i H17); elim H19; clear H19; intros; rewrite <- H18 in H20; + elim H20; clear H20; intros; apply H20; unfold included in H21; + apply Rlt_trans with (pos_Rl l' i / 2). + apply H21. + elim H13; clear H13; intros; assumption. + unfold Rdiv in |- *; apply Rmult_lt_reg_l with 2. + prove_sup0. + rewrite Rmult_comm; rewrite Rmult_assoc; rewrite <- Rinv_l_sym. + rewrite Rmult_1_r; pattern (pos_Rl l' i) at 1 in |- *; rewrite <- Rplus_0_r; + rewrite double; apply Rplus_lt_compat_l; apply H19. + discrR. + assert (H19 := H8 i H17); elim H19; clear H19; intros; rewrite <- H18 in H20; + elim H20; clear H20; intros; rewrite <- Rabs_Ropp; + rewrite Ropp_minus_distr; apply H20; unfold included in H21; + elim H13; intros; assert (H24 := H21 x H22); + apply Rle_lt_trans with (Rabs (y - x) + Rabs (x - xi)). + replace (y - xi) with (y - x + (x - xi)); [ apply Rabs_triang | ring ]. + rewrite (double_var (pos_Rl l' i)); apply Rplus_lt_compat. + apply Rlt_le_trans with (D / 2). + rewrite <- Rabs_Ropp; rewrite Ropp_minus_distr; apply H12. + unfold Rdiv in |- *; do 2 rewrite <- (Rmult_comm (/ 2)); + apply Rmult_le_compat_l. + left; apply Rinv_0_lt_compat; prove_sup0. + unfold D in |- *; apply MinRlist_P1; elim (pos_Rl_P2 l' (pos_Rl l' i)); + intros; apply H26; exists i; split; + [ rewrite <- H7; assumption | reflexivity ]. + assumption. + unfold Rdiv in |- *; apply Rmult_lt_0_compat; + [ unfold D in |- *; apply MinRlist_P2; intros; elim (pos_Rl_P2 l' y); intros; + elim (H10 H9); intros; elim H12; intros; rewrite H14; + rewrite <- H7 in H13; elim (H8 x H13); intros; + apply H15 + | apply Rinv_0_lt_compat; prove_sup0 ]. + intros; elim (H5 x); intros; elim (H8 H6); intros; + set + (E := + fun zeta:R => + 0 < zeta <= M - m /\ + (forall z:R, Rabs (z - x) < zeta -> Rabs (f0 z - f0 x) < eps / 2)); + assert (H11 : bound E). + unfold bound in |- *; exists (M - m); unfold is_upper_bound in |- *; + unfold E in |- *; intros; elim H11; clear H11; intros H11 _; + elim H11; clear H11; intros _ H11; apply H11. + assert (H12 : exists x : R, E x). + assert (H13 := H _ H9); unfold continuity_pt in H13; + unfold continue_in in H13; unfold limit1_in in H13; + unfold limit_in in H13; simpl in H13; unfold R_dist in H13; + elim (H13 _ (H1 eps)); intros; elim H12; clear H12; + intros; exists (Rmin x0 (M - m)); unfold E in |- *; + intros; split. + split; + [ unfold Rmin in |- *; case (Rle_dec x0 (M - m)); intro; + [ apply H12 | apply Rlt_Rminus; apply Hyp ] + | apply Rmin_r ]. + intros; case (Req_dec x z); intro. + rewrite H16; unfold Rminus in |- *; rewrite Rplus_opp_r; rewrite Rabs_R0; + apply (H1 eps). + apply H14; split; + [ unfold D_x, no_cond in |- *; split; [ trivial | assumption ] + | apply Rlt_le_trans with (Rmin x0 (M - m)); [ apply H15 | apply Rmin_l ] ]. + assert (H13 := completeness _ H11 H12); elim H13; clear H13; intros; + cut (0 < x0 <= M - m). + intro; elim H13; clear H13; intros; exists x0; split. + assumption. + split. + intros; cut (exists alp : R, Rabs (z - x) < alp <= x0 /\ E alp). + intros; elim H16; intros; elim H17; clear H17; intros; unfold E in H18; + elim H18; intros; apply H20; elim H17; intros; assumption. + elim (classic (exists alp : R, Rabs (z - x) < alp <= x0 /\ E alp)); intro. + assumption. + assert + (H17 := + not_ex_all_not _ (fun alp:R => Rabs (z - x) < alp <= x0 /\ E alp) H16); + unfold is_lub in p; elim p; intros; cut (is_upper_bound E (Rabs (z - x))). + intro; assert (H21 := H19 _ H20); + elim (Rlt_irrefl _ (Rlt_le_trans _ _ _ H15 H21)). + unfold is_upper_bound in |- *; intros; unfold is_upper_bound in H18; + assert (H21 := H18 _ H20); case (Rle_dec x1 (Rabs (z - x))); + intro. + assumption. + elim (H17 x1); split. + split; [ auto with real | assumption ]. + assumption. + unfold included, g in |- *; intros; elim H15; intros; elim H17; intros; + decompose [and] H18; cut (x0 = x2). + intro; rewrite H20; apply H22. + unfold E in p; eapply is_lub_u. + apply p. + apply H21. + elim H12; intros; unfold E in H13; elim H13; intros H14 _; elim H14; + intros H15 _; unfold is_lub in p; elim p; intros; + unfold is_upper_bound in H16; unfold is_upper_bound in H17; + split. + apply Rlt_le_trans with x1; [ assumption | apply (H16 _ H13) ]. + apply H17; intros; unfold E in H18; elim H18; intros; elim H19; intros; + assumption. Qed. |