diff --git a/Lattice/Builder.agda b/Lattice/Builder.agda index 11b9893..a503a41 100644 --- a/Lattice/Builder.agda +++ b/Lattice/Builder.agda @@ -29,6 +29,22 @@ lift-≈-map : ∀ {a b} {A : Set a} {B : Set b} (f : A → B) lift-≈-map f _≈ᵃ_ _≈ᵇ_ ≈ᵃ→≈ᵇ (just a₁) (just a₂) (≈-just a₁≈a₂) = ≈-just (≈ᵃ→≈ᵇ a₁ a₂ a₁≈a₂) lift-≈-map f _≈ᵃ_ _≈ᵇ_ ≈ᵃ→≈ᵇ nothing nothing ≈-nothing = ≈-nothing +instance + lift-≈-Equivalence : ∀ {a} {A : Set a} {_≈_ : A → A → Set a} {{isEquivalence : IsEquivalence A _≈_}} → IsEquivalence (Maybe A) (lift-≈ _≈_) + lift-≈-Equivalence {{isEquivalence}} = record + { ≈-trans = + (λ { (≈-just a₁≈a₂) (≈-just a₂≈a₃) → ≈-just (IsEquivalence.≈-trans isEquivalence a₁≈a₂ a₂≈a₃) + ; ≈-nothing ≈-nothing → ≈-nothing + }) + ; ≈-sym = + (λ { (≈-just a₁≈a₂) → ≈-just (IsEquivalence.≈-sym isEquivalence a₁≈a₂) + ; ≈-nothing → ≈-nothing + }) + ; ≈-refl = λ { {just a} → ≈-just (IsEquivalence.≈-refl isEquivalence) + ; {nothing} → ≈-nothing + } + } + PartialAssoc : ∀ {a} {A : Set a} (_≈_ : A → A → Set a) (_⊗_ : A → A → Maybe A) → Set a PartialAssoc {a} {A} _≈_ _⊗_ = ∀ (x y z : A) → lift-≈ _≈_ ((x ⊗ y) >>= (_⊗ z)) ((y ⊗ z) >>= (x ⊗_))