Theorem: MultilinearMap.domDomCongrLinearEquiv'_symm_apply
File: Mathlib/LinearAlgebra/Multilinear/Basic.lean

Proof steps:
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
⊢ ∀ (x y : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x y : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)
tactic: letI := σ.decidableEq
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x y : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x y : M₁ (σ.symm (σ (σ.symm i)))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x) +
        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) y)
tactic: rw [← σ.apply_symm_apply i]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x y : M₁ (σ.symm (σ (σ.symm i)))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x) +
        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
x y : M₁ (σ.symm (σ (σ.symm i)))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (x + y)) =
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x) +
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) y)
tactic: intro x y
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
this : DecidableEq ι := σ.decidableEq
x y : M₁ (σ.symm (σ (σ.symm i)))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (x + y)) =
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x) +
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) y)
state_after: no goals
tactic: simp only [comp_apply, piCongrLeft'_symm_update, f.map_add]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
⊢ ∀ (x : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)
tactic: letI := σ.decidableEq
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x : M₁ (σ.symm i)),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m i x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x : M₁ (σ.symm (σ (σ.symm i)))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x)
tactic: rw [← σ.apply_symm_apply i]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
⊢ ∀ (x : M₁ (σ.symm (σ (σ.symm i)))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
x : M₁ (σ.symm (σ (σ.symm i)))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (c • x)) =
    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x)
tactic: intro x
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
inst✝ : DecidableEq ι'
m : (i : ι') → M₁ (σ.symm i)
i : ι'
c : R
this : DecidableEq ι := σ.decidableEq
x : M₁ (σ.symm (σ (σ.symm i)))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) (c • x)) =
    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm) (update m (σ (σ.symm i)) x)
state_after: no goals
tactic: simp only [Function.comp, piCongrLeft'_symm_update, f.map_smul]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
⊢ ∀ (x y : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x y : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i y)
tactic: letI := σ.symm.decidableEq
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x y : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x) + (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x y : M₁ (σ.symm (σ i))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x) +
        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) y)
tactic: rw [← σ.symm_apply_apply i]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x y : M₁ (σ.symm (σ i))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (x + y)) =
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x) +
        (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) y)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
x y : M₁ (σ.symm (σ i))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (x + y)) =
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x) +
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) y)
tactic: intro x y
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
this : DecidableEq ι' := σ.symm.decidableEq
x y : M₁ (σ.symm (σ i))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (x + y)) =
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x) +
      (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) y)
state_after: no goals
tactic: simp only [comp_apply, piCongrLeft'_update, f.map_add]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
⊢ ∀ (x : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (c • x)) = c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (c • x)) = c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x)
tactic: letI := σ.symm.decidableEq
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x : M₁ i),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i (c • x)) = c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m i x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x : M₁ (σ.symm (σ i))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x)
tactic: rw [← σ.symm_apply_apply i]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
⊢ ∀ (x : M₁ (σ.symm (σ i))),
    (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (c • x)) =
      c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x)
state_after: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
x : M₁ (σ.symm (σ i))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (c • x)) =
    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x)
tactic: intro x
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁸ : Semiring R
inst✝⁷ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁶ : (i : ι) → Module R (M₁ i)
inst✝⁵ : AddCommMonoid M₂
inst✝⁴ : Module R M₂
inst✝³ : Semiring S
inst✝² : Module S M₂
inst✝¹ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
inst✝ : DecidableEq ι
m : (i : ι) → M₁ i
i : ι
c : R
this : DecidableEq ι' := σ.symm.decidableEq
x : M₁ (σ.symm (σ i))
⊢ (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) (c • x)) =
    c • (⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ)) (update m (σ.symm (σ i)) x)
state_after: no goals
tactic: simp only [Function.comp, piCongrLeft'_update, f.map_smul]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f₁ f₂ : MultilinearMap R M₁ M₂
⊢ (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) (f₁ + f₂) =
    (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₁ +
      (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₂
state_after: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f₁ f₂ : MultilinearMap R M₁ M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) (f₁ + f₂)) x✝ =
    ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₁ +
        (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₂)
      x✝
tactic: ext
state_before: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f₁ f₂ : MultilinearMap R M₁ M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) (f₁ + f₂)) x✝ =
    ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₁ +
        (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }) f₂)
      x✝
state_after: no goals
tactic: simp only [Function.comp, coe_mk, add_apply]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
c : S
f : MultilinearMap R M₁ M₂
⊢ { toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
          map_add' := ⋯ }.toFun
      (c • f) =
    (RingHom.id S) c •
      { toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
            map_add' := ⋯ }.toFun
        f
state_after: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
c : S
f : MultilinearMap R M₁ M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
            map_add' := ⋯ }.toFun
        (c • f))
      x✝ =
    ((RingHom.id S) c •
        { toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
              map_add' := ⋯ }.toFun
          f)
      x✝
tactic: ext
state_before: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
c : S
f : MultilinearMap R M₁ M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
            map_add' := ⋯ }.toFun
        (c • f))
      x✝ =
    ((RingHom.id S) c •
        { toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
              map_add' := ⋯ }.toFun
          f)
      x✝
state_after: no goals
tactic: simp only [Function.comp, coe_mk, smul_apply, RingHom.id_apply]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
⊢ (fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ })
      ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
            map_add' := ⋯, map_smul' := ⋯ }.toFun
        f) =
    f
state_after: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
x✝ : (i : ι) → M₁ i
⊢ ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ })
        ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
              map_add' := ⋯, map_smul' := ⋯ }.toFun
          f))
      x✝ =
    f x✝
tactic: ext
state_before: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R M₁ M₂
x✝ : (i : ι) → M₁ i
⊢ ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ })
        ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ },
              map_add' := ⋯, map_smul' := ⋯ }.toFun
          f))
      x✝ =
    f x✝
state_after: no goals
tactic: simp only [coe_mk, comp_apply, Equiv.symm_apply_apply]
state_before: R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
⊢ { toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }, map_add' := ⋯,
          map_smul' := ⋯ }.toFun
      ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ }) f) =
    f
state_after: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }, map_add' := ⋯,
            map_smul' := ⋯ }.toFun
        ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ }) f))
      x✝ =
    f x✝
tactic: ext
state_before: case H
R : Type uR
S : Type uS
ι : Type uι
n : ℕ
M : Fin n.succ → Type v
M₁ : ι → Type v₁
M₂ : Type v₂
M₃ : Type v₃
M' : Type v'
inst✝⁷ : Semiring R
inst✝⁶ : (i : ι) → AddCommMonoid (M₁ i)
inst✝⁵ : (i : ι) → Module R (M₁ i)
inst✝⁴ : AddCommMonoid M₂
inst✝³ : Module R M₂
inst✝² : Semiring S
inst✝¹ : Module S M₂
inst✝ : SMulCommClass R S M₂
ι' : Type u_1
σ : ι ≃ ι'
f : MultilinearMap R (fun i => M₁ (σ.symm i)) M₂
x✝ : (i : ι') → M₁ (σ.symm i)
⊢ ({ toFun := fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ).symm, map_add' := ⋯, map_smul' := ⋯ }, map_add' := ⋯,
            map_smul' := ⋯ }.toFun
        ((fun f => { toFun := ⇑f ∘ ⇑(Equiv.piCongrLeft' M₁ σ), map_add' := ⋯, map_smul' := ⋯ }) f))
      x✝ =
    f x✝
state_after: no goals
tactic: simp only [coe_mk, comp_apply, Equiv.apply_symm_apply]