Source code on Github{-# OPTIONS --cubical-compatible #-}
module Class.Setoid.Core where
open import Class.Core
open import Class.Prelude
record ISetoid (A : Type ℓ) : Typeω where
infix 4 _≈_ _≉_
field
{relℓ} : Level
_≈_ : Rel A relℓ
_≉_ : Rel A relℓ
x ≉ y = ¬ (x ≈ y)
module Alg≈ = Alg _≈_
open ISetoid ⦃...⦄ public
record SetoidLaws (A : Type ℓ) ⦃ _ : ISetoid A ⦄ : Typeω where
field isEquivalence : IsEquivalence _≈_
open IsEquivalence isEquivalence public
renaming (refl to ≈-refl; sym to ≈-sym; trans to ≈-trans; reflexive to ≈-reflexive)
mkSetoid : Setoid ℓ relℓ
mkSetoid = record {Carrier = A; _≈_ = _≈_; isEquivalence = isEquivalence}
import Relation.Binary.Reasoning.Setoid as BinSetoid
module ≈-Reasoning = BinSetoid mkSetoid
open SetoidLaws ⦃...⦄ public
_⟶_ : (A : Type ℓ) (B : Type ℓ′)
→ ⦃ _ : ISetoid A ⦄ → ⦃ SetoidLaws A ⦄
→ ⦃ _ : ISetoid B ⦄ → ⦃ SetoidLaws B ⦄
→ Type _
A ⟶ B = Func (mkSetoid {A = A}) (mkSetoid {A = B})
where open import Function.Bundles
mkISetoid≡ : ISetoid A
mkISetoid≡ = λ where
.relℓ → _
._≈_ → _≡_
mkSetoidLaws≡ : SetoidLaws A ⦃ mkISetoid≡ ⦄
mkSetoidLaws≡ .isEquivalence = PropEq.isEquivalence
where import Relation.Binary.PropositionalEquality as PropEq