Theorem: Matrix.BlockTriangular.mul
File: Mathlib/LinearAlgebra/Matrix/Block.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
⊢ (M * N).BlockTriangular b
state_after: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
⊢ (M * N) i j = 0
tactic: intro i j hij
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
⊢ (M * N) i j = 0
state_after: case h
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
⊢ ∀ x ∈ univ, (fun j => M i j) x * (fun j_1 => N j_1 j) x = 0
tactic: apply Finset.sum_eq_zero
state_before: case h
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
⊢ ∀ x ∈ univ, (fun j => M i j) x * (fun j_1 => N j_1 j) x = 0
state_after: case h
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
k : m
a✝ : k ∈ univ
⊢ (fun j => M i j) k * (fun j_1 => N j_1 j) k = 0
tactic: intro k _
state_before: case h
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
k : m
a✝ : k ∈ univ
⊢ (fun j => M i j) k * (fun j_1 => N j_1 j) k = 0
state_after: case pos
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
k : m
a✝ : k ∈ univ
hki : b k < b i
⊢ (fun j => M i j) k * (fun j_1 => N j_1 j) k = 0

case neg
α : Type u_1
β : Type u_2
m : Type u_3
n : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝² : CommRing R
M✝ N✝ : Matrix m m R
b : m → α
inst✝¹ : LinearOrder α
inst✝ : Fintype m
M N : Matrix m m R
hM : M.BlockTriangular b
hN : N.BlockTriangular b
i j : m
hij : b j < b i
k : m
a✝ : k ∈ univ
hki : ¬b k < b i
⊢ (fun j => M i j) k * (fun j_1 => N j_1 j) k = 0
tactic: by_cases hki : b k < b i