{-# OPTIONS --cubical-compatible --safe #-} open import Level open import Ordinals import HODBase import OD module BAlgebra {n : Level } (O : Ordinals {n} ) (HODAxiom : HODBase.ODAxiom O) (ho< : OD.ODAxiom-ho< O HODAxiom ) (AC : OD.AxiomOfChoice O HODAxiom ) where -- open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ ) open import Relation.Binary.PropositionalEquality hiding ( [_] ) open import Data.Empty open import Data.Unit open import Relation.Nullary open import Relation.Binary hiding (_⇔_) open import Relation.Binary.Core hiding (_⇔_) import Relation.Binary.Reasoning.Setoid as EqR open import logic import OrdUtil open import nat open Ordinals.Ordinals O open Ordinals.IsOrdinals isOrdinal -- open Ordinals.IsNext isNext open OrdUtil O import ODUtil open ODUtil O HODAxiom ho< import ODC -- Ordinal Definable Set open HODBase.HOD open HODBase.OD open _∧_ open _∨_ open Bool open HODBase._==_ open HODBase.ODAxiom HODAxiom open OD O HODAxiom open AxiomOfChoice AC open _∧_ open _∨_ open Bool L\L=0 : { L : HOD } → (L \ L) =h= od∅ L\L=0 {L} = record { eq→ = lem0 ; eq← = lem1 } where lem0 : {x : Ordinal} → odef (L \ L) x → odef od∅ x lem0 {x} ⟪ lx , ¬lx ⟫ = ⊥-elim (¬lx lx) lem1 : {x : Ordinal} → odef od∅ x → odef (L \ L) x lem1 {x} lt = ⊥-elim ( ¬∅∋ (subst (λ k → odef od∅ k) (sym &iso) lt )) L\Lx=x : { L x : HOD } → x ⊆ L → (L \ ( L \ x )) =h= x L\Lx=x {L} {x} x⊆L = record { eq→ = lem03 ; eq← = lem04 } where lem03 : {z : Ordinal} → odef (L \ (L \ x)) z → odef x z lem03 {z} ⟪ Lz , Lxz ⟫ with ODC.∋-p O HODAxiom AC x (* z) ... | yes y = subst (λ k → odef x k ) &iso y ... | no n = ⊥-elim ( Lxz ⟪ Lz , ( subst (λ k → ¬ odef x k ) &iso n ) ⟫ ) lem04 : {z : Ordinal} → odef x z → odef (L \ (L \ x)) z lem04 {z} xz with ODC.∋-p O HODAxiom AC L (* z) ... | yes y = ⟪ subst (λ k → odef L k ) &iso y , ( λ p → proj2 p xz ) ⟫ ... | no n = ⊥-elim ( n (subst (λ k → odef L k ) (sym &iso) ( x⊆L xz) )) L\0=L : { L : HOD } → (L \ od∅) =h= L L\0=L {L} = record { eq→ = lem05 ; eq← = lem06 } where lem05 : {x : Ordinal} → odef (L \ od∅) x → odef L x lem05 {x} ⟪ Lx , _ ⟫ = Lx lem06 : {x : Ordinal} → odef L x → odef (L \ od∅) x lem06 {x} Lx = ⟪ Lx , (λ lt → ¬x<0 lt) ⟫ ∨L\X : { L X : HOD } → {x : Ordinal } → odef L x → odef X x ∨ odef (L \ X) x ∨L\X {L} {X} {x} Lx with ODC.∋-p O HODAxiom AC X (* x) ... | yes y = case1 ( subst (λ k → odef X k ) &iso y ) ... | no n = case2 ⟪ Lx , subst (λ k → ¬ odef X k) &iso n ⟫ \-⊆ : { P A B : HOD } → A ⊆ P → ( A ⊆ B → ( P \ B ) ⊆ ( P \ A )) ∧ (( P \ B ) ⊆ ( P \ A ) → A ⊆ B ) \-⊆ {P} {A} {B} A⊆P = ⟪ ( λ a