{-# OPTIONS --cubical-compatible #-}
module Terra.Classes.Contractible where
open import Terra.Data.Level.Variables
open import Terra.Data.Equality
open import Terra.Data.Function.Postulates
record Contractible (A : Set ℓ) : Set ℓ where
constructor contr
field
contract : (a b : A) -> a ≡ b
open Contractible {{...}} public
contr-pullback : {A : Set ℓ} {B : Set ℓ′} -> Contractible B -> Contractible (A -> B)
contr-pullback (contr contract) = contr (λ a b → extensionality λ x → contract (a x) (b x))
instance
contr-pullback-instance : {A : Set ℓ} {B : Set ℓ′} -> {{Contractible B}} -> Contractible (A -> B)
contr-pullback-instance {{c}} = contr-pullback c