{-# OPTIONS --cubical-compatible --safe #-}
module Function.Construct.Constant where
open import Function.Base using (const)
open import Function.Bundles
import Function.Definitions as Definitions
import Function.Structures as Structures
open import Level using (Level)
open import Relation.Binary.Core using (Rel)
open import Relation.Binary.Bundles using (Setoid)
open import Relation.Binary.Structures as B hiding (IsEquivalence)
private
variable
a b ℓ₁ ℓ₂ : Level
A B : Set a
module _ (_≈₁_ : Rel A ℓ₁) (_≈₂_ : Rel B ℓ₂) where
open Definitions
congruent : ∀ {b} → b ≈₂ b → Congruent _≈₁_ _≈₂_ (const b)
congruent refl _ = refl
module _
{≈₁ : Rel A ℓ₁} {≈₂ : Rel B ℓ₂}
(isEq₁ : B.IsEquivalence ≈₁)
(isEq₂ : B.IsEquivalence ≈₂) where
open Structures ≈₁ ≈₂
open B.IsEquivalence
isCongruent : ∀ b → IsCongruent (const b)
isCongruent b = record
{ cong = congruent ≈₁ ≈₂ (refl isEq₂)
; isEquivalence₁ = isEq₁
; isEquivalence₂ = isEq₂
}
module _ (S : Setoid a ℓ₂) (T : Setoid b ℓ₂) where
open Setoid
function : Carrier T → Func S T
function b = record
{ to = const b
; cong = congruent (_≈_ S) (_≈_ T) (refl T)
}