Goal:
  
  A : Type
  B : Type
  a : A
  L1 : list A
  P : A → B → Type
  IHL1 : ∀ L2 : list B,
           #|L1| = #|L2|
           → (∀ (n : nat) (x1 : A) (x2 : B),
                n < #|L1|
                → nth_error L1 n = Some x1
                  → nth_error L2 n = Some x2 → P x1 x2) → 
             All2 P L1 L2
  b : B
  L2 : list B
  X : ∀ (n : nat) (x1 : A) (x2 : B),
        n < S #|L1|
        → nth_error (a :: L1) n = Some x1
          → nth_error (b :: L2) n = Some x2 → P x1 x2
  n : nat
  x1 : A
  x2 : B
  H2 : nth_error L1 n = Some x1
  H3 : nth_error L2 n = Some x2
  H0 : BinInt.Z.lt (BinInt.Z.of_nat n) (BinInt.Z.of_nat #|L1|)
  H1 : BinInt.Z.of_nat #|L1| = BinInt.Z.of_nat #|L2|
  H : BinInt.Z.add (BinInt.Z.of_nat #|L1|) (BinNums.Zpos BinNums.xH) =
      BinInt.Z.of_nat #|b :: L2|
  cstr : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|L1|)
  cstr0 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|L2|)
  cstr1 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat n)
  cstr2 : BinInt.Z.le BinNums.Z0 (BinInt.Z.of_nat #|b :: L2|)
  ============================
   (BinInt.Z.lt (BinInt.Z.add (BinInt.Z.of_nat n) (BinNums.Zpos BinNums.xH))
      (BinInt.Z.add (BinInt.Z.of_nat #|L1|) (BinNums.Zpos BinNums.xH)))


DEBUG:Going to execute:
constr:(false)