{-# OPTIONS --cubical-compatible --safe #-} open import Level open import Ordinals open import logic open import Relation.Nullary open import Level open import Ordinals import HODBase import OD open import Relation.Nullary module Topology {n : Level } (O : Ordinals {n} ) (HODAxiom : HODBase.ODAxiom O) (ho< : OD.ODAxiom-ho< O HODAxiom ) (AC : OD.AxiomOfChoice O HODAxiom ) where open import Relation.Binary.PropositionalEquality hiding ( [_] ) open import Relation.Binary.Definitions open import Data.Empty import OrdUtil open Ordinals.Ordinals O open Ordinals.IsOrdinals isOrdinal import ODUtil open import logic open import nat open OrdUtil O open ODUtil O HODAxiom ho< open _∧_ open _∨_ open Bool open HODBase._==_ open HODBase.ODAxiom HODAxiom open OD O HODAxiom open HODBase.HOD open AxiomOfChoice AC open import ODC O HODAxiom AC as ODC open import Level open import Ordinals import filter open import Relation.Nullary -- open import Relation.Binary hiding ( _⇔_ ) open import Data.Empty open import Relation.Binary.PropositionalEquality open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ ) import BAlgebra open import ZProduct O HODAxiom ho< open import filter O HODAxiom ho< AC import Relation.Binary.Reasoning.Setoid as EqHOD LDec : (L : HOD) (P : HOD) → P ⊆ L → (x : HOD) → Dec (x ∈ P) LDec L P _ x = ∋-p P x record Topology ( L : HOD ) : Set (suc n) where field OS : HOD OS⊆PL : OS ⊆ Power L o∩ : { p q : HOD } → OS ∋ p → OS ∋ q → OS ∋ (p ∩ q) o∪ : { P : HOD } → P ⊆ OS → OS ∋ Union P OS∋od∅ : OS ∋ od∅ -- OS ∋ Union od∅ --- we may add -- OS∋L : OS ∋ L -- closed Set open BAlgebra O HODAxiom ho< L (LDec L) CS : HOD CS = record { od = record { def = λ x → (* x ⊆ L) ∧ odef OS (& ( L \ (* x ))) } ; odmax = osuc (& L) ; ¬a ¬b 0 ¬a ¬b c = c ... | tri≈ ¬a b ¬c = ⊥-elim (¬sb (sb⊆ (eq→ *iso) (subst (λ k → Subbase (* (CX ox)) k ) b sc ))) -- we have some intersection because L is not empty (if we have an element of L, we don't need choice) fip26 : odef (* (CX ox)) (& (L \ * ( cover oc ( x∋minimal L (0 ¬a ¬b c = ⊥-elim ( ¬x<0 c ) ... | tri> ¬a ¬b 0 ¬a ¬b c = NC.x ( has-intersection CX fip c) fip00 : {X : Ordinal} (CX : * X ⊆ CS top) (fip : {x : Ordinal} → Subbase (* X) x → o∅ o< x) {x : Ordinal} → odef (* X) x → odef (* x) (limit CX fip ) fip00 {X} CX fip {x} Xx with trio< X o∅ ... | tri< a ¬b ¬c = ⊥-elim ( ¬x<0 a ) ... | tri≈ ¬a b ¬c = ⊥-elim ( o<¬≡ (sym b) (subst (λ k → o∅ o< k) &iso (∈∅< Xx) ) ) ... | tri> ¬a ¬b c = NC.yx ( has-intersection CX fip c ) Xx open Filter -- -- {v | Neighbor lim v} set of u ⊆ v ⊆ P where u is an open set u ∋ x -- record Neighbor {P : HOD} (TP : Topology P) (x v : Ordinal) : Set n where field u : Ordinal ou : odef (OS TP) u ux : odef (* u) x v⊆P : * v ⊆ P 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} 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 NF : HOD NF = record { od = record { def = λ v → Neighbor TP x v } ; odmax = & (Power P) ;