Theorem: Basis.SmithNormalForm.toMatrix_restrict_eq_toMatrix
File: Mathlib/LinearAlgebra/FreeModule/PID.lean

tactic: rw [LinearMap.toMatrix_apply, LinearMap.toMatrix_apply,
  snf.repr_apply_embedding_eq_repr_smul ⟨_, (hf _)⟩]
state_before: ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ (LinearMap.toMatrix snf.bN snf.bN) (f.restrict hf') i i = (LinearMap.toMatrix snf.bM snf.bM) f (snf.f i) (snf.f i)
state_after: ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ (snf.bN.repr ((f.restrict hf') (snf.bN i))) i = (snf.bN.repr (snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩)) i

tactic: congr
state_before: ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ (snf.bN.repr ((f.restrict hf') (snf.bN i))) i = (snf.bN.repr (snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩)) i
state_after: case e_a.h.e_6.h
ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ (f.restrict hf') (snf.bN i) = snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩

tactic: ext
state_before: case e_a.h.e_6.h
ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ (f.restrict hf') (snf.bN i) = snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩
state_after: case e_a.h.e_6.h.a
ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ ↑((f.restrict hf') (snf.bN i)) = ↑(snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩)

tactic: simp [snf.snf]
state_before: case e_a.h.e_6.h.a
ι : Type u_1
R : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : IsDomain R
inst✝⁴ : IsPrincipalIdealRing R
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
b : ι → M
n : ℕ
N : Submodule R M
snf : SmithNormalForm N ι n
m : ↥N
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
f : M →ₗ[R] M
hf : ∀ (x : M), f x ∈ N
hf' : optParam (∀ x ∈ N, f x ∈ N) ⋯
i : Fin n
⊢ ↑((f.restrict hf') (snf.bN i)) = ↑(snf.a i • ⟨f (snf.bM (snf.f i)), ⋯⟩)
state_after: no goals