Goal:
  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  i : list I
  l : list A
  l' : list A
  g : I → I'
  f : A → B
  ============================
   (OnOne2All (λ i : I, on_Trel (P (g i)) f) i l l'
    → OnOne2All P (map g i) (map f l) (map f l'))


DEBUG:Going to execute:
induction 1

Goals:
  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_Trel (P (g b)) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (OnOne2All P (map g (b :: bs)) (map f (hd :: tl)) (map f (hd' :: tl)))

  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  tl : list A
  tl' : list A
  X : OnOne2All (λ i : I, on_Trel (P (g i)) f) bs tl tl'
  IHX : OnOne2All P (map g bs) (map f tl) (map f tl')
  ============================
   (OnOne2All P (map g (b :: bs)) (map f (hd :: tl)) (map f (hd :: tl')))


DEBUG:Going to execute:
simpl

Goals:
  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_Trel (P (g b)) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (OnOne2All P (g b :: map g bs) (f hd :: map f tl) (f hd' :: map f tl))

  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  tl : list A
  tl' : list A
  X : OnOne2All (λ i : I, on_Trel (P (g i)) f) bs tl tl'
  IHX : OnOne2All P (map g bs) (map f tl) (map f tl')
  ============================
   (OnOne2All P (g b :: map g bs) (f hd :: map f tl) (f hd :: map f tl'))


DEBUG:Going to execute:
constructor

Goals:
  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_Trel (P (g b)) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (OnOne2All P (g b :: map g bs) (f hd :: map f tl) (f hd' :: map f tl))

  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  tl : list A
  tl' : list A
  X : OnOne2All (λ i : I, on_Trel (P (g i)) f) bs tl tl'
  IHX : OnOne2All P (map g bs) (map f tl) (map f tl')
  ============================
   (OnOne2All P (g b :: map g bs) (f hd :: map f tl) (f hd :: map f tl'))


DEBUG:Going to execute:
<coq-core.plugins.ltac::constructor@0>

Goals:
  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_Trel (P (g b)) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (P (g b) (f hd) (f hd'))

  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_Trel (P (g b)) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (#|map g bs| = #|map f tl|)

  
  A : Type
  B : Type
  I : Type
  I' : Type
  P : I' → B → B → Type
  g : I → I'
  f : A → B
  b : I
  bs : list I
  hd : A
  tl : list A
  tl' : list A
  X : OnOne2All (λ i : I, on_Trel (P (g i)) f) bs tl tl'
  IHX : OnOne2All P (map g bs) (map f tl) (map f tl')
  ============================
   (OnOne2All P (map g bs) (map f tl) (map f tl'))


DEBUG:Going to execute:
try congruence