module 1Lab.Equiv.Fibrewise where
Fibrewise equivalences🔗
In HoTT, a type family P : A → Type
can be seen as a fibration
with total space Σ P
, with the fibration being the
projection fst
. Because of this, a
function with type (X : _) → P x → Q x
can be referred as a
fibrewise map.
A function like this can be lifted to a function on total spaces:
: ((x : A) → P x → Q x)
total → Σ A P → Σ A Q
(x , y) = x , f x y total f
Furthermore, the fibres of total f
correspond to fibres
of f, in the following manner:
: {f : (x : A) → P x → Q x} {x : A} {v : Q x}
total-fibres → Iso (fibre (f x) v) (fibre (total f) (x , v))
{A = A} {P = P} {Q = Q} {f = f} {x = x} {v = v} = the-iso where
total-fibres open is-iso
to : {x : A} {v : Q x} → fibre (f x) v → fibre (total f) (x , v)
to (v' , p) = (_ , v') , λ i → _ , p i
: {x : A} {v : Q x} → fibre (total f) (x , v) → fibre (f x) v
from ((x , v) , p) = transport (λ i → fibre (f (p i .fst)) (p i .snd)) (v , refl)
from
: {x : A} {v : Q x} → Iso (fibre (f x) v) (fibre (total f) (x , v))
the-iso .fst = to
the-iso .snd .is-iso.inv = from
the-iso .snd .is-iso.rinv ((x , v) , p) =
the-iso (λ { _ p → to (from ((x , v) , p)) ≡ ((x , v) , p) })
J (ap to (J-refl {A = Σ A Q} (λ { (x , v) _ → fibre (f x) v } ) (v , refl)))
p.snd .is-iso.linv (v , p) =
the-iso (λ { _ p → from (to (v , p)) ≡ (v , p) })
J (J-refl {A = Σ A Q} (λ { (x , v) _ → fibre (f x) v } ) (v , refl))
p
From this, we immediately get that a fibrewise transformation is an
equivalence iff. it induces an equivalence of total spaces by
total
.
: {f : (x : A) → P x → Q x}
total→equiv → is-equiv (total f)
→ {x : A} → is-equiv (f x)
{x} .is-eqv y =
total→equiv eqv 0 (total-fibres .snd .is-iso.inv)
iso→is-hlevel (is-iso.inverse (total-fibres .snd))
(eqv .is-eqv (x , y))
: {f : (x : A) → P x → Q x}
equiv→total → ({x : A} → is-equiv (f x))
→ is-equiv (total f)
.is-eqv y =
equiv→total always-eqv 0
iso→is-hlevel (total-fibres .fst)
(total-fibres .snd)
(always-eqv .is-eqv (y .snd))