-------------------------------------------------------------------------------- title: Properties of ideals author: Ayberk Tosun date-started: 2024-03-02 dates-updated: [2024-03-13, 2024-03-28, 2024-05-03] -------------------------------------------------------------------------------- \begin{code} {-# OPTIONS --safe --without-K #-} open import UF.FunExt open import UF.PropTrunc open import UF.Subsingletons module Locales.DistributiveLattice.Ideal-Properties (pt : propositional-truncations-exist) (fe : Fun-Ext) (pe : Prop-Ext) where open import Locales.DistributiveLattice.Definition fe pt open import Locales.DistributiveLattice.Ideal pt fe pe open import Locales.DistributiveLattice.Spectrum fe pe pt open import Locales.Frame pt fe hiding (is-directed) open import MLTT.Spartan open import Slice.Family open import UF.Classifiers open import UF.Logic open import UF.SubtypeClassifier open AllCombinators pt fe hiding (_β¨_) open PropositionalTruncation pt hiding (_β¨_) \end{code} We work in a module parameterized by a π€-distributive-lattice `L`. \begin{code} module IdealProperties (L : DistributiveLattice π€) where open DefnOfFrameOfIdeal L open DistributiveLattice L open IdealNotation L contains-π-implies-above-π : (I : Ideal L) β π ββ± I β (πα΅’ βα΅’ I) holds contains-π-implies-above-π I ΞΌβ x ΞΌβ = I-is-downward-closed x π (πα΅-is-top L x) ΞΌβ where open Ideal I using (I-is-downward-closed) above-π-implies-contains-π : (I : Ideal L) β (πα΅’ βα΅’ I) holds β π ββ± I above-π-implies-contains-π I Ο = Ο π (β€-is-reflexive (poset-ofα΅ L) π) \end{code} Added on 2024-03-13. \begin{code} open PrincipalIdeals L open Joins _βα΅’_ \end{code} Every ideal is the join of the principal ideals of the elements it contains. To prove this fact, we start by writing down the family of principal ideals generated by the elements of a given ideal. \begin{code} principal-ideals-of : (I : Ideal L) β Fam π€ (Ideal L) principal-ideals-of I = β β u β£ (u , _) βΆ Ξ£ u κ β£ L β£α΅ , u ββ± I β \end{code} Given an ideal `I`, it is clear that it is an upper bound of its family of principal ideals. \begin{code} ideal-is-an-upper-bound-of-its-principal-ideals : (I : Ideal L) β (I is-an-upper-bound-of (principal-ideals-of I)) holds ideal-is-an-upper-bound-of-its-principal-ideals I (u , ΞΌα΅’) x ΞΌ = I-is-downward-closed x u ΞΌ ΞΌα΅’ where open Ideal I using (I-is-downward-closed) \end{code} It is in fact the _least_ upper bound of this family. \begin{code} ideal-is-lowerbound-of-upperbounds-of-its-principal-ideals : (I Iα΅€ : Ideal L) β (Iα΅€ is-an-upper-bound-of (principal-ideals-of I) β (I βα΅’ Iα΅€)) holds ideal-is-lowerbound-of-upperbounds-of-its-principal-ideals I Iα΅€ Ο x ΞΌ = Ο (x , ΞΌ) x (β€-is-reflexive (poset-ofα΅ L) x) \end{code} Added on 2024-03-28. \begin{code} open import Locales.DirectedFamily pt fe _βα΅’_ principal-ideals-of-ideal-form-a-directed-family : (I : Ideal L) β is-directed (principal-ideals-of I) holds principal-ideals-of-ideal-form-a-directed-family I = β£ π , I-contains-π β£ , β‘ where open Ideal I hiding (I) open PosetReasoning (poset-ofα΅ L) β‘ : is-closed-under-binary-upper-bounds (principal-ideals-of I) holds β‘ (x , ΞΌβ) (y , ΞΌβ) = β£ (x β¨ y , I-is-closed-under-β¨ x y ΞΌβ ΞΌβ) , Ξ² , Ξ³ β£ where Ξ² : (β x βα΅’ β (x β¨ y)) holds Ξ² z p = z β€β¨ p β© x β€β¨ β¨-is-an-upper-boundβ L x y β© (x β¨ y) β Ξ³ : (β y βα΅’ β (x β¨ y)) holds Ξ³ z p = z β€β¨ p β© y β€β¨ β¨-is-an-upper-boundβ L x y β© (x β¨ y) β \end{code} Added on 2024-05-03. Every ideal is directed. \begin{code} open classifier-single-universe π€ open import Locales.DirectedFamily pt fe (Ξ» x y β x β€α΅[ L ] y) using () renaming (is-directed to is-directed-L; is-closed-under-binary-upper-bounds to is-closed-under-binary-upper-bounds-L) ideals-are-directed : (I : Ideal L) β is-directed-L (π β£ L β£α΅ (_ββ± I)) holds ideals-are-directed β = β£ π , I-contains-π β£ , β where open Ideal β using (I-contains-π; I-is-closed-under-β¨) β : is-closed-under-binary-upper-bounds-L (π β£ L β£α΅ (_ββ± β)) holds β (x , ΞΌβ) (y , ΞΌβ) = β£ ((x β¨ y) , I-is-closed-under-β¨ x y ΞΌβ ΞΌβ) , Ξ² , Ξ³ β£ where Ξ² : (x β€α΅[ L ] (x β¨ y)) holds Ξ² = β¨-is-an-upper-boundβ L x y Ξ³ : (y β€α΅[ L ] (x β¨ y)) holds Ξ³ = β¨-is-an-upper-boundβ L x y \end{code}