10
11
{dl₁ dl₂} (DL : DistributiveLattice dl₁ dl₂)
13
open DistributiveLattice DL
14
import Algebra.Props.Lattice
16
open module L = Algebra.Props.Lattice lattice public
17
hiding (replace-equality)
18
open import Algebra.Structures
19
import Algebra.FunctionProperties as P; open P _≈_
20
open import Relation.Binary
21
import Relation.Binary.EqReasoning as EqR; open EqR setoid
23
open import Function.Equality using (_⟨$⟩_)
24
open import Function.Equivalence using (_⇔_; module Equivalence)
25
open import Data.Product
27
∨-∧-distrib : _∨_ DistributesOver _∧_
28
∨-∧-distrib = ∨-∧-distribˡ , ∨-∧-distribʳ
30
∨-∧-distribˡ : _∨_ DistributesOverˡ _∧_
31
∨-∧-distribˡ x y z = begin
32
x ∨ y ∧ z ≈⟨ ∨-comm _ _ ⟩
33
y ∧ z ∨ x ≈⟨ ∨-∧-distribʳ _ _ _ ⟩
34
(y ∨ x) ∧ (z ∨ x) ≈⟨ ∨-comm _ _ ⟨ ∧-cong ⟩ ∨-comm _ _ ⟩
37
∧-∨-distrib : _∧_ DistributesOver _∨_
38
∧-∨-distrib = ∧-∨-distribˡ , ∧-∨-distribʳ
40
∧-∨-distribˡ : _∧_ DistributesOverˡ _∨_
41
∧-∨-distribˡ x y z = begin
42
x ∧ (y ∨ z) ≈⟨ sym (proj₂ absorptive _ _) ⟨ ∧-cong ⟩ refl ⟩
43
(x ∧ (x ∨ y)) ∧ (y ∨ z) ≈⟨ (refl ⟨ ∧-cong ⟩ ∨-comm _ _) ⟨ ∧-cong ⟩ refl ⟩
44
(x ∧ (y ∨ x)) ∧ (y ∨ z) ≈⟨ ∧-assoc _ _ _ ⟩
45
x ∧ ((y ∨ x) ∧ (y ∨ z)) ≈⟨ refl ⟨ ∧-cong ⟩ sym (proj₁ ∨-∧-distrib _ _ _) ⟩
46
x ∧ (y ∨ x ∧ z) ≈⟨ sym (proj₁ absorptive _ _) ⟨ ∧-cong ⟩ refl ⟩
47
(x ∨ x ∧ z) ∧ (y ∨ x ∧ z) ≈⟨ sym $ proj₂ ∨-∧-distrib _ _ _ ⟩
50
∧-∨-distribʳ : _∧_ DistributesOverʳ _∨_
51
∧-∨-distribʳ x y z = begin
52
(y ∨ z) ∧ x ≈⟨ ∧-comm _ _ ⟩
53
x ∧ (y ∨ z) ≈⟨ ∧-∨-distribˡ _ _ _ ⟩
54
x ∧ y ∨ x ∧ z ≈⟨ ∧-comm _ _ ⟨ ∨-cong ⟩ ∧-comm _ _ ⟩
58
∧-∨-isDistributiveLattice : IsDistributiveLattice _≈_ _∧_ _∨_
59
∧-∨-isDistributiveLattice = record
60
{ isLattice = ∧-∨-isLattice
61
; ∨-∧-distribʳ = proj₂ ∧-∨-distrib
64
∧-∨-distributiveLattice : DistributiveLattice _ _
65
∧-∨-distributiveLattice = record
68
; isDistributiveLattice = ∧-∨-isDistributiveLattice
73
{_≈′_ : Rel Carrier dl₂} →
74
(∀ {x y} → x ≈ y ⇔ x ≈′ y) → DistributiveLattice _ _
75
replace-equality {_≈′_} ≈⇔≈′ = record
79
; isDistributiveLattice = record
80
{ isLattice = Lattice.isLattice (L.replace-equality ≈⇔≈′)
81
; ∨-∧-distribʳ = λ x y z → to ⟨$⟩ ∨-∧-distribʳ x y z
83
} where open module E {x y} = Equivalence (≈⇔≈′ {x} {y})
14
open import Algebra.Properties.DistributiveLattice DL public