{-# OPTIONS --cubical-compatible --safe #-}
module Function.Construct.Constant where
open import Function.Base using (const)
open import Function.Bundles using (Func)
import Function.Definitions as Definitions using (Congruent)
import Function.Structures as Structures using (IsCongruent)
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)
}