Theorem: Matrix.adjugate_transpose
File: Mathlib/LinearAlgebra/Matrix/Adjugate.lean

Proof steps:
state_before: m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
⊢ A.adjugateᵀ = Aᵀ.adjugate
state_after: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ A.adjugateᵀ i j = Aᵀ.adjugate i j
tactic: ext i j
state_before: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ A.adjugateᵀ i j = Aᵀ.adjugate i j
state_after: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ (A.updateRow i (Pi.single j 1)).det = (A.updateColumn j (Pi.single i 1)).det
tactic: rw [transpose_apply, adjugate_apply, adjugate_apply, updateRow_transpose, det_transpose]
state_before: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ (A.updateRow i (Pi.single j 1)).det = (A.updateColumn j (Pi.single i 1)).det
state_after: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ ∑ σ : Perm n, ↑↑(sign σ) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 =
    ∑ σ : Perm n, ↑↑(sign σ) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
tactic: rw [det_apply', det_apply']
state_before: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ ∑ σ : Perm n, ↑↑(sign σ) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 =
    ∑ σ : Perm n, ↑↑(sign σ) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
state_after: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ ∀ x ∈ univ,
    ↑↑(sign x) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (x i_1) i_1 =
      ↑↑(sign x) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (x i_1) i_1
tactic: apply Finset.sum_congr rfl
state_before: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
⊢ ∀ x ∈ univ,
    ↑↑(sign x) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (x i_1) i_1 =
      ↑↑(sign x) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (x i_1) i_1
state_after: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
⊢ ↑↑(sign σ) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 =
    ↑↑(sign σ) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
tactic: intro σ _
state_before: case a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
⊢ ↑↑(sign σ) * ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 =
    ↑↑(sign σ) * ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
state_after: case a.e_a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
⊢ ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 = ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
tactic: congr 1
state_before: case a.e_a
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
⊢ ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 = ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
state_after: case pos
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
h : i = σ j
⊢ ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 = ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1

case neg
m : Type u
n : Type v
α : Type w
inst✝⁴ : DecidableEq n
inst✝³ : Fintype n
inst✝² : DecidableEq m
inst✝¹ : Fintype m
inst✝ : CommRing α
A : Matrix n n α
i j : n
σ : Perm n
a✝ : σ ∈ univ
h : ¬i = σ j
⊢ ∏ i_1 : n, A.updateRow i (Pi.single j 1) (σ i_1) i_1 = ∏ i_1 : n, A.updateColumn j (Pi.single i 1) (σ i_1) i_1
tactic: by_cases h : i = σ j