Theorem: Matrix.l2_opNorm_mul
File: Mathlib/Analysis/CstarAlgebra/Matrix.lean

Proof steps:
state_before: 𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
⊢ ‖A * B‖ ≤ ‖A‖ * ‖B‖
state_after: 𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
⊢ ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
tactic: simp only [l2_opNorm_def]
state_before: 𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
⊢ ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
state_after: 𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
⊢ ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
tactic: have := (toEuclideanLin (n := n) (m := m) (𝕜 := 𝕜) ≪≫ₗ toContinuousLinearMap) A
    |>.opNorm_comp_le <| (toEuclideanLin (n := l) (m := n) (𝕜 := 𝕜) ≪≫ₗ toContinuousLinearMap) B
state_before: 𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
⊢ ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
state_after: case h.e'_3.h.e'_3
𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
⊢ (toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B) =
    ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)
tactic: convert this
state_before: case h.e'_3.h.e'_3
𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
⊢ (toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B) =
    ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)
state_after: case h.e'_3.h.e'_3.h
𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
x : EuclideanSpace 𝕜 l
⊢ ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)) x =
    (((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)) x
tactic: ext1 x
state_before: case h.e'_3.h.e'_3.h
𝕜 : Type u_1
m : Type u_2
n : Type u_3
l : Type u_4
E : Type u_5
inst✝⁵ : RCLike 𝕜
inst✝⁴ : Fintype m
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : Fintype l
inst✝ : DecidableEq l
A : Matrix m n 𝕜
B : Matrix n l 𝕜
this :
  ‖((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)‖ ≤
    ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) A‖ * ‖(toEuclideanLin ≪≫ₗ toContinuousLinearMap) B‖
x : EuclideanSpace 𝕜 l
⊢ ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) (A * B)) x =
    (((toEuclideanLin ≪≫ₗ toContinuousLinearMap) A).comp ((toEuclideanLin ≪≫ₗ toContinuousLinearMap) B)) x
state_after: no goals
tactic: exact congr($(Matrix.toLin'_mul A B) x)