Notation "p # x" := (transport _ p x) (right associativity, at level 65, only parsing).
Definition Sect {A B : Type} (s : A -> B) (r : B -> A) := forall x : A, r (s x) = x.
Class IsEquiv {A B} (f : A -> B) := { equiv_inv : B -> A ; eisretr : Sect equiv_inv f }.
Arguments eisretr {A B} f {_} _.
Notation "f ^-1" := (@equiv_inv _ _ f _) (at level 3, format "f '^-1'").
Generalizable Variables A B f g e n.
Definition functor_forall `{P : A -> Type} `{Q : B -> Type}
(f0 : B -> A) (f1 : forall b:B, P (f0 b) -> Q b)
: (forall a:A, P a) -> (forall b:B, Q b).
admit.
Defined.

Lemma isequiv_functor_forall `{P : A -> Type} `{Q : B -> Type}
`{IsEquiv B A f} `{forall b, @IsEquiv (P (f b)) (Q b) (g b)}
: (forall b : B, Q b) -> forall a : A, P a.