[GOAL]
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁶ : CommSemiring R
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : AddCommMonoid M₃
inst✝³ : (i : Fin n) → AddCommMonoid (M i)
inst✝² : (i : Fin n) → Module R (M i)
inst✝¹ : Module R M₂
inst✝ : Module R M₃
f g : MultilinearMap R M M₂
ι₁ : Fin n → Type u_6
e : (i : Fin n) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin n) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
induction' n with m hm
[GOAL]
case zero
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
M : Fin Nat.zero → Type u_3
inst✝¹ : (i : Fin Nat.zero) → AddCommMonoid (M i)
inst✝ : (i : Fin Nat.zero) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin Nat.zero → Type u_6
e : (i : Fin Nat.zero) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin Nat.zero) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
ext x
[GOAL]
case zero.H
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
M : Fin Nat.zero → Type u_3
inst✝¹ : (i : Fin Nat.zero) → AddCommMonoid (M i)
inst✝ : (i : Fin Nat.zero) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin Nat.zero → Type u_6
e : (i : Fin Nat.zero) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin Nat.zero) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
x : (i : Fin Nat.zero) → M i
⊢ ↑f x = ↑g x
[PROOFSTEP]
convert h finZeroElim
[GOAL]
case succ
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ f = g
[PROOFSTEP]
apply Function.LeftInverse.injective uncurry_curryLeft
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ (fun x => curryLeft x) f = (fun x => curryLeft x) g
[PROOFSTEP]
refine' Basis.ext (e 0) _
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
⊢ ∀ (i : ι₁ 0), ↑((fun x => curryLeft x) f) (↑(e 0) i) = ↑((fun x => curryLeft x) g) (↑(e 0) i)
[PROOFSTEP]
intro i
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
⊢ ↑((fun x => curryLeft x) f) (↑(e 0) i) = ↑((fun x => curryLeft x) g) (↑(e 0) i)
[PROOFSTEP]
apply hm (Fin.tail e)
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
⊢ ∀ (v : (i : Fin m) → ι₁ (Fin.succ i)),
    (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (v i)) =
      ↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (v i)
[PROOFSTEP]
intro j
[GOAL]
case succ.a
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) =
    ↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)
[PROOFSTEP]
convert h (Fin.cons i j)
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
iterate 2 
  rw [curryLeft_apply]
  congr 1 with x
  refine' Fin.cases rfl (fun x => _) x
  dsimp [Fin.tail]
  rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) f) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [curryLeft_apply]
[GOAL]
case h.e'_2
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ ↑f (Fin.cons (↑(e 0) i) fun i => ↑(Fin.tail e i) (j i)) = ↑f fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
congr 1 with x
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x : Fin (m + 1)
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) x = ↑(e x) (Fin.cons i j x)
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
refine' Fin.cases rfl (fun x => _) x
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
dsimp [Fin.tail]
[GOAL]
case h.e'_2.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(e (Fin.succ i)) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ (↑(↑((fun x => curryLeft x) g) (↑(e 0) i)) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
rw [curryLeft_apply]
[GOAL]
case h.e'_3
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
⊢ ↑g (Fin.cons (↑(e 0) i) fun i => ↑(Fin.tail e i) (j i)) = ↑g fun i_1 => ↑(e i_1) (Fin.cons i j i_1)
[PROOFSTEP]
congr 1 with x
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x : Fin (m + 1)
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) x = ↑(e x) (Fin.cons i j x)
[PROOFSTEP]
refine' Fin.cases rfl (fun x => _) x
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(Fin.tail e i) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
[PROOFSTEP]
dsimp [Fin.tail]
[GOAL]
case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type u_2
n : ℕ
M✝ : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁸ : CommSemiring R
inst✝⁷ : AddCommMonoid M₂
inst✝⁶ : AddCommMonoid M₃
inst✝⁵ : (i : Fin n) → AddCommMonoid (M✝ i)
inst✝⁴ : (i : Fin n) → Module R (M✝ i)
inst✝³ : Module R M₂
inst✝² : Module R M₃
f✝ g✝ : MultilinearMap R M✝ M₂
ι₁✝ : Fin n → Type u_6
e✝ : (i : Fin n) → Basis (ι₁✝ i) R (M✝ i)
h✝ : ∀ (v : (i : Fin n) → ι₁✝ i), (↑f✝ fun i => ↑(e✝ i) (v i)) = ↑g✝ fun i => ↑(e✝ i) (v i)
m : ℕ
hm :
  ∀ {M : Fin m → Type u_3} [inst : (i : Fin m) → AddCommMonoid (M i)] [inst_1 : (i : Fin m) → Module R (M i)]
    {f g : MultilinearMap R M M₂} {ι₁ : Fin m → Type u_6} (e : (i : Fin m) → Basis (ι₁ i) R (M i)),
    (∀ (v : (i : Fin m) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)) → f = g
M : Fin (Nat.succ m) → Type u_3
inst✝¹ : (i : Fin (Nat.succ m)) → AddCommMonoid (M i)
inst✝ : (i : Fin (Nat.succ m)) → Module R (M i)
f g : MultilinearMap R M M₂
ι₁ : Fin (Nat.succ m) → Type u_6
e : (i : Fin (Nat.succ m)) → Basis (ι₁ i) R (M i)
h : ∀ (v : (i : Fin (Nat.succ m)) → ι₁ i), (↑f fun i => ↑(e i) (v i)) = ↑g fun i => ↑(e i) (v i)
i : ι₁ 0
j : (i : Fin m) → ι₁ (Fin.succ i)
x✝ : Fin (m + 1)
x : Fin m
⊢ Fin.cons (↑(e 0) i) (fun i => ↑(e (Fin.succ i)) (j i)) (Fin.succ x) = ↑(e (Fin.succ x)) (Fin.cons i j (Fin.succ x))
[PROOFSTEP]
rw [Fin.cons_succ, Fin.cons_succ]
[GOAL]
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : (i : Fin n) → AddCommMonoid (M i)
inst✝³ : (i : Fin n) → Module R (M i)
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Finite ι
f g : MultilinearMap R (fun x => M₂) M₃
ι₁ : Type u_6
e : Basis ι₁ R M₂
h : ∀ (v : ι → ι₁), (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
⊢ f = g
[PROOFSTEP]
cases nonempty_fintype ι
[GOAL]
case intro
R : Type u_1
ι : Type u_2
n : ℕ
M : Fin n → Type u_3
M₂ : Type u_4
M₃ : Type u_5
inst✝⁷ : CommSemiring R
inst✝⁶ : AddCommMonoid M₂
inst✝⁵ : AddCommMonoid M₃
inst✝⁴ : (i : Fin n) → AddCommMonoid (M i)
inst✝³ : (i : Fin n) → Module R (M i)
inst✝² : Module R M₂
inst✝¹ : Module R M₃
inst✝ : Finite ι
f g : MultilinearMap R (fun x => M₂) M₃
ι₁ : Type u_6
e : Basis ι₁ R M₂
h : ∀ (v : ι → ι₁), (↑f fun i => ↑e (v i)) = ↑g fun i => ↑e (v i)
val✝ : Fintype ι
⊢ f = g
[PROOFSTEP]
exact (domDomCongr_eq_iff (Fintype.equivFin ι) f g).mp (Basis.ext_multilinear_fin (fun _ => e) fun i => h (i ∘ _))
