{-# OPTIONS --allow-unsolved-metas #-} open import Level open import Ordinals module Tychonoff {n : Level } (O : Ordinals {n}) where open import zf open import logic open _∧_ open _∨_ open Bool import OD open import Relation.Nullary open import Data.Empty open import Relation.Binary.Core open import Relation.Binary.Definitions open import Relation.Binary.PropositionalEquality import BAlgebra open BAlgebra O open inOrdinal O open OD O open OD.OD open ODAxiom odAxiom import OrdUtil import ODUtil open Ordinals.Ordinals O open Ordinals.IsOrdinals isOrdinal open Ordinals.IsNext isNext open OrdUtil O open ODUtil O import ODC open ODC O open import filter O open import OPair O open import Topology O -- open import maximum-filter O open Filter open Topology -- FIP is UFL -- filter Base record FBase (P : HOD )(X : Ordinal ) (u : Ordinal) : Set n where field b x : Ordinal b⊆X : * b ⊆ * X sb : Subbase (* b) x u⊆P : * u ⊆ P x⊆u : * x ⊆ * u record UFLP {P : HOD} (TP : Topology P) (F : Filter {Power P} {P} (λ x → x) ) (ultra : ultra-filter F ) : Set (suc (suc n)) where field limit : Ordinal P∋limit : odef P limit is-limit : {v : Ordinal} → Neighbor TP limit v → (* v) ⊆ filter F UFLP→FIP : {P : HOD} (TP : Topology P) → ((F : Filter {Power P} {P} (λ x → x) ) (UF : ultra-filter F ) → UFLP TP F UF ) → FIP TP UFLP→FIP {P} TP uflp with trio< (& P) o∅ ... | tri< a ¬b ¬c = ⊥-elim ( ¬x<0 a ) ... | tri≈ ¬a P=0 ¬c = record { limit = λ CX fip → o∅ ; is-limit = fip03 } where -- P is empty fip02 : {x : Ordinal } → ¬ odef P x fip02 {x} Px = ⊥-elim ( o<¬≡ (sym P=0) (∈∅< Px) ) fip03 : {X : Ordinal} (CX : * X ⊆ CS TP) (fip : {x : Ordinal} → Subbase (* X) x → o∅ o< x) {x : Ordinal} → odef (* X) x → odef (* x) o∅ -- empty P case -- if 0 < X then 0 < x ∧ P ∋ xfrom fip -- if 0 ≡ X then ¬ odef X x fip03 {X} CX fip {x} xx with trio< o∅ X ... | tri< 0 ¬a ¬b c = ⊥-elim ( ¬x<0 c ) ... | tri> ¬a ¬b 0

¬a ¬b c = ⊥-elim ( ¬x<0 c ) uf02 : {X v : Ordinal} → (0 ¬a ¬b c = ⊥-elim ( ¬x<0 c ) -- -- the limit is an limit of entire elements of X -- uf01 : {X : Ordinal} (CSX : * X ⊆ CS TP) (fp : fip {X} CSX) {x : Ordinal} → odef (* X) x → odef (* x) (limit CSX fp) uf01 {X} CSX fp {x} xx with trio< o∅ X ... | tri< 0 ¬a ¬b c = ⊥-elim ( ¬x<0 c ) FIP→UFLP : {P : HOD} (TP : Topology P) → FIP TP → (F : Filter {Power P} {P} (λ x → x)) (UF : ultra-filter F ) → UFLP {P} TP F UF FIP→UFLP {P} TP fip F UF = record { limit = FIP.limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ? ; P∋limit = ? ; is-limit = ufl00 } where -- -- take closure of given filter elements -- CF : HOD CF = Replace (filter F) (λ x → Cl TP x ) CF⊆CS : CF ⊆ CS TP CF⊆CS {x} record { z = z ; az = az ; x=ψz = x=ψz } = subst (λ k → odef (CS TP) k) (sym x=ψz) (CS∋Cl TP (* z)) -- -- it is set of closed set and has FIP ( F is proper ) -- ufl01 : {x : Ordinal} → Subbase (* (& CF)) x → o∅ o< x ufl01 = ? -- -- so we have a limit -- limit : Ordinal limit = FIP.limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ? -- ufl01 ufl02 : {y : Ordinal } → odef (* (& CF)) y → odef (* y) limit ufl02 = FIP.is-limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ? -- ufl01 -- -- Neigbor of limit ⊆ Filter -- ufl03 : {f v : Ordinal } → odef (filter F) f → Neighbor TP limit v → ¬ ( * f ∩ * v ) =h= od∅ -- because limit is in CF which is a closure ufl03 {f} {v} ff nei fv=0 = ? pp : {v x : Ordinal} → Neighbor TP limit v → odef (* v) x → Power P ∋ (* x) pp {v} {x} nei vx z pz = ? ufl00 : {v : Ordinal} → Neighbor TP limit v → * v ⊆ filter F ufl00 {v} nei {x} fx with ultra-filter.ultra UF (pp nei fx) (NEG P (pp nei fx)) ... | case1 fv = subst (λ k → odef (filter F) k) &iso fv ... | case2 nfv = ? -- will contradicts ufl03 -- product topology of compact topology is compact Tychonoff : {P Q : HOD } → (TP : Topology P) → (TQ : Topology Q) → Compact TP → Compact TQ → Compact (ProductTopology TP TQ) Tychonoff {P} {Q} TP TQ CP CQ = FIP→Compact (ProductTopology TP TQ) (UFLP→FIP (ProductTopology TP TQ) uflPQ ) where uflP : (F : Filter {Power P} {P} (λ x → x)) (UF : ultra-filter F) → UFLP TP F UF uflP F UF = FIP→UFLP TP (Compact→FIP TP CP) F UF uflQ : (F : Filter {Power Q} {Q} (λ x → x)) (UF : ultra-filter F) → UFLP TQ F UF uflQ F UF = FIP→UFLP TQ (Compact→FIP TQ CQ) F UF -- Product of UFL has a limit point uflPQ : (F : Filter {Power (ZFP P Q)} {ZFP P Q} (λ x → x)) (UF : ultra-filter F) → UFLP (ProductTopology TP TQ) F UF uflPQ F UF = record { limit = & < * ( UFLP.limit uflp ) , * ( UFLP.limit uflq ) > ; P∋limit = Pf ; is-limit = isL } where FP : Filter {Power P} {P} (λ x → x) FP = record { filter = Proj1 (filter F) (Power P) (Power Q) ; f⊆L = ty00 ; filter1 = ? ; filter2 = ? } where ty00 : Proj1 (filter F) (Power P) (Power Q) ⊆ Power P ty00 {x} ⟪ PPx , ppf ⟫ = PPx UFP : ultra-filter FP UFP = record { proper = ? ; ultra = ? } uflp : UFLP TP FP UFP uflp = FIP→UFLP TP (Compact→FIP TP CP) FP UFP FQ : Filter {Power Q} {Q} (λ x → x) FQ = record { filter = Proj2 (filter F) (Power P) (Power Q) ; f⊆L = ty00 ; filter1 = ? ; filter2 = ? } where ty00 : Proj2 (filter F) (Power P) (Power Q) ⊆ Power Q ty00 {x} ⟪ QPx , ppf ⟫ = QPx UFQ : ultra-filter FQ UFQ = record { proper = ? ; ultra = ? } uflq : UFLP TQ FQ UFQ uflq = FIP→UFLP TQ (Compact→FIP TQ CQ) FQ UFQ Pf : odef (ZFP P Q) (& < * (UFLP.limit uflp) , * (UFLP.limit uflq) >) Pf = ? pq⊆F : {p q : HOD} → Neighbor TP (& p) (UFLP.limit uflp) → Neighbor TP (& q) (UFLP.limit uflq) → ? ⊆ filter F pq⊆F = ? isL : {v : Ordinal} → Neighbor (ProductTopology TP TQ) (& < * (UFLP.limit uflp) , * (UFLP.limit uflq) >) v → * v ⊆ filter F isL {v} npq {x} fx = ? where bpq : Base (ZFP P Q) (pbase TP TQ) (Neighbor.u npq) (& < * (UFLP.limit uflp) , * (UFLP.limit uflq) >) bpq = Neighbor.ou npq (Neighbor.ux npq) pqb : Subbase (pbase TP TQ) (Base.b bpq ) pqb = Base.sb bpq pqb⊆opq : * (Base.b bpq) ⊆ * ( Neighbor.u npq ) pqb⊆opq = Base.b⊆u bpq base⊆F : {b : Ordinal } → Subbase (pbase TP TQ) b → * b ⊆ * (Neighbor.u npq) → * b ⊆ filter F base⊆F (gi (case1 px)) b⊆u {z} bz = fz where -- F contains no od∅, because it projection contains no od∅ -- x is an element of BaseP, which is a subset of Neighbor npq -- x is also an elment of Proj1 F because Proj1 F has UFLP (uflp) -- BaseP ∩ F is not empty -- (Base P ∩ F) ⊆ F , (Base P ) ⊆ F , il1 : odef (Power P) z ∧ ZProj1 (filter F) z il1 = UFLP.is-limit uflp ? bz nei1 : HOD nei1 = Proj1 (* (Neighbor.u npq)) (Power P) (Power Q) plimit : Ordinal plimit = UFLP.limit uflp nproper : {b : Ordinal } → * b ⊆ nei1 → o∅ o< b nproper = ? b∋z : odef nei1 z b∋z = ? bp : BaseP {P} TP Q z bp = record { p = ? ; op = ? ; prod = ? } neip : {p : Ordinal } → ( bp : BaseP TP Q p ) → * p ⊆ filter F neip = ? il2 : * z ⊆ ZFP (Power P) (Power Q) il2 = ? il3 : filter F ∋ ? il3 = ? fz : odef (filter F) z fz = subst (λ k → odef (filter F) k) &iso (filter1 F ? ? ?) base⊆F (gi (case2 qx)) b⊆u {z} bz = ? base⊆F (g∩ b1 b2) b⊆u {z} bz = ?