Skip to content

Commit a652e30

Browse files
committed
MatrixAdjoints
1 parent 61320ca commit a652e30

File tree

1 file changed

+6
-41
lines changed

1 file changed

+6
-41
lines changed

Mathlib/LinearAlgebra/Matrix/BilinearForm.lean

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -366,57 +366,22 @@ variable (J J₃ A A' : Matrix n n R₃)
366366
theorem isAdjointPair_toBilin' [DecidableEq n] :
367367
BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
368368
(Matrix.toLin' A') ↔
369-
Matrix.IsAdjointPair J J₃ A A' := by
370-
rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
371-
have h :
372-
∀ B B' : BilinForm R₃ (n → R₃), B = B' ↔ BilinForm.toMatrix' B = BilinForm.toMatrix' B' := by
373-
intro B B'
374-
constructor <;> intro h
375-
· rw [h]
376-
· exact BilinForm.toMatrix'.injective h
377-
rw [h, BilinForm.toMatrix'_compLeft, BilinForm.toMatrix'_compRight, LinearMap.toMatrix'_toLin',
378-
LinearMap.toMatrix'_toLin', BilinForm.toMatrix'_toBilin', BilinForm.toMatrix'_toBilin']
379-
rfl
369+
Matrix.IsAdjointPair J J₃ A A' :=
370+
isAdjointPair_toLinearMap₂' _ _ _ _
380371
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
381372

382373
@[simp]
383374
theorem isAdjointPair_toBilin [DecidableEq n] :
384375
BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
385376
(Matrix.toLin b b A') ↔
386-
Matrix.IsAdjointPair J J₃ A A' := by
387-
rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
388-
have h : ∀ B B' : BilinForm R₃ M₃, B = B' ↔ BilinForm.toMatrix b B = BilinForm.toMatrix b B' := by
389-
intro B B'
390-
constructor <;> intro h
391-
· rw [h]
392-
· exact (BilinForm.toMatrix b).injective h
393-
rw [h, BilinForm.toMatrix_compLeft, BilinForm.toMatrix_compRight, LinearMap.toMatrix_toLin,
394-
LinearMap.toMatrix_toLin, BilinForm.toMatrix_toBilin, BilinForm.toMatrix_toBilin]
395-
rfl
377+
Matrix.IsAdjointPair J J₃ A A' :=
378+
isAdjointPair_toLinearMap₂ _ _ _ _ _ _
396379
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
397380

398381
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
399382
(Pᵀ * J * P).IsAdjointPair (Pᵀ * J * P) A A' ↔
400-
J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹) := by
401-
have h' : IsUnit P.det := P.isUnit_iff_isUnit_det.mp h
402-
-- Porting note: the original proof used a complicated conv and timed out
403-
let u := P.nonsingInvUnit h'
404-
have coe_u : (u : Matrix n n R₃) = P := rfl
405-
have coe_u_inv : (↑u⁻¹ : Matrix n n R₃) = P⁻¹ := rfl
406-
let v := Pᵀ.nonsingInvUnit (P.isUnit_det_transpose h')
407-
have coe_v : (v : Matrix n n R₃) = Pᵀ := rfl
408-
have coe_v_inv : (↑v⁻¹ : Matrix n n R₃) = P⁻¹ᵀ := P.transpose_nonsing_inv.symm
409-
set x := Aᵀ * Pᵀ * J with x_def
410-
set y := J * P * A' with y_def
411-
simp only [Matrix.IsAdjointPair]
412-
calc (Aᵀ * (Pᵀ * J * P) = Pᵀ * J * P * A')
413-
↔ (x * ↑u = ↑v * y) := ?_
414-
_ ↔ (↑v⁻¹ * x = y * ↑u⁻¹) := ?_
415-
_ ↔ ((P * A * P⁻¹)ᵀ * J = J * (P * A' * P⁻¹)) := ?_
416-
· simp only [mul_assoc, x_def, y_def, coe_u, coe_v]
417-
· rw [Units.eq_mul_inv_iff_mul_eq, mul_assoc ↑v⁻¹ x, Units.inv_mul_eq_iff_eq_mul]
418-
· rw [x_def, y_def, coe_u_inv, coe_v_inv]
419-
simp only [Matrix.mul_assoc, Matrix.transpose_mul]
383+
J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹) :=
384+
Matrix.isAdjointPair_equiv _ _ _ _ h
420385
#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'
421386

422387
variable [DecidableEq n]

0 commit comments

Comments
 (0)