open eq is_trunc

structure is_retraction [class] {A B : Type} (f : A → B) :=
  (sect : B → A)
  (right_inverse : Π(b : B), f (sect b) = b)

definition foo
{A : Type}
{B : Type}
(f : A → B)
(g : B → A)
(ε : Πb, f (g b) = b)
(b b' : B)
  : is_retraction (λ (q : g b = g b'), (ε b) ⁻¹ ⬝ ap f q ⬝ ε b') :=
begin
  fapply is_retraction.mk,
    {exact (@ap B A g b b') },
    {intro p, cases p, esimp [eq.ap, eq.rec_on, eq.idp] }
end