Theorem: PiTensorProduct.reindex_trans
File: Mathlib/LinearAlgebra/PiTensorProduct.lean

tactic: apply LinearEquiv.toLinearMap_injective
state_before: ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type ?u.488461
R₂ : Type ?u.488464
s : ι → Type ?u.488469
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_5
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type ?u.488788
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type ?u.488922
inst✝ : AddCommMonoid F
φ : MultilinearMap R s E
e : ι ≃ ι₂
e' : ι₂ ≃ ι₃
⊢ LinearEquiv.trans (reindex R M e) (reindex R M e') = reindex R M (e.trans e')

tactic: refine ext ?_
state_before: case a
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type ?u.488461
R₂ : Type ?u.488464
s : ι → Type ?u.488469
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_5
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type ?u.488788
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type ?u.488922
inst✝ : AddCommMonoid F
φ : MultilinearMap R s E
e : ι ≃ ι₂
e' : ι₂ ≃ ι₃
⊢ ↑(LinearEquiv.trans (reindex R M e) (reindex R M e')) = ↑(reindex R M (e.trans e'))

tactic: ext f
state_before: case a
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type ?u.488461
R₂ : Type ?u.488464
s : ι → Type ?u.488469
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_5
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type ?u.488788
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type ?u.488922
inst✝ : AddCommMonoid F
φ : MultilinearMap R s E
e : ι ≃ ι₂
e' : ι₂ ≃ ι₃
⊢ LinearMap.compMultilinearMap (↑(LinearEquiv.trans (reindex R M e) (reindex R M e'))) (tprod R) =
    LinearMap.compMultilinearMap (↑(reindex R M (e.trans e'))) (tprod R)

tactic: simp only [LinearEquiv.trans_apply, LinearEquiv.coe_coe, reindex_tprod,
  LinearMap.coe_compMultilinearMap, Function.comp_apply, MultilinearMap.domDomCongr_apply,
  reindex_comp_tprod]
state_before: case a.H
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type ?u.488461
R₂ : Type ?u.488464
s : ι → Type ?u.488469
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_5
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type ?u.488788
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type ?u.488922
inst✝ : AddCommMonoid F
φ : MultilinearMap R s E
e : ι ≃ ι₂
e' : ι₂ ≃ ι₃
f : ι → M
⊢ ↑(LinearMap.compMultilinearMap (↑(LinearEquiv.trans (reindex R M e) (reindex R M e'))) (tprod R)) f =
    ↑(LinearMap.compMultilinearMap (↑(reindex R M (e.trans e'))) (tprod R)) f

tactic: congr
state_before: case a.H
ι : Type u_1
ι₂ : Type u_2
ι₃ : Type u_3
R : Type u_4
inst✝⁷ : CommSemiring R
R₁ : Type ?u.488461
R₂ : Type ?u.488464
s : ι → Type ?u.488469
inst✝⁶ : (i : ι) → AddCommMonoid (s i)
inst✝⁵ : (i : ι) → Module R (s i)
M : Type u_5
inst✝⁴ : AddCommMonoid M
inst✝³ : Module R M
E : Type ?u.488788
inst✝² : AddCommMonoid E
inst✝¹ : Module R E
F : Type ?u.488922
inst✝ : AddCommMonoid F
φ : MultilinearMap R s E
e : ι ≃ ι₂
e' : ι₂ ≃ ι₃
f : ι → M
⊢ (⨂ₜ[R] (i : ι₃), f (↑e.symm (↑e'.symm i))) = ⨂ₜ[R] (i : ι₃), f (↑(e.trans e').symm i)