Goal:
    A : Type  B : Type  P : A → nat → B → Type
  ============================
   (∀ (ls1 : list B) (ls2 : list A) (n : nat),
      All (λ x : A, Alli (P x) n ls1) ls2 <~>
      Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1)


DEBUG:Going to execute:
<coq-core.plugins.ssreflect::ssrtclintros@0> arg

Goals:
    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) [] <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2) <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) [] <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2) <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1))


DEBUG:Going to execute:
split

Goals:
    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) [] <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2) <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) [] <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2) <~>
    Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1))


DEBUG:Going to execute:
fun => <coq-core.plugins.ltac::split@0>

Goals:
    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
    → All (λ x : A, Alli (P x) n []) [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
    → All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
    → All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1) → All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
inversion 1; subst; repeat constructor => //=

Goals:
    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
    → All (λ x : A, Alli (P x) n []) [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
    → All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
    → All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1) → All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
inversion 1; subst

Goals:
    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

    A : Type  B : Type  P : A → nat → B → Type  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
    → All (λ x : A, Alli (P x) n []) [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

    A : Type  B : Type  P : A → nat → B → Type  a : A  ls2 : list A  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
    → All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) []
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
    → All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
    → Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1) → All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
inversion 1

Goals:
  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : All (λ x : A, Alli (P x) n []) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
  ============================
   (All (λ x : A, Alli (P x) n []) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n []) (a :: ls2)
  x : A
  l : list A
  X0 : Alli (P a) n []
  X1 : All (λ x : A, Alli (P x) n []) ls2
  H0 : x = a
  H1 : l = ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
  hd : B
  tl : list B
  X0 : All (λ x : A, P x n a) []
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) (S n) ls1
  H0 : hd = a
  H1 : tl = ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
  x : A
  l : list A
  X0 : Alli (P a0) n (a :: ls1)
  X1 : All (λ x : A, Alli (P x) n (a :: ls1)) ls2
  H0 : x = a0
  H1 : l = ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1)
  hd : B
  tl : list B
  X0 : All (λ x : A, P x n a) (a0 :: ls2)
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) 
         (S n) ls1
  H0 : hd = a
  H1 : tl = ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
subst

Goals:
  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : All (λ x : A, Alli (P x) n []) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
  ============================
   (All (λ x : A, Alli (P x) n []) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n []) (a :: ls2)
  x : A
  l : list A
  X0 : Alli (P a) n []
  X1 : All (λ x : A, Alli (P x) n []) ls2
  H0 : x = a
  H1 : l = ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
  hd : B
  tl : list B
  X0 : All (λ x : A, P x n a) []
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) (S n) ls1
  H0 : hd = a
  H1 : tl = ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
  x : A
  l : list A
  X0 : Alli (P a0) n (a :: ls1)
  X1 : All (λ x : A, Alli (P x) n (a :: ls1)) ls2
  H0 : x = a0
  H1 : l = ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1)
  hd : B
  tl : list B
  X0 : All (λ x : A, P x n a) (a0 :: ls2)
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) 
         (S n) ls1
  H0 : hd = a
  H1 : tl = ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
<coq-core.plugins.ltac::subst@1>

Goals:
  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : All (λ x : A, Alli (P x) n []) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n []
  ============================
   (All (λ x : A, Alli (P x) n []) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n []) (a :: ls2)
  X0 : Alli (P a) n []
  X1 : All (λ x : A, Alli (P x) n []) ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a :: ls2)) n []
  ============================
   (All (λ x : A, Alli (P x) n []) (a :: ls2))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) []
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) n (a :: ls1)
  X0 : All (λ x : A, P x n a) []
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) []) (S n) ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) [])

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2)
  X0 : Alli (P a0) n (a :: ls1)
  X1 : All (λ x : A, Alli (P x) n (a :: ls1)) ls2
  ============================
   (Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
      (a :: ls1))

  
  A : Type
  B : Type
  P : A → nat → B → Type
  a : B
  ls1 : list B
  IH : ∀ (ls2 : list A) (n : nat),
         All (λ x : A, Alli (P x) n ls1) ls2 <~>
         Alli (λ (n0 : nat) (y : B), All (λ x : A, P x n0 y) ls2) n ls1
  a0 : A
  ls2 : list A
  n : nat
  X : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) n
        (a :: ls1)
  X0 : All (λ x : A, P x n a) (a0 :: ls2)
  X1 : Alli (λ (n : nat) (y : B), All (λ x : A, P x n y) (a0 :: ls2)) 
         (S n) ls1
  ============================
   (All (λ x : A, Alli (P x) n (a :: ls1)) (a0 :: ls2))


DEBUG:Going to execute:
repeat constructor => //=