Functions functorial with respect to equivalences #
An EquivFunctor is a function from Type → Type equipped with the additional data of
coherently mapping equivalences to equivalences.
In categorical language, it is an endofunctor of the "core" of the category Type.
An EquivFunctor is only functorial with respect to equivalences.
To construct an EquivFunctor, it suffices to supply just the function f α → f β from
an equivalence α ≃ β, and then prove the functor laws. It's then a consequence that
this function is part of an equivalence, provided by EquivFunctor.mapEquiv.
Instances
An EquivFunctor in fact takes every equiv to an equiv.
Equations
- EquivFunctor.mapEquiv f e = { toFun := EquivFunctor.map e, invFun := EquivFunctor.map e.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
@[simp]
theorem
EquivFunctor.mapEquiv_apply
(f : Type u₀ → Type u₁)
[EquivFunctor f]
{α β : Type u₀}
(e : α ≃ β)
(x : f α)
:
@[simp]
@[simp]
theorem
EquivFunctor.mapEquiv_trans
(f : Type u₀ → Type u₁)
[EquivFunctor f]
{α β γ : Type u₀}
(ab : α ≃ β)
(bc : β ≃ γ)
:
The composition of mapEquivs is carried over the EquivFunctor.
For plain Functors, this lemma is named map_map when applied
or map_comp_map when not applied.
@[implicit_reducible, instance 100]
Equations
- EquivFunctor.ofLawfulFunctor f = { map := fun {x x_1 : Type ?u.27} (e : x ≃ x_1) => Functor.map ⇑e, map_refl' := ⋯, map_trans' := ⋯ }
theorem
EquivFunctor.mapEquiv.injective
(f : Type u₀ → Type u₁)
[Applicative f]
[LawfulApplicative f]
{α β : Type u₀}
(h : ∀ (γ : Type u₀), Function.Injective pure)
: