Home
module foundations.equivalence-is-equivalence-relation where
Imports
open import foundations.universe
open import foundations.identity-type
open import foundations.bi-invertible-map
open import foundations.function
open import foundations.sigma-type
open import foundations.quasi-inverse
open import foundations.quasi-inverse-to-bi-invertible-map
open import foundations.bi-invertible-map-to-quasi-inverse
open import foundations.homotopy
open import foundations.functions-are-functors
open import foundations.identity-type-reasoning
private variable
ℓ : Level
A B C : Type ℓ
biinvIdFunction : biinv (idFunction A)
biinvIdFunction = QuasiInv⇒biinv (record
{ g = idFunction _
; linv = λ _ → refl
; rinv = λ _ → refl
})
refl≃ : A ≃ A
refl≃ = idFunction _ , biinvIdFunction
sym≃ : A ≃ B → B ≃ A
sym≃ (f , b) =
g , QuasiInv⇒biinv (record { g = f ; linv = rinv ; rinv = linv })
where
open QuasiInv (biinv⇒QuasiInv b)
trans≃ : A ≃ B → B ≃ C → A ≃ C
trans≃ (f , b) (f′ , c) =
f′ ∘ f , QuasiInv⇒biinv (record { g = q.g ∘ r.g ; linv = linv ; rinv = rinv })
where
module q = QuasiInv (biinv⇒QuasiInv b)
module r = QuasiInv (biinv⇒QuasiInv c)
linv : ∀ x → q.g (r.g (f′ (f x))) = x
linv x =
q.g (r.g (f′ (f x)))
=⟨ ap q.g (r.linv (f x)) ⟩
q.g (f x)
=⟨ q.linv x ⟩
x
∎
rinv : ∀ x → f′ (f (q.g (r.g x))) = x
rinv x =
f′ (f (q.g (r.g x)))
=⟨ ap f′ (q.rinv (r.g x)) ⟩
f′ (r.g x)
=⟨ r.rinv x ⟩
x
∎