l3lab/ntp-mathlib huggingface dataset:
@[simp]
theorem cons_vecMulVec (x : α) (v : Fin m → α) (w : n' → α) :
    vecMulVec (vecCons x v) w = vecCons (x • w) (vecMulVec v w) := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : Fin m → α
w : n' → α
⊢ vecMulVec (vecCons x v) w = vecCons (x • w) (vecMulVec v w)

Next tactic:
ext i
@[simp]
theorem cons_vecMulVec (x : α) (v : Fin m → α) (w : n' → α) :
    vecMulVec (vecCons x v) w = vecCons (x • w) (vecMulVec v w) := by
  ext i
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : Fin m → α
w : n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ vecMulVec (vecCons x v) w i x✝ = vecCons (x • w) (vecMulVec v w) i x✝

Next tactic:
refine' Fin.cases _ _ i
@[simp]
theorem cons_vecMulVec (x : α) (v : Fin m → α) (w : n' → α) :
    vecMulVec (vecCons x v) w = vecCons (x • w) (vecMulVec v w) := by
  ext i
  refine' Fin.cases _ _ i <;> 

Proof state:
case a.h.refine'_1
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : Fin m → α
w : n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ vecMulVec (vecCons x v) w 0 x✝ = vecCons (x • w) (vecMulVec v w) 0 x✝

Next tactic:
simp [vecMulVec]
@[simp]
theorem cons_vecMulVec (x : α) (v : Fin m → α) (w : n' → α) :
    vecMulVec (vecCons x v) w = vecCons (x • w) (vecMulVec v w) := by
  ext i
  refine' Fin.cases _ _ i <;> 

Proof state:
case a.h.refine'_2
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : Fin m → α
w : n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ ∀ (i : Fin m), vecMulVec (vecCons x v) w (Fin.succ i) x✝ = vecCons (x • w) (vecMulVec v w) (Fin.succ i) x✝

Next tactic:
simp [vecMulVec]
@[simp]
theorem vecMulVec_cons (v : m' → α) (x : α) (w : Fin n → α) :
    vecMulVec v (vecCons x w) = fun i => v i • vecCons x w := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
v : m' → α
x : α
w : Fin n → α
⊢ vecMulVec v (vecCons x w) = fun i => v i • vecCons x w

Next tactic:
ext i j
@[simp]
theorem vecMulVec_cons (v : m' → α) (x : α) (w : Fin n → α) :
    vecMulVec v (vecCons x w) = fun i => v i • vecCons x w := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
v : m' → α
x : α
w : Fin n → α
i : m'
j : Fin (Nat.succ n)
⊢ vecMulVec v (vecCons x w) i j = (v i • vecCons x w) j

Next tactic:
rw [vecMulVec_apply, Pi.smul_apply, smul_eq_mul]
theorem smul_mat_cons (x : α) (v : n' → α) (A : Fin m → n' → α) :
    x • vecCons v A = vecCons (x • v) (x • A) := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : n' → α
A : Fin m → n' → α
⊢ x • vecCons v A = vecCons (x • v) (x • A)

Next tactic:
ext i
theorem smul_mat_cons (x : α) (v : n' → α) (A : Fin m → n' → α) :
    x • vecCons v A = vecCons (x • v) (x • A) := by
  ext i
  

Proof state:
case h.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : n' → α
A : Fin m → n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ (x • vecCons v A) i x✝ = vecCons (x • v) (x • A) i x✝

Next tactic:
refine' Fin.cases _ _ i
theorem smul_mat_cons (x : α) (v : n' → α) (A : Fin m → n' → α) :
    x • vecCons v A = vecCons (x • v) (x • A) := by
  ext i
  refine' Fin.cases _ _ i <;> 

Proof state:
case h.h.refine'_1
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : n' → α
A : Fin m → n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ (x • vecCons v A) 0 x✝ = vecCons (x • v) (x • A) 0 x✝

Next tactic:
simp
theorem smul_mat_cons (x : α) (v : n' → α) (A : Fin m → n' → α) :
    x • vecCons v A = vecCons (x • v) (x • A) := by
  ext i
  refine' Fin.cases _ _ i <;> 

Proof state:
case h.h.refine'_2
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝ : NonUnitalNonAssocSemiring α
x : α
v : n' → α
A : Fin m → n' → α
i : Fin (Nat.succ m)
x✝ : n'
⊢ ∀ (i : Fin m), (x • vecCons v A) (Fin.succ i) x✝ = vecCons (x • v) (x • A) (Fin.succ i) x✝

Next tactic:
simp
@[simp]
theorem submatrix_cons_row (A : Matrix m' n' α) (i : m') (row : Fin m → m') (col : o' → n') :
    submatrix A (vecCons i row) col = vecCons (fun j => A i (col j)) (submatrix A row col) := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix m' n' α
i : m'
row : Fin m → m'
col : o' → n'
⊢ submatrix A (vecCons i row) col = vecCons (fun j => A i (col j)) (submatrix A row col)

Next tactic:
ext i j
@[simp]
theorem submatrix_cons_row (A : Matrix m' n' α) (i : m') (row : Fin m → m') (col : o' → n') :
    submatrix A (vecCons i row) col = vecCons (fun j => A i (col j)) (submatrix A row col) := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix m' n' α
i✝ : m'
row : Fin m → m'
col : o' → n'
i : Fin (Nat.succ m)
j : o'
⊢ submatrix A (vecCons i✝ row) col i j = vecCons (fun j => A i✝ (col j)) (submatrix A row col) i j

Next tactic:
refine' Fin.cases _ _ i
@[simp]
theorem submatrix_cons_row (A : Matrix m' n' α) (i : m') (row : Fin m → m') (col : o' → n') :
    submatrix A (vecCons i row) col = vecCons (fun j => A i (col j)) (submatrix A row col) := by
  ext i j
  refine' Fin.cases _ _ i <;> 

Proof state:
case a.h.refine'_1
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix m' n' α
i✝ : m'
row : Fin m → m'
col : o' → n'
i : Fin (Nat.succ m)
j : o'
⊢ submatrix A (vecCons i✝ row) col 0 j = vecCons (fun j => A i✝ (col j)) (submatrix A row col) 0 j

Next tactic:
simp [submatrix]
@[simp]
theorem submatrix_cons_row (A : Matrix m' n' α) (i : m') (row : Fin m → m') (col : o' → n') :
    submatrix A (vecCons i row) col = vecCons (fun j => A i (col j)) (submatrix A row col) := by
  ext i j
  refine' Fin.cases _ _ i <;> 

Proof state:
case a.h.refine'_2
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix m' n' α
i✝ : m'
row : Fin m → m'
col : o' → n'
i : Fin (Nat.succ m)
j : o'
⊢ ∀ (i : Fin m),
    submatrix A (vecCons i✝ row) col (Fin.succ i) j =
      vecCons (fun j => A i✝ (col j)) (submatrix A row col) (Fin.succ i) j

Next tactic:
simp [submatrix]
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ 1 = of ![![1, 0], ![0, 1]]

Next tactic:
ext i j
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
i j : Fin 2
⊢ OfNat.ofNat 1 i j = of ![![1, 0], ![0, 1]] i j

Next tactic:
fin_cases i
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
j : Fin 2
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 2) } j = of ![![1, 0], ![0, 1]] { val := 0, isLt := (_ : 0 < 2) } j

Next tactic:
fin_cases j
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
j : Fin 2
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 2) 1) } j =
    of ![![1, 0], ![0, 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) } j

Next tactic:
fin_cases j
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 2) } { val := 0, isLt := (_ : 0 < 2) } =
    of ![![1, 0], ![0, 1]] { val := 0, isLt := (_ : 0 < 2) } { val := 0, isLt := (_ : 0 < 2) }

Next tactic:
rfl
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 2) } { val := 1, isLt := (_ : (fun a => a < 2) 1) } =
    of ![![1, 0], ![0, 1]] { val := 0, isLt := (_ : 0 < 2) } { val := 1, isLt := (_ : (fun a => a < 2) 1) }

Next tactic:
rfl
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 0, isLt := (_ : 0 < 2) } =
    of ![![1, 0], ![0, 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 0, isLt := (_ : 0 < 2) }

Next tactic:
rfl
theorem one_fin_two : (1 : Matrix (Fin 2) (Fin 2) α) = !![1, 0; 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 1, isLt := (_ : (fun a => a < 2) 1) } =
    of ![![1, 0], ![0, 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 1, isLt := (_ : (fun a => a < 2) 1) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ 1 = of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]]

Next tactic:
ext i j
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
i j : Fin 3
⊢ OfNat.ofNat 1 i j = of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] i j

Next tactic:
fin_cases i
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
j : Fin 3
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 3) } j =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 0, isLt := (_ : 0 < 3) } j

Next tactic:
fin_cases j
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
j : Fin 3
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 3) 1) } j =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 1, isLt := (_ : (fun a => a < 3) 1) } j

Next tactic:
fin_cases j
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
j : Fin 3
⊢ OfNat.ofNat 1 { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } j =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } j

Next tactic:
fin_cases j
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 3) } { val := 0, isLt := (_ : 0 < 3) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 0, isLt := (_ : 0 < 3) } { val := 0, isLt := (_ : 0 < 3) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 3) } { val := 1, isLt := (_ : (fun a => a < 3) 1) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 0, isLt := (_ : 0 < 3) }
      { val := 1, isLt := (_ : (fun a => a < 3) 1) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 0, isLt := (_ : 0 < 3) } { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 0, isLt := (_ : 0 < 3) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 3) 1) } { val := 0, isLt := (_ : 0 < 3) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 1, isLt := (_ : (fun a => a < 3) 1) }
      { val := 0, isLt := (_ : 0 < 3) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 3) 1) } { val := 1, isLt := (_ : (fun a => a < 3) 1) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 1, isLt := (_ : (fun a => a < 3) 1) }
      { val := 1, isLt := (_ : (fun a => a < 3) 1) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 1, isLt := (_ : (fun a => a < 3) 1) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 1, isLt := (_ : (fun a => a < 3) 1) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.tail.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } { val := 0, isLt := (_ : 0 < 3) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }
      { val := 0, isLt := (_ : 0 < 3) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.tail.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }
      { val := 1, isLt := (_ : (fun a => a < 3) 1) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }
      { val := 1, isLt := (_ : (fun a => a < 3) 1) }

Next tactic:
rfl
theorem one_fin_three : (1 : Matrix (Fin 3) (Fin 3) α) = !![1, 0, 0; 0, 1, 0; 0, 0, 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.tail.head.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : Zero α
inst✝ : One α
⊢ OfNat.ofNat 1 { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } =
    of ![![1, 0, 0], ![0, 1, 0], ![0, 0, 1]] { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }

Next tactic:
rfl
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
⊢ A = of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]]

Next tactic:
ext i j
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
i j : Fin 2
⊢ A i j = of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] i j

Next tactic:
fin_cases i
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
j : Fin 2
⊢ A { val := 0, isLt := (_ : 0 < 2) } j = of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 0, isLt := (_ : 0 < 2) } j

Next tactic:
fin_cases j
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
j : Fin 2
⊢ A { val := 1, isLt := (_ : (fun a => a < 2) 1) } j =
    of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) } j

Next tactic:
fin_cases j
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
⊢ A { val := 0, isLt := (_ : 0 < 2) } { val := 0, isLt := (_ : 0 < 2) } =
    of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 0, isLt := (_ : 0 < 2) } { val := 0, isLt := (_ : 0 < 2) }

Next tactic:
rfl
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
⊢ A { val := 0, isLt := (_ : 0 < 2) } { val := 1, isLt := (_ : (fun a => a < 2) 1) } =
    of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 0, isLt := (_ : 0 < 2) }
      { val := 1, isLt := (_ : (fun a => a < 2) 1) }

Next tactic:
rfl
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
⊢ A { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 0, isLt := (_ : 0 < 2) } =
    of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) }
      { val := 0, isLt := (_ : 0 < 2) }

Next tactic:
rfl
theorem eta_fin_two (A : Matrix (Fin 2) (Fin 2) α) : A = !![A 0 0, A 0 1; A 1 0, A 1 1] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.tail.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 2) (Fin 2) α
⊢ A { val := 1, isLt := (_ : (fun a => a < 2) 1) } { val := 1, isLt := (_ : (fun a => a < 2) 1) } =
    of ![![A 0 0, A 0 1], ![A 1 0, A 1 1]] { val := 1, isLt := (_ : (fun a => a < 2) 1) }
      { val := 1, isLt := (_ : (fun a => a < 2) 1) }

Next tactic:
rfl
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  

Proof state:
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
⊢ A = of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]]

Next tactic:
ext i j
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  

Proof state:
case a.h
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
i j : Fin 3
⊢ A i j = of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]] i j

Next tactic:
fin_cases i
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
j : Fin 3
⊢ A { val := 0, isLt := (_ : 0 < 3) } j =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]] { val := 0, isLt := (_ : 0 < 3) } j

Next tactic:
fin_cases j
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
j : Fin 3
⊢ A { val := 1, isLt := (_ : (fun a => a < 3) 1) } j =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]]
      { val := 1, isLt := (_ : (fun a => a < 3) 1) } j

Next tactic:
fin_cases j
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> 

Proof state:
case a.h.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
j : Fin 3
⊢ A { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } j =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]]
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } j

Next tactic:
fin_cases j
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
⊢ A { val := 0, isLt := (_ : 0 < 3) } { val := 0, isLt := (_ : 0 < 3) } =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]] { val := 0, isLt := (_ : 0 < 3) }
      { val := 0, isLt := (_ : 0 < 3) }

Next tactic:
rfl
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
⊢ A { val := 0, isLt := (_ : 0 < 3) } { val := 1, isLt := (_ : (fun a => a < 3) 1) } =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]] { val := 0, isLt := (_ : 0 < 3) }
      { val := 1, isLt := (_ : (fun a => a < 3) 1) }

Next tactic:
rfl
theorem eta_fin_three (A : Matrix (Fin 3) (Fin 3) α) :
    A = !![A 0 0, A 0 1, A 0 2;
           A 1 0, A 1 1, A 1 2;
           A 2 0, A 2 1, A 2 2] := by
  ext i j
  fin_cases i <;> fin_cases j <;> 

Proof state:
case a.h.head.tail.tail.head
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
A : Matrix (Fin 3) (Fin 3) α
⊢ A { val := 0, isLt := (_ : 0 < 3) } { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) } =
    of ![![A 0 0, A 0 1, A 0 2], ![A 1 0, A 1 1, A 1 2], ![A 2 0, A 2 1, A 2 2]] { val := 0, isLt := (_ : 0 < 3) }
      { val := 2, isLt := (_ : (fun a => (fun a => a < 3) a) 2) }

Next tactic:
rfl