changeset 1170:b2ca37e81ad0

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 22 Jan 2023 20:04:57 +0900
parents 46dc298bdd77
children a839fccdef47
files src/Topology.agda src/Tychonoff.agda
diffstat 2 files changed, 217 insertions(+), 137 deletions(-) [+]
line wrap: on
line diff
--- a/src/Topology.agda	Sun Jan 22 10:38:52 2023 +0900
+++ b/src/Topology.agda	Sun Jan 22 20:04:57 2023 +0900
@@ -1,3 +1,5 @@
+{-# OPTIONS --allow-unsolved-metas #-}
+
 open import Level
 open import Ordinals
 module Topology {n : Level } (O : Ordinals {n})   where
@@ -447,8 +449,6 @@
 Compact→FIP : {L : HOD} → (top : Topology L ) → Compact top  → FIP top
 Compact→FIP = ?
 
--- existence of Ultra Filter
-
 open Filter
 
 -- Ultra Filter has limit point
@@ -459,19 +459,12 @@
        ou : odef (OS TP) u
        ux : odef (* u) x
        v⊆P : * v ⊆ P
-       o⊆u : * u ⊆ * v
-
-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 → filter F ⊆ (* v)
+       u⊆v : * u ⊆ * v
 
 --
 -- Neighbor on x is a Filter (on Power P)
 --
-NeighborF : {P : HOD} (TP : Topology P)  (x : Ordinal ) → Filter {Power P} {P} (λ x → x) 
+NeighborF : {P : HOD} (TP : Topology P)  (x : Ordinal ) → Filter {Power P} {P} (λ x → x)
 NeighborF {P} TP x = record { filter = NF ; f⊆L = NF⊆PP ; filter1 = f1 ; filter2 = f2 } where
     nf00 : {v : Ordinal } → Neighbor TP x v → odef (Power P) v
     nf00 {v} nei y vy = Neighbor.v⊆P nei vy
@@ -480,144 +473,26 @@
     NF⊆PP : NF ⊆ Power P
     NF⊆PP = nf00 
     f1 : {p q : HOD} → Power P ∋ q → NF ∋ p → p ⊆ q → NF ∋ q
-    f1 {p} {q} Pq Np p⊆q = record { u = Neighbor.u Np ; ou = Neighbor.ou Np ; ux = Neighbor.ux Np ; v⊆P = Pq _ ; o⊆u = f11 } where
+    f1 {p} {q} Pq Np p⊆q = record { u = Neighbor.u Np ; ou = Neighbor.ou Np ; ux = Neighbor.ux Np ; v⊆P = Pq _ ; u⊆v = f11 } where
         f11 :  * (Neighbor.u Np) ⊆ * (& q)
-        f11 {x} ux = subst (λ k → odef k x ) (sym *iso) ( p⊆q (subst (λ k → odef k x) *iso (Neighbor.o⊆u Np ux)) )
+        f11 {x} ux = subst (λ k → odef k x ) (sym *iso) ( p⊆q (subst (λ k → odef k x) *iso (Neighbor.u⊆v Np ux)) )
     f2 : {p q : HOD} → NF ∋ p → NF ∋ q → Power P ∋ (p ∩ q) → NF ∋ (p ∩ q)
-    f2 {p} {q} Np Nq Ppq = record { u = upq ; ou = ou ; ux = ux ; v⊆P = Ppq _ ; o⊆u = f20 } where
+    f2 {p} {q} Np Nq Ppq = record { u = upq ; ou = ou ; ux = ux ; v⊆P = Ppq _ ; u⊆v = f20 } where
          upq : Ordinal
          upq = & ( * (Neighbor.u Np) ∩ * (Neighbor.u Nq) )
          ou : odef (OS TP) upq
          ou = o∩ TP (subst (λ k → odef (OS TP) k) (sym &iso) (Neighbor.ou Np)) (subst (λ k → odef (OS TP) k) (sym &iso) (Neighbor.ou Nq))
          ux :  odef (* upq) x
-         ux = subst ( λ k → odef k x ) (sym *iso) ⟪ Neighbor.ux Np , Neighbor.ux Nq ⟫ 
+         ux = subst ( λ k → odef k x ) (sym *iso) ⟪ Neighbor.ux Np , Neighbor.ux Nq ⟫
          f20 : * upq ⊆ * (& (p ∩ q))
          f20 = subst₂ (λ j k → j ⊆ k ) (sym *iso) (sym *iso) ( λ {x} pq 
-           → ⟪ subst (λ k → odef k x) *iso (Neighbor.o⊆u Np (proj1 pq))  , subst (λ k → odef k x) *iso (Neighbor.o⊆u Nq (proj2 pq)) ⟫  )
-
--- 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
-
-open import maximum-filter O
+           → ⟪ subst (λ k → odef k x) *iso (Neighbor.u⊆v Np (proj1 pq))  , subst (λ k → odef k x) *iso (Neighbor.u⊆v Nq (proj2 pq)) ⟫  )
 
 CAP : (P : HOD) {p q : HOD } → Power P ∋ p → Power P ∋ q → Power P ∋ (p ∩ q)
 CAP P {p} {q} Pp Pq x pqx with subst (λ k → odef k x ) *iso pqx
 ... | ⟪ px , qx ⟫ = Pp _ (subst (λ k → odef k x) (sym *iso) px )
 
-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 b ¬c = record { limit = ? ; is-limit = {!!} } where
-   -- P is empty
-   fip02 : {x : Ordinal } → ¬ odef P x
-   fip02 {x} Px = ⊥-elim ( o<¬≡ (sym b) (∈∅< Px) )
-... | tri> ¬a ¬b 0<P = record { limit = uf00 ; is-limit = uf01 } where
-     fip : {X : Ordinal} → * X ⊆ CS TP → Set n
-     fip {X} CSX = {u x : Ordinal} → * u ⊆ * X → Subbase (* u) x → o∅ o< x
-     N : {X : Ordinal} → (CSX : * X ⊆ CS TP) → fip CSX → HOD
-     N {X} CSX fp = record { od = record { def = λ u → FBase P X u } ; odmax = osuc (& P)
-        ; <odmax = λ {x} lt → subst₂ (λ j k → j o< osuc k) &iso refl (⊆→o≤ (FBase.u⊆P lt))  }
-     N⊆PP : {X : Ordinal } → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → N CSX fp ⊆ Power P
-     N⊆PP CSX fp nx b xb  = FBase.u⊆P nx xb
-     nc : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → HOD
-     nc = ?
-     N∋nc :{X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → odef (N CSX fp) (& (nc CSX fp) )
-     N∋nc = ?
-     0<PP : o∅ o< & (Power P)
-     0<PP = ?
-     F : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → Filter {Power P} {P} (λ x → x)
-     F {X} CSX fp = record { filter = N CSX fp ; f⊆L = N⊆PP CSX fp ; filter1 = f1 ; filter2 = f2 } where
-         f1 :  {p q : HOD} → Power P ∋ q → N CSX fp ∋ p → p ⊆ q → N CSX fp ∋ q
-         f1 {p} {q} Xq record { b = b ; x = x ; b⊆X = b⊆X ; sb = sb ; u⊆P = Xp ; x⊆u = x⊆p } p⊆q =
-                       record { b = b ; x = x ; b⊆X = b⊆X ; sb = sb ; u⊆P = subst (λ k → k ⊆ P) (sym *iso) f10 ; x⊆u = λ {z} xp →
-                            subst (λ k → odef k z) (sym *iso) (p⊆q (subst (λ k → odef k z) *iso (x⊆p xp)))  } where
-              f10 : q ⊆ P
-              f10 {x} qx = subst (λ k → odef P k) &iso (power→ P _ Xq (subst (λ k → odef q k) (sym &iso) qx  ))
-         f2 : {p q : HOD} → N CSX fp ∋ p → N CSX fp ∋ q → Power P ∋ (p ∩ q) → N CSX fp ∋ (p ∩ q)
-         f2 {p} {q} Np Nq Xpq = record { b = & Np+Nq ; x = & xp∧xq ; b⊆X = f20 ; sb = sbpq ; u⊆P = p∩q⊆p ; x⊆u = f22 } where
-              p∩q⊆p : * (& (p ∩ q)) ⊆ P
-              p∩q⊆p {x} pqx = subst (λ k → odef P k) &iso (power→ P _ Xpq (subst₂ (λ j k → odef j k ) *iso (sym &iso) pqx ))
-              Np+Nq = * (FBase.b Np) ∪ * (FBase.b Nq)
-              xp∧xq = * (FBase.x Np) ∩ * (FBase.x Nq)
-              sbpq : Subbase (* (& Np+Nq)) (& xp∧xq)
-              sbpq = subst₂ (λ j k → Subbase j k ) (sym *iso) refl (  g∩ (sb⊆ case1 (FBase.sb Np)) (sb⊆ case2 (FBase.sb Nq)))
-              f20 : * (& Np+Nq) ⊆ * X
-              f20 {x} npq with subst (λ k → odef k x) *iso npq
-              ... | case1 np = FBase.b⊆X Np np
-              ... | case2 nq = FBase.b⊆X Nq nq
-              f22 : * (& xp∧xq) ⊆ * (& (p ∩ q))
-              f22 = subst₂ ( λ j k → j ⊆ k ) (sym *iso) (sym *iso) (λ {w} xpq
-                 → ⟪ subst (λ k → odef k w) *iso ( FBase.x⊆u Np (proj1 xpq)) ,  subst (λ k → odef k w) *iso ( FBase.x⊆u Nq (proj2 xpq)) ⟫ )
-     proper : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → ¬ (N CSX fp ∋ od∅)
-     proper = ?
-     maxf : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → MaximumFilter (λ x → x) (F CSX fp)
-     maxf {X} CSX fp = F→Maximum {Power P} {P} (λ x → x) (CAP P)  (F CSX fp) 0<PP (N∋nc CSX fp) (proper CSX fp)
-     ultraf : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → ultra-filter ( MaximumFilter.mf (maxf CSX fp))
-     ultraf {X} CSX fp = F→ultra {Power P} {P} (λ x → x) (CAP P) (F CSX fp)  0<PP (N∋nc CSX fp) (proper CSX fp)
-     uf00 : {X : Ordinal} → (CSX : * X ⊆ CS TP) → fip {X} CSX → Ordinal
-     uf00 {X} CSX fp = UFLP.limit ( uflp ( MaximumFilter.mf (maxf CSX fp) ) (ultraf CSX fp))
-     uf01 :  {X : Ordinal} (CSX : * X ⊆ CS TP) (fip : {C x : Ordinal} → * C ⊆ * X → Subbase (* C) x → o∅ o< x)
-            {x : Ordinal} → odef (* X) x → odef (* x) (uf00 CSX fip)
-     uf01 {X} CSX fp {x} xx = UFLP.is-limit ( uflp  ( MaximumFilter.mf (maxf CSX fp) ) (ultraf CSX fp)) ? ?
-            
+NEG : (P : HOD) {p : HOD } → Power P ∋ p → Power P ∋ (P \ p )
+NEG P {p} Pp x vx with subst (λ k → odef k x) *iso vx
+... | ⟪ Px , npx ⟫ = Px
 
-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) ufl01 ; P∋limit = ? ; is-limit = ufl00 } where
-     CF : HOD
-     CF = Replace' (filter F) (λ x fx → 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)) 
-     ufl01 : {C x : Ordinal} → * C ⊆ * (& CF) → Subbase (* C) x → o∅ o< x
-     ufl01 = ?
-     ufl02 : {y : Ordinal } → odef (* (& CF)) y → odef (* y) (FIP.limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ufl01 )
-     ufl02 = FIP.is-limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ufl01  
-     ufl00 :  {v : Ordinal} → Neighbor TP (FIP.limit fip (subst (λ k → k ⊆ CS TP) (sym *iso) CF⊆CS) ufl01 ) v → filter F ⊆ * v
-     ufl00 {v} nei {x} fx = ?
-
--- 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 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 = ?
-         isL : {v : Ordinal} → Neighbor (ProductTopology TP TQ) (& < * (UFLP.limit uflp) , * (UFLP.limit uflq) >) v → filter F ⊆ * v
-         isL {v} record { u = u ; ou = ou ; ux = ux ; v⊆P = v⊆P ; o⊆u = o⊆u } {x} fx = ?
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tychonoff.agda	Sun Jan 22 20:04:57 2023 +0900
@@ -0,0 +1,205 @@
+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 b ¬c = record { limit = ? ; is-limit = {!!} } where
+   -- P is empty
+   fip02 : {x : Ordinal } → ¬ odef P x
+   fip02 {x} Px = ⊥-elim ( o<¬≡ (sym b) (∈∅< Px) )
+... | tri> ¬a ¬b 0<P = record { limit = limit ; is-limit = uf01 } where
+     fip : {X : Ordinal} → * X ⊆ CS TP → Set n
+     fip {X} CSX = {u x : Ordinal} → * u ⊆ * X → Subbase (* u) x → o∅ o< x
+     N : {X : Ordinal} → (CSX : * X ⊆ CS TP) → fip CSX → HOD
+     N {X} CSX fp = record { od = record { def = λ u → FBase P X u } ; odmax = osuc (& P)
+        ; <odmax = λ {x} lt → subst₂ (λ j k → j o< osuc k) &iso refl (⊆→o≤ (FBase.u⊆P lt))  }
+     N⊆PP : {X : Ordinal } → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → N CSX fp ⊆ Power P
+     N⊆PP CSX fp nx b xb  = FBase.u⊆P nx xb
+     nc : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → HOD
+     nc = ?
+     N∋nc :{X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → odef (N CSX fp) (& (nc CSX fp) )
+     N∋nc = ?
+     0<PP : o∅ o< & (Power P)
+     0<PP = ?
+     F : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip CSX) → Filter {Power P} {P} (λ x → x)
+     F {X} CSX fp = record { filter = N CSX fp ; f⊆L = N⊆PP CSX fp ; filter1 = f1 ; filter2 = f2 } where
+         f1 :  {p q : HOD} → Power P ∋ q → N CSX fp ∋ p → p ⊆ q → N CSX fp ∋ q
+         f1 {p} {q} Xq record { b = b ; x = x ; b⊆X = b⊆X ; sb = sb ; u⊆P = Xp ; x⊆u = x⊆p } p⊆q =
+                       record { b = b ; x = x ; b⊆X = b⊆X ; sb = sb ; u⊆P = subst (λ k → k ⊆ P) (sym *iso) f10 ; x⊆u = λ {z} xp →
+                            subst (λ k → odef k z) (sym *iso) (p⊆q (subst (λ k → odef k z) *iso (x⊆p xp)))  } where
+              f10 : q ⊆ P
+              f10 {x} qx = subst (λ k → odef P k) &iso (power→ P _ Xq (subst (λ k → odef q k) (sym &iso) qx  ))
+         f2 : {p q : HOD} → N CSX fp ∋ p → N CSX fp ∋ q → Power P ∋ (p ∩ q) → N CSX fp ∋ (p ∩ q)
+         f2 {p} {q} Np Nq Xpq = record { b = & Np+Nq ; x = & xp∧xq ; b⊆X = f20 ; sb = sbpq ; u⊆P = p∩q⊆p ; x⊆u = f22 } where
+              p∩q⊆p : * (& (p ∩ q)) ⊆ P
+              p∩q⊆p {x} pqx = subst (λ k → odef P k) &iso (power→ P _ Xpq (subst₂ (λ j k → odef j k ) *iso (sym &iso) pqx ))
+              Np+Nq = * (FBase.b Np) ∪ * (FBase.b Nq)
+              xp∧xq = * (FBase.x Np) ∩ * (FBase.x Nq)
+              sbpq : Subbase (* (& Np+Nq)) (& xp∧xq)
+              sbpq = subst₂ (λ j k → Subbase j k ) (sym *iso) refl (  g∩ (sb⊆ case1 (FBase.sb Np)) (sb⊆ case2 (FBase.sb Nq)))
+              f20 : * (& Np+Nq) ⊆ * X
+              f20 {x} npq with subst (λ k → odef k x) *iso npq
+              ... | case1 np = FBase.b⊆X Np np
+              ... | case2 nq = FBase.b⊆X Nq nq
+              f22 : * (& xp∧xq) ⊆ * (& (p ∩ q))
+              f22 = subst₂ ( λ j k → j ⊆ k ) (sym *iso) (sym *iso) (λ {w} xpq
+                 → ⟪ subst (λ k → odef k w) *iso ( FBase.x⊆u Np (proj1 xpq)) ,  subst (λ k → odef k w) *iso ( FBase.x⊆u Nq (proj2 xpq)) ⟫ )
+     proper : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → ¬ (N CSX fp ∋ od∅)
+     proper = ?
+     maxf : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → MaximumFilter (λ x → x) (F CSX fp)
+     maxf {X} CSX fp = F→Maximum {Power P} {P} (λ x → x) (CAP P)  (F CSX fp) 0<PP (N∋nc CSX fp) (proper CSX fp)
+     mf : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → Filter {Power P} {P} (λ x → x)
+     mf {X} CSX fp =  MaximumFilter.mf (maxf CSX fp) 
+     ultraf : {X : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) → ultra-filter ( mf CSX fp)
+     ultraf {X} CSX fp = F→ultra {Power P} {P} (λ x → x) (CAP P) (F CSX fp)  0<PP (N∋nc CSX fp) (proper CSX fp)
+     limit : {X : Ordinal} → (CSX : * X ⊆ CS TP) → fip {X} CSX → Ordinal
+     limit {X} CSX fp = UFLP.limit ( uflp ( mf CSX fp ) (ultraf CSX fp))
+     uf02 : {X v  : Ordinal} → (CSX : * X ⊆ CS TP) → (fp : fip {X} CSX) 
+        → Neighbor TP (limit CSX fp) v → * v ⊆  filter ( mf CSX fp )  
+     uf02 {X} {v} CSX fp nei {x} vx = UFLP.is-limit ( uflp  ( mf CSX fp ) (ultraf CSX fp)) nei vx
+     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 ODC.∋-p O (* x) (* (limit CSX fp))
+     ... | yes y = subst (λ k → odef (* x) k) &iso y
+     ... | no nxl = ⊥-elim ( MaximumFilter.proper (maxf CSX fp) uf08 )  where
+         uf03 : OS TP ∋  ( P \ (* x))
+         uf03 = ?
+         uf05 : odef ( P \ (* x)) (limit CSX fp)
+         uf05 = ⟪  ? , subst (λ k → ¬ odef (* x) k) ?  nxl ⟫
+         uf04 : Neighbor TP (limit CSX fp) (& ( P \ (* (limit CSX fp))))
+         uf04 = record { u = & ( P \ (* x)) ; ou = ? ; ux = ? ; v⊆P = ? ; u⊆v = ? }
+         uf07 : odef (filter (mf CSX fp)) x
+         uf07 = ?
+         uf06 : odef (filter (mf CSX fp)) (& ( P \ (* x)) )
+         uf06 = ?
+         uf08 : (filter (mf CSX fp)) ∋ od∅
+         uf08 = ?
+            
+
+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) ufl01 ; P∋limit = ? ; is-limit = ufl00 } where
+     CF : HOD
+     CF = Replace' (filter F) (λ x fx → 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)) 
+     ufl01 : {C x : Ordinal} → * C ⊆ * (& CF) → Subbase (* C) x → o∅ o< x
+     ufl01 = ?
+     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  
+     ufl03 : {f v : Ordinal } → odef (filter F) f → Neighbor TP limit v → ¬ ( * f ∩ * v ) =h= od∅ 
+     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 = ?
+
+-- 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 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 = ?
+         neip : {v : Ordinal} → {p q : HOD} → Neighbor (ProductTopology TP TQ) (& < p , q  >) v → Neighbor TP p ? 
+         neip = ?
+         neiq : {v : Ordinal} → {p q : HOD} → Neighbor (ProductTopology TP TQ) (& < p , q  >) v → Neighbor TQ q ? 
+         neiq = ?
+         pq⊆F : {p q : HOD} → Neighbor TP p ? → Neighbor TP q ? → ? ⊆ 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 = ?
+
+
+
+
+
+