diff --git a/Lebesgue/UniformSpace_compl.v b/Lebesgue/UniformSpace_compl.v index d75f2014d9c397038ae002c8192f6f6693ded59d..b6b661b87b478680d34bf14a7586044e3b732034 100644 --- a/Lebesgue/UniformSpace_compl.v +++ b/Lebesgue/UniformSpace_compl.v @@ -245,18 +245,18 @@ End UniformSpace_compl. Section topo_basis_Def. -Definition is_topo_basis_alt : - forall {T : UniformSpace}, ((T -> Prop) -> Prop) -> Prop := - fun T PB => - (forall B, PB B -> open B) /\ - (forall A, open A -> forall x, A x <-> exists B, PB B /\ B x). - Definition is_topo_basis : forall {T : UniformSpace} {Idx : Type}, (Idx -> T -> Prop) -> Prop := fun T Idx B => (forall i, open (B i)) /\ - (forall (A : T -> Prop), open A -> - exists (P : Idx -> Prop), forall x, A x <-> exists i, P i /\ B i x). + (forall A, open A -> exists P, forall x, A x <-> exists i, P i /\ B i x). + +Definition is_topo_basis_Prop : + forall {T : UniformSpace}, ((T -> Prop) -> Prop) -> Prop := + fun T PB => + (forall B, PB B -> open B) /\ + (forall A, open A -> + forall x, A x <-> exists B, (PB B /\ forall y, B y -> A y) /\ B x). Definition is_second_countable : UniformSpace -> Prop := fun T => exists (B : nat -> T -> Prop), is_topo_basis B. @@ -273,37 +273,99 @@ Definition topo_basis_Prod : (nat -> T1 * T2 -> Prop) := End topo_basis_Def. -Section topo_basis_Facts. +Section Subset_compl1. + +Context {U : Type}. (* Universe. *) + +Variable A : U -> Prop. (* Subset. *) -Lemma is_topo_basis_correct : - forall {T : UniformSpace} {Idx : Type}, - (exists (B : Idx-> T -> Prop), is_topo_basis B) <-> - (exists (B : (T -> Prop) -> Prop), is_topo_basis_alt B). +Definition subset_to_Idx : {x | A x} -> U := @proj1_sig U A. + +Lemma subset_to_Idx_correct : forall x, A x <-> exists i, x = subset_to_Idx i. Proof. -intros T Idx; split. -(* *) -intros [B [HB1 HB2]]. -exists (fun A => exists i, A = B i); split. -intros A [i HA]; rewrite HA; auto. -intros A HA x; destruct (HB2 A HA) as [P HP]. -rewrite HP; split. -intros [i [Hi Hx]]. +intros x; split. +intros Hx; exists (exist _ x Hx); easy. +intros [[y Hy] Hx]; rewrite Hx; easy. +Qed. +Variable Idx : Type. (* Should be in Set? *) (* Indices. *) +Variable B : Idx -> U. +Definition subset_of_Idx : U -> Prop := fun x => exists i, x = B i. +(* Useless? +Lemma subset_of_Idx_correct : + forall x, (exists i, x = B i) <-> subset_of_Idx x. +Proof. +tauto. +Qed. +*) + +End Subset_compl1. +Section Subset_compl2. +Context {U : Type}. (* Universe. *) +(* WIP... +Lemma subset_of_Idx_to_Idx : forall A, subset_of_Idx (subset_to_Idx A) = A. +Proof. Admitted. +Lemma subset_to_Idx_of_Idx : + forall Idx (B : Idx -> U), subset_to_Idx (subset_of_Idx Idx B) = B. +Proof. +Admitted. +*) + +End Subset_compl2. + + +Section topo_basis_Facts. + +Context {T : UniformSpace}. + +Lemma is_topo_basis_to_Prop : + forall Idx (B : Idx -> T -> Prop), + is_topo_basis B -> is_topo_basis_Prop (subset_of_Idx Idx B). +Proof. +intros Idx B [HB1 HB2]; split. +intros B' [i HB']; rewrite HB'; auto. +intros A HA x; destruct (HB2 A HA) as [P HP]; rewrite HP; split. +(* *) +intros [i [Hi Hx]]; exists (B i); repeat split; try exists i; try easy. +intros y Hy; apply <- HP; exists i; easy. +(* *) +intros [B' [[[i HB'1] HB'2] HB'3]]. +destruct (proj1 (HP x) (HB'2 x HB'3)) as [j Hj]; exists j; easy. +Qed. + +Lemma is_topo_basis_of_Prop : + forall (PB : (T -> Prop) -> Prop), + is_topo_basis_Prop PB -> is_topo_basis (subset_to_Idx PB). +Proof. +intros PB [HPB1 HPB2]; split. +intros i; apply HPB1, subset_to_Idx_correct; exists i; easy. +intros A HA; exists (fun i => forall y, subset_to_Idx PB i y -> A y); intros x. +rewrite (HPB2 _ HA); split. +(* *) +intros [B' [[HB'1 HB'2] HB'3]]. +destruct (proj1 (subset_to_Idx_correct PB B') HB'1) as [i Hi]; rewrite Hi in *. +exists i; easy. +(* *) +intros [i [Hi1 Hi2]]. +exists (subset_to_Idx PB i); repeat split; try easy. +apply subset_to_Idx_correct; exists i; easy. +Qed. + +(* Still useful? Lemma is_topo_basis_equiv : - forall {T : UniformSpace} {Idx : Type} (B : Idx -> T -> Prop), - (forall i, open (B i)) -> + forall {Idx : Type} (B : Idx -> T -> Prop), (forall i, open (B i)) -> is_topo_basis B <-> (forall A (x : T), open A -> A x -> exists i, B i x /\ forall y, B i y -> A y). Proof. -intros T Idx B HB1; split; intros HB2. +intros Idx B HB1; split; intros HB2. (* *) intros A x HA Hx. destruct (proj2 HB2 A HA) as [P HP]. destruct (proj1 (HP x) Hx) as [i [Hi1 Hi2]]. @@ -316,15 +378,18 @@ intros x; split. intros Hx; destruct (HB2 A x HA Hx) as [i [Hi1 Hi2]]; exists i; easy. intros [i [Hi1 Hi2]]; auto. Qed. +*) + +Context {K1 K2 : AbsRing}. + +Let T1 := AbsRing_UniformSpace K1. +Let T2 := AbsRing_UniformSpace K2. Lemma topo_basis_Prod_correct : - forall {K1 K2}, - let T1 := AbsRing_UniformSpace K1 in - let T2 := AbsRing_UniformSpace K2 in - forall (B1 : nat -> T1 -> Prop) (B2 : nat -> T2 -> Prop), - is_topo_basis B1 -> is_topo_basis B2 -> is_topo_basis (topo_basis_Prod B1 B2). + forall (B1 : nat -> T1 -> Prop) (B2 : nat -> T2 -> Prop), + is_topo_basis B1 -> is_topo_basis B2 -> is_topo_basis (topo_basis_Prod B1 B2). Proof. -intros K1 K2 T1 T2 B1 B2 [HB1a HB1b] [HB2a HB2b]; split. +intros B1 B2 [HB1a HB1b] [HB2a HB2b]; split. (* *) intros; apply open_prod; auto. (* *) @@ -353,14 +418,10 @@ intros [n [Hn1 Hn2]]; auto. Qed. Lemma is_second_countable_Prod : - forall {K1 K2}, - let T1 := AbsRing_UniformSpace K1 in - let T2 := AbsRing_UniformSpace K2 in - is_second_countable T1 -> is_second_countable T2 -> - is_second_countable (prod_UniformSpace T1 T2). -Proof. -intros K1 K2 T1 T2 [B1 HB1] [B2 HB2]. -exists (topo_basis_Prod B1 B2). + is_second_countable T1 -> is_second_countable T2 -> + is_second_countable (prod_UniformSpace T1 T2). +Proof. +intros [B1 HB1] [B2 HB2]; exists (topo_basis_Prod B1 B2). apply topo_basis_Prod_correct; easy. Qed.