---
title: Distributive lattices
author: Ayberk Tosun
start-date: 2024-02-14
---
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import UF.FunExt
open import UF.PropTrunc
module Locales.DistributiveLattice.Properties
(fe : Fun-Ext)
(pt : propositional-truncations-exist)
where
open import Locales.DistributiveLattice.Definition fe pt
open import MLTT.List
open import MLTT.Spartan
open import UF.SubtypeClassifier
open import UF.Logic
open AllCombinators pt fe hiding (_∨_; _∧_)
\end{code}
\begin{code}
module _ (L : DistributiveLattice 𝓤) where
open DistributiveLattice L
\end{code}
𝟎 is an annihilator for _∧_.
\begin{code}
∧-annihilator : (x : ∣ L ∣ᵈ) → x ∧ 𝟎 = 𝟎
∧-annihilator x = only-𝟎-is-below-𝟎ᵈ L (x ∧ 𝟎) †
where
‡ : orderᵈ-∨ L (x ∧ 𝟎) 𝟎 holds
‡ = ∨-absorptive₃ 𝟎 x
† : ((x ∧ 𝟎) ≤ᵈ[ L ] 𝟎) holds
† = orderᵈ-∨-implies-orderᵈ L ‡
\end{code}
\begin{code}
join-listᵈ : List ∣ L ∣ᵈ → ∣ L ∣ᵈ
join-listᵈ [] = 𝟎
join-listᵈ (x ∷ xs) = x ∨ join-listᵈ xs
join-list-maps-∨-to-++ : (xs ys : List ∣ L ∣ᵈ)
→ join-listᵈ xs ∨ join-listᵈ ys = join-listᵈ (xs ++ ys)
join-list-maps-∨-to-++ [] ys = ∨-unit₁ (join-listᵈ ys)
join-list-maps-∨-to-++ (x₀ ∷ xs) ys =
join-listᵈ (x₀ ∷ xs) ∨ join-listᵈ ys =⟨ refl ⟩
(x₀ ∨ join-listᵈ xs) ∨ join-listᵈ ys =⟨ Ⅰ ⟩
x₀ ∨ (join-listᵈ xs ∨ join-listᵈ ys) =⟨ Ⅱ ⟩
x₀ ∨ (join-listᵈ (xs ++ ys)) =⟨ refl ⟩
join-listᵈ (x₀ ∷ xs ++ ys) ∎
where
Ⅰ = ∨-associative x₀ (join-listᵈ xs) (join-listᵈ ys) ⁻¹
Ⅱ = ap (x₀ ∨_) (join-list-maps-∨-to-++ xs ys)
finite-distributivity : (xs : List ∣ L ∣ᵈ) (y : ∣ L ∣ᵈ)
→ y ∧ join-listᵈ xs = join-listᵈ (map (y ∧_) xs)
finite-distributivity [] y = ∧-annihilator y
finite-distributivity (x ∷ xs) y =
y ∧ join-listᵈ (x ∷ xs) =⟨ refl ⟩
y ∧ (x ∨ join-listᵈ xs) =⟨ Ⅰ ⟩
(y ∧ x) ∨ (y ∧ join-listᵈ xs) =⟨ Ⅱ ⟩
join-listᵈ (map (y ∧_) (x ∷ xs)) ∎
where
Ⅰ = distributivityᵈ y x (join-listᵈ xs)
Ⅱ = ap ((y ∧ x) ∨_) (finite-distributivity xs y)
\end{code}