Skip to content
Snippets Groups Projects
Commit 9be0abe0 authored by François Clément's avatar François Clément
Browse files

Fix alternate representation of is_topo_basis.

Prove correctness results.
parent 5ce1f2e2
No related branches found
No related tags found
No related merge requests found
...@@ -245,18 +245,18 @@ End UniformSpace_compl. ...@@ -245,18 +245,18 @@ End UniformSpace_compl.
Section topo_basis_Def. 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 : Definition is_topo_basis :
forall {T : UniformSpace} {Idx : Type}, (Idx -> T -> Prop) -> Prop := forall {T : UniformSpace} {Idx : Type}, (Idx -> T -> Prop) -> Prop :=
fun T Idx B => fun T Idx B =>
(forall i, open (B i)) /\ (forall i, open (B i)) /\
(forall (A : T -> Prop), open A -> (forall A, open A -> exists P, forall x, A x <-> exists i, P i /\ B i x).
exists (P : Idx -> Prop), 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 := Definition is_second_countable : UniformSpace -> Prop :=
fun T => exists (B : nat -> T -> Prop), is_topo_basis B. fun T => exists (B : nat -> T -> Prop), is_topo_basis B.
...@@ -273,37 +273,99 @@ Definition topo_basis_Prod : (nat -> T1 * T2 -> Prop) := ...@@ -273,37 +273,99 @@ Definition topo_basis_Prod : (nat -> T1 * T2 -> Prop) :=
End topo_basis_Def. 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 : Definition subset_to_Idx : {x | A x} -> U := @proj1_sig U A.
forall {T : UniformSpace} {Idx : Type},
(exists (B : Idx-> T -> Prop), is_topo_basis B) <-> Lemma subset_to_Idx_correct : forall x, A x <-> exists i, x = subset_to_Idx i.
(exists (B : (T -> Prop) -> Prop), is_topo_basis_alt B).
Proof. Proof.
intros T Idx; split. intros x; split.
(* *) intros Hx; exists (exist _ x Hx); easy.
intros [B [HB1 HB2]]. intros [[y Hy] Hx]; rewrite Hx; easy.
exists (fun A => exists i, A = B i); split. Qed.
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]].
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. 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 : Lemma is_topo_basis_equiv :
forall {T : UniformSpace} {Idx : Type} (B : Idx -> T -> Prop), forall {Idx : Type} (B : Idx -> T -> Prop), (forall i, open (B i)) ->
(forall i, open (B i)) ->
is_topo_basis B <-> is_topo_basis B <->
(forall A (x : T), open A -> A x -> exists i, B i x /\ forall y, B i y -> A y). (forall A (x : T), open A -> A x -> exists i, B i x /\ forall y, B i y -> A y).
Proof. Proof.
intros T Idx B HB1; split; intros HB2. intros Idx B HB1; split; intros HB2.
(* *) (* *)
intros A x HA Hx. intros A x HA Hx.
destruct (proj2 HB2 A HA) as [P HP]. destruct (proj1 (HP x) Hx) as [i [Hi1 Hi2]]. destruct (proj2 HB2 A HA) as [P HP]. destruct (proj1 (HP x) Hx) as [i [Hi1 Hi2]].
...@@ -316,15 +378,18 @@ intros x; split. ...@@ -316,15 +378,18 @@ intros x; split.
intros Hx; destruct (HB2 A x HA Hx) as [i [Hi1 Hi2]]; exists i; easy. intros Hx; destruct (HB2 A x HA Hx) as [i [Hi1 Hi2]]; exists i; easy.
intros [i [Hi1 Hi2]]; auto. intros [i [Hi1 Hi2]]; auto.
Qed. Qed.
*)
Context {K1 K2 : AbsRing}.
Let T1 := AbsRing_UniformSpace K1.
Let T2 := AbsRing_UniformSpace K2.
Lemma topo_basis_Prod_correct : Lemma topo_basis_Prod_correct :
forall {K1 K2}, forall (B1 : nat -> T1 -> Prop) (B2 : nat -> T2 -> Prop),
let T1 := AbsRing_UniformSpace K1 in is_topo_basis B1 -> is_topo_basis B2 -> is_topo_basis (topo_basis_Prod B1 B2).
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).
Proof. 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. intros; apply open_prod; auto.
(* *) (* *)
...@@ -353,14 +418,10 @@ intros [n [Hn1 Hn2]]; auto. ...@@ -353,14 +418,10 @@ intros [n [Hn1 Hn2]]; auto.
Qed. Qed.
Lemma is_second_countable_Prod : Lemma is_second_countable_Prod :
forall {K1 K2}, is_second_countable T1 -> is_second_countable T2 ->
let T1 := AbsRing_UniformSpace K1 in is_second_countable (prod_UniformSpace T1 T2).
let T2 := AbsRing_UniformSpace K2 in Proof.
is_second_countable T1 -> is_second_countable T2 -> intros [B1 HB1] [B2 HB2]; exists (topo_basis_Prod B1 B2).
is_second_countable (prod_UniformSpace T1 T2).
Proof.
intros K1 K2 T1 T2 [B1 HB1] [B2 HB2].
exists (topo_basis_Prod B1 B2).
apply topo_basis_Prod_correct; easy. apply topo_basis_Prod_correct; easy.
Qed. Qed.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment