Theorem: Matrix.det_succ_column_zero
File: Mathlib/LinearAlgebra/Matrix/Determinant.lean

tactic: rw [Matrix.det_apply, Finset.univ_perm_fin_succ, ← Finset.univ_product_univ]
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
⊢ det A = ∑ i : Fin (Nat.succ n), (-1) ^ ↑i * A i 0 * det (submatrix A (↑(Fin.succAbove i)) Fin.succ)

tactic: simp only [Finset.sum_map, Equiv.toEmbedding_apply, Finset.sum_product, Matrix.submatrix]
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
⊢ ∑ σ in Finset.map (Equiv.toEmbedding decomposeFin.symm) (univ ×ˢ univ), ↑sign σ • ∏ i : Fin (Nat.succ n), A (↑σ i) i =
    ∑ i : Fin (Nat.succ n), (-1) ^ ↑i * A i 0 * det (submatrix A (↑(Fin.succAbove i)) Fin.succ)

tactic: refine' Finset.sum_congr rfl fun i _ => Fin.cases _ (fun i => _) i
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
⊢ ∑ x : Fin (Nat.succ n),
      ∑ y : Perm (Fin n),
        ↑sign (↑decomposeFin.symm (x, y)) • ∏ x_1 : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (x, y)) x_1) x_1 =
    ∑ x : Fin (Nat.succ n), (-1) ^ ↑x * A x 0 * det (↑of fun i j => A (↑(Fin.succAbove x) i) (Fin.succ j))

tactic: have : (-1 : R) ^ (i : ℕ) = (Perm.sign i.cycleRange) := by simp [Fin.sign_cycleRange]
state_before: case refine'_2
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝ : i✝ ∈ univ
i : Fin n
⊢ ∑ y : Perm (Fin n),
      ↑sign (↑decomposeFin.symm (Fin.succ i, y)) •
        ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, y)) x) x =
    (-1) ^ ↑(Fin.succ i) * A (Fin.succ i) 0 * det (↑of fun i_1 j => A (↑(Fin.succAbove (Fin.succ i)) i_1) (Fin.succ j))

tactic: rw [Fin.val_succ, pow_succ, this, mul_assoc, mul_assoc, mul_left_comm (ε _), ←
  det_permute, Matrix.det_apply, Finset.mul_sum, Finset.mul_sum]
state_before: case refine'_2
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
⊢ ∑ y : Perm (Fin n),
      ↑sign (↑decomposeFin.symm (Fin.succ i, y)) •
        ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, y)) x) x =
    (-1) ^ ↑(Fin.succ i) * A (Fin.succ i) 0 * det (↑of fun i_1 j => A (↑(Fin.succAbove (Fin.succ i)) i_1) (Fin.succ j))

tactic: refine' Finset.sum_congr rfl fun σ _ => _
state_before: case refine'_2
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
⊢ ∑ y : Perm (Fin n),
      ↑sign (↑decomposeFin.symm (Fin.succ i, y)) •
        ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, y)) x) x =
    ∑ x : Perm (Fin n),
      -1 *
        (A (Fin.succ i) 0 *
          ↑sign x •
            ∏ i_1 : Fin n,
              ↑of (fun i_2 j => A (↑(Fin.succAbove (Fin.succ i)) i_2) (Fin.succ j)) (↑(Fin.cycleRange i) (↑x i_1)) i_1)

tactic: rw [Equiv.Perm.decomposeFin.symm_sign, if_neg (Fin.succ_ne_zero i)]
state_before: case refine'_2
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝¹ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
σ : Perm (Fin n)
x✝ : σ ∈ univ
⊢ ↑sign (↑decomposeFin.symm (Fin.succ i, σ)) • ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, σ)) x) x =
    -1 *
      (A (Fin.succ i) 0 *
        ↑sign σ •
          ∏ i_1 : Fin n,
            ↑of (fun i_2 j => A (↑(Fin.succAbove (Fin.succ i)) i_2) (Fin.succ j)) (↑(Fin.cycleRange i) (↑σ i_1)) i_1)

tactic: calc
  ((-1 * Perm.sign σ : ℤ) • ∏ i', A (Perm.decomposeFin.symm (Fin.succ i, σ) i') i') =
      (-1 * Perm.sign σ : ℤ) • (A (Fin.succ i) 0 *
        ∏ i', A ((Fin.succ i).succAbove (Fin.cycleRange i (σ i'))) i'.succ) := by
    simp only [Fin.prod_univ_succ, Fin.succAbove_cycleRange,
      Equiv.Perm.decomposeFin_symm_apply_zero, Equiv.Perm.decomposeFin_symm_apply_succ]
  _ = -1 * (A (Fin.succ i) 0 * (Perm.sign σ : ℤ) •
      ∏ i', A ((Fin.succ i).succAbove (Fin.cycleRange i (σ i'))) i'.succ) := by
    simp [mul_assoc, mul_comm, _root_.neg_mul, one_mul, zsmul_eq_mul, neg_inj, neg_smul,
      Fin.succAbove_cycleRange, mul_left_comm]
state_before: case refine'_2
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝¹ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
σ : Perm (Fin n)
x✝ : σ ∈ univ
⊢ (-1 * ↑sign σ) • ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, σ)) x) x =
    -1 *
      (A (Fin.succ i) 0 *
        ↑sign σ •
          ∏ i_1 : Fin n,
            ↑of (fun i_2 j => A (↑(Fin.succAbove (Fin.succ i)) i_2) (Fin.succ j)) (↑(Fin.cycleRange i) (↑σ i_1)) i_1)

tactic: simp only [Fin.prod_univ_succ, Matrix.det_apply, Finset.mul_sum,
  Equiv.Perm.decomposeFin_symm_apply_zero, Fin.val_zero, one_mul,
  Equiv.Perm.decomposeFin.symm_sign, Equiv.swap_self, if_true, id.def, eq_self_iff_true,
  Equiv.Perm.decomposeFin_symm_apply_succ, Fin.succAbove_zero, Equiv.coe_refl, pow_zero,
  mul_smul_comm, of_apply]
state_before: case refine'_1
m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i : Fin (Nat.succ n)
x✝ : i ∈ univ
⊢ ∑ y : Perm (Fin n), ↑sign (↑decomposeFin.symm (0, y)) • ∏ x : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (0, y)) x) x =
    (-1) ^ ↑0 * A 0 0 * det (↑of fun i j => A (↑(Fin.succAbove 0) i) (Fin.succ j))

tactic: simp [Fin.sign_cycleRange]
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝ : i✝ ∈ univ
i : Fin n
⊢ (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))

tactic: simp only [Fin.prod_univ_succ, Fin.succAbove_cycleRange,
  Equiv.Perm.decomposeFin_symm_apply_zero, Equiv.Perm.decomposeFin_symm_apply_succ]
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝¹ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
σ : Perm (Fin n)
x✝ : σ ∈ univ
⊢ (-1 * ↑(↑sign σ)) • ∏ i' : Fin (Nat.succ n), A (↑(↑decomposeFin.symm (Fin.succ i, σ)) i') i' =
    (-1 * ↑(↑sign σ)) •
      (A (Fin.succ i) 0 * ∏ i' : Fin n, A (↑(Fin.succAbove (Fin.succ i)) (↑(Fin.cycleRange i) (↑σ i'))) (Fin.succ i'))

tactic: simp [mul_assoc, mul_comm, _root_.neg_mul, one_mul, zsmul_eq_mul, neg_inj, neg_smul,
  Fin.succAbove_cycleRange, mul_left_comm]
state_before: m : Type ?u.1801732
n✝ : Type ?u.1801735
inst✝⁴ : DecidableEq n✝
inst✝³ : Fintype n✝
inst✝² : DecidableEq m
inst✝¹ : Fintype m
R : Type v
inst✝ : CommRing R
n : ℕ
A : Matrix (Fin (Nat.succ n)) (Fin (Nat.succ n)) R
i✝ : Fin (Nat.succ n)
x✝¹ : i✝ ∈ univ
i : Fin n
this : (-1) ^ ↑i = ↑↑(↑sign (Fin.cycleRange i))
σ : Perm (Fin n)
x✝ : σ ∈ univ
⊢ (-1 * ↑(↑sign σ)) •
      (A (Fin.succ i) 0 * ∏ i' : Fin n, A (↑(Fin.succAbove (Fin.succ i)) (↑(Fin.cycleRange i) (↑σ i'))) (Fin.succ i')) =
    -1 *
      (A (Fin.succ i) 0 *
        ↑(↑sign σ) • ∏ i' : Fin n, A (↑(Fin.succAbove (Fin.succ i)) (↑(Fin.cycleRange i) (↑σ i'))) (Fin.succ i'))