Theorem: Basis.ext_multilinear_fin
File: Mathlib/LinearAlgebra/Multilinear/Basis.lean

tactic: induction' n with m hm
state_before: R : Type u_1
ι : Type ?u.528
n : ℕ
M : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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

tactic: ext x
state_before: case zero
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2
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_4
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

tactic: rename_i x
state_before: case h.e'_3.h.e'_6.h
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2
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_4
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
x✝ : Fin Nat.zero
⊢ x x✝ = ↑(e x✝) (finZeroElim x✝)

tactic: apply finZeroElim x
state_before: case h.e'_3.h.e'_6.h
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2
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_4
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
x : Fin Nat.zero
⊢ x✝ x = ↑(e x) (finZeroElim x)

tactic: apply Function.LeftInverse.injective uncurry_curryLeft
state_before: case succ
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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

tactic: refine' Basis.ext (e 0) _
state_before: case succ.a
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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

tactic: intro i
state_before: case succ.a
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: apply hm (Fin.tail e)
state_before: case succ.a
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: intro j
state_before: case succ.a
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: convert h (Fin.cons i j)
state_before: case succ.a
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: 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]
state_before: case h.e'_2
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: rw [curryLeft_apply]
state_before: case h.e'_3
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: congr 1 with x
state_before: case h.e'_3
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: refine' Fin.cases rfl (fun x => _) x
state_before: case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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)

tactic: dsimp [Fin.tail]
state_before: case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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))

tactic: rw [Fin.cons_succ, Fin.cons_succ]
state_before: case h.e'_3.h.e_6.h.h
R : Type u_1
ι : Type ?u.528
n : ℕ
M✝ : Fin n → Type u_2
M₂ : Type u_3
M₃ : Type ?u.541
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_4
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_2} [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_4} (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_2
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_4
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))