induction i using Fin.cases
case cons
α : Type u_1
β : Type u_2
L2 : List β
j : Fin L2.length
hd : α
tl : List α
ih :
  ∀ {i : Fin tl.length} (LL : List (α × β)),
    tl ×ˢ L2 = LL → ∀ {p : Fin LL.length}, ↑p = ↑(i.pair j) → LL.get p = (tl.get i, L2.get j)
i : Fin (tl.length + 1)
LL : List (α × β)
hLL : (hd :: tl) ×ˢ L2 = LL
p : Fin LL.length
hp : ↑p = ↑(i.pair j)
⊢ LL.get p = ((hd :: tl).get i, L2.get j)
case cons.zero
α : Type u_1
β : Type u_2
L2 : List β
j : Fin L2.length
hd : α
tl : List α
ih :
  ∀ {i : Fin tl.length} (LL : List (α × β)),
    tl ×ˢ L2 = LL → ∀ {p : Fin LL.length}, ↑p = ↑(i.pair j) → LL.get p = (tl.get i, L2.get j)
LL : List (α × β)
hLL : (hd :: tl) ×ˢ L2 = LL
p : Fin LL.length
hp : ↑p = ↑(Fin.pair 0 j)
⊢ LL.get p = ((hd :: tl).get 0, L2.get j)

case cons.succ
α : Type u_1
β : Type u_2
L2 : List β
j : Fin L2.length
hd : α
tl : List α
ih :
  ∀ {i : Fin tl.length} (LL : List (α × β)),
    tl ×ˢ L2 = LL → ∀ {p : Fin LL.length}, ↑p = ↑(i.pair j) → LL.get p = (tl.get i, L2.get j)
LL : List (α × β)
hLL : (hd :: tl) ×ˢ L2 = LL
p : Fin LL.length
i✝ : Fin tl.length
hp : ↑p = ↑(i✝.succ.pair j)
⊢ LL.get p = ((hd :: tl).get i✝.succ, L2.get j)