Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
Require Import HoTT.Basics Types.Universe.Require Import HoTT.Basics Types.Universe.

Local Open Scope path_scope.

Section Functorish.
Context `{Univalence}.
(* We do not need composition to be preserved. *)
Class Functorish (F : Type -> Type) := {
  fmap {A B} (f : A -> B) : F A -> F B ;
  fmap_idmap (A:Type) : fmap (idmap : A -> A) = idmap
}.

Global Arguments fmap F {FF} {A B} f _ : rename.
Global Arguments fmap_idmap F {FF A} : rename.

Context (F : Type -> Type).
Context {FF : Functorish F}.

H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

IsEquiv (fmap F f)
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

IsEquiv (fmap F f)
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

IsEquiv (fmap F 1%equiv)
exact (transport _ (fmap_idmap F)^ _). Defined.
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

fmap F f = equiv_path (F A) (F B) (ap F (path_universe f))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

fmap F f = equiv_path (F A) (F B) (ap F (path_universe f))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

fmap F 1%equiv = equiv_path (F A) (F A) (ap F (path_universe 1%equiv))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

fmap F 1%equiv = (idmap : F A -> F A)
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f
(idmap : F A -> F A) = equiv_path (F A) (F A) (ap F (path_universe 1%equiv))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

fmap F 1%equiv = (idmap : F A -> F A)
apply fmap_idmap.
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

(idmap : F A -> F A) = equiv_path (F A) (F A) (ap F (path_universe 1%equiv))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

(idmap : F A -> F A) = equiv_path (F A) (F A) (ap F (path_universe (equiv_path A A 1)))
H: Univalence
F: Type -> Type
FF: Functorish F
A, B: Type
f: A -> B
H0: IsEquiv f

idmap = equiv_path (F A) (F A) (ap F 1)
exact 1. Defined. End Functorish.