Closure operators on large locales
Content created by Egbert Rijke, Fredrik Bakke, Julian KG, Maša Žaucer, fernabnor, Gregor Perčič and louismntnu.
Created on 2023-06-08.
Last modified on 2024-04-11.
module order-theory.closure-operators-large-locales where
Imports
open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.function-types open import foundation.identity-types open import foundation.large-binary-relations open import foundation.logical-equivalences open import foundation.propositions open import foundation.sets open import foundation.subtypes open import foundation.universe-levels open import order-theory.closure-operators-large-posets open import order-theory.large-frames open import order-theory.large-locales open import order-theory.large-meet-semilattices open import order-theory.large-meet-subsemilattices open import order-theory.large-posets open import order-theory.large-subposets open import order-theory.large-subpreorders open import order-theory.large-suplattices open import order-theory.least-upper-bounds-large-posets open import order-theory.order-preserving-maps-large-posets
Idea
A closure operator on a large locale L
is
a closure operator on the
underlying large poset of L
.
We show that if the closed elements are closed under meets, then the closed elements form a large locale. Note that the condition that the closed elements are closed under meets is more general than the condition that the closure operator is a nucleus.
Definitions
Closure operators on large locales
module _ {α : Level → Level} {β : Level → Level → Level} {γ : Level} (L : Large-Locale α β γ) where closure-operator-Large-Locale : UUω closure-operator-Large-Locale = closure-operator-Large-Poset (large-poset-Large-Locale L) module _ (j : closure-operator-Large-Locale) where hom-large-poset-closure-operator-Large-Locale : hom-Large-Poset ( λ l → l) ( large-poset-Large-Locale L) ( large-poset-Large-Locale L) hom-large-poset-closure-operator-Large-Locale = hom-closure-operator-Large-Poset j map-closure-operator-Large-Locale : {l1 : Level} → type-Large-Locale L l1 → type-Large-Locale L l1 map-closure-operator-Large-Locale = map-hom-Large-Poset ( large-poset-Large-Locale L) ( large-poset-Large-Locale L) ( hom-large-poset-closure-operator-Large-Locale) preserves-order-closure-operator-Large-Locale : {l1 l2 : Level} (x : type-Large-Locale L l1) (y : type-Large-Locale L l2) → leq-Large-Locale L x y → leq-Large-Locale L ( map-closure-operator-Large-Locale x) ( map-closure-operator-Large-Locale y) preserves-order-closure-operator-Large-Locale = preserves-order-hom-Large-Poset ( large-poset-Large-Locale L) ( large-poset-Large-Locale L) ( hom-large-poset-closure-operator-Large-Locale) is-inflationary-closure-operator-Large-Locale : {l1 : Level} (x : type-Large-Locale L l1) → leq-Large-Locale L x ( map-closure-operator-Large-Locale x) is-inflationary-closure-operator-Large-Locale = is-inflationary-closure-operator-Large-Poset j is-idempotent-closure-operator-Large-Locale : {l1 : Level} (x : type-Large-Locale L l1) → map-closure-operator-Large-Locale ( map-closure-operator-Large-Locale x) = map-closure-operator-Large-Locale x is-idempotent-closure-operator-Large-Locale = is-idempotent-closure-operator-Large-Poset j
The large suplattice of j
-closed elements of a closure operator
module _ {α : Level → Level} {β : Level → Level → Level} {γ : Level} (L : Large-Locale α β γ) (j : closure-operator-Large-Locale L) where large-subpreorder-closure-operator-Large-Locale : Large-Subpreorder α (large-preorder-Large-Locale L) large-subpreorder-closure-operator-Large-Locale {l1} x = Id-Prop (set-Large-Locale L l1) (map-closure-operator-Large-Locale L j x) x is-closed-element-closure-operator-Large-Locale : {l1 : Level} → type-Large-Locale L l1 → UU (α l1) is-closed-element-closure-operator-Large-Locale = is-in-Large-Subpreorder ( large-preorder-Large-Locale L) ( large-subpreorder-closure-operator-Large-Locale) is-prop-is-closed-element-closure-operator-Large-Locale : {l1 : Level} (x : type-Large-Locale L l1) → is-prop (is-closed-element-closure-operator-Large-Locale x) is-prop-is-closed-element-closure-operator-Large-Locale = is-prop-is-in-Large-Subpreorder ( large-preorder-Large-Locale L) ( large-subpreorder-closure-operator-Large-Locale) is-closed-element-leq-closure-operator-Large-Locale : {l1 : Level} (x : type-Large-Locale L l1) → leq-Large-Locale L (map-closure-operator-Large-Locale L j x) x → is-closed-element-closure-operator-Large-Locale x is-closed-element-leq-closure-operator-Large-Locale x H = antisymmetric-leq-Large-Locale L ( map-closure-operator-Large-Locale L j x) ( x) ( H) ( is-inflationary-closure-operator-Large-Locale L j x) closed-element-closure-operator-Large-Locale : (l1 : Level) → UU (α l1) closed-element-closure-operator-Large-Locale = type-Large-Subpreorder ( large-preorder-Large-Locale L) ( large-subpreorder-closure-operator-Large-Locale) is-closed-under-sim-closure-operator-Large-Locale : {l1 l2 : Level} (x : type-Large-Locale L l1) (y : type-Large-Locale L l2) → leq-Large-Locale L x y → leq-Large-Locale L y x → is-closed-element-closure-operator-Large-Locale x → is-closed-element-closure-operator-Large-Locale y is-closed-under-sim-closure-operator-Large-Locale x y H K c = is-closed-element-leq-closure-operator-Large-Locale y ( transitive-leq-Large-Locale L ( map-closure-operator-Large-Locale L j y) ( map-closure-operator-Large-Locale L j x) ( y) ( transitive-leq-Large-Locale L ( map-closure-operator-Large-Locale L j x) ( x) ( y) ( H) ( leq-eq-Large-Locale L c)) ( preserves-order-closure-operator-Large-Locale L j y x K)) large-subposet-closure-operator-Large-Locale : Large-Subposet α (large-poset-Large-Locale L) large-subpreorder-Large-Subposet large-subposet-closure-operator-Large-Locale = large-subpreorder-closure-operator-Large-Locale is-closed-under-sim-Large-Subposet large-subposet-closure-operator-Large-Locale = is-closed-under-sim-closure-operator-Large-Locale large-poset-closure-operator-Large-Locale : Large-Poset α β large-poset-closure-operator-Large-Locale = large-poset-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) leq-prop-closed-element-closure-operator-Large-Locale : Large-Relation-Prop β closed-element-closure-operator-Large-Locale leq-prop-closed-element-closure-operator-Large-Locale = leq-prop-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) leq-closed-element-closure-operator-Large-Locale : Large-Relation β closed-element-closure-operator-Large-Locale leq-closed-element-closure-operator-Large-Locale = leq-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) is-prop-leq-closed-element-closure-operator-Large-Locale : is-prop-Large-Relation ( closed-element-closure-operator-Large-Locale) ( leq-closed-element-closure-operator-Large-Locale) is-prop-leq-closed-element-closure-operator-Large-Locale = is-prop-leq-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) refl-leq-closed-element-closure-operator-Large-Locale : is-reflexive-Large-Relation ( closed-element-closure-operator-Large-Locale) ( leq-closed-element-closure-operator-Large-Locale) refl-leq-closed-element-closure-operator-Large-Locale = refl-leq-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) antisymmetric-leq-closed-element-closure-operator-Large-Locale : is-antisymmetric-Large-Relation ( closed-element-closure-operator-Large-Locale) ( leq-closed-element-closure-operator-Large-Locale) antisymmetric-leq-closed-element-closure-operator-Large-Locale = antisymmetric-leq-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) transitive-leq-closed-element-closure-operator-Large-Locale : is-transitive-Large-Relation ( closed-element-closure-operator-Large-Locale) ( leq-closed-element-closure-operator-Large-Locale) transitive-leq-closed-element-closure-operator-Large-Locale = transitive-leq-Large-Subposet ( large-poset-Large-Locale L) ( large-subposet-closure-operator-Large-Locale) contains-top-large-subposet-closure-operator-Large-Locale : is-closed-element-closure-operator-Large-Locale ( top-Large-Locale L) contains-top-large-subposet-closure-operator-Large-Locale = antisymmetric-leq-Large-Locale L ( map-closure-operator-Large-Locale L j (top-Large-Locale L)) ( top-Large-Locale L) ( is-top-element-top-Large-Locale L ( map-closure-operator-Large-Locale L j (top-Large-Locale L))) ( is-inflationary-closure-operator-Large-Locale L j (top-Large-Locale L)) forward-implication-adjoint-relation-closure-operator-Large-Locale : {l1 l2 : Level} {x : type-Large-Locale L l1} {y : type-Large-Locale L l2} → is-closed-element-closure-operator-Large-Locale y → leq-Large-Locale L x y → leq-Large-Locale L (map-closure-operator-Large-Locale L j x) y forward-implication-adjoint-relation-closure-operator-Large-Locale {x = x} {y} H K = transitive-leq-Large-Locale L ( map-closure-operator-Large-Locale L j x) ( map-closure-operator-Large-Locale L j y) ( y) ( leq-eq-Large-Locale L H) ( preserves-order-closure-operator-Large-Locale L j ( x) ( y) ( K)) backward-implication-adjoint-relation-closure-operator-Large-Locale : {l1 l2 : Level} {x : type-Large-Locale L l1} {y : type-Large-Locale L l2} → leq-Large-Locale L (map-closure-operator-Large-Locale L j x) y → leq-Large-Locale L x y backward-implication-adjoint-relation-closure-operator-Large-Locale {x = x} {y} H = transitive-leq-Large-Locale L ( x) ( map-closure-operator-Large-Locale L j x) ( y) ( H) ( is-inflationary-closure-operator-Large-Locale L j x) adjoint-relation-closure-operator-Large-Locale : {l1 l2 : Level} (x : type-Large-Locale L l1) (y : type-Large-Locale L l2) → is-closed-element-closure-operator-Large-Locale y → leq-Large-Locale L x y ↔ leq-Large-Locale L (map-closure-operator-Large-Locale L j x) y pr1 (adjoint-relation-closure-operator-Large-Locale x y H) = forward-implication-adjoint-relation-closure-operator-Large-Locale H pr2 (adjoint-relation-closure-operator-Large-Locale x y H) = backward-implication-adjoint-relation-closure-operator-Large-Locale sup-closed-element-closure-operator-Large-Locale : {l1 l2 : Level} {I : UU l1} (x : I → closed-element-closure-operator-Large-Locale l2) → closed-element-closure-operator-Large-Locale (γ ⊔ l1 ⊔ l2) pr1 (sup-closed-element-closure-operator-Large-Locale x) = map-closure-operator-Large-Locale L j (sup-Large-Locale L (pr1 ∘ x)) pr2 (sup-closed-element-closure-operator-Large-Locale x) = is-idempotent-closure-operator-Large-Locale L j ( sup-Large-Locale L (pr1 ∘ x)) is-least-upper-bound-sup-closed-element-closure-operator-Large-Locale : {l1 l2 : Level} {I : UU l1} (x : I → closed-element-closure-operator-Large-Locale l2) → is-least-upper-bound-family-of-elements-Large-Poset ( large-poset-closure-operator-Large-Locale) ( x) ( sup-closed-element-closure-operator-Large-Locale x) pr1 ( is-least-upper-bound-sup-closed-element-closure-operator-Large-Locale x y) ( H) = forward-implication-adjoint-relation-closure-operator-Large-Locale ( pr2 y) ( forward-implication ( is-least-upper-bound-sup-Large-Locale L (pr1 ∘ x) (pr1 y)) ( H)) pr2 ( is-least-upper-bound-sup-closed-element-closure-operator-Large-Locale x y) ( H) = backward-implication ( is-least-upper-bound-sup-Large-Locale L (pr1 ∘ x) (pr1 y)) ( backward-implication-adjoint-relation-closure-operator-Large-Locale H) is-large-suplattice-large-poset-closure-operator-Large-Locale : is-large-suplattice-Large-Poset γ ( large-poset-closure-operator-Large-Locale) sup-has-least-upper-bound-family-of-elements-Large-Poset ( is-large-suplattice-large-poset-closure-operator-Large-Locale x) = sup-closed-element-closure-operator-Large-Locale x is-least-upper-bound-sup-has-least-upper-bound-family-of-elements-Large-Poset ( is-large-suplattice-large-poset-closure-operator-Large-Locale x) = is-least-upper-bound-sup-closed-element-closure-operator-Large-Locale x large-suplattice-closure-operator-Large-Locale : Large-Suplattice α β γ large-poset-Large-Suplattice large-suplattice-closure-operator-Large-Locale = large-poset-closure-operator-Large-Locale is-large-suplattice-Large-Suplattice large-suplattice-closure-operator-Large-Locale = is-large-suplattice-large-poset-closure-operator-Large-Locale
The predicate that the closed elements of a closure operator on a large locale are closed under meets
module _ {α : Level → Level} {β : Level → Level → Level} {γ : Level} (L : Large-Locale α β γ) (j : closure-operator-Large-Locale L) where is-closed-under-meets-closure-operator-Large-Locale : UUω is-closed-under-meets-closure-operator-Large-Locale = is-closed-under-meets-Large-Subposet ( large-meet-semilattice-Large-Locale L) ( large-subposet-closure-operator-Large-Locale L j)
Properties
If the closed elements are closed under meets, then the closed elements of a closure operator form a large locale
We also assume that x ∧ j y = j (x ∧ y)
for any closed element x
. In large
locales with exponentials it seems that we can omit this extra hypothesis.
module _ {α : Level → Level} {β : Level → Level → Level} {γ : Level} (L : Large-Locale α β γ) (j : closure-operator-Large-Locale L) (H : is-closed-under-meets-closure-operator-Large-Locale L j) (K : {l1 l2 : Level} (x : type-Large-Locale L l1) (y : type-Large-Locale L l2) → is-closed-element-closure-operator-Large-Locale L j x → meet-Large-Locale L x (map-closure-operator-Large-Locale L j y) = map-closure-operator-Large-Locale L j (meet-Large-Locale L x y)) where large-meet-subsemilattice-closure-operator-Large-Locale : Large-Meet-Subsemilattice α (large-meet-semilattice-Large-Locale L) large-subposet-Large-Meet-Subsemilattice large-meet-subsemilattice-closure-operator-Large-Locale = large-subposet-closure-operator-Large-Locale L j is-closed-under-meets-Large-Meet-Subsemilattice large-meet-subsemilattice-closure-operator-Large-Locale = H contains-top-Large-Meet-Subsemilattice large-meet-subsemilattice-closure-operator-Large-Locale = contains-top-large-subposet-closure-operator-Large-Locale L j large-meet-semilattice-closure-operator-Large-Locale : Large-Meet-Semilattice α β large-meet-semilattice-closure-operator-Large-Locale = large-meet-semilattice-Large-Meet-Subsemilattice ( large-meet-semilattice-Large-Locale L) ( large-meet-subsemilattice-closure-operator-Large-Locale) is-large-meet-semilattice-large-poset-closure-operator-Large-Locale : is-large-meet-semilattice-Large-Poset ( large-poset-closure-operator-Large-Locale L j) is-large-meet-semilattice-large-poset-closure-operator-Large-Locale = is-large-meet-semilattice-Large-Meet-Semilattice large-meet-semilattice-closure-operator-Large-Locale meet-closed-element-closure-operator-Large-Locale : {l1 l2 : Level} → closed-element-closure-operator-Large-Locale L j l1 → closed-element-closure-operator-Large-Locale L j l2 → closed-element-closure-operator-Large-Locale L j (l1 ⊔ l2) meet-closed-element-closure-operator-Large-Locale = meet-Large-Meet-Semilattice large-meet-semilattice-closure-operator-Large-Locale distributive-meet-sup-closure-operator-Large-Locale : {l1 l2 l3 : Level} (x : closed-element-closure-operator-Large-Locale L j l1) {I : UU l2} (y : I → closed-element-closure-operator-Large-Locale L j l3) → meet-closed-element-closure-operator-Large-Locale x ( sup-closed-element-closure-operator-Large-Locale L j y) = sup-closed-element-closure-operator-Large-Locale L j ( λ i → meet-closed-element-closure-operator-Large-Locale x (y i)) distributive-meet-sup-closure-operator-Large-Locale (x , p) y = eq-type-subtype ( large-subpreorder-closure-operator-Large-Locale L j) ( ( K x _ p) ∙ ( ap ( map-closure-operator-Large-Locale L j) ( distributive-meet-sup-Large-Locale L x _))) large-frame-closure-operator-Large-Locale : Large-Frame α β γ large-poset-Large-Frame large-frame-closure-operator-Large-Locale = large-poset-closure-operator-Large-Locale L j is-large-meet-semilattice-Large-Frame large-frame-closure-operator-Large-Locale = is-large-meet-semilattice-large-poset-closure-operator-Large-Locale is-large-suplattice-Large-Frame large-frame-closure-operator-Large-Locale = is-large-suplattice-large-poset-closure-operator-Large-Locale L j distributive-meet-sup-Large-Frame large-frame-closure-operator-Large-Locale x y = distributive-meet-sup-closure-operator-Large-Locale x y large-locale-closure-operator-Large-Locale : Large-Locale α β γ large-locale-closure-operator-Large-Locale = large-frame-closure-operator-Large-Locale
Recent changes
- 2024-04-11. Fredrik Bakke. Strict symmetrizations of binary relations (#1025).
- 2023-11-24. Egbert Rijke. Refactor precomposition (#937).
- 2023-11-24. Egbert Rijke. Abelianization (#877).
- 2023-10-19. Fredrik Bakke. Level-universe compatibility patch (#862).
- 2023-09-26. Fredrik Bakke and Egbert Rijke. Maps of categories, functor categories, and small subprecategories (#794).