{-# OPTIONS --without-K --exact-split #-}
open import TransportLemmas
open import EquivalenceType
open import HomotopyType
open import FunExtAxiom
open import QuasiinverseType
Equivalence with Pi type¶
module PiPreserves {ℓ₁ ℓ₂ ℓ₃ : Level} {A : Type ℓ₁}{C : A → Type ℓ₂}{D : A → Type ℓ₃}
(e : (a : A) → (C a ≃ D a)) where
private
f : (a : A) → C a → D a
f a = lemap (e a)
f⁻¹ : (a : A) → D a → C a
f⁻¹ a = remap (e a)
α : (a : A) → (f a) ∘ (f⁻¹ a) ∼ id
α a x = lrmap-inverse (e a)
β : (a : A) → (f⁻¹ a) ∘ (f a) ∼ id
β a x = rlmap-inverse (e a)
ΠAC→ΠAD : Π A C → Π A D
ΠAC→ΠAD p = λ a → (f a) (p a)
ΠAD→ΠAC : Π A D → Π A C
ΠAD→ΠAC p = λ a → (f⁻¹ a) (p a)
H₁ : ΠAC→ΠAD ∘ ΠAD→ΠAC ∼ id
H₁ p =
begin
(ΠAC→ΠAD ∘ ΠAD→ΠAC) p
==⟨ idp ⟩
ΠAC→ΠAD (λ a → (f⁻¹ a) (p a))
==⟨ idp ⟩
(λ aa → (f aa) (f⁻¹ aa (p aa)))
==⟨ funext (λ x → α x (p x)) ⟩
(λ aa → p aa)
∎
H₂ : ΠAD→ΠAC ∘ ΠAC→ΠAD ∼ id
H₂ p =
begin
(ΠAD→ΠAC ∘ ΠAC→ΠAD) p
==⟨ idp ⟩
ΠAD→ΠAC (λ a → (f a) (p a))
==⟨ idp ⟩
(λ aa → (f⁻¹ aa) (f aa (p aa)))
==⟨ funext (λ x → β x (p x)) ⟩
(λ aa → p aa)
∎
pi-equivalence
: Π A C ≃ Π A D -- by (e : (a : A) → (C a ≃ D a))
pi-equivalence = qinv-≃ ΠAC→ΠAD (ΠAD→ΠAC , H₁ , H₂)