Skip to content

Instantly share code, notes, and snippets.

@clayrat
Created July 29, 2024 21:09
Show Gist options
  • Save clayrat/321f03d7f70b520e29573b2106f5498c to your computer and use it in GitHub Desktop.
Save clayrat/321f03d7f70b520e29573b2106f5498c to your computer and use it in GitHub Desktop.
Powerset sup-lattice
{-# OPTIONS --safe #-}
module Order.SupLattice.Powerset where
open import Categories.Prelude
open import Meta.Prelude
open import Foundations.Equiv.Size
open import Data.Empty
open import Data.Unit
open import Data.Sum
open import Data.List
open import Order.Diagram.Lub
open import Order.Base
open import Order.Category
open import Order.SupLattice
open import Order.SupLattice.SmallBasis
import Order.Reasoning
private variable
ℓᡃ β„“ : Level
A : 𝒰 ℓᡃ
--- example 4.5
𝒫 : 𝒰 ℓᡃ β†’ (β„“ : Level) β†’ 𝒰 (ℓᡃ βŠ” β„“suc β„“)
𝒫 A β„“ = A β†’ Prop β„“
_βŠ†α΅–_ : βˆ€ {β„“ ℓᡃ} {A : 𝒰 ℓᡃ} β†’ 𝒫 A β„“ β†’ 𝒫 A β„“ β†’ 𝒰 (ℓᡃ βŠ” β„“)
X βŠ†α΅– Y = βˆ€ a β†’ ⌞ X a ⌟ β†’ ⌞ Y a ⌟
@0 pposet : {ℓᡃ : Level}
β†’ 𝒰 ℓᡃ
β†’ (β„“ : Level)
β†’ Poset (ℓᡃ βŠ” β„“suc β„“) (ℓᡃ βŠ” β„“)
pposet A β„“ .Poset.Ob = 𝒫 A β„“
pposet _ _ .Poset._≀_ = _βŠ†α΅–_
pposet _ _ .Poset.≀-thin {x} {y} = hlevel 1
pposet _ _ .Poset.≀-refl a = id
pposet _ _ .Poset.≀-trans f g a = g a ∘ f a
pposet _ _ .Poset.≀-antisym {x} {y} f g = fun-ext Ξ» a β†’ n-path (ua (prop-extβ‚‘! (f a) (g a)))
psup : βˆ€ {ℓᡃ} {β„“} {A : 𝒰 ℓᡃ} {I : 𝒰 β„“}
β†’ (I β†’ 𝒫 A β„“) β†’ 𝒫 A β„“
psup {I} F x = el! (βˆƒ[ i κž‰ I ] ⌞ F i x ⌟)
psuplat : {ℓᡃ β„“ : Level} {A : 𝒰 ℓᡃ}
β†’ is-sup-lattice (pposet A β„“) β„“
psuplat .is-sup-lattice.sup {I} = psup
psuplat .is-sup-lattice.suprema {I} F .is-lub.fam≀lub i a x = ∣ i , x βˆ£β‚
psuplat .is-sup-lattice.suprema {I} F .is-lub.least u f a = rec! Ξ» i β†’ f i a
psng : {ℓᡃ : Level} {A : 𝒰 ℓᡃ}
β†’ is-set A
β†’ A β†’ ⌞ pposet A ℓᡃ ⌟
psng sa x y = el (x = y) (sa x y)
psngbas : {ℓᡃ : Level} {A : 𝒰 ℓᡃ}
β†’ (sa : is-set A)
β†’ is-basis (pposet A ℓᡃ) (psng sa) psuplat
psngbas sa .is-basis.≀-is-small x a = ⌞ x a ⌟ , prop-extβ‚‘! (Ξ» xa b e β†’ subst (n-Type.carrier ∘ x) e xa) (Ξ» f β†’ f a refl)
psngbas sa .is-basis.↓-is-sup x .is-lub.fam≀lub i a e = i .snd a e
psngbas sa .is-basis.↓-is-sup x .is-lub.least u f a xa = f (a , (Ξ» b e β†’ subst (n-Type.carrier ∘ x) e xa)) a refl
plΞ² : {ℓᡃ : Level} {A : 𝒰 ℓᡃ}
β†’ is-set A
β†’ List A β†’ A β†’ Prop ℓᡃ
plΞ² {ℓᡃ} sa [] _ = el! (Lift ℓᡃ βŠ₯)
plΞ² sa (a ∷ as) b = el! (⌞ psng sa a b ⌟ βŠŽβ‚ ⌞ plΞ² sa as b ⌟)
@0 phs : βˆ€ {ℓᡃ} {A : 𝒰 ℓᡃ} {sa : is-set A} {x : ⌞ pposet A ℓᡃ ⌟}
(as : List A)
β†’ has-size ℓᡃ ((pposet A ℓᡃ Poset.≀ plΞ² sa as) x)
phs {ℓᡃ} [] = Lift ℓᡃ ⊀ , prop-extβ‚‘! (Ξ» _ _ x β†’ absurd (lower x)) (Ξ» _ β†’ lift tt)
phs {sa} {x} (a ∷ as) =
let (Y , e) = phs {sa = sa} {x} as in
⌞ βˆ₯ ⌞ x a ⌟ Γ— Y βˆ₯₁ ⌟ , prop-extβ‚‘! (Ξ» c b d β†’ rec! [ (Ξ» eq β†’ rec! (Ξ» xa p β†’ subst (n-Type.carrier ∘ x) eq xa) c)
, (Ξ» p β†’ rec! (Ξ» xa y β†’ (e $ y) b p) c)
]α΅€ d)
(Ξ» f β†’ ∣ f a ∣ inl refl βˆ£β‚ , (e ⁻¹ $ (Ξ» b c β†’ f b ∣ inr c βˆ£β‚)) βˆ£β‚)
@0 plistbas : {ℓᡃ : Level} {A : 𝒰 ℓᡃ}
β†’ (sa : is-set A)
β†’ is-basis (pposet A ℓᡃ) (plΞ² sa) psuplat
plistbas {ℓᡃ} sa .is-basis.≀-is-small x = phs {x = x}
plistbas sa .is-basis.↓-is-sup x .is-lub.fam≀lub (il , if) a pa = if a pa
plistbas sa .is-basis.↓-is-sup x .is-lub.least u' f a xa =
f ((a ∷ []) , Ξ» b c β†’ rec! [ (Ξ» e β†’ subst (n-Type.carrier ∘ x) e xa)
, (Ξ» v β†’ absurd (lower v)) ]α΅€ c) a ∣ inl refl βˆ£β‚
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment