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


DEBUG:Going to execute:
induction 1

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

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


DEBUG:Going to execute:
simpl

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

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


DEBUG:Going to execute:
constructor

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

  
  A : Type
  B : Type
  I : Type
  P : I → B → B → Prop
  f : A → B
  b : I
  bs : list I
  hd : A
  tl : list A
  tl' : list A
  X : OnOne2All (λ i : I, on_rel (P i) f) bs tl tl'
  IHX : OnOne2All P bs (map f tl) (map f tl')
  ============================
   (OnOne2All P (b :: 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
  P : I → B → B → Prop
  f : A → B
  b : I
  bs : list I
  hd : A
  hd' : A
  tl : list A
  p : on_rel (P b) f hd hd'
  e : #|bs| = #|tl|
  ============================
   (P b (f hd) (f hd'))

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

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


DEBUG:Going to execute:
try congruence