linear_algebra.matrix.bilinear_form
⟷
Mathlib.LinearAlgebra.Matrix.BilinearForm
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -116,12 +116,12 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
-/
-#print BilinForm.toMatrixAux_apply /-
+#print LinearMap.BilinForm.toMatrixAux_apply /-
@[simp]
-theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
+theorem LinearMap.BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
BilinForm.toMatrixAux b B i j = B (b i) (b j) :=
rfl
-#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_apply
+#align bilin_form.to_matrix_aux_apply LinearMap.BilinForm.toMatrixAux_apply
-/
variable [Fintype n] [Fintype o]
@@ -132,7 +132,7 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
by
refine' ext_basis (Pi.basisFun R₂ n) fun i j => _
rw [Pi.basisFun_apply, Pi.basisFun_apply, Matrix.toBilin'Aux_stdBasis,
- BilinForm.toMatrixAux_apply]
+ LinearMap.BilinForm.toMatrixAux_apply]
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
-/
@@ -146,9 +146,9 @@ This section deals with the conversion between matrices and bilinear forms on `n
variable [DecidableEq n] [DecidableEq o]
-#print BilinForm.toMatrix' /-
+#print LinearMap.BilinForm.toMatrix' /-
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
-def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
+def LinearMap.BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
{
BilinForm.toMatrixAux fun j =>
stdBasis R₂ (fun _ => R₂) j
@@ -156,22 +156,24 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
invFun := Matrix.toBilin'Aux
left_inv := by convert toBilin'Aux_toMatrixAux
right_inv := fun M => by ext i j;
- simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
-#align bilin_form.to_matrix' BilinForm.toMatrix'
+ simp only [to_fun_eq_coe, LinearMap.BilinForm.toMatrixAux_apply,
+ Matrix.toBilin'Aux_stdBasis] }
+#align bilin_form.to_matrix' LinearMap.BilinForm.toMatrix'
-/
-#print BilinForm.toMatrixAux_stdBasis /-
+#print LinearMap.BilinForm.toMatrixAux_stdBasis /-
@[simp]
-theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
- BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B = BilinForm.toMatrix' B :=
+theorem LinearMap.BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
+ BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B =
+ LinearMap.BilinForm.toMatrix' B :=
rfl
-#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasis
+#align bilin_form.to_matrix_aux_std_basis LinearMap.BilinForm.toMatrixAux_stdBasis
-/
#print Matrix.toBilin' /-
/-- The linear equivalence between `n × n` matrices and bilinear forms on `n → R` -/
def Matrix.toBilin' : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ (n → R₂) :=
- BilinForm.toMatrix'.symm
+ LinearMap.BilinForm.toMatrix'.symm
#align matrix.to_bilin' Matrix.toBilin'
-/
@@ -210,56 +212,58 @@ theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
-/
-#print BilinForm.toMatrix'_symm /-
+#print LinearMap.BilinForm.toMatrix'_symm /-
@[simp]
-theorem BilinForm.toMatrix'_symm :
- (BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
+theorem LinearMap.BilinForm.toMatrix'_symm :
+ (LinearMap.BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
rfl
-#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symm
+#align bilin_form.to_matrix'_symm LinearMap.BilinForm.toMatrix'_symm
-/
#print Matrix.toBilin'_symm /-
@[simp]
theorem Matrix.toBilin'_symm :
- (Matrix.toBilin'.symm : _ ≃ₗ[R₂] Matrix n n R₂) = BilinForm.toMatrix' :=
- BilinForm.toMatrix'.symm_symm
+ (Matrix.toBilin'.symm : _ ≃ₗ[R₂] Matrix n n R₂) = LinearMap.BilinForm.toMatrix' :=
+ LinearMap.BilinForm.toMatrix'.symm_symm
#align matrix.to_bilin'_symm Matrix.toBilin'_symm
-/
#print Matrix.toBilin'_toMatrix' /-
@[simp]
theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
- Matrix.toBilin' (BilinForm.toMatrix' B) = B :=
+ Matrix.toBilin' (LinearMap.BilinForm.toMatrix' B) = B :=
Matrix.toBilin'.apply_symm_apply B
#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'
-/
-#print BilinForm.toMatrix'_toBilin' /-
+#print LinearMap.BilinForm.toMatrix'_toBilin' /-
@[simp]
-theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
- BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
- BilinForm.toMatrix'.apply_symm_apply M
-#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
+theorem LinearMap.BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
+ LinearMap.BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
+ LinearMap.BilinForm.toMatrix'.apply_symm_apply M
+#align bilin_form.to_matrix'_to_bilin' LinearMap.BilinForm.toMatrix'_toBilin'
-/
-#print BilinForm.toMatrix'_apply /-
+#print LinearMap.BilinForm.toMatrix'_apply /-
@[simp]
-theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
- BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
+theorem LinearMap.BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
+ LinearMap.BilinForm.toMatrix' B i j =
+ B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
rfl
-#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
+#align bilin_form.to_matrix'_apply LinearMap.BilinForm.toMatrix'_apply
-/
-#print BilinForm.toMatrix'_comp /-
+#print LinearMap.BilinForm.toMatrix'_comp /-
@[simp]
-theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
+theorem LinearMap.BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂))
+ (l r : (o → R₂) →ₗ[R₂] n → R₂) :
(B.comp l r).toMatrix' = l.toMatrix'ᵀ ⬝ B.toMatrix' ⬝ r.toMatrix' :=
by
ext i j
- simp only [BilinForm.toMatrix'_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
- LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
+ simp only [LinearMap.BilinForm.toMatrix'_apply, LinearMap.BilinForm.comp_apply, transpose_apply,
+ Matrix.mul_apply, LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
- conv_lhs => rw [← BilinForm.sum_repr_mul_repr_mul (Pi.basisFun R₂ n) (l _) (r _)]
+ conv_lhs => rw [← LinearMap.BilinForm.sum_repr_mul_repr_mul (Pi.basisFun R₂ n) (l _) (r _)]
rw [Finsupp.sum_fintype]
· apply sum_congr rfl
rintro i' -
@@ -270,50 +274,53 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
Pi.basisFun_apply, of_apply]
· intros; simp only [zero_smul, smul_zero]
· intros; simp only [zero_smul, Finsupp.sum_zero]
-#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
+#align bilin_form.to_matrix'_comp LinearMap.BilinForm.toMatrix'_comp
-/
-#print BilinForm.toMatrix'_compLeft /-
-theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- (B.compLeft f).toMatrix' = f.toMatrix'ᵀ ⬝ B.toMatrix' := by
- simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, to_matrix'_id, Matrix.mul_one]
-#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
+#print LinearMap.BilinForm.toMatrix'_compLeft /-
+theorem LinearMap.BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂))
+ (f : (n → R₂) →ₗ[R₂] n → R₂) : (B.compLeft f).toMatrix' = f.toMatrix'ᵀ ⬝ B.toMatrix' := by
+ simp only [LinearMap.BilinForm.compLeft, LinearMap.BilinForm.toMatrix'_comp, to_matrix'_id,
+ Matrix.mul_one]
+#align bilin_form.to_matrix'_comp_left LinearMap.BilinForm.toMatrix'_compLeft
-/
-#print BilinForm.toMatrix'_compRight /-
-theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- (B.compRight f).toMatrix' = B.toMatrix' ⬝ f.toMatrix' := by
- simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, to_matrix'_id, transpose_one,
- Matrix.one_mul]
-#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
+#print LinearMap.BilinForm.toMatrix'_compRight /-
+theorem LinearMap.BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂))
+ (f : (n → R₂) →ₗ[R₂] n → R₂) : (B.compRight f).toMatrix' = B.toMatrix' ⬝ f.toMatrix' := by
+ simp only [LinearMap.BilinForm.compRight, LinearMap.BilinForm.toMatrix'_comp, to_matrix'_id,
+ transpose_one, Matrix.one_mul]
+#align bilin_form.to_matrix'_comp_right LinearMap.BilinForm.toMatrix'_compRight
-/
-#print BilinForm.mul_toMatrix'_mul /-
-theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
+#print LinearMap.BilinForm.mul_toMatrix'_mul /-
+theorem LinearMap.BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M ⬝ B.toMatrix' ⬝ N = (B.comp Mᵀ.toLin' N.toLin').toMatrix' := by
simp only [B.to_matrix'_comp, transpose_transpose, to_matrix'_to_lin']
-#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
+#align bilin_form.mul_to_matrix'_mul LinearMap.BilinForm.mul_toMatrix'_mul
-/
-#print BilinForm.mul_toMatrix' /-
-theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
+#print LinearMap.BilinForm.mul_toMatrix' /-
+theorem LinearMap.BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
M ⬝ B.toMatrix' = (B.compLeft Mᵀ.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_left, transpose_transpose, to_matrix'_to_lin']
-#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
+#align bilin_form.mul_to_matrix' LinearMap.BilinForm.mul_toMatrix'
-/
-#print BilinForm.toMatrix'_mul /-
-theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
+#print LinearMap.BilinForm.toMatrix'_mul /-
+theorem LinearMap.BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
B.toMatrix' ⬝ M = (B.compRight M.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_right, to_matrix'_to_lin']
-#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
+#align bilin_form.to_matrix'_mul LinearMap.BilinForm.toMatrix'_mul
-/
#print Matrix.toBilin'_comp /-
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
M.toBilin'.comp P.toLin' Q.toLin' = (Pᵀ ⬝ M ⬝ Q).toBilin' :=
- BilinForm.toMatrix'.Injective
- (by simp only [BilinForm.toMatrix'_comp, BilinForm.toMatrix'_toBilin', to_matrix'_to_lin'])
+ LinearMap.BilinForm.toMatrix'.Injective
+ (by
+ simp only [LinearMap.BilinForm.toMatrix'_comp, LinearMap.BilinForm.toMatrix'_toBilin',
+ to_matrix'_to_lin'])
#align matrix.to_bilin'_comp Matrix.toBilin'_comp
-/
@@ -334,7 +341,7 @@ variable [DecidableEq n] (b : Basis n R₂ M₂)
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
- (BilinForm.congr b.equivFun).trans BilinForm.toMatrix'
+ (LinearMap.BilinForm.congr b.equivFun).trans LinearMap.BilinForm.toMatrix'
#align bilin_form.to_matrix BilinForm.toMatrix
-/
@@ -350,7 +357,7 @@ noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
BilinForm.toMatrix b B i j = B (b i) (b j) := by
- rw [BilinForm.toMatrix, LinearEquiv.trans_apply, BilinForm.toMatrix'_apply, congr_apply,
+ rw [BilinForm.toMatrix, LinearEquiv.trans_apply, LinearMap.BilinForm.toMatrix'_apply, congr_apply,
b.equiv_fun_symm_std_basis, b.equiv_fun_symm_std_basis]
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
-/
@@ -371,7 +378,7 @@ theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
-- Not a `simp` lemma since `bilin_form.to_matrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux b B = BilinForm.toMatrix b B :=
- ext fun i j => by rw [BilinForm.toMatrix_apply, BilinForm.toMatrixAux_apply]
+ ext fun i j => by rw [BilinForm.toMatrix_apply, LinearMap.BilinForm.toMatrixAux_apply]
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
-/
@@ -396,9 +403,10 @@ theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.t
-/
#print BilinForm.toMatrix_basisFun /-
-theorem BilinForm.toMatrix_basisFun : BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' :=
- by ext B;
- rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
+theorem BilinForm.toMatrix_basisFun :
+ BilinForm.toMatrix (Pi.basisFun R₂ n) = LinearMap.BilinForm.toMatrix' := by ext B;
+ rw [BilinForm.toMatrix_apply, LinearMap.BilinForm.toMatrix'_apply, Pi.basisFun_apply,
+ Pi.basisFun_apply]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
-/
@@ -431,10 +439,10 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
(toMatrix c b l)ᵀ ⬝ BilinForm.toMatrix b B ⬝ toMatrix c b r :=
by
ext i j
- simp only [BilinForm.toMatrix_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
- LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
+ simp only [BilinForm.toMatrix_apply, LinearMap.BilinForm.comp_apply, transpose_apply,
+ Matrix.mul_apply, LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
- conv_lhs => rw [← BilinForm.sum_repr_mul_repr_mul b]
+ conv_lhs => rw [← LinearMap.BilinForm.sum_repr_mul_repr_mul b]
rw [Finsupp.sum_fintype]
· apply sum_congr rfl
rintro i' -
@@ -458,8 +466,8 @@ theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R
#print BilinForm.toMatrix_compRight /-
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B ⬝ toMatrix b b f := by
- simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, to_matrix_id, transpose_one,
- Matrix.one_mul]
+ simp only [LinearMap.BilinForm.compRight, BilinForm.toMatrix_comp b b, to_matrix_id,
+ transpose_one, Matrix.one_mul]
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
-/
@@ -467,7 +475,8 @@ theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
(b.toMatrix c)ᵀ ⬝ BilinForm.toMatrix b B ⬝ b.toMatrix c = BilinForm.toMatrix c B := by
- rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
+ rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp,
+ LinearMap.BilinForm.comp_id_id]
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
-/
@@ -517,20 +526,22 @@ variable (J J₃ A A' : Matrix n n R₃)
#print isAdjointPair_toBilin' /-
@[simp]
theorem isAdjointPair_toBilin' [DecidableEq n] :
- BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
+ LinearMap.BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
(Matrix.toLin' A') ↔
Matrix.IsAdjointPair J J₃ A A' :=
by
- rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
+ rw [LinearMap.BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
have h :
- ∀ B B' : BilinForm R₃ (n → R₃), B = B' ↔ BilinForm.toMatrix' B = BilinForm.toMatrix' B' :=
+ ∀ B B' : BilinForm R₃ (n → R₃),
+ B = B' ↔ LinearMap.BilinForm.toMatrix' B = LinearMap.BilinForm.toMatrix' B' :=
by
intro B B'
constructor <;> intro h
· rw [h]
· exact bilin_form.to_matrix'.injective h
- rw [h, BilinForm.toMatrix'_compLeft, BilinForm.toMatrix'_compRight, LinearMap.toMatrix'_toLin',
- LinearMap.toMatrix'_toLin', BilinForm.toMatrix'_toBilin', BilinForm.toMatrix'_toBilin']
+ rw [h, LinearMap.BilinForm.toMatrix'_compLeft, LinearMap.BilinForm.toMatrix'_compRight,
+ LinearMap.toMatrix'_toLin', LinearMap.toMatrix'_toLin', LinearMap.BilinForm.toMatrix'_toBilin',
+ LinearMap.BilinForm.toMatrix'_toBilin']
rfl
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
-/
@@ -538,11 +549,11 @@ theorem isAdjointPair_toBilin' [DecidableEq n] :
#print isAdjointPair_toBilin /-
@[simp]
theorem isAdjointPair_toBilin [DecidableEq n] :
- BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
- (Matrix.toLin b b A') ↔
+ LinearMap.BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃)
+ (Matrix.toLin b b A) (Matrix.toLin b b A') ↔
Matrix.IsAdjointPair J J₃ A A' :=
by
- rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
+ rw [LinearMap.BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
have h : ∀ B B' : BilinForm R₃ M₃, B = B' ↔ BilinForm.toMatrix b B = BilinForm.toMatrix b B' :=
by
intro B B'
@@ -595,7 +606,7 @@ variable [DecidableEq n]
/-- The submodule of pair-self-adjoint matrices with respect to bilinear forms corresponding to
given matrices `J`, `J₂`. -/
def pairSelfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
- (BilinForm.isPairSelfAdjointSubmodule (Matrix.toBilin' J) (Matrix.toBilin' J₃)).map
+ (LinearMap.BilinForm.isPairSelfAdjointSubmodule (Matrix.toBilin' J) (Matrix.toBilin' J₃)).map
((LinearMap.toMatrix' : ((n → R₃) →ₗ[R₃] n → R₃) ≃ₗ[R₃] Matrix n n R₃) :
((n → R₃) →ₗ[R₃] n → R₃) →ₗ[R₃] Matrix n n R₃)
#align pair_self_adjoint_matrices_submodule' pairSelfAdjointMatricesSubmodule'
@@ -653,7 +664,7 @@ variable {ι : Type _} [DecidableEq ι] [Fintype ι]
#print Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin /-
theorem Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
(b : Basis ι R₂ M₂) : M.toBilin'.Nondegenerate ↔ (Matrix.toBilin b M).Nondegenerate :=
- (nondegenerate_congr_iff b.equivFun.symm).symm
+ (LinearMap.BilinForm.nondegenerate_congr_iff b.equivFun.symm).symm
#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin
-/
@@ -688,64 +699,64 @@ theorem Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Basis ι R
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
-/
-#print BilinForm.nondegenerate_toMatrix'_iff /-
+#print LinearMap.BilinForm.nondegenerate_toMatrix'_iff /-
-- Lemmas transferring nondegeneracy between a bilinear form and its associated matrix
@[simp]
-theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
+theorem LinearMap.BilinForm.nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
B.toMatrix'.Nondegenerate ↔ B.Nondegenerate :=
Matrix.nondegenerate_toBilin'_iff.symm.trans <| (Matrix.toBilin'_toMatrix' B).symm ▸ Iff.rfl
-#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iff
+#align bilin_form.nondegenerate_to_matrix'_iff LinearMap.BilinForm.nondegenerate_toMatrix'_iff
-/
-#print BilinForm.Nondegenerate.toMatrix' /-
-theorem Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)} (h : B.Nondegenerate) :
- B.toMatrix'.Nondegenerate :=
- nondegenerate_toMatrix'_iff.mpr h
-#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'
+#print LinearMap.BilinForm.Nondegenerate.toMatrix' /-
+theorem LinearMap.BilinForm.Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)}
+ (h : B.Nondegenerate) : B.toMatrix'.Nondegenerate :=
+ LinearMap.BilinForm.nondegenerate_toMatrix'_iff.mpr h
+#align bilin_form.nondegenerate.to_matrix' LinearMap.BilinForm.Nondegenerate.toMatrix'
-/
-#print BilinForm.nondegenerate_toMatrix_iff /-
+#print LinearMap.BilinForm.nondegenerate_toMatrix_iff /-
@[simp]
-theorem nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
+theorem LinearMap.BilinForm.nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
(Matrix.nondegenerate_toBilin_iff b).symm.trans <| (Matrix.toBilin_toMatrix b B).symm ▸ Iff.rfl
-#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iff
+#align bilin_form.nondegenerate_to_matrix_iff LinearMap.BilinForm.nondegenerate_toMatrix_iff
-/
-#print BilinForm.Nondegenerate.toMatrix /-
-theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (b : Basis ι R₃ M₃) :
- (toMatrix b B).Nondegenerate :=
- (nondegenerate_toMatrix_iff b).mpr h
-#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
+#print LinearMap.BilinForm.Nondegenerate.toMatrix /-
+theorem LinearMap.BilinForm.Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate)
+ (b : Basis ι R₃ M₃) : (toMatrix b B).Nondegenerate :=
+ (LinearMap.BilinForm.nondegenerate_toMatrix_iff b).mpr h
+#align bilin_form.nondegenerate.to_matrix LinearMap.BilinForm.Nondegenerate.toMatrix
-/
-#print BilinForm.nondegenerate_toBilin'_iff_det_ne_zero /-
+#print LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero /-
-- Some shorthands for combining the above with `matrix.nondegenerate_of_det_ne_zero`
-theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
+theorem LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
-#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
+#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
-/
-#print BilinForm.nondegenerate_toBilin'_of_det_ne_zero' /-
-theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
- M.toBilin'.Nondegenerate :=
- nondegenerate_toBilin'_iff_det_ne_zero.mpr h
-#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
+#print LinearMap.BilinForm.nondegenerate_toBilin'_of_det_ne_zero' /-
+theorem LinearMap.BilinForm.nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A)
+ (h : M.det ≠ 0) : M.toBilin'.Nondegenerate :=
+ LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero.mpr h
+#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' LinearMap.BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
-/
-#print BilinForm.nondegenerate_iff_det_ne_zero /-
-theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
+#print LinearMap.BilinForm.nondegenerate_iff_det_ne_zero /-
+theorem LinearMap.BilinForm.nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_to_matrix_iff]
-#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
+#align bilin_form.nondegenerate_iff_det_ne_zero LinearMap.BilinForm.nondegenerate_iff_det_ne_zero
-/
-#print BilinForm.nondegenerate_of_det_ne_zero /-
-theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
- B₃.Nondegenerate :=
- (nondegenerate_iff_det_ne_zero b).mpr h
-#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zero
+#print LinearMap.BilinForm.nondegenerate_of_det_ne_zero /-
+theorem LinearMap.BilinForm.nondegenerate_of_det_ne_zero (b : Basis ι A M₃)
+ (h : (toMatrix b B₃).det ≠ 0) : B₃.Nondegenerate :=
+ (LinearMap.BilinForm.nondegenerate_iff_det_ne_zero b).mpr h
+#align bilin_form.nondegenerate_of_det_ne_zero LinearMap.BilinForm.nondegenerate_of_det_ne_zero
-/
end Det
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -7,7 +7,7 @@ import LinearAlgebra.Matrix.Basis
import LinearAlgebra.Matrix.Nondegenerate
import LinearAlgebra.Matrix.NonsingularInverse
import LinearAlgebra.Matrix.ToLinearEquiv
-import LinearAlgebra.BilinearForm
+import LinearAlgebra.BilinearForm.Basic
import LinearAlgebra.Matrix.SesquilinearForm
#align_import linear_algebra.matrix.bilinear_form from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ Copyright (c) 2020 Anne Baanen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anne Baanen, Kexing Ying
-/
-import Mathbin.LinearAlgebra.Matrix.Basis
-import Mathbin.LinearAlgebra.Matrix.Nondegenerate
-import Mathbin.LinearAlgebra.Matrix.NonsingularInverse
-import Mathbin.LinearAlgebra.Matrix.ToLinearEquiv
-import Mathbin.LinearAlgebra.BilinearForm
-import Mathbin.LinearAlgebra.Matrix.SesquilinearForm
+import LinearAlgebra.Matrix.Basis
+import LinearAlgebra.Matrix.Nondegenerate
+import LinearAlgebra.Matrix.NonsingularInverse
+import LinearAlgebra.Matrix.ToLinearEquiv
+import LinearAlgebra.BilinearForm
+import LinearAlgebra.Matrix.SesquilinearForm
#align_import linear_algebra.matrix.bilinear_form from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -568,7 +568,7 @@ theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : I
by
dsimp only [Matrix.IsAdjointPair]
repeat' rw [Matrix.transpose_mul]
- simp only [← Matrix.mul_eq_mul, ← mul_assoc, P.transpose_nonsing_inv]
+ simp only [← Matrix.hMul_eq_hMul, ← mul_assoc, P.transpose_nonsing_inv]
conv_lhs =>
rhs
rw [mul_assoc, mul_assoc]
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Anne Baanen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anne Baanen, Kexing Ying
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.bilinear_form
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.LinearAlgebra.Matrix.Basis
import Mathbin.LinearAlgebra.Matrix.Nondegenerate
@@ -15,6 +10,8 @@ import Mathbin.LinearAlgebra.Matrix.ToLinearEquiv
import Mathbin.LinearAlgebra.BilinearForm
import Mathbin.LinearAlgebra.Matrix.SesquilinearForm
+#align_import linear_algebra.matrix.bilinear_form from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
+
/-!
# Bilinear form
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -158,7 +158,7 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
1 with
invFun := Matrix.toBilin'Aux
left_inv := by convert toBilin'Aux_toMatrixAux
- right_inv := fun M => by ext (i j);
+ right_inv := fun M => by ext i j;
simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
-/
@@ -258,7 +258,7 @@ theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
(B.comp l r).toMatrix' = l.toMatrix'ᵀ ⬝ B.toMatrix' ⬝ r.toMatrix' :=
by
- ext (i j)
+ ext i j
simp only [BilinForm.toMatrix'_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
@@ -433,7 +433,7 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
BilinForm.toMatrix c (B.comp l r) =
(toMatrix c b l)ᵀ ⬝ BilinForm.toMatrix b B ⬝ toMatrix c b r :=
by
- ext (i j)
+ ext i j
simp only [BilinForm.toMatrix_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -84,6 +84,7 @@ def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n →
#align matrix.to_bilin'_aux Matrix.toBilin'Aux
-/
+#print Matrix.toBilin'Aux_stdBasis /-
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
M.toBilin'Aux (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
by
@@ -104,7 +105,9 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
have := Finset.mem_univ i
contradiction
#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasis
+-/
+#print BilinForm.toMatrixAux /-
/-- The linear map from bilinear forms to `matrix n n R` given an `n`-indexed basis.
This is an auxiliary definition for the equivalence `matrix.to_bilin_form'`. -/
@@ -114,15 +117,19 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
map_add' f g := rfl
map_smul' f g := rfl
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
+-/
+#print BilinForm.toMatrixAux_apply /-
@[simp]
theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
BilinForm.toMatrixAux b B i j = B (b i) (b j) :=
rfl
#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_apply
+-/
variable [Fintype n] [Fintype o]
+#print toBilin'Aux_toMatrixAux /-
theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R₂)) :
Matrix.toBilin'Aux (BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ :=
by
@@ -130,6 +137,7 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
rw [Pi.basisFun_apply, Pi.basisFun_apply, Matrix.toBilin'Aux_stdBasis,
BilinForm.toMatrixAux_apply]
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
+-/
section ToMatrix'
@@ -141,6 +149,7 @@ This section deals with the conversion between matrices and bilinear forms on `n
variable [DecidableEq n] [DecidableEq o]
+#print BilinForm.toMatrix' /-
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
{
@@ -152,29 +161,39 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
right_inv := fun M => by ext (i j);
simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
+-/
+#print BilinForm.toMatrixAux_stdBasis /-
@[simp]
theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B = BilinForm.toMatrix' B :=
rfl
#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasis
+-/
+#print Matrix.toBilin' /-
/-- The linear equivalence between `n × n` matrices and bilinear forms on `n → R` -/
def Matrix.toBilin' : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ (n → R₂) :=
BilinForm.toMatrix'.symm
#align matrix.to_bilin' Matrix.toBilin'
+-/
+#print Matrix.toBilin'Aux_eq /-
@[simp]
theorem Matrix.toBilin'Aux_eq (M : Matrix n n R₂) : Matrix.toBilin'Aux M = Matrix.toBilin' M :=
rfl
#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eq
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
+#print Matrix.toBilin'_apply /-
theorem Matrix.toBilin'_apply (M : Matrix n n R₂) (x y : n → R₂) :
Matrix.toBilin' M x y = ∑ (i) (j), x i * M i j * y j :=
rfl
#align matrix.to_bilin'_apply Matrix.toBilin'_apply
+-/
+#print Matrix.toBilin'_apply' /-
theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) :=
by
@@ -184,43 +203,57 @@ theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
refine' Finset.sum_congr rfl fun _ _ => _
rw [← mul_assoc]
#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'
+-/
+#print Matrix.toBilin'_stdBasis /-
@[simp]
theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
Matrix.toBilin' M (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
Matrix.toBilin'Aux_stdBasis M i j
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
+-/
+#print BilinForm.toMatrix'_symm /-
@[simp]
theorem BilinForm.toMatrix'_symm :
(BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
rfl
#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symm
+-/
+#print Matrix.toBilin'_symm /-
@[simp]
theorem Matrix.toBilin'_symm :
(Matrix.toBilin'.symm : _ ≃ₗ[R₂] Matrix n n R₂) = BilinForm.toMatrix' :=
BilinForm.toMatrix'.symm_symm
#align matrix.to_bilin'_symm Matrix.toBilin'_symm
+-/
+#print Matrix.toBilin'_toMatrix' /-
@[simp]
theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
Matrix.toBilin' (BilinForm.toMatrix' B) = B :=
Matrix.toBilin'.apply_symm_apply B
#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'
+-/
+#print BilinForm.toMatrix'_toBilin' /-
@[simp]
theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
BilinForm.toMatrix'.apply_symm_apply M
#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
+-/
+#print BilinForm.toMatrix'_apply /-
@[simp]
theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
rfl
#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
+-/
+#print BilinForm.toMatrix'_comp /-
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
(B.comp l r).toMatrix' = l.toMatrix'ᵀ ⬝ B.toMatrix' ⬝ r.toMatrix' :=
@@ -241,38 +274,51 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
· intros; simp only [zero_smul, smul_zero]
· intros; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
+-/
+#print BilinForm.toMatrix'_compLeft /-
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compLeft f).toMatrix' = f.toMatrix'ᵀ ⬝ B.toMatrix' := by
simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, to_matrix'_id, Matrix.mul_one]
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
+-/
+#print BilinForm.toMatrix'_compRight /-
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compRight f).toMatrix' = B.toMatrix' ⬝ f.toMatrix' := by
simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, to_matrix'_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
+-/
+#print BilinForm.mul_toMatrix'_mul /-
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M ⬝ B.toMatrix' ⬝ N = (B.comp Mᵀ.toLin' N.toLin').toMatrix' := by
simp only [B.to_matrix'_comp, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
+-/
+#print BilinForm.mul_toMatrix' /-
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
M ⬝ B.toMatrix' = (B.compLeft Mᵀ.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_left, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
+-/
+#print BilinForm.toMatrix'_mul /-
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
B.toMatrix' ⬝ M = (B.compRight M.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_right, to_matrix'_to_lin']
#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
+-/
+#print Matrix.toBilin'_comp /-
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
M.toBilin'.comp P.toLin' Q.toLin' = (Pᵀ ⬝ M ⬝ Q).toBilin' :=
BilinForm.toMatrix'.Injective
(by simp only [BilinForm.toMatrix'_comp, BilinForm.toMatrix'_toBilin', to_matrix'_to_lin'])
#align matrix.to_bilin'_comp Matrix.toBilin'_comp
+-/
end ToMatrix'
@@ -287,26 +333,33 @@ a module with a fixed basis.
variable [DecidableEq n] (b : Basis n R₂ M₂)
+#print BilinForm.toMatrix /-
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
(BilinForm.congr b.equivFun).trans BilinForm.toMatrix'
#align bilin_form.to_matrix BilinForm.toMatrix
+-/
+#print Matrix.toBilin /-
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M₂ :=
(BilinForm.toMatrix b).symm
#align matrix.to_bilin Matrix.toBilin
+-/
+#print BilinForm.toMatrix_apply /-
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
BilinForm.toMatrix b B i j = B (b i) (b j) := by
rw [BilinForm.toMatrix, LinearEquiv.trans_apply, BilinForm.toMatrix'_apply, congr_apply,
b.equiv_fun_symm_std_basis, b.equiv_fun_symm_std_basis]
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
+#print Matrix.toBilin_apply /-
@[simp]
theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
Matrix.toBilin b M x y = ∑ (i) (j), b.repr x i * M i j * b.repr y j :=
@@ -315,43 +368,58 @@ theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
simp only [congr_symm, congr_apply, LinearEquiv.symm_symm, Matrix.toBilin'_apply,
Basis.equivFun_apply]
#align matrix.to_bilin_apply Matrix.toBilin_apply
+-/
+#print BilinearForm.toMatrixAux_eq /-
-- Not a `simp` lemma since `bilin_form.to_matrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux b B = BilinForm.toMatrix b B :=
ext fun i j => by rw [BilinForm.toMatrix_apply, BilinForm.toMatrixAux_apply]
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
+-/
+#print BilinForm.toMatrix_symm /-
@[simp]
theorem BilinForm.toMatrix_symm : (BilinForm.toMatrix b).symm = Matrix.toBilin b :=
rfl
#align bilin_form.to_matrix_symm BilinForm.toMatrix_symm
+-/
+#print Matrix.toBilin_symm /-
@[simp]
theorem Matrix.toBilin_symm : (Matrix.toBilin b).symm = BilinForm.toMatrix b :=
(BilinForm.toMatrix b).symm_symm
#align matrix.to_bilin_symm Matrix.toBilin_symm
+-/
+#print Matrix.toBilin_basisFun /-
theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' := by ext M;
simp only [Matrix.toBilin_apply, Matrix.toBilin'_apply, Pi.basisFun_repr]
#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFun
+-/
+#print BilinForm.toMatrix_basisFun /-
theorem BilinForm.toMatrix_basisFun : BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' :=
by ext B;
rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
+-/
+#print Matrix.toBilin_toMatrix /-
@[simp]
theorem Matrix.toBilin_toMatrix (B : BilinForm R₂ M₂) :
Matrix.toBilin b (BilinForm.toMatrix b B) = B :=
(Matrix.toBilin b).apply_symm_apply B
#align matrix.to_bilin_to_matrix Matrix.toBilin_toMatrix
+-/
+#print BilinForm.toMatrix_toBilin /-
@[simp]
theorem BilinForm.toMatrix_toBilin (M : Matrix n n R₂) :
BilinForm.toMatrix b (Matrix.toBilin b M) = M :=
(BilinForm.toMatrix b).apply_symm_apply M
#align bilin_form.to_matrix_to_bilin BilinForm.toMatrix_toBilin
+-/
variable {M₂' : Type _} [AddCommMonoid M₂'] [Module R₂ M₂']
@@ -359,6 +427,7 @@ variable (c : Basis o R₂ M₂')
variable [DecidableEq o]
+#print BilinForm.toMatrix_comp /-
-- Cannot be a `simp` lemma because `b` must be inferred.
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
@@ -380,44 +449,59 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
· intros; simp only [zero_smul, smul_zero]
· intros; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
+-/
+#print BilinForm.toMatrix_compLeft /-
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compLeft f) = (toMatrix b b f)ᵀ ⬝ BilinForm.toMatrix b B := by
simp only [comp_left, BilinForm.toMatrix_comp b b, to_matrix_id, Matrix.mul_one]
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
+-/
+#print BilinForm.toMatrix_compRight /-
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B ⬝ toMatrix b b f := by
simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, to_matrix_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
+-/
+#print BilinForm.toMatrix_mul_basis_toMatrix /-
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
(b.toMatrix c)ᵀ ⬝ BilinForm.toMatrix b B ⬝ b.toMatrix c = BilinForm.toMatrix c B := by
rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
+-/
+#print BilinForm.mul_toMatrix_mul /-
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
M ⬝ BilinForm.toMatrix b B ⬝ N = BilinForm.toMatrix c (B.comp (toLin c b Mᵀ) (toLin c b N)) :=
by simp only [B.to_matrix_comp b c, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
+-/
+#print BilinForm.mul_toMatrix /-
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
M ⬝ BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (toLin b b Mᵀ)) := by
rw [B.to_matrix_comp_left b, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
+-/
+#print BilinForm.toMatrix_mul /-
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
BilinForm.toMatrix b B ⬝ M = BilinForm.toMatrix b (B.compRight (toLin b b M)) := by
rw [B.to_matrix_comp_right b, to_matrix_to_lin]
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
+-/
+#print Matrix.toBilin_comp /-
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
(Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ ⬝ M ⬝ Q) :=
(BilinForm.toMatrix c).Injective
(by simp only [BilinForm.toMatrix_comp b c, BilinForm.toMatrix_toBilin, to_matrix_to_lin])
#align matrix.to_bilin_comp Matrix.toBilin_comp
+-/
end ToMatrix
@@ -433,6 +517,7 @@ variable (b : Basis n R₃ M₃)
variable (J J₃ A A' : Matrix n n R₃)
+#print isAdjointPair_toBilin' /-
@[simp]
theorem isAdjointPair_toBilin' [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
@@ -451,7 +536,9 @@ theorem isAdjointPair_toBilin' [DecidableEq n] :
LinearMap.toMatrix'_toLin', BilinForm.toMatrix'_toBilin', BilinForm.toMatrix'_toBilin']
rfl
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
+-/
+#print isAdjointPair_toBilin /-
@[simp]
theorem isAdjointPair_toBilin [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
@@ -469,7 +556,9 @@ theorem isAdjointPair_toBilin [DecidableEq n] :
LinearMap.toMatrix_toLin, BilinForm.toMatrix_toBilin, BilinForm.toMatrix_toBilin]
rfl
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
+-/
+#print Matrix.isAdjointPair_equiv' /-
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
(Pᵀ ⬝ J ⬝ P).IsAdjointPair (Pᵀ ⬝ J ⬝ P) A A' ↔ J.IsAdjointPair J (P ⬝ A ⬝ P⁻¹) (P ⬝ A' ⬝ P⁻¹) :=
by
@@ -501,6 +590,7 @@ theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : I
conv_rhs => rw [mul_assoc]
rw [v.inv_mul_eq_iff_eq_mul]
#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'
+-/
variable [DecidableEq n]
@@ -514,10 +604,12 @@ def pairSelfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align pair_self_adjoint_matrices_submodule' pairSelfAdjointMatricesSubmodule'
-/
+#print mem_pairSelfAdjointMatricesSubmodule' /-
theorem mem_pairSelfAdjointMatricesSubmodule' :
A ∈ pairSelfAdjointMatricesSubmodule J J₃ ↔ Matrix.IsAdjointPair J J₃ A A := by
simp only [mem_pairSelfAdjointMatricesSubmodule]
#align mem_pair_self_adjoint_matrices_submodule' mem_pairSelfAdjointMatricesSubmodule'
+-/
#print selfAdjointMatricesSubmodule' /-
/-- The submodule of self-adjoint matrices with respect to the bilinear form corresponding to
@@ -527,10 +619,12 @@ def selfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align self_adjoint_matrices_submodule' selfAdjointMatricesSubmodule'
-/
+#print mem_selfAdjointMatricesSubmodule' /-
theorem mem_selfAdjointMatricesSubmodule' :
A ∈ selfAdjointMatricesSubmodule J ↔ J.IsSelfAdjoint A := by
simp only [mem_selfAdjointMatricesSubmodule]
#align mem_self_adjoint_matrices_submodule' mem_selfAdjointMatricesSubmodule'
+-/
#print skewAdjointMatricesSubmodule' /-
/-- The submodule of skew-adjoint matrices with respect to the bilinear form corresponding to
@@ -540,10 +634,12 @@ def skewAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align skew_adjoint_matrices_submodule' skewAdjointMatricesSubmodule'
-/
+#print mem_skewAdjointMatricesSubmodule' /-
theorem mem_skewAdjointMatricesSubmodule' :
A ∈ skewAdjointMatricesSubmodule J ↔ J.IsSkewAdjoint A := by
simp only [mem_skewAdjointMatricesSubmodule]
#align mem_skew_adjoint_matrices_submodule' mem_skewAdjointMatricesSubmodule'
+-/
end MatrixAdjoints
@@ -557,77 +653,103 @@ variable {A : Type _} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinFor
variable {ι : Type _} [DecidableEq ι] [Fintype ι]
+#print Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin /-
theorem Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
(b : Basis ι R₂ M₂) : M.toBilin'.Nondegenerate ↔ (Matrix.toBilin b M).Nondegenerate :=
(nondegenerate_congr_iff b.equivFun.symm).symm
#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin
+-/
+#print Matrix.Nondegenerate.toBilin' /-
-- Lemmas transferring nondegeneracy between a matrix and its associated bilinear form
theorem Matrix.Nondegenerate.toBilin' {M : Matrix ι ι R₃} (h : M.Nondegenerate) :
M.toBilin'.Nondegenerate := fun x hx =>
h.eq_zero_of_ortho fun y => by simpa only [to_bilin'_apply'] using hx y
#align matrix.nondegenerate.to_bilin' Matrix.Nondegenerate.toBilin'
+-/
+#print Matrix.nondegenerate_toBilin'_iff /-
@[simp]
theorem Matrix.nondegenerate_toBilin'_iff {M : Matrix ι ι R₃} :
M.toBilin'.Nondegenerate ↔ M.Nondegenerate :=
⟨fun h v hv => h v fun w => (M.toBilin'_apply' _ _).trans <| hv w, Matrix.Nondegenerate.toBilin'⟩
#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iff
+-/
+#print Matrix.Nondegenerate.toBilin /-
theorem Matrix.Nondegenerate.toBilin {M : Matrix ι ι R₃} (h : M.Nondegenerate) (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate :=
(Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin b).mp h.toBilin'
#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilin
+-/
+#print Matrix.nondegenerate_toBilin_iff /-
@[simp]
theorem Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate ↔ M.Nondegenerate := by
rw [← Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin, Matrix.nondegenerate_toBilin'_iff]
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
+-/
+#print BilinForm.nondegenerate_toMatrix'_iff /-
-- Lemmas transferring nondegeneracy between a bilinear form and its associated matrix
@[simp]
theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
B.toMatrix'.Nondegenerate ↔ B.Nondegenerate :=
Matrix.nondegenerate_toBilin'_iff.symm.trans <| (Matrix.toBilin'_toMatrix' B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iff
+-/
+#print BilinForm.Nondegenerate.toMatrix' /-
theorem Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)} (h : B.Nondegenerate) :
B.toMatrix'.Nondegenerate :=
nondegenerate_toMatrix'_iff.mpr h
#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'
+-/
+#print BilinForm.nondegenerate_toMatrix_iff /-
@[simp]
theorem nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
(Matrix.nondegenerate_toBilin_iff b).symm.trans <| (Matrix.toBilin_toMatrix b B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iff
+-/
+#print BilinForm.Nondegenerate.toMatrix /-
theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate :=
(nondegenerate_toMatrix_iff b).mpr h
#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
+-/
+#print BilinForm.nondegenerate_toBilin'_iff_det_ne_zero /-
-- Some shorthands for combining the above with `matrix.nondegenerate_of_det_ne_zero`
theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
+-/
+#print BilinForm.nondegenerate_toBilin'_of_det_ne_zero' /-
theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
M.toBilin'.Nondegenerate :=
nondegenerate_toBilin'_iff_det_ne_zero.mpr h
#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
+-/
+#print BilinForm.nondegenerate_iff_det_ne_zero /-
theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_to_matrix_iff]
#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
+-/
+#print BilinForm.nondegenerate_of_det_ne_zero /-
theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
B₃.Nondegenerate :=
(nondegenerate_iff_det_ne_zero b).mpr h
#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zero
+-/
end Det
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -238,8 +238,8 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
rintro j' -
simp only [smul_eq_mul, Pi.basisFun_repr, mul_assoc, mul_comm, mul_left_comm,
Pi.basisFun_apply, of_apply]
- · intros ; simp only [zero_smul, smul_zero]
- · intros ; simp only [zero_smul, Finsupp.sum_zero]
+ · intros; simp only [zero_smul, smul_zero]
+ · intros; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
@@ -377,8 +377,8 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
rintro j' -
simp only [smul_eq_mul, LinearMap.toMatrix_apply, Basis.equivFun_apply, mul_assoc, mul_comm,
mul_left_comm]
- · intros ; simp only [zero_smul, smul_zero]
- · intros ; simp only [zero_smul, Finsupp.sum_zero]
+ · intros; simp only [zero_smul, smul_zero]
+ · intros; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -62,11 +62,11 @@ section Matrix
variable {n o : Type _}
-open BigOperators
+open scoped BigOperators
open BilinForm Finset LinearMap Matrix
-open Matrix
+open scoped Matrix
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
#print Matrix.toBilin'Aux /-
@@ -425,7 +425,7 @@ end Matrix
section MatrixAdjoints
-open Matrix
+open scoped Matrix
variable {n : Type _} [Fintype n]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -84,9 +84,6 @@ def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n →
#align matrix.to_bilin'_aux Matrix.toBilin'Aux
-/
-/- warning: matrix.to_bilin'_aux_std_basis -> Matrix.toBilin'Aux_stdBasis is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasisₓ'. -/
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
M.toBilin'Aux (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
by
@@ -108,12 +105,6 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
contradiction
#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasis
-/- warning: bilin_form.to_matrix_aux -> BilinForm.toMatrixAux is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}}, (n -> M₂) -> (LinearMap.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrixAux._proof_1.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
-but is expected to have type
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}}, (n -> M₂) -> (LinearMap.{u1, u1, max u2 u1, max u1 u3} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux BilinForm.toMatrixAuxₓ'. -/
/-- The linear map from bilinear forms to `matrix n n R` given an `n`-indexed basis.
This is an auxiliary definition for the equivalence `matrix.to_bilin_form'`. -/
@@ -124,9 +115,6 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
map_smul' f g := rfl
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
-/- warning: bilin_form.to_matrix_aux_apply -> BilinForm.toMatrixAux_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
BilinForm.toMatrixAux b B i j = B (b i) (b j) :=
@@ -135,9 +123,6 @@ theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (
variable [Fintype n] [Fintype o]
-/- warning: to_bilin'_aux_to_matrix_aux -> toBilin'Aux_toMatrixAux is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAuxₓ'. -/
theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R₂)) :
Matrix.toBilin'Aux (BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ :=
by
@@ -156,12 +141,6 @@ This section deals with the conversion between matrices and bilinear forms on `n
variable [DecidableEq n] [DecidableEq o]
-/- warning: bilin_form.to_matrix' -> BilinForm.toMatrix' is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix'._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix'._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix'._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))
-but is expected to have type
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u1 u2, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, max u1 u2, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix' BilinForm.toMatrix'ₓ'. -/
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
{
@@ -174,46 +153,28 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
-/- warning: bilin_form.to_matrix_aux_std_basis -> BilinForm.toMatrixAux_stdBasis is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasisₓ'. -/
@[simp]
theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B = BilinForm.toMatrix' B :=
rfl
#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasis
-/- warning: matrix.to_bilin' -> Matrix.toBilin' is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin'._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin'._proof_2.{u1} R₂ _inst_7) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin'._proof_3.{u1} R₂ _inst_7))
-but is expected to have type
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u1 u2, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, max u1 u2, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))))
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin' Matrix.toBilin'ₓ'. -/
/-- The linear equivalence between `n × n` matrices and bilinear forms on `n → R` -/
def Matrix.toBilin' : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ (n → R₂) :=
BilinForm.toMatrix'.symm
#align matrix.to_bilin' Matrix.toBilin'
-/- warning: matrix.to_bilin'_aux_eq -> Matrix.toBilin'Aux_eq is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eqₓ'. -/
@[simp]
theorem Matrix.toBilin'Aux_eq (M : Matrix n n R₂) : Matrix.toBilin'Aux M = Matrix.toBilin' M :=
rfl
#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eq
-/- warning: matrix.to_bilin'_apply -> Matrix.toBilin'_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_apply Matrix.toBilin'_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
theorem Matrix.toBilin'_apply (M : Matrix n n R₂) (x y : n → R₂) :
Matrix.toBilin' M x y = ∑ (i) (j), x i * M i j * y j :=
rfl
#align matrix.to_bilin'_apply Matrix.toBilin'_apply
-/- warning: matrix.to_bilin'_apply' -> Matrix.toBilin'_apply' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'ₓ'. -/
theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) :=
by
@@ -224,63 +185,42 @@ theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
rw [← mul_assoc]
#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'
-/- warning: matrix.to_bilin'_std_basis -> Matrix.toBilin'_stdBasis is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasisₓ'. -/
@[simp]
theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
Matrix.toBilin' M (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
Matrix.toBilin'Aux_stdBasis M i j
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
-/- warning: bilin_form.to_matrix'_symm -> BilinForm.toMatrix'_symm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symmₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_symm :
(BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
rfl
#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symm
-/- warning: matrix.to_bilin'_symm -> Matrix.toBilin'_symm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_symm Matrix.toBilin'_symmₓ'. -/
@[simp]
theorem Matrix.toBilin'_symm :
(Matrix.toBilin'.symm : _ ≃ₗ[R₂] Matrix n n R₂) = BilinForm.toMatrix' :=
BilinForm.toMatrix'.symm_symm
#align matrix.to_bilin'_symm Matrix.toBilin'_symm
-/- warning: matrix.to_bilin'_to_matrix' -> Matrix.toBilin'_toMatrix' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'ₓ'. -/
@[simp]
theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
Matrix.toBilin' (BilinForm.toMatrix' B) = B :=
Matrix.toBilin'.apply_symm_apply B
#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'
-/- warning: bilin_form.to_matrix'_to_bilin' -> BilinForm.toMatrix'_toBilin' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'ₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
BilinForm.toMatrix'.apply_symm_apply M
#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
-/- warning: bilin_form.to_matrix'_apply -> BilinForm.toMatrix'_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
rfl
#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
-/- warning: bilin_form.to_matrix'_comp -> BilinForm.toMatrix'_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_compₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
(B.comp l r).toMatrix' = l.toMatrix'ᵀ ⬝ B.toMatrix' ⬝ r.toMatrix' :=
@@ -302,50 +242,32 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
· intros ; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
-/- warning: bilin_form.to_matrix'_comp_left -> BilinForm.toMatrix'_compLeft is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeftₓ'. -/
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compLeft f).toMatrix' = f.toMatrix'ᵀ ⬝ B.toMatrix' := by
simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, to_matrix'_id, Matrix.mul_one]
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
-/- warning: bilin_form.to_matrix'_comp_right -> BilinForm.toMatrix'_compRight is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRightₓ'. -/
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compRight f).toMatrix' = B.toMatrix' ⬝ f.toMatrix' := by
simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, to_matrix'_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
-/- warning: bilin_form.mul_to_matrix'_mul -> BilinForm.mul_toMatrix'_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mulₓ'. -/
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M ⬝ B.toMatrix' ⬝ N = (B.comp Mᵀ.toLin' N.toLin').toMatrix' := by
simp only [B.to_matrix'_comp, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
-/- warning: bilin_form.mul_to_matrix' -> BilinForm.mul_toMatrix' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'ₓ'. -/
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
M ⬝ B.toMatrix' = (B.compLeft Mᵀ.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_left, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
-/- warning: bilin_form.to_matrix'_mul -> BilinForm.toMatrix'_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mulₓ'. -/
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
B.toMatrix' ⬝ M = (B.compRight M.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_right, to_matrix'_to_lin']
#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
-/- warning: matrix.to_bilin'_comp -> Matrix.toBilin'_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_comp Matrix.toBilin'_compₓ'. -/
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
M.toBilin'.comp P.toLin' Q.toLin' = (Pᵀ ⬝ M ⬝ Q).toBilin' :=
BilinForm.toMatrix'.Injective
@@ -365,33 +287,18 @@ a module with a fixed basis.
variable [DecidableEq n] (b : Basis n R₂ M₂)
-/- warning: bilin_form.to_matrix -> BilinForm.toMatrix is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
-but is expected to have type
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u2 u1, max u1 u3} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix BilinForm.toMatrixₓ'. -/
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
(BilinForm.congr b.equivFun).trans BilinForm.toMatrix'
#align bilin_form.to_matrix BilinForm.toMatrix
-/- warning: matrix.to_bilin -> Matrix.toBilin is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)))
-but is expected to have type
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u1 u3, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))))
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin Matrix.toBilinₓ'. -/
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M₂ :=
(BilinForm.toMatrix b).symm
#align matrix.to_bilin Matrix.toBilin
-/- warning: bilin_form.to_matrix_apply -> BilinForm.toMatrix_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_apply BilinForm.toMatrix_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
BilinForm.toMatrix b B i j = B (b i) (b j) := by
@@ -399,9 +306,6 @@ theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
b.equiv_fun_symm_std_basis, b.equiv_fun_symm_std_basis]
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
-/- warning: matrix.to_bilin_apply -> Matrix.toBilin_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_apply Matrix.toBilin_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
@[simp]
theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
@@ -412,70 +316,37 @@ theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
Basis.equivFun_apply]
#align matrix.to_bilin_apply Matrix.toBilin_apply
-/- warning: bilinear_form.to_matrix_aux_eq -> BilinearForm.toMatrixAux_eq is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eqₓ'. -/
-- Not a `simp` lemma since `bilin_form.to_matrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux b B = BilinForm.toMatrix b B :=
ext fun i j => by rw [BilinForm.toMatrix_apply, BilinForm.toMatrixAux_apply]
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
-/- warning: bilin_form.to_matrix_symm -> BilinForm.toMatrix_symm is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n] (b : Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (succ (max u3 u1)) (succ (max u1 u2))} (LinearEquiv.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7))) (LinearEquiv.symm.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.toMatrix.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (Matrix.toBilin.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
-but is expected to have type
- forall {R₂ : Type.{u3}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u3} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n] (b : Basis.{u1, u3, u2} n R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (LinearEquiv.{u3, u3, max u3 u1, max u3 u2} R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (Matrix.{u1, u1, u3} n n R₂) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))))) (LinearEquiv.symm.{u3, u3, max u3 u2, max u3 u1} R₂ R₂ (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u1, u1, u3} n n R₂) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (BilinForm.toMatrix.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (Matrix.toBilin.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_symm BilinForm.toMatrix_symmₓ'. -/
@[simp]
theorem BilinForm.toMatrix_symm : (BilinForm.toMatrix b).symm = Matrix.toBilin b :=
rfl
#align bilin_form.to_matrix_symm BilinForm.toMatrix_symm
-/- warning: matrix.to_bilin_symm -> Matrix.toBilin_symm is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n] (b : Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (succ (max u1 u2)) (succ (max u3 u1))} (LinearEquiv.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (LinearEquiv.symm.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.toBilin.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (BilinForm.toMatrix.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
-but is expected to have type
- forall {R₂ : Type.{u3}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u3} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n] (b : Basis.{u1, u3, u2} n R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (LinearEquiv.{u3, u3, max u3 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u1, u1, u3} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (LinearEquiv.symm.{u3, u3, max u3 u1, max u3 u2} R₂ R₂ (Matrix.{u1, u1, u3} n n R₂) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (Matrix.toBilin.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (BilinForm.toMatrix.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_symm Matrix.toBilin_symmₓ'. -/
@[simp]
theorem Matrix.toBilin_symm : (Matrix.toBilin b).symm = BilinForm.toMatrix b :=
(BilinForm.toMatrix b).symm_symm
#align matrix.to_bilin_symm Matrix.toBilin_symm
-/- warning: matrix.to_bilin_basis_fun -> Matrix.toBilin_basisFun is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], Eq.{succ (max u2 u1)} (LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7))) (Matrix.toBilin.{u1, max u2 u1, u2} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u1, u2} R₂ n (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_16)) (Matrix.toBilin'.{u1, u2} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
-but is expected to have type
- forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))))) (Matrix.toBilin.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (Matrix.toBilin'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFunₓ'. -/
theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' := by ext M;
simp only [Matrix.toBilin_apply, Matrix.toBilin'_apply, Pi.basisFun_repr]
#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFun
-/- warning: bilin_form.to_matrix_basis_fun -> BilinForm.toMatrix_basisFun is a dubious translation:
-lean 3 declaration is
- forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], Eq.{succ (max u2 u1)} (LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (BilinForm.toMatrix.{u1, max u2 u1, u2} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u1, u2} R₂ n (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_16)) (BilinForm.toMatrix'.{u1, u2} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
-but is expected to have type
- forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (BilinForm.toMatrix.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (BilinForm.toMatrix'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFunₓ'. -/
theorem BilinForm.toMatrix_basisFun : BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' :=
by ext B;
rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
-/- warning: matrix.to_bilin_to_matrix -> Matrix.toBilin_toMatrix is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_to_matrix Matrix.toBilin_toMatrixₓ'. -/
@[simp]
theorem Matrix.toBilin_toMatrix (B : BilinForm R₂ M₂) :
Matrix.toBilin b (BilinForm.toMatrix b B) = B :=
(Matrix.toBilin b).apply_symm_apply B
#align matrix.to_bilin_to_matrix Matrix.toBilin_toMatrix
-/- warning: bilin_form.to_matrix_to_bilin -> BilinForm.toMatrix_toBilin is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_to_bilin BilinForm.toMatrix_toBilinₓ'. -/
@[simp]
theorem BilinForm.toMatrix_toBilin (M : Matrix n n R₂) :
BilinForm.toMatrix b (Matrix.toBilin b M) = M :=
@@ -488,9 +359,6 @@ variable (c : Basis o R₂ M₂')
variable [DecidableEq o]
-/- warning: bilin_form.to_matrix_comp -> BilinForm.toMatrix_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp BilinForm.toMatrix_compₓ'. -/
-- Cannot be a `simp` lemma because `b` must be inferred.
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
@@ -513,59 +381,38 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
· intros ; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
-/- warning: bilin_form.to_matrix_comp_left -> BilinForm.toMatrix_compLeft is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeftₓ'. -/
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compLeft f) = (toMatrix b b f)ᵀ ⬝ BilinForm.toMatrix b B := by
simp only [comp_left, BilinForm.toMatrix_comp b b, to_matrix_id, Matrix.mul_one]
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
-/- warning: bilin_form.to_matrix_comp_right -> BilinForm.toMatrix_compRight is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRightₓ'. -/
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B ⬝ toMatrix b b f := by
simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, to_matrix_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
-/- warning: bilin_form.to_matrix_mul_basis_to_matrix -> BilinForm.toMatrix_mul_basis_toMatrix is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrixₓ'. -/
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
(b.toMatrix c)ᵀ ⬝ BilinForm.toMatrix b B ⬝ b.toMatrix c = BilinForm.toMatrix c B := by
rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
-/- warning: bilin_form.mul_to_matrix_mul -> BilinForm.mul_toMatrix_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mulₓ'. -/
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
M ⬝ BilinForm.toMatrix b B ⬝ N = BilinForm.toMatrix c (B.comp (toLin c b Mᵀ) (toLin c b N)) :=
by simp only [B.to_matrix_comp b c, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
-/- warning: bilin_form.mul_to_matrix -> BilinForm.mul_toMatrix is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix BilinForm.mul_toMatrixₓ'. -/
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
M ⬝ BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (toLin b b Mᵀ)) := by
rw [B.to_matrix_comp_left b, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
-/- warning: bilin_form.to_matrix_mul -> BilinForm.toMatrix_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_mul BilinForm.toMatrix_mulₓ'. -/
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
BilinForm.toMatrix b B ⬝ M = BilinForm.toMatrix b (B.compRight (toLin b b M)) := by
rw [B.to_matrix_comp_right b, to_matrix_to_lin]
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
-/- warning: matrix.to_bilin_comp -> Matrix.toBilin_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_comp Matrix.toBilin_compₓ'. -/
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
(Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ ⬝ M ⬝ Q) :=
(BilinForm.toMatrix c).Injective
@@ -586,9 +433,6 @@ variable (b : Basis n R₃ M₃)
variable (J J₃ A A' : Matrix n n R₃)
-/- warning: is_adjoint_pair_to_bilin' -> isAdjointPair_toBilin' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'ₓ'. -/
@[simp]
theorem isAdjointPair_toBilin' [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
@@ -608,9 +452,6 @@ theorem isAdjointPair_toBilin' [DecidableEq n] :
rfl
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
-/- warning: is_adjoint_pair_to_bilin -> isAdjointPair_toBilin is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align is_adjoint_pair_to_bilin isAdjointPair_toBilinₓ'. -/
@[simp]
theorem isAdjointPair_toBilin [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
@@ -629,12 +470,6 @@ theorem isAdjointPair_toBilin [DecidableEq n] :
rfl
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
-/- warning: matrix.is_adjoint_pair_equiv' -> Matrix.isAdjointPair_equiv' is a dubious translation:
-lean 3 declaration is
- forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) (A' : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n] (P : Matrix.{u2, u2, u1} n n R₃), (IsUnit.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Ring.toMonoid.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.ring.{u1, u2} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) (CommRing.toRing.{u1} R₃ _inst_10))) P) -> (Iff (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) A A') (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A) (Inv.inv.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.hasInv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P)) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A') (Inv.inv.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.hasInv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P))))
-but is expected to have type
- forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) (A' : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n] (P : Matrix.{u2, u2, u1} n n R₃), (IsUnit.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.semiring.{u1, u2} n R₃ (CommSemiring.toSemiring.{u1} R₃ (CommRing.toCommSemiring.{u1} R₃ _inst_10)) _inst_16 (fun (a : n) (b : n) => _inst_17 a b)))) P) -> (Iff (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) A A') (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A) (Inv.inv.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.inv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P)) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A') (Inv.inv.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.inv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P))))
-Case conversion may be inaccurate. Consider using '#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'ₓ'. -/
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
(Pᵀ ⬝ J ⬝ P).IsAdjointPair (Pᵀ ⬝ J ⬝ P) A A' ↔ J.IsAdjointPair J (P ⬝ A ⬝ P⁻¹) (P ⬝ A' ⬝ P⁻¹) :=
by
@@ -679,12 +514,6 @@ def pairSelfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align pair_self_adjoint_matrices_submodule' pairSelfAdjointMatricesSubmodule'
-/
-/- warning: mem_pair_self_adjoint_matrices_submodule' -> mem_pairSelfAdjointMatricesSubmodule' is a dubious translation:
-lean 3 declaration is
- forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (J₃ : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (pairSelfAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J J₃ (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J₃ A A)
-but is expected to have type
- forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (J₃ : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (pairSelfAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J J₃ (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsAdjointPair.{u2, u1, u1} R₃ n n _inst_10 _inst_16 _inst_16 J J₃ A A)
-Case conversion may be inaccurate. Consider using '#align mem_pair_self_adjoint_matrices_submodule' mem_pairSelfAdjointMatricesSubmodule'ₓ'. -/
theorem mem_pairSelfAdjointMatricesSubmodule' :
A ∈ pairSelfAdjointMatricesSubmodule J J₃ ↔ Matrix.IsAdjointPair J J₃ A A := by
simp only [mem_pairSelfAdjointMatricesSubmodule]
@@ -698,12 +527,6 @@ def selfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align self_adjoint_matrices_submodule' selfAdjointMatricesSubmodule'
-/
-/- warning: mem_self_adjoint_matrices_submodule' -> mem_selfAdjointMatricesSubmodule' is a dubious translation:
-lean 3 declaration is
- forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (selfAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSelfAdjoint.{u1, u2} R₃ n _inst_10 _inst_16 J A)
-but is expected to have type
- forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (selfAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSelfAdjoint.{u2, u1} R₃ n _inst_10 _inst_16 J A)
-Case conversion may be inaccurate. Consider using '#align mem_self_adjoint_matrices_submodule' mem_selfAdjointMatricesSubmodule'ₓ'. -/
theorem mem_selfAdjointMatricesSubmodule' :
A ∈ selfAdjointMatricesSubmodule J ↔ J.IsSelfAdjoint A := by
simp only [mem_selfAdjointMatricesSubmodule]
@@ -717,12 +540,6 @@ def skewAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
#align skew_adjoint_matrices_submodule' skewAdjointMatricesSubmodule'
-/
-/- warning: mem_skew_adjoint_matrices_submodule' -> mem_skewAdjointMatricesSubmodule' is a dubious translation:
-lean 3 declaration is
- forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (skewAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSkewAdjoint.{u1, u2} R₃ n _inst_10 _inst_16 J A)
-but is expected to have type
- forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (skewAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSkewAdjoint.{u2, u1} R₃ n _inst_10 _inst_16 J A)
-Case conversion may be inaccurate. Consider using '#align mem_skew_adjoint_matrices_submodule' mem_skewAdjointMatricesSubmodule'ₓ'. -/
theorem mem_skewAdjointMatricesSubmodule' :
A ∈ skewAdjointMatricesSubmodule J ↔ J.IsSkewAdjoint A := by
simp only [mem_skewAdjointMatricesSubmodule]
@@ -740,52 +557,34 @@ variable {A : Type _} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinFor
variable {ι : Type _} [DecidableEq ι] [Fintype ι]
-/- warning: matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin -> Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilinₓ'. -/
theorem Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
(b : Basis ι R₂ M₂) : M.toBilin'.Nondegenerate ↔ (Matrix.toBilin b M).Nondegenerate :=
(nondegenerate_congr_iff b.equivFun.symm).symm
#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin
-/- warning: matrix.nondegenerate.to_bilin' -> Matrix.Nondegenerate.toBilin' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate.to_bilin' Matrix.Nondegenerate.toBilin'ₓ'. -/
-- Lemmas transferring nondegeneracy between a matrix and its associated bilinear form
theorem Matrix.Nondegenerate.toBilin' {M : Matrix ι ι R₃} (h : M.Nondegenerate) :
M.toBilin'.Nondegenerate := fun x hx =>
h.eq_zero_of_ortho fun y => by simpa only [to_bilin'_apply'] using hx y
#align matrix.nondegenerate.to_bilin' Matrix.Nondegenerate.toBilin'
-/- warning: matrix.nondegenerate_to_bilin'_iff -> Matrix.nondegenerate_toBilin'_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iffₓ'. -/
@[simp]
theorem Matrix.nondegenerate_toBilin'_iff {M : Matrix ι ι R₃} :
M.toBilin'.Nondegenerate ↔ M.Nondegenerate :=
⟨fun h v hv => h v fun w => (M.toBilin'_apply' _ _).trans <| hv w, Matrix.Nondegenerate.toBilin'⟩
#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iff
-/- warning: matrix.nondegenerate.to_bilin -> Matrix.Nondegenerate.toBilin is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilinₓ'. -/
theorem Matrix.Nondegenerate.toBilin {M : Matrix ι ι R₃} (h : M.Nondegenerate) (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate :=
(Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin b).mp h.toBilin'
#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilin
-/- warning: matrix.nondegenerate_to_bilin_iff -> Matrix.nondegenerate_toBilin_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iffₓ'. -/
@[simp]
theorem Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate ↔ M.Nondegenerate := by
rw [← Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin, Matrix.nondegenerate_toBilin'_iff]
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
-/- warning: bilin_form.nondegenerate_to_matrix'_iff -> BilinForm.nondegenerate_toMatrix'_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iffₓ'. -/
-- Lemmas transferring nondegeneracy between a bilinear form and its associated matrix
@[simp]
theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
@@ -793,59 +592,38 @@ theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
Matrix.nondegenerate_toBilin'_iff.symm.trans <| (Matrix.toBilin'_toMatrix' B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iff
-/- warning: bilin_form.nondegenerate.to_matrix' -> BilinForm.Nondegenerate.toMatrix' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'ₓ'. -/
theorem Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)} (h : B.Nondegenerate) :
B.toMatrix'.Nondegenerate :=
nondegenerate_toMatrix'_iff.mpr h
#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'
-/- warning: bilin_form.nondegenerate_to_matrix_iff -> BilinForm.nondegenerate_toMatrix_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iffₓ'. -/
@[simp]
theorem nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
(Matrix.nondegenerate_toBilin_iff b).symm.trans <| (Matrix.toBilin_toMatrix b B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iff
-/- warning: bilin_form.nondegenerate.to_matrix -> BilinForm.Nondegenerate.toMatrix is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrixₓ'. -/
theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate :=
(nondegenerate_toMatrix_iff b).mpr h
#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
-/- warning: bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero -> BilinForm.nondegenerate_toBilin'_iff_det_ne_zero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zeroₓ'. -/
-- Some shorthands for combining the above with `matrix.nondegenerate_of_det_ne_zero`
theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
-/- warning: bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' -> BilinForm.nondegenerate_toBilin'_of_det_ne_zero' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'ₓ'. -/
theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
M.toBilin'.Nondegenerate :=
nondegenerate_toBilin'_iff_det_ne_zero.mpr h
#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
-/- warning: bilin_form.nondegenerate_iff_det_ne_zero -> BilinForm.nondegenerate_iff_det_ne_zero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zeroₓ'. -/
theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_to_matrix_iff]
#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
-/- warning: bilin_form.nondegenerate_of_det_ne_zero -> BilinForm.nondegenerate_of_det_ne_zero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zeroₓ'. -/
theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
B₃.Nondegenerate :=
(nondegenerate_iff_det_ne_zero b).mpr h
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -170,8 +170,7 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
1 with
invFun := Matrix.toBilin'Aux
left_inv := by convert toBilin'Aux_toMatrixAux
- right_inv := fun M => by
- ext (i j)
+ right_inv := fun M => by ext (i j);
simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
@@ -299,10 +298,8 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
rintro j' -
simp only [smul_eq_mul, Pi.basisFun_repr, mul_assoc, mul_comm, mul_left_comm,
Pi.basisFun_apply, of_apply]
- · intros
- simp only [zero_smul, smul_zero]
- · intros
- simp only [zero_smul, Finsupp.sum_zero]
+ · intros ; simp only [zero_smul, smul_zero]
+ · intros ; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
/- warning: bilin_form.to_matrix'_comp_left -> BilinForm.toMatrix'_compLeft is a dubious translation:
@@ -452,9 +449,7 @@ lean 3 declaration is
but is expected to have type
forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))))) (Matrix.toBilin.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (Matrix.toBilin'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFunₓ'. -/
-theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' :=
- by
- ext M
+theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' := by ext M;
simp only [Matrix.toBilin_apply, Matrix.toBilin'_apply, Pi.basisFun_repr]
#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFun
@@ -465,8 +460,7 @@ but is expected to have type
forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (BilinForm.toMatrix.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (BilinForm.toMatrix'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFunₓ'. -/
theorem BilinForm.toMatrix_basisFun : BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' :=
- by
- ext B
+ by ext B;
rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
@@ -515,10 +509,8 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
rintro j' -
simp only [smul_eq_mul, LinearMap.toMatrix_apply, Basis.equivFun_apply, mul_assoc, mul_comm,
mul_left_comm]
- · intros
- simp only [zero_smul, smul_zero]
- · intros
- simp only [zero_smul, Finsupp.sum_zero]
+ · intros ; simp only [zero_smul, smul_zero]
+ · intros ; simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
/- warning: bilin_form.to_matrix_comp_left -> BilinForm.toMatrix_compLeft is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anne Baanen, Kexing Ying
! This file was ported from Lean 3 source module linear_algebra.matrix.bilinear_form
-! leanprover-community/mathlib commit 075b3f7d19b9da85a0b54b3e33055a74fc388dec
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.LinearAlgebra.Matrix.SesquilinearForm
/-!
# Bilinear form
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines the conversion between bilinear forms and matrices.
## Main definitions
@@ -66,6 +69,7 @@ open BilinForm Finset LinearMap Matrix
open Matrix
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
+#print Matrix.toBilin'Aux /-
/-- The map from `matrix n n R` to bilinear forms on `n → R`.
This is an auxiliary definition for the equivalence `matrix.to_bilin_form'`. -/
@@ -78,7 +82,11 @@ def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n →
bilin_smul_right a x y := by
simp only [Pi.smul_apply, smul_eq_mul, mul_assoc, mul_left_comm, mul_sum]
#align matrix.to_bilin'_aux Matrix.toBilin'Aux
+-/
+/- warning: matrix.to_bilin'_aux_std_basis -> Matrix.toBilin'Aux_stdBasis is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasisₓ'. -/
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
M.toBilin'Aux (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
by
@@ -100,6 +108,12 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
contradiction
#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasis
+/- warning: bilin_form.to_matrix_aux -> BilinForm.toMatrixAux is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}}, (n -> M₂) -> (LinearMap.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrixAux._proof_1.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
+but is expected to have type
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}}, (n -> M₂) -> (LinearMap.{u1, u1, max u2 u1, max u1 u3} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux BilinForm.toMatrixAuxₓ'. -/
/-- The linear map from bilinear forms to `matrix n n R` given an `n`-indexed basis.
This is an auxiliary definition for the equivalence `matrix.to_bilin_form'`. -/
@@ -110,6 +124,9 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
map_smul' f g := rfl
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
+/- warning: bilin_form.to_matrix_aux_apply -> BilinForm.toMatrixAux_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
BilinForm.toMatrixAux b B i j = B (b i) (b j) :=
@@ -118,6 +135,9 @@ theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (
variable [Fintype n] [Fintype o]
+/- warning: to_bilin'_aux_to_matrix_aux -> toBilin'Aux_toMatrixAux is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAuxₓ'. -/
theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R₂)) :
Matrix.toBilin'Aux (BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ :=
by
@@ -136,6 +156,12 @@ This section deals with the conversion between matrices and bilinear forms on `n
variable [DecidableEq n] [DecidableEq o]
+/- warning: bilin_form.to_matrix' -> BilinForm.toMatrix' is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix'._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix'._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix'._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))
+but is expected to have type
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u1 u2, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, max u1 u2, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1500 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix' BilinForm.toMatrix'ₓ'. -/
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
{
@@ -149,28 +175,46 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
simp only [to_fun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
+/- warning: bilin_form.to_matrix_aux_std_basis -> BilinForm.toMatrixAux_stdBasis is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasisₓ'. -/
@[simp]
theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
BilinForm.toMatrixAux (fun j => stdBasis R₂ (fun _ => R₂) j 1) B = BilinForm.toMatrix' B :=
rfl
#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasis
+/- warning: matrix.to_bilin' -> Matrix.toBilin' is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin'._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin'._proof_2.{u1} R₂ _inst_7) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin'._proof_3.{u1} R₂ _inst_7))
+but is expected to have type
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], LinearEquiv.{u1, u1, max u1 u2, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u1, max u1 u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, max u1 u2, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (ᾰ : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.module.{u2, u1, u1} n (fun (a._@.Mathlib.LinearAlgebra.Matrix.BilinearForm._hyg.1888 : n) => R₂) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))))
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin' Matrix.toBilin'ₓ'. -/
/-- The linear equivalence between `n × n` matrices and bilinear forms on `n → R` -/
def Matrix.toBilin' : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ (n → R₂) :=
BilinForm.toMatrix'.symm
#align matrix.to_bilin' Matrix.toBilin'
+/- warning: matrix.to_bilin'_aux_eq -> Matrix.toBilin'Aux_eq is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eqₓ'. -/
@[simp]
theorem Matrix.toBilin'Aux_eq (M : Matrix n n R₂) : Matrix.toBilin'Aux M = Matrix.toBilin' M :=
rfl
#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eq
+/- warning: matrix.to_bilin'_apply -> Matrix.toBilin'_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_apply Matrix.toBilin'_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
theorem Matrix.toBilin'_apply (M : Matrix n n R₂) (x y : n → R₂) :
Matrix.toBilin' M x y = ∑ (i) (j), x i * M i j * y j :=
rfl
#align matrix.to_bilin'_apply Matrix.toBilin'_apply
+/- warning: matrix.to_bilin'_apply' -> Matrix.toBilin'_apply' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'ₓ'. -/
theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) :=
by
@@ -181,42 +225,63 @@ theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
rw [← mul_assoc]
#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'
+/- warning: matrix.to_bilin'_std_basis -> Matrix.toBilin'_stdBasis is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasisₓ'. -/
@[simp]
theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
Matrix.toBilin' M (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
Matrix.toBilin'Aux_stdBasis M i j
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
+/- warning: bilin_form.to_matrix'_symm -> BilinForm.toMatrix'_symm is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symmₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_symm :
(BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
rfl
#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symm
+/- warning: matrix.to_bilin'_symm -> Matrix.toBilin'_symm is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_symm Matrix.toBilin'_symmₓ'. -/
@[simp]
theorem Matrix.toBilin'_symm :
(Matrix.toBilin'.symm : _ ≃ₗ[R₂] Matrix n n R₂) = BilinForm.toMatrix' :=
BilinForm.toMatrix'.symm_symm
#align matrix.to_bilin'_symm Matrix.toBilin'_symm
+/- warning: matrix.to_bilin'_to_matrix' -> Matrix.toBilin'_toMatrix' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'ₓ'. -/
@[simp]
theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
Matrix.toBilin' (BilinForm.toMatrix' B) = B :=
Matrix.toBilin'.apply_symm_apply B
#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'
+/- warning: bilin_form.to_matrix'_to_bilin' -> BilinForm.toMatrix'_toBilin' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'ₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
BilinForm.toMatrix'.apply_symm_apply M
#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
+/- warning: bilin_form.to_matrix'_apply -> BilinForm.toMatrix'_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
rfl
#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
+/- warning: bilin_form.to_matrix'_comp -> BilinForm.toMatrix'_comp is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_compₓ'. -/
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
(B.comp l r).toMatrix' = l.toMatrix'ᵀ ⬝ B.toMatrix' ⬝ r.toMatrix' :=
@@ -240,32 +305,50 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
+/- warning: bilin_form.to_matrix'_comp_left -> BilinForm.toMatrix'_compLeft is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeftₓ'. -/
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compLeft f).toMatrix' = f.toMatrix'ᵀ ⬝ B.toMatrix' := by
simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, to_matrix'_id, Matrix.mul_one]
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
+/- warning: bilin_form.to_matrix'_comp_right -> BilinForm.toMatrix'_compRight is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRightₓ'. -/
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
(B.compRight f).toMatrix' = B.toMatrix' ⬝ f.toMatrix' := by
simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, to_matrix'_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
+/- warning: bilin_form.mul_to_matrix'_mul -> BilinForm.mul_toMatrix'_mul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mulₓ'. -/
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M ⬝ B.toMatrix' ⬝ N = (B.comp Mᵀ.toLin' N.toLin').toMatrix' := by
simp only [B.to_matrix'_comp, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
+/- warning: bilin_form.mul_to_matrix' -> BilinForm.mul_toMatrix' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'ₓ'. -/
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
M ⬝ B.toMatrix' = (B.compLeft Mᵀ.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_left, transpose_transpose, to_matrix'_to_lin']
#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
+/- warning: bilin_form.to_matrix'_mul -> BilinForm.toMatrix'_mul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mulₓ'. -/
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
B.toMatrix' ⬝ M = (B.compRight M.toLin').toMatrix' := by
simp only [B.to_matrix'_comp_right, to_matrix'_to_lin']
#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
+/- warning: matrix.to_bilin'_comp -> Matrix.toBilin'_comp is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin'_comp Matrix.toBilin'_compₓ'. -/
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
M.toBilin'.comp P.toLin' Q.toLin' = (Pᵀ ⬝ M ⬝ Q).toBilin' :=
BilinForm.toMatrix'.Injective
@@ -285,18 +368,33 @@ a module with a fixed basis.
variable [DecidableEq n] (b : Basis n R₂ M₂)
+/- warning: bilin_form.to_matrix -> BilinForm.toMatrix is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
+but is expected to have type
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u2 u1, max u1 u3} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix BilinForm.toMatrixₓ'. -/
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
(BilinForm.congr b.equivFun).trans BilinForm.toMatrix'
#align bilin_form.to_matrix BilinForm.toMatrix
+/- warning: matrix.to_bilin -> Matrix.toBilin is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)))
+but is expected to have type
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n], (Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) -> (LinearEquiv.{u1, u1, max u1 u3, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (RingHomInvPair.ids.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (smulCommClass_self.{u1, u1} R₂ R₂ (CommSemiring.toCommMonoid.{u1} R₂ _inst_7) (MulActionWithZero.toMulAction.{u1, u1} R₂ R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u1} R₂ (CommSemiring.toCommMonoidWithZero.{u1} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u1} R₂ (Semiring.toMonoidWithZero.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))))))
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin Matrix.toBilinₓ'. -/
/-- `bilin_form.to_matrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M₂ :=
(BilinForm.toMatrix b).symm
#align matrix.to_bilin Matrix.toBilin
+/- warning: bilin_form.to_matrix_apply -> BilinForm.toMatrix_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_apply BilinForm.toMatrix_applyₓ'. -/
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
BilinForm.toMatrix b B i j = B (b i) (b j) := by
@@ -304,6 +402,9 @@ theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
b.equiv_fun_symm_std_basis, b.equiv_fun_symm_std_basis]
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
+/- warning: matrix.to_bilin_apply -> Matrix.toBilin_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_apply Matrix.toBilin_applyₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:107:6: warning: expanding binder group (i j) -/
@[simp]
theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
@@ -314,40 +415,73 @@ theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
Basis.equivFun_apply]
#align matrix.to_bilin_apply Matrix.toBilin_apply
+/- warning: bilinear_form.to_matrix_aux_eq -> BilinearForm.toMatrixAux_eq is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eqₓ'. -/
-- Not a `simp` lemma since `bilin_form.to_matrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux b B = BilinForm.toMatrix b B :=
ext fun i j => by rw [BilinForm.toMatrix_apply, BilinForm.toMatrixAux_apply]
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
+/- warning: bilin_form.to_matrix_symm -> BilinForm.toMatrix_symm is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n] (b : Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (succ (max u3 u1)) (succ (max u1 u2))} (LinearEquiv.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7))) (LinearEquiv.symm.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.toMatrix.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (Matrix.toBilin.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
+but is expected to have type
+ forall {R₂ : Type.{u3}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u3} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n] (b : Basis.{u1, u3, u2} n R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (LinearEquiv.{u3, u3, max u3 u1, max u3 u2} R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (Matrix.{u1, u1, u3} n n R₂) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))))) (LinearEquiv.symm.{u3, u3, max u3 u2, max u3 u1} R₂ R₂ (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u1, u1, u3} n n R₂) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (BilinForm.toMatrix.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (Matrix.toBilin.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_symm BilinForm.toMatrix_symmₓ'. -/
@[simp]
theorem BilinForm.toMatrix_symm : (BilinForm.toMatrix b).symm = Matrix.toBilin b :=
rfl
#align bilin_form.to_matrix_symm BilinForm.toMatrix_symm
+/- warning: matrix.to_bilin_symm -> Matrix.toBilin_symm is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u1} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8] {n : Type.{u3}} [_inst_16 : Fintype.{u3} n] [_inst_18 : DecidableEq.{succ u3} n] (b : Basis.{u3, u1, u2} n R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (succ (max u1 u2)) (succ (max u3 u1))} (LinearEquiv.{u1, u1, max u1 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u3, u3, u1} n n R₂) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (LinearEquiv.symm.{u1, u1, max u3 u1, max u1 u2} R₂ R₂ (Matrix.{u3, u3, u1} n n R₂) (BilinForm.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Matrix.addCommMonoid.{u1, u3, u3} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, u2} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u1, u3, u3, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, u2, u1} R₂ M₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7)) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.toBilin.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (BilinForm.toMatrix.{u1, u2, u3} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
+but is expected to have type
+ forall {R₂ : Type.{u3}} {M₂ : Type.{u2}} [_inst_7 : CommSemiring.{u3} R₂] [_inst_8 : AddCommMonoid.{u2} M₂] [_inst_9 : Module.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n] (b : Basis.{u1, u3, u2} n R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9), Eq.{max (max (succ u3) (succ u2)) (succ u1)} (LinearEquiv.{u3, u3, max u3 u2, max u3 u1} R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.{u1, u1, u3} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (LinearEquiv.symm.{u3, u3, max u3 u1, max u3 u2} R₂ R₂ (Matrix.{u1, u1, u3} n n R₂) (BilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Matrix.addCommMonoid.{u3, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u3, u2} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9) (Matrix.module.{u3, u1, u1, u3} n n R₂ R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u3, u2, u3} R₂ M₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) _inst_8 _inst_9 R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7) (Semiring.toModule.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (smulCommClass_self.{u3, u3} R₂ R₂ (CommSemiring.toCommMonoid.{u3} R₂ _inst_7) (MulActionWithZero.toMulAction.{u3, u3} R₂ R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u3} R₂ (CommSemiring.toCommMonoidWithZero.{u3} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u3} R₂ (Semiring.toMonoidWithZero.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)))))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHom.id.{u3} R₂ (Semiring.toNonAssocSemiring.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7))) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (RingHomInvPair.ids.{u3} R₂ (CommSemiring.toSemiring.{u3} R₂ _inst_7)) (Matrix.toBilin.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)) (BilinForm.toMatrix.{u3, u2, u1} R₂ M₂ _inst_7 _inst_8 _inst_9 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) b)
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_symm Matrix.toBilin_symmₓ'. -/
@[simp]
theorem Matrix.toBilin_symm : (Matrix.toBilin b).symm = BilinForm.toMatrix b :=
(BilinForm.toMatrix b).symm_symm
#align matrix.to_bilin_symm Matrix.toBilin_symm
+/- warning: matrix.to_bilin_basis_fun -> Matrix.toBilin_basisFun is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], Eq.{succ (max u2 u1)} (LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (Matrix.toBilin._proof_1.{u1} R₂ _inst_7) (Matrix.toBilin._proof_2.{u1} R₂ _inst_7) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (Matrix.toBilin._proof_3.{u1} R₂ _inst_7))) (Matrix.toBilin.{u1, max u2 u1, u2} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u1, u2} R₂ n (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_16)) (Matrix.toBilin'.{u1, u2} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
+but is expected to have type
+ forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))))) (Matrix.toBilin.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (Matrix.toBilin'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFunₓ'. -/
theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' :=
by
ext M
simp only [Matrix.toBilin_apply, Matrix.toBilin'_apply, Pi.basisFun_repr]
#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFun
+/- warning: bilin_form.to_matrix_basis_fun -> BilinForm.toMatrix_basisFun is a dubious translation:
+lean 3 declaration is
+ forall {R₂ : Type.{u1}} [_inst_7 : CommSemiring.{u1} R₂] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] [_inst_18 : DecidableEq.{succ u2} n], Eq.{succ (max u2 u1)} (LinearEquiv.{u1, u1, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (RingHom.id.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) (BilinForm.toMatrix._proof_1.{u1} R₂ _inst_7) (BilinForm.toMatrix._proof_2.{u1} R₂ _inst_7) (BilinForm.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.{u2, u2, u1} n n R₂) (BilinForm.addCommMonoid.{u1, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Matrix.addCommMonoid.{u1, u2, u2} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (BilinForm.module.{u1, max u2 u1, u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)) (BilinForm.toMatrix._proof_3.{u1} R₂ _inst_7)) (Matrix.module.{u1, u2, u2, u1} n n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (BilinForm.toMatrix.{u1, max u2 u1, u2} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u2, u1} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))))) (Pi.Function.module.{u2, u1, u1} n R₂ R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R₂ (Semiring.toNonAssocSemiring.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7)))) (Semiring.toModule.{u1} R₂ (CommSemiring.toSemiring.{u1} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u1, u2} R₂ n (CommSemiring.toSemiring.{u1} R₂ _inst_7) _inst_16)) (BilinForm.toMatrix'.{u1, u2} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
+but is expected to have type
+ forall {R₂ : Type.{u2}} [_inst_7 : CommSemiring.{u2} R₂] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] [_inst_18 : DecidableEq.{succ u1} n], Eq.{max (succ u2) (succ u1)} (LinearEquiv.{u2, u2, max u2 u1, max u2 u1} R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHom.id.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (RingHomInvPair.ids.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (BilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.{u1, u1, u2} n n R₂) (BilinForm.instAddCommMonoidBilinForm.{u2, max u2 u1} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Matrix.addCommMonoid.{u2, u1, u1} n n R₂ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (BilinForm.instModuleBilinFormInstAddCommMonoidBilinForm.{u2, max u2 u1, u2} R₂ (n -> R₂) (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (smulCommClass_self.{u2, u2} R₂ R₂ (CommSemiring.toCommMonoid.{u2} R₂ _inst_7) (MulActionWithZero.toMulAction.{u2, u2} R₂ R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)) (CommMonoidWithZero.toZero.{u2} R₂ (CommSemiring.toCommMonoidWithZero.{u2} R₂ _inst_7)) (MonoidWithZero.toMulActionWithZero.{u2} R₂ (Semiring.toMonoidWithZero.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))))) (Matrix.module.{u2, u1, u1, u2} n n R₂ R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (BilinForm.toMatrix.{u2, max u2 u1, u1} R₂ (n -> R₂) _inst_7 (Pi.addCommMonoid.{u1, u2} n (fun (j : n) => R₂) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))))) (Pi.module.{u1, u2, u2} n (fun (x._@.Mathlib.LinearAlgebra.StdBasis._hyg.3573 : n) => R₂) R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7) (fun (i : n) => NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₂ (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R₂ (Semiring.toNonAssocSemiring.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7)))) (fun (i : n) => Semiring.toModule.{u2} R₂ (CommSemiring.toSemiring.{u2} R₂ _inst_7))) n _inst_16 (fun (a : n) (b : n) => _inst_18 a b) (Pi.basisFun.{u2, u1} R₂ n (CommSemiring.toSemiring.{u2} R₂ _inst_7) _inst_16)) (BilinForm.toMatrix'.{u2, u1} R₂ _inst_7 n _inst_16 (fun (a : n) (b : n) => _inst_18 a b))
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFunₓ'. -/
theorem BilinForm.toMatrix_basisFun : BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' :=
by
ext B
rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
+/- warning: matrix.to_bilin_to_matrix -> Matrix.toBilin_toMatrix is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_to_matrix Matrix.toBilin_toMatrixₓ'. -/
@[simp]
theorem Matrix.toBilin_toMatrix (B : BilinForm R₂ M₂) :
Matrix.toBilin b (BilinForm.toMatrix b B) = B :=
(Matrix.toBilin b).apply_symm_apply B
#align matrix.to_bilin_to_matrix Matrix.toBilin_toMatrix
+/- warning: bilin_form.to_matrix_to_bilin -> BilinForm.toMatrix_toBilin is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_to_bilin BilinForm.toMatrix_toBilinₓ'. -/
@[simp]
theorem BilinForm.toMatrix_toBilin (M : Matrix n n R₂) :
BilinForm.toMatrix b (Matrix.toBilin b M) = M :=
@@ -360,6 +494,9 @@ variable (c : Basis o R₂ M₂')
variable [DecidableEq o]
+/- warning: bilin_form.to_matrix_comp -> BilinForm.toMatrix_comp is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp BilinForm.toMatrix_compₓ'. -/
-- Cannot be a `simp` lemma because `b` must be inferred.
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
@@ -384,38 +521,59 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
simp only [zero_smul, Finsupp.sum_zero]
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
+/- warning: bilin_form.to_matrix_comp_left -> BilinForm.toMatrix_compLeft is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeftₓ'. -/
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compLeft f) = (toMatrix b b f)ᵀ ⬝ BilinForm.toMatrix b B := by
simp only [comp_left, BilinForm.toMatrix_comp b b, to_matrix_id, Matrix.mul_one]
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
+/- warning: bilin_form.to_matrix_comp_right -> BilinForm.toMatrix_compRight is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRightₓ'. -/
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B ⬝ toMatrix b b f := by
simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, to_matrix_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
+/- warning: bilin_form.to_matrix_mul_basis_to_matrix -> BilinForm.toMatrix_mul_basis_toMatrix is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrixₓ'. -/
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
(b.toMatrix c)ᵀ ⬝ BilinForm.toMatrix b B ⬝ b.toMatrix c = BilinForm.toMatrix c B := by
rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
+/- warning: bilin_form.mul_to_matrix_mul -> BilinForm.mul_toMatrix_mul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mulₓ'. -/
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
M ⬝ BilinForm.toMatrix b B ⬝ N = BilinForm.toMatrix c (B.comp (toLin c b Mᵀ) (toLin c b N)) :=
by simp only [B.to_matrix_comp b c, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
+/- warning: bilin_form.mul_to_matrix -> BilinForm.mul_toMatrix is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.mul_to_matrix BilinForm.mul_toMatrixₓ'. -/
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
M ⬝ BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (toLin b b Mᵀ)) := by
rw [B.to_matrix_comp_left b, to_matrix_to_lin, transpose_transpose]
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
+/- warning: bilin_form.to_matrix_mul -> BilinForm.toMatrix_mul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.to_matrix_mul BilinForm.toMatrix_mulₓ'. -/
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
BilinForm.toMatrix b B ⬝ M = BilinForm.toMatrix b (B.compRight (toLin b b M)) := by
rw [B.to_matrix_comp_right b, to_matrix_to_lin]
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
+/- warning: matrix.to_bilin_comp -> Matrix.toBilin_comp is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.to_bilin_comp Matrix.toBilin_compₓ'. -/
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
(Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ ⬝ M ⬝ Q) :=
(BilinForm.toMatrix c).Injective
@@ -436,6 +594,9 @@ variable (b : Basis n R₃ M₃)
variable (J J₃ A A' : Matrix n n R₃)
+/- warning: is_adjoint_pair_to_bilin' -> isAdjointPair_toBilin' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'ₓ'. -/
@[simp]
theorem isAdjointPair_toBilin' [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
@@ -455,6 +616,9 @@ theorem isAdjointPair_toBilin' [DecidableEq n] :
rfl
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
+/- warning: is_adjoint_pair_to_bilin -> isAdjointPair_toBilin is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align is_adjoint_pair_to_bilin isAdjointPair_toBilinₓ'. -/
@[simp]
theorem isAdjointPair_toBilin [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
@@ -473,6 +637,12 @@ theorem isAdjointPair_toBilin [DecidableEq n] :
rfl
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
+/- warning: matrix.is_adjoint_pair_equiv' -> Matrix.isAdjointPair_equiv' is a dubious translation:
+lean 3 declaration is
+ forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) (A' : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n] (P : Matrix.{u2, u2, u1} n n R₃), (IsUnit.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Ring.toMonoid.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.ring.{u1, u2} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) (CommRing.toRing.{u1} R₃ _inst_10))) P) -> (Iff (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) A A') (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A) (Inv.inv.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.hasInv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P)) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (Distrib.toHasMul.{u1} R₃ (Ring.toDistrib.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A') (Inv.inv.{max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Matrix.hasInv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P))))
+but is expected to have type
+ forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) (A' : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n] (P : Matrix.{u2, u2, u1} n n R₃), (IsUnit.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (MonoidWithZero.toMonoid.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Semiring.toMonoidWithZero.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.semiring.{u1, u2} n R₃ (CommSemiring.toSemiring.{u1} R₃ (CommRing.toCommSemiring.{u1} R₃ _inst_10)) _inst_16 (fun (a : n) (b : n) => _inst_17 a b)))) P) -> (Iff (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.transpose.{u1, u2, u2} n n R₃ P) J) P) A A') (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A) (Inv.inv.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.inv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P)) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.mul.{u1, u2, u2, u2} n n n R₃ _inst_16 (NonUnitalNonAssocRing.toMul.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) P A') (Inv.inv.{max u1 u2} (Matrix.{u2, u2, u1} n n R₃) (Matrix.inv.{u2, u1} n R₃ _inst_16 (fun (a : n) (b : n) => _inst_17 a b) _inst_10) P))))
+Case conversion may be inaccurate. Consider using '#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'ₓ'. -/
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
(Pᵀ ⬝ J ⬝ P).IsAdjointPair (Pᵀ ⬝ J ⬝ P) A A' ↔ J.IsAdjointPair J (P ⬝ A ⬝ P⁻¹) (P ⬝ A' ⬝ P⁻¹) :=
by
@@ -507,6 +677,7 @@ theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : I
variable [DecidableEq n]
+#print pairSelfAdjointMatricesSubmodule' /-
/-- The submodule of pair-self-adjoint matrices with respect to bilinear forms corresponding to
given matrices `J`, `J₂`. -/
def pairSelfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
@@ -514,33 +685,56 @@ def pairSelfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
((LinearMap.toMatrix' : ((n → R₃) →ₗ[R₃] n → R₃) ≃ₗ[R₃] Matrix n n R₃) :
((n → R₃) →ₗ[R₃] n → R₃) →ₗ[R₃] Matrix n n R₃)
#align pair_self_adjoint_matrices_submodule' pairSelfAdjointMatricesSubmodule'
+-/
-theorem mem_pair_self_adjoint_matrices_submodule' :
+/- warning: mem_pair_self_adjoint_matrices_submodule' -> mem_pairSelfAdjointMatricesSubmodule' is a dubious translation:
+lean 3 declaration is
+ forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (J₃ : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (pairSelfAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J J₃ (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsAdjointPair.{u1, u2, u2} R₃ n n _inst_10 _inst_16 _inst_16 J J₃ A A)
+but is expected to have type
+ forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (J₃ : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (pairSelfAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J J₃ (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsAdjointPair.{u2, u1, u1} R₃ n n _inst_10 _inst_16 _inst_16 J J₃ A A)
+Case conversion may be inaccurate. Consider using '#align mem_pair_self_adjoint_matrices_submodule' mem_pairSelfAdjointMatricesSubmodule'ₓ'. -/
+theorem mem_pairSelfAdjointMatricesSubmodule' :
A ∈ pairSelfAdjointMatricesSubmodule J J₃ ↔ Matrix.IsAdjointPair J J₃ A A := by
simp only [mem_pairSelfAdjointMatricesSubmodule]
-#align mem_pair_self_adjoint_matrices_submodule' mem_pair_self_adjoint_matrices_submodule'
+#align mem_pair_self_adjoint_matrices_submodule' mem_pairSelfAdjointMatricesSubmodule'
+#print selfAdjointMatricesSubmodule' /-
/-- The submodule of self-adjoint matrices with respect to the bilinear form corresponding to
the matrix `J`. -/
def selfAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
pairSelfAdjointMatricesSubmodule J J
#align self_adjoint_matrices_submodule' selfAdjointMatricesSubmodule'
+-/
-theorem mem_self_adjoint_matrices_submodule' :
+/- warning: mem_self_adjoint_matrices_submodule' -> mem_selfAdjointMatricesSubmodule' is a dubious translation:
+lean 3 declaration is
+ forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (selfAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSelfAdjoint.{u1, u2} R₃ n _inst_10 _inst_16 J A)
+but is expected to have type
+ forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (selfAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSelfAdjoint.{u2, u1} R₃ n _inst_10 _inst_16 J A)
+Case conversion may be inaccurate. Consider using '#align mem_self_adjoint_matrices_submodule' mem_selfAdjointMatricesSubmodule'ₓ'. -/
+theorem mem_selfAdjointMatricesSubmodule' :
A ∈ selfAdjointMatricesSubmodule J ↔ J.IsSelfAdjoint A := by
simp only [mem_selfAdjointMatricesSubmodule]
-#align mem_self_adjoint_matrices_submodule' mem_self_adjoint_matrices_submodule'
+#align mem_self_adjoint_matrices_submodule' mem_selfAdjointMatricesSubmodule'
+#print skewAdjointMatricesSubmodule' /-
/-- The submodule of skew-adjoint matrices with respect to the bilinear form corresponding to
the matrix `J`. -/
def skewAdjointMatricesSubmodule' : Submodule R₃ (Matrix n n R₃) :=
pairSelfAdjointMatricesSubmodule (-J) J
#align skew_adjoint_matrices_submodule' skewAdjointMatricesSubmodule'
+-/
-theorem mem_skew_adjoint_matrices_submodule' :
+/- warning: mem_skew_adjoint_matrices_submodule' -> mem_skewAdjointMatricesSubmodule' is a dubious translation:
+lean 3 declaration is
+ forall {R₃ : Type.{u1}} [_inst_10 : CommRing.{u1} R₃] {n : Type.{u2}} [_inst_16 : Fintype.{u2} n] (J : Matrix.{u2, u2, u1} n n R₃) (A : Matrix.{u2, u2, u1} n n R₃) [_inst_17 : DecidableEq.{succ u2} n], Iff (Membership.Mem.{max u2 u1, max u2 u1} (Matrix.{u2, u2, u1} n n R₃) (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (SetLike.hasMem.{max u2 u1, max u2 u1} (Submodule.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Matrix.{u2, u2, u1} n n R₃) (Submodule.setLike.{u1, max u2 u1} R₃ (Matrix.{u2, u2, u1} n n R₃) (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (Matrix.addCommMonoid.{u1, u2, u2} n n R₃ (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) (Matrix.module.{u1, u2, u2, u1} n n R₃ R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)) (AddCommGroup.toAddCommMonoid.{u1} R₃ (NonUnitalNonAssocRing.toAddCommGroup.{u1} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u1} R₃ (Ring.toNonAssocRing.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10))))) (Semiring.toModule.{u1} R₃ (Ring.toSemiring.{u1} R₃ (CommRing.toRing.{u1} R₃ _inst_10)))))) A (skewAdjointMatricesSubmodule.{u1, u2} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSkewAdjoint.{u1, u2} R₃ n _inst_10 _inst_16 J A)
+but is expected to have type
+ forall {R₃ : Type.{u2}} [_inst_10 : CommRing.{u2} R₃] {n : Type.{u1}} [_inst_16 : Fintype.{u1} n] (J : Matrix.{u1, u1, u2} n n R₃) (A : Matrix.{u1, u1, u2} n n R₃) [_inst_17 : DecidableEq.{succ u1} n], Iff (Membership.mem.{max u2 u1, max u1 u2} (Matrix.{u1, u1, u2} n n R₃) (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submodule.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10))))) (Matrix.{u1, u1, u2} n n R₃) (Submodule.setLike.{u2, max u2 u1} R₃ (Matrix.{u1, u1, u2} n n R₃) (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (Matrix.addCommMonoid.{u2, u1, u1} n n R₃ (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10)))))) (Matrix.module.{u2, u1, u1, u2} n n R₃ R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R₃ (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} R₃ (NonAssocRing.toNonUnitalNonAssocRing.{u2} R₃ (Ring.toNonAssocRing.{u2} R₃ (CommRing.toRing.{u2} R₃ _inst_10))))) (Semiring.toModule.{u2} R₃ (CommSemiring.toSemiring.{u2} R₃ (CommRing.toCommSemiring.{u2} R₃ _inst_10)))))) A (skewAdjointMatricesSubmodule.{u2, u1} R₃ n _inst_10 _inst_16 J (fun (a : n) (b : n) => _inst_17 a b))) (Matrix.IsSkewAdjoint.{u2, u1} R₃ n _inst_10 _inst_16 J A)
+Case conversion may be inaccurate. Consider using '#align mem_skew_adjoint_matrices_submodule' mem_skewAdjointMatricesSubmodule'ₓ'. -/
+theorem mem_skewAdjointMatricesSubmodule' :
A ∈ skewAdjointMatricesSubmodule J ↔ J.IsSkewAdjoint A := by
simp only [mem_skewAdjointMatricesSubmodule]
-#align mem_skew_adjoint_matrices_submodule' mem_skew_adjoint_matrices_submodule'
+#align mem_skew_adjoint_matrices_submodule' mem_skewAdjointMatricesSubmodule'
end MatrixAdjoints
@@ -554,34 +748,52 @@ variable {A : Type _} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinFor
variable {ι : Type _} [DecidableEq ι] [Fintype ι]
+/- warning: matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin -> Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilinₓ'. -/
theorem Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
(b : Basis ι R₂ M₂) : M.toBilin'.Nondegenerate ↔ (Matrix.toBilin b M).Nondegenerate :=
(nondegenerate_congr_iff b.equivFun.symm).symm
#align matrix.nondegenerate_to_bilin'_iff_nondegenerate_to_bilin Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin
+/- warning: matrix.nondegenerate.to_bilin' -> Matrix.Nondegenerate.toBilin' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate.to_bilin' Matrix.Nondegenerate.toBilin'ₓ'. -/
-- Lemmas transferring nondegeneracy between a matrix and its associated bilinear form
theorem Matrix.Nondegenerate.toBilin' {M : Matrix ι ι R₃} (h : M.Nondegenerate) :
M.toBilin'.Nondegenerate := fun x hx =>
h.eq_zero_of_ortho fun y => by simpa only [to_bilin'_apply'] using hx y
#align matrix.nondegenerate.to_bilin' Matrix.Nondegenerate.toBilin'
+/- warning: matrix.nondegenerate_to_bilin'_iff -> Matrix.nondegenerate_toBilin'_iff is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iffₓ'. -/
@[simp]
theorem Matrix.nondegenerate_toBilin'_iff {M : Matrix ι ι R₃} :
M.toBilin'.Nondegenerate ↔ M.Nondegenerate :=
⟨fun h v hv => h v fun w => (M.toBilin'_apply' _ _).trans <| hv w, Matrix.Nondegenerate.toBilin'⟩
#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iff
+/- warning: matrix.nondegenerate.to_bilin -> Matrix.Nondegenerate.toBilin is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilinₓ'. -/
theorem Matrix.Nondegenerate.toBilin {M : Matrix ι ι R₃} (h : M.Nondegenerate) (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate :=
(Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin b).mp h.toBilin'
#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilin
+/- warning: matrix.nondegenerate_to_bilin_iff -> Matrix.nondegenerate_toBilin_iff is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iffₓ'. -/
@[simp]
theorem Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Basis ι R₃ M₃) :
(toBilin b M).Nondegenerate ↔ M.Nondegenerate := by
rw [← Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin, Matrix.nondegenerate_toBilin'_iff]
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
+/- warning: bilin_form.nondegenerate_to_matrix'_iff -> BilinForm.nondegenerate_toMatrix'_iff is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iffₓ'. -/
-- Lemmas transferring nondegeneracy between a bilinear form and its associated matrix
@[simp]
theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
@@ -589,38 +801,59 @@ theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
Matrix.nondegenerate_toBilin'_iff.symm.trans <| (Matrix.toBilin'_toMatrix' B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iff
+/- warning: bilin_form.nondegenerate.to_matrix' -> BilinForm.Nondegenerate.toMatrix' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'ₓ'. -/
theorem Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)} (h : B.Nondegenerate) :
B.toMatrix'.Nondegenerate :=
nondegenerate_toMatrix'_iff.mpr h
#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'
+/- warning: bilin_form.nondegenerate_to_matrix_iff -> BilinForm.nondegenerate_toMatrix_iff is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iffₓ'. -/
@[simp]
theorem nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
(Matrix.nondegenerate_toBilin_iff b).symm.trans <| (Matrix.toBilin_toMatrix b B).symm ▸ Iff.rfl
#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iff
+/- warning: bilin_form.nondegenerate.to_matrix -> BilinForm.Nondegenerate.toMatrix is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrixₓ'. -/
theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (b : Basis ι R₃ M₃) :
(toMatrix b B).Nondegenerate :=
(nondegenerate_toMatrix_iff b).mpr h
#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
+/- warning: bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero -> BilinForm.nondegenerate_toBilin'_iff_det_ne_zero is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zeroₓ'. -/
-- Some shorthands for combining the above with `matrix.nondegenerate_of_det_ne_zero`
theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
+/- warning: bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' -> BilinForm.nondegenerate_toBilin'_of_det_ne_zero' is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'ₓ'. -/
theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
M.toBilin'.Nondegenerate :=
nondegenerate_toBilin'_iff_det_ne_zero.mpr h
#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
+/- warning: bilin_form.nondegenerate_iff_det_ne_zero -> BilinForm.nondegenerate_iff_det_ne_zero is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zeroₓ'. -/
theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_to_matrix_iff]
#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
+/- warning: bilin_form.nondegenerate_of_det_ne_zero -> BilinForm.nondegenerate_of_det_ne_zero is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zeroₓ'. -/
theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
B₃.Nondegenerate :=
(nondegenerate_iff_det_ne_zero b).mpr h
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -611,20 +611,20 @@ theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
-theorem nondegenerateToBilin'OfDetNeZero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
+theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
M.toBilin'.Nondegenerate :=
nondegenerate_toBilin'_iff_det_ne_zero.mpr h
-#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerateToBilin'OfDetNeZero'
+#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_to_matrix_iff]
#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
-theorem nondegenerateOfDetNeZero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
+theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
B₃.Nondegenerate :=
(nondegenerate_iff_det_ne_zero b).mpr h
-#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerateOfDetNeZero
+#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zero
end Det
mathlib commit https://github.com/leanprover-community/mathlib/commit/730c6d4cab72b9d84fcfb9e95e8796e9cd8f40ba
@@ -82,7 +82,7 @@ def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n →
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
M.toBilin'Aux (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
by
- rw [Matrix.toBilin'Aux, [anonymous], sum_eq_single i, sum_eq_single j]
+ rw [Matrix.toBilin'Aux, coe_fn_mk, sum_eq_single i, sum_eq_single j]
· simp only [std_basis_same, std_basis_same, one_mul, mul_one]
· rintro j' - hj'
apply mul_eq_zero_of_right
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Following the removal of structure BilinForm
from Mathlib (#11278) a number of definitions and results in LinearAlgebra/BilinearForm/Hom
are essentially just the identity. This PR deprecates these results.
Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com>
@@ -62,7 +62,7 @@ open Matrix
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n → R₂) :=
- LinearMap.toBilin (Matrix.toLinearMap₂'Aux _ _ M)
+ Matrix.toLinearMap₂'Aux _ _ M
#align matrix.to_bilin'_aux Matrix.toBilin'Aux
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
@@ -75,7 +75,7 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Matrix n n R₂ :=
- (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom
+ LinearMap.toMatrix₂Aux b b
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
@[simp]
@@ -91,11 +91,8 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
-- Porting note: had to hint the base ring even though it should be clear from context...
Matrix.toBilin'Aux (BilinForm.toMatrixAux (R₂ := R₂)
(fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ := by
- rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux, coe_comp, Function.comp_apply,
+ rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux,
toLinearMap₂'Aux_toMatrix₂Aux]
- ext x y
- simp only [coe_comp, coe_single, Function.comp_apply, toBilin_apply]
- rfl
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
section ToMatrix'
@@ -236,7 +233,7 @@ variable [DecidableEq n] (b : Basis n R₂ M₂)
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
- BilinForm.toLin ≪≫ₗ (LinearMap.toMatrix₂ b b)
+ LinearMap.toMatrix₂ b b
#align bilin_form.to_matrix BilinForm.toMatrix
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
@@ -282,7 +279,6 @@ theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.t
theorem BilinForm.toMatrix_basisFun :
BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' := by
rw [BilinForm.toMatrix, BilinForm.toMatrix', LinearMap.toMatrix₂_basisFun]
- rfl
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
@[simp]
@@ -343,11 +339,8 @@ theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
(Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ * M * Q) := by
ext x y
- rw [Matrix.toBilin,
- BilinForm.toMatrix, Matrix.toBilin, BilinForm.toMatrix, LinearEquiv.trans_symm,
- LinearEquiv.trans_symm, toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
- toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
- ← Matrix.toLinearMap₂_compl₁₂ b b c c]
+ rw [Matrix.toBilin, BilinForm.toMatrix, Matrix.toBilin, BilinForm.toMatrix, toMatrix₂_symm,
+ toMatrix₂_symm, ← Matrix.toLinearMap₂_compl₁₂ b b c c]
simp
#align matrix.to_bilin_comp Matrix.toBilin_comp
structure BilinForm
from Mathlib, migrate all of _root_.BilinForm
to LinearMap.BilinForm
(#11278)
Remove structure BilinForm
from LinearAlgebra/BilinearForm/Basic
and migrate all of _root_.BilinForm
to LinearMap.BilinForm
Closes: #10553
This isn't the end of the story, as there's still a lot of overlap between LinearAlgebra/BilinearForm
and LinearAlgebra/SesquilinearForm
but that can be sorted out in subsequent PRs.
Supersedes:
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com> Co-authored-by: Christopher Hoskin <mans0954@users.noreply.github.com> Co-authored-by: Vierkantor <vierkantor@vierkantor.com>
@@ -39,6 +39,7 @@ bilinear form, bilin form, BilinearForm, matrix, basis
-/
+open LinearMap (BilinForm)
variable {R : Type*} {M : Type*} [CommSemiring R] [AddCommMonoid M] [Module R M]
variable {R₁ : Type*} {M₁ : Type*} [CommRing R₁] [AddCommGroup M₁] [Module R₁ M₁]
@@ -53,7 +54,7 @@ variable {n o : Type*}
open BigOperators
-open BilinForm Finset LinearMap Matrix
+open Finset LinearMap Matrix
open Matrix
@@ -78,11 +79,11 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
@[simp]
-theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
+theorem LinearMap.BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
-- Porting note: had to hint the base ring even though it should be clear from context...
BilinForm.toMatrixAux (R₂ := R₂) b B i j = B (b i) (b j) :=
- LinearMap.toMatrix₂Aux_apply (toLin B) _ _ _ _
-#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_apply
+ LinearMap.toMatrix₂Aux_apply B _ _ _ _
+#align bilin_form.to_matrix_aux_apply LinearMap.BilinForm.toMatrixAux_apply
variable [Fintype n] [Fintype o]
@@ -93,7 +94,8 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux, coe_comp, Function.comp_apply,
toLinearMap₂'Aux_toMatrix₂Aux]
ext x y
- simp only [toBilin_apply, BilinForm.toLin'_apply]
+ simp only [coe_comp, coe_single, Function.comp_apply, toBilin_apply]
+ rfl
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
section ToMatrix'
@@ -107,17 +109,17 @@ This section deals with the conversion between matrices and bilinear forms on `n
variable [DecidableEq n] [DecidableEq o]
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
-def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
- BilinForm.toLin ≪≫ₗ LinearMap.toMatrix₂'
-#align bilin_form.to_matrix' BilinForm.toMatrix'
+def LinearMap.BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
+ LinearMap.toMatrix₂'
+#align bilin_form.to_matrix' LinearMap.BilinForm.toMatrix'
@[simp]
-theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
+theorem LinearMap.BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
-- Porting note: had to hint the base ring even though it should be clear from context...
BilinForm.toMatrixAux (R₂ := R₂) (fun j => stdBasis R₂ (fun _ => R₂) j 1) B =
BilinForm.toMatrix' B :=
rfl
-#align bilin_form.to_matrix_aux_std_basis BilinForm.toMatrixAux_stdBasis
+#align bilin_form.to_matrix_aux_std_basis LinearMap.BilinForm.toMatrixAux_stdBasis
/-- The linear equivalence between `n × n` matrices and bilinear forms on `n → R` -/
def Matrix.toBilin' : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ (n → R₂) :=
@@ -145,10 +147,10 @@ theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
@[simp]
-theorem BilinForm.toMatrix'_symm :
+theorem LinearMap.BilinForm.toMatrix'_symm :
(BilinForm.toMatrix'.symm : Matrix n n R₂ ≃ₗ[R₂] _) = Matrix.toBilin' :=
rfl
-#align bilin_form.to_matrix'_symm BilinForm.toMatrix'_symm
+#align bilin_form.to_matrix'_symm LinearMap.BilinForm.toMatrix'_symm
@[simp]
theorem Matrix.toBilin'_symm :
@@ -162,51 +164,55 @@ theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
Matrix.toBilin'.apply_symm_apply B
#align matrix.to_bilin'_to_matrix' Matrix.toBilin'_toMatrix'
+namespace LinearMap
+
@[simp]
theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
LinearMap.toMatrix₂'.apply_symm_apply M
-#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
+#align bilin_form.to_matrix'_to_bilin' LinearMap.BilinForm.toMatrix'_toBilin'
@[simp]
theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
LinearMap.toMatrix₂'_apply _ _ _
-#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
+#align bilin_form.to_matrix'_apply LinearMap.BilinForm.toMatrix'_apply
-- Porting note: dot notation for bundled maps doesn't work in the rest of this section
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.comp l r) =
(LinearMap.toMatrix' l)ᵀ * BilinForm.toMatrix' B * LinearMap.toMatrix' r :=
- LinearMap.toMatrix₂'_compl₁₂ (toLin B) _ _
-#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
+ LinearMap.toMatrix₂'_compl₁₂ B _ _
+#align bilin_form.to_matrix'_comp LinearMap.BilinForm.toMatrix'_comp
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ * BilinForm.toMatrix' B :=
- LinearMap.toMatrix₂'_comp (toLin B) _
-#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
+ LinearMap.toMatrix₂'_comp B _
+#align bilin_form.to_matrix'_comp_left LinearMap.BilinForm.toMatrix'_compLeft
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.compRight f) = BilinForm.toMatrix' B * LinearMap.toMatrix' f :=
- LinearMap.toMatrix₂'_compl₂ (toLin B) _
-#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
+ LinearMap.toMatrix₂'_compl₂ B _
+#align bilin_form.to_matrix'_comp_right LinearMap.BilinForm.toMatrix'_compRight
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M * BilinForm.toMatrix' B * N =
BilinForm.toMatrix' (B.comp (Matrix.toLin' Mᵀ) (Matrix.toLin' N)) :=
- LinearMap.mul_toMatrix₂'_mul (toLin B) _ _
-#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
+ LinearMap.mul_toMatrix₂'_mul B _ _
+#align bilin_form.mul_to_matrix'_mul LinearMap.BilinForm.mul_toMatrix'_mul
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
M * BilinForm.toMatrix' B = BilinForm.toMatrix' (B.compLeft (Matrix.toLin' Mᵀ)) :=
- LinearMap.mul_toMatrix' (toLin B) _
-#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
+ LinearMap.mul_toMatrix' B _
+#align bilin_form.mul_to_matrix' LinearMap.BilinForm.mul_toMatrix'
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
BilinForm.toMatrix' B * M = BilinForm.toMatrix' (B.compRight (Matrix.toLin' M)) :=
- LinearMap.toMatrix₂'_mul (toLin B) _
-#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
+ LinearMap.toMatrix₂'_mul B _
+#align bilin_form.to_matrix'_mul LinearMap.BilinForm.toMatrix'_mul
+
+end LinearMap
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
M.toBilin'.comp (Matrix.toLin' P) (Matrix.toLin' Q) = Matrix.toBilin' (Pᵀ * M * Q) :=
@@ -242,7 +248,7 @@ noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
BilinForm.toMatrix b B i j = B (b i) (b j) :=
- LinearMap.toMatrix₂_apply _ _ (toLin B) _ _
+ LinearMap.toMatrix₂_apply _ _ B _ _
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
@[simp]
@@ -254,7 +260,7 @@ theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
-- Not a `simp` lemma since `BilinForm.toMatrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux (R₂ := R₂) b B = BilinForm.toMatrix b B :=
- LinearMap.toMatrix₂Aux_eq _ _ (toLin B)
+ LinearMap.toMatrix₂Aux_eq _ _ B
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
@[simp]
@@ -269,12 +275,14 @@ theorem Matrix.toBilin_symm : (Matrix.toBilin b).symm = BilinForm.toMatrix b :=
theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.toBilin' := by
ext M
- simp only [Matrix.toBilin_apply, Matrix.toBilin'_apply, Pi.basisFun_repr]
+ simp only [coe_comp, coe_single, Function.comp_apply, toBilin_apply, Pi.basisFun_repr,
+ toBilin'_apply]
#align matrix.to_bilin_basis_fun Matrix.toBilin_basisFun
theorem BilinForm.toMatrix_basisFun :
BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' := by
rw [BilinForm.toMatrix, BilinForm.toMatrix', LinearMap.toMatrix₂_basisFun]
+ rfl
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
@[simp]
@@ -297,39 +305,39 @@ variable [DecidableEq o]
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
(LinearMap.toMatrix c b l)ᵀ * BilinForm.toMatrix b B * LinearMap.toMatrix c b r :=
- LinearMap.toMatrix₂_compl₁₂ _ _ _ _ (toLin B) _ _
+ LinearMap.toMatrix₂_compl₁₂ _ _ _ _ B _ _
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compLeft f) = (LinearMap.toMatrix b b f)ᵀ * BilinForm.toMatrix b B :=
- LinearMap.toMatrix₂_comp _ _ _ (toLin B) _
+ LinearMap.toMatrix₂_comp _ _ _ B _
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B * LinearMap.toMatrix b b f :=
- LinearMap.toMatrix₂_compl₂ _ _ _ (toLin B) _
+ LinearMap.toMatrix₂_compl₂ _ _ _ B _
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
(b.toMatrix c)ᵀ * BilinForm.toMatrix b B * b.toMatrix c = BilinForm.toMatrix c B :=
- LinearMap.toMatrix₂_mul_basis_toMatrix _ _ _ _ (toLin B)
+ LinearMap.toMatrix₂_mul_basis_toMatrix _ _ _ _ B
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
M * BilinForm.toMatrix b B * N =
BilinForm.toMatrix c (B.comp (Matrix.toLin c b Mᵀ) (Matrix.toLin c b N)) :=
- LinearMap.mul_toMatrix₂_mul _ _ _ _ (toLin B) _ _
+ LinearMap.mul_toMatrix₂_mul _ _ _ _ B _ _
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
M * BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (Matrix.toLin b b Mᵀ)) :=
- LinearMap.mul_toMatrix₂ _ _ _ (toLin B) _
+ LinearMap.mul_toMatrix₂ _ _ _ B _
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
BilinForm.toMatrix b B * M = BilinForm.toMatrix b (B.compRight (Matrix.toLin b b M)) :=
- LinearMap.toMatrix₂_mul _ _ _ (toLin B) _
+ LinearMap.toMatrix₂_mul _ _ _ B _
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
@@ -416,6 +424,8 @@ theorem mem_skewAdjointMatricesSubmodule' :
end MatrixAdjoints
+namespace LinearMap
+
namespace BilinForm
section Det
@@ -443,13 +453,13 @@ theorem _root_.Matrix.nondegenerate_toBilin'_iff {M : Matrix ι ι R₃} :
#align matrix.nondegenerate_to_bilin'_iff Matrix.nondegenerate_toBilin'_iff
theorem _root_.Matrix.Nondegenerate.toBilin {M : Matrix ι ι R₃} (h : M.Nondegenerate)
- (b : Basis ι R₃ M₃) : (toBilin b M).Nondegenerate :=
+ (b : Basis ι R₃ M₃) : (Matrix.toBilin b M).Nondegenerate :=
(Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin b).mp h.toBilin'
#align matrix.nondegenerate.to_bilin Matrix.Nondegenerate.toBilin
@[simp]
theorem _root_.Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Basis ι R₃ M₃) :
- (toBilin b M).Nondegenerate ↔ M.Nondegenerate := by
+ (Matrix.toBilin b M).Nondegenerate ↔ M.Nondegenerate := by
rw [← Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin, Matrix.nondegenerate_toBilin'_iff]
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
@@ -457,47 +467,47 @@ theorem _root_.Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Bas
@[simp]
theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
- B.toMatrix'.Nondegenerate ↔ B.Nondegenerate :=
+ B.toMatrix'.Nondegenerate (R := R₃) (m := ι) ↔ B.Nondegenerate :=
Matrix.nondegenerate_toBilin'_iff.symm.trans <| (Matrix.toBilin'_toMatrix' B).symm ▸ Iff.rfl
-#align bilin_form.nondegenerate_to_matrix'_iff BilinForm.nondegenerate_toMatrix'_iff
+#align bilin_form.nondegenerate_to_matrix'_iff LinearMap.BilinForm.nondegenerate_toMatrix'_iff
theorem Nondegenerate.toMatrix' {B : BilinForm R₃ (ι → R₃)} (h : B.Nondegenerate) :
B.toMatrix'.Nondegenerate :=
nondegenerate_toMatrix'_iff.mpr h
-#align bilin_form.nondegenerate.to_matrix' BilinForm.Nondegenerate.toMatrix'
+#align bilin_form.nondegenerate.to_matrix' LinearMap.BilinForm.Nondegenerate.toMatrix'
@[simp]
theorem nondegenerate_toMatrix_iff {B : BilinForm R₃ M₃} (b : Basis ι R₃ M₃) :
- (toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
+ (BilinForm.toMatrix b B).Nondegenerate ↔ B.Nondegenerate :=
(Matrix.nondegenerate_toBilin_iff b).symm.trans <| (Matrix.toBilin_toMatrix b B).symm ▸ Iff.rfl
-#align bilin_form.nondegenerate_to_matrix_iff BilinForm.nondegenerate_toMatrix_iff
+#align bilin_form.nondegenerate_to_matrix_iff LinearMap.BilinForm.nondegenerate_toMatrix_iff
theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (b : Basis ι R₃ M₃) :
- (toMatrix b B).Nondegenerate :=
+ (BilinForm.toMatrix b B).Nondegenerate :=
(nondegenerate_toMatrix_iff b).mpr h
-#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
+#align bilin_form.nondegenerate.to_matrix LinearMap.BilinForm.Nondegenerate.toMatrix
/-! Some shorthands for combining the above with `Matrix.nondegenerate_of_det_ne_zero` -/
theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
-#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
+#align bilin_form.nondegenerate_to_bilin'_iff_det_ne_zero LinearMap.BilinForm.nondegenerate_toBilin'_iff_det_ne_zero
theorem nondegenerate_toBilin'_of_det_ne_zero' (M : Matrix ι ι A) (h : M.det ≠ 0) :
M.toBilin'.Nondegenerate :=
nondegenerate_toBilin'_iff_det_ne_zero.mpr h
-#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
+#align bilin_form.nondegenerate_to_bilin'_of_det_ne_zero' LinearMap.BilinForm.nondegenerate_toBilin'_of_det_ne_zero'
theorem nondegenerate_iff_det_ne_zero {B : BilinForm A M₃} (b : Basis ι A M₃) :
- B.Nondegenerate ↔ (toMatrix b B).det ≠ 0 := by
+ B.Nondegenerate ↔ (BilinForm.toMatrix b B).det ≠ 0 := by
rw [← Matrix.nondegenerate_iff_det_ne_zero, nondegenerate_toMatrix_iff]
-#align bilin_form.nondegenerate_iff_det_ne_zero BilinForm.nondegenerate_iff_det_ne_zero
+#align bilin_form.nondegenerate_iff_det_ne_zero LinearMap.BilinForm.nondegenerate_iff_det_ne_zero
-theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (toMatrix b B₃).det ≠ 0) :
+theorem nondegenerate_of_det_ne_zero (b : Basis ι A M₃) (h : (BilinForm.toMatrix b B₃).det ≠ 0) :
B₃.Nondegenerate :=
(nondegenerate_iff_det_ne_zero b).mpr h
-#align bilin_form.nondegenerate_of_det_ne_zero BilinForm.nondegenerate_of_det_ne_zero
+#align bilin_form.nondegenerate_of_det_ne_zero LinearMap.BilinForm.nondegenerate_of_det_ne_zero
end Det
BilinForm
to modules over commutative semirings (#11280)
Require the module in the definition of the BilinForm
structure to be over a commutative semiring.
This PR is a per-requisite for #11278. It supersedes #10422.
It's been pointed out elsewhere that the current definition over a non-commutative semiring doesn't make mathematical sense: https://github.com/leanprover-community/mathlib4/issues/10553#issuecomment-1944434170
Eventually the non-commutative situation may be considered in a mathematically meaningful way in the context of sesquilinear maps (e.g. something like https://github.com/leanprover-community/mathlib4/pull/9334#pullrequestreview-1880856848).
Co-authored-by: @Vierkantor
Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -27,8 +27,8 @@ This file defines the conversion between bilinear forms and matrices.
## Notations
In this file we use the following type variables:
- - `M`, `M'`, ... are modules over the semiring `R`,
- - `M₁`, `M₁'`, ... are modules over the ring `R₁`,
+ - `M`, `M'`, ... are modules over the commutative semiring `R`,
+ - `M₁`, `M₁'`, ... are modules over the commutative ring `R₁`,
- `M₂`, `M₂'`, ... are modules over the commutative semiring `R₂`,
- `M₃`, `M₃'`, ... are modules over the commutative ring `R₃`,
- `V`, ... is a vector space over the field `K`.
@@ -40,8 +40,8 @@ bilinear form, bilin form, BilinearForm, matrix, basis
-/
-variable {R : Type*} {M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
-variable {R₁ : Type*} {M₁ : Type*} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁]
+variable {R : Type*} {M : Type*} [CommSemiring R] [AddCommMonoid M] [Module R M]
+variable {R₁ : Type*} {M₁ : Type*} [CommRing R₁] [AddCommGroup M₁] [Module R₁ M₁]
variable {R₂ : Type*} {M₂ : Type*} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂]
variable {R₃ : Type*} {M₃ : Type*} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃]
variable {V : Type*} {K : Type*} [Field K] [AddCommGroup V] [Module K V]
@@ -74,7 +74,7 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Matrix n n R₂ :=
- (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom (R₂ := R₂)
+ (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
@[simp]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -41,15 +41,10 @@ bilinear form, bilin form, BilinearForm, matrix, basis
variable {R : Type*} {M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
-
variable {R₁ : Type*} {M₁ : Type*} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁]
-
variable {R₂ : Type*} {M₂ : Type*} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂]
-
variable {R₃ : Type*} {M₃ : Type*} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃]
-
variable {V : Type*} {K : Type*} [Field K] [AddCommGroup V] [Module K V]
-
variable {B : BilinForm R M} {B₁ : BilinForm R₁ M₁} {B₂ : BilinForm R₂ M₂}
section Matrix
@@ -295,9 +290,7 @@ theorem BilinForm.toMatrix_toBilin (M : Matrix n n R₂) :
#align bilin_form.to_matrix_to_bilin BilinForm.toMatrix_toBilin
variable {M₂' : Type*} [AddCommMonoid M₂'] [Module R₂ M₂']
-
variable (c : Basis o R₂ M₂')
-
variable [DecidableEq o]
-- Cannot be a `simp` lemma because `b` must be inferred.
@@ -359,9 +352,7 @@ section MatrixAdjoints
open Matrix
variable {n : Type*} [Fintype n]
-
variable (b : Basis n R₃ M₃)
-
variable (J J₃ A A' : Matrix n n R₃)
@[simp]
@@ -432,7 +423,6 @@ section Det
open Matrix
variable {A : Type*} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinForm A M₃)
-
variable {ι : Type*} [DecidableEq ι] [Fintype ι]
theorem _root_.Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -84,7 +84,7 @@ def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Ma
@[simp]
theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
- -- porting note: had to hint the base ring even though it should be clear from context...
+ -- Porting note: had to hint the base ring even though it should be clear from context...
BilinForm.toMatrixAux (R₂ := R₂) b B i j = B (b i) (b j) :=
LinearMap.toMatrix₂Aux_apply (toLin B) _ _ _ _
#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_apply
@@ -92,7 +92,7 @@ theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (
variable [Fintype n] [Fintype o]
theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R₂)) :
- -- porting note: had to hint the base ring even though it should be clear from context...
+ -- Porting note: had to hint the base ring even though it should be clear from context...
Matrix.toBilin'Aux (BilinForm.toMatrixAux (R₂ := R₂)
(fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ := by
rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux, coe_comp, Function.comp_apply,
@@ -118,7 +118,7 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
@[simp]
theorem BilinForm.toMatrixAux_stdBasis (B : BilinForm R₂ (n → R₂)) :
- -- porting note: had to hint the base ring even though it should be clear from context...
+ -- Porting note: had to hint the base ring even though it should be clear from context...
BilinForm.toMatrixAux (R₂ := R₂) (fun j => stdBasis R₂ (fun _ => R₂) j 1) B =
BilinForm.toMatrix' B :=
rfl
Matrix.mulVec
and Matrix.vecMul
get infix notation (#10297)
Zulip discussion: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Notation.20for.20mul_vec.20and.20vec_mul
Co-authored-by: Martin Dvorak <mdvorak@ista.ac.at>
@@ -139,7 +139,7 @@ theorem Matrix.toBilin'_apply (M : Matrix n n R₂) (x y : n → R₂) :
#align matrix.to_bilin'_apply Matrix.toBilin'_apply
theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
- Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) := Matrix.toLinearMap₂'_apply' _ _ _
+ Matrix.toBilin' M v w = Matrix.dotProduct v (M *ᵥ w) := Matrix.toLinearMap₂'_apply' _ _ _
#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'
@[simp]
@@ -79,7 +79,7 @@ theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Matrix n n R₂ :=
- (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom (R₂ := R₂)
+ (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom (R₂ := R₂)
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
@[simp]
@@ -97,7 +97,8 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
(fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ := by
rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux, coe_comp, Function.comp_apply,
toLinearMap₂'Aux_toMatrix₂Aux]
- exact rfl
+ ext x y
+ simp only [toBilin_apply, BilinForm.toLin'_apply]
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
section ToMatrix'
@@ -188,7 +189,7 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ * BilinForm.toMatrix' B :=
- LinearMap.toMatrix₂'_comp (toLin B) _
+ LinearMap.toMatrix₂'_comp (toLin B) _
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
@@ -234,7 +235,7 @@ variable [DecidableEq n] (b : Basis n R₂ M₂)
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
- BilinForm.toLin ≪≫ₗ (LinearMap.toMatrix₂ b b)
+ BilinForm.toLin ≪≫ₗ (LinearMap.toMatrix₂ b b)
#align bilin_form.to_matrix BilinForm.toMatrix
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
@@ -278,7 +279,7 @@ theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.t
theorem BilinForm.toMatrix_basisFun :
BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' := by
- rw [BilinForm.toMatrix, BilinForm.toMatrix', LinearMap.toMatrix₂_basisFun]
+ rw [BilinForm.toMatrix, BilinForm.toMatrix', LinearMap.toMatrix₂_basisFun]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
@[simp]
@@ -340,12 +341,13 @@ theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
(Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ * M * Q) := by
+ ext x y
rw [Matrix.toBilin,
BilinForm.toMatrix, Matrix.toBilin, BilinForm.toMatrix, LinearEquiv.trans_symm,
LinearEquiv.trans_symm, toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
← Matrix.toLinearMap₂_compl₁₂ b b c c]
- rfl
+ simp
#align matrix.to_bilin_comp Matrix.toBilin_comp
end ToMatrix
Give definitions in LinearAlgebra/Matrix/BilinearForm
in terms of the equivalent definitions in LinearAlgebra/Matrix/SesquilinearForm
and derive the BilinearForm
results as effectively special cases of the equivalent results in SesquilinearForm
. This reduces the length of LinearAlgebra/Matrix/BilinearForm
by over 100 lines.
The aim is to:
BilinearForm
relate to results in SesquilinearForm
SesquilinearForm
are sufficiently general to provide the results in BilinearForm
in their existing form - in fact, some loosening of the hypothesis in SesquilinearForm
is required. Further loosening was already applied in #9475Co-authored-by: Christopher Hoskin <mans0954@users.noreply.github.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@overleaf.com>
@@ -65,52 +65,28 @@ open Matrix
/-- The map from `Matrix n n R` to bilinear forms on `n → R`.
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
-def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n → R₂) where
- bilin v w := ∑ i, ∑ j, v i * M i j * w j
- bilin_add_left x y z := by simp only [Pi.add_apply, add_mul, sum_add_distrib]
- bilin_smul_left a x y := by simp only [Pi.smul_apply, smul_eq_mul, mul_assoc, mul_sum]
- bilin_add_right x y z := by simp only [Pi.add_apply, mul_add, sum_add_distrib]
- bilin_smul_right a x y := by
- simp only [Pi.smul_apply, smul_eq_mul, mul_assoc, mul_left_comm, mul_sum]
+def Matrix.toBilin'Aux [Fintype n] (M : Matrix n n R₂) : BilinForm R₂ (n → R₂) :=
+ LinearMap.toBilin (Matrix.toLinearMap₂'Aux _ _ M)
#align matrix.to_bilin'_aux Matrix.toBilin'Aux
theorem Matrix.toBilin'Aux_stdBasis [Fintype n] [DecidableEq n] (M : Matrix n n R₂) (i j : n) :
M.toBilin'Aux (LinearMap.stdBasis R₂ (fun _ => R₂) i 1)
- (LinearMap.stdBasis R₂ (fun _ => R₂) j 1) = M i j := by
- rw [Matrix.toBilin'Aux]
- dsimp only -- Porting note: had to add `dsimp only` to get rid of the projections
- rw [sum_eq_single i, sum_eq_single j]
- · simp only [stdBasis_same, stdBasis_same, one_mul, mul_one]
- · rintro j' - hj'
- apply mul_eq_zero_of_right
- exact stdBasis_ne R₂ (fun _ => R₂) _ _ hj' 1
- · intros
- have := Finset.mem_univ j
- contradiction
- · rintro i' - hi'
- refine' Finset.sum_eq_zero fun j _ => _
- apply mul_eq_zero_of_left
- apply mul_eq_zero_of_left
- exact stdBasis_ne R₂ (fun _ => R₂) _ _ hi' 1
- · intros
- have := Finset.mem_univ i
- contradiction
+ (LinearMap.stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
+ Matrix.toLinearMap₂'Aux_stdBasis _ _ _ _ _
#align matrix.to_bilin'_aux_std_basis Matrix.toBilin'Aux_stdBasis
/-- The linear map from bilinear forms to `Matrix n n R` given an `n`-indexed basis.
This is an auxiliary definition for the equivalence `Matrix.toBilin'`. -/
-def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Matrix n n R₂ where
- toFun B := of fun i j => B (b i) (b j)
- map_add' _ _ := rfl
- map_smul' _ _ := rfl
+def BilinForm.toMatrixAux (b : n → M₂) : BilinForm R₂ M₂ →ₗ[R₂] Matrix n n R₂ :=
+ (LinearMap.toMatrix₂Aux b b) ∘ₗ BilinForm.toLinHom (R₂ := R₂)
#align bilin_form.to_matrix_aux BilinForm.toMatrixAux
@[simp]
theorem BilinForm.toMatrixAux_apply (B : BilinForm R₂ M₂) (b : n → M₂) (i j : n) :
-- porting note: had to hint the base ring even though it should be clear from context...
BilinForm.toMatrixAux (R₂ := R₂) b B i j = B (b i) (b j) :=
- rfl
+ LinearMap.toMatrix₂Aux_apply (toLin B) _ _ _ _
#align bilin_form.to_matrix_aux_apply BilinForm.toMatrixAux_apply
variable [Fintype n] [Fintype o]
@@ -119,9 +95,9 @@ theorem toBilin'Aux_toMatrixAux [DecidableEq n] (B₂ : BilinForm R₂ (n → R
-- porting note: had to hint the base ring even though it should be clear from context...
Matrix.toBilin'Aux (BilinForm.toMatrixAux (R₂ := R₂)
(fun j => stdBasis R₂ (fun _ => R₂) j 1) B₂) = B₂ := by
- refine' ext_basis (Pi.basisFun R₂ n) fun i j => _
- rw [Pi.basisFun_apply, Pi.basisFun_apply, Matrix.toBilin'Aux_stdBasis,
- BilinForm.toMatrixAux_apply]
+ rw [BilinForm.toMatrixAux, Matrix.toBilin'Aux, coe_comp, Function.comp_apply,
+ toLinearMap₂'Aux_toMatrix₂Aux]
+ exact rfl
#align to_bilin'_aux_to_matrix_aux toBilin'Aux_toMatrixAux
section ToMatrix'
@@ -136,14 +112,7 @@ variable [DecidableEq n] [DecidableEq o]
/-- The linear equivalence between bilinear forms on `n → R` and `n × n` matrices -/
def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R₂ :=
- { BilinForm.toMatrixAux fun j =>
- stdBasis R₂ (fun _ => R₂) j
- 1 with
- invFun := Matrix.toBilin'Aux
- left_inv := fun B ↦ by convert toBilin'Aux_toMatrixAux B
- right_inv := fun M => by
- ext i j
- simp only [toFun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
+ BilinForm.toLin ≪≫ₗ LinearMap.toMatrix₂'
#align bilin_form.to_matrix' BilinForm.toMatrix'
@[simp]
@@ -165,25 +134,18 @@ theorem Matrix.toBilin'Aux_eq (M : Matrix n n R₂) : Matrix.toBilin'Aux M = Mat
#align matrix.to_bilin'_aux_eq Matrix.toBilin'Aux_eq
theorem Matrix.toBilin'_apply (M : Matrix n n R₂) (x y : n → R₂) :
- Matrix.toBilin' M x y = ∑ i, ∑ j, x i * M i j * y j :=
- rfl
+ Matrix.toBilin' M x y = ∑ i, ∑ j, x i * M i j * y j := Matrix.toLinearMap₂'_apply _ _ _
#align matrix.to_bilin'_apply Matrix.toBilin'_apply
theorem Matrix.toBilin'_apply' (M : Matrix n n R₂) (v w : n → R₂) :
- Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) := by
- simp_rw [Matrix.toBilin'_apply, Matrix.dotProduct, Matrix.mulVec, Matrix.dotProduct]
- refine' Finset.sum_congr rfl fun _ _ => _
- rw [Finset.mul_sum]
- refine' Finset.sum_congr rfl fun _ _ => _
- rw [← mul_assoc]
+ Matrix.toBilin' M v w = Matrix.dotProduct v (M.mulVec w) := Matrix.toLinearMap₂'_apply' _ _ _
#align matrix.to_bilin'_apply' Matrix.toBilin'_apply'
@[simp]
theorem Matrix.toBilin'_stdBasis (M : Matrix n n R₂) (i j : n) :
Matrix.toBilin' M
(LinearMap.stdBasis R₂ (fun _ => R₂) i 1)
- (LinearMap.stdBasis R₂ (fun _ => R₂) j 1) = M i j :=
- Matrix.toBilin'Aux_stdBasis M i j
+ (LinearMap.stdBasis R₂ (fun _ => R₂) j 1) = M i j := Matrix.toLinearMap₂'_stdBasis _ _ _
#align matrix.to_bilin'_std_basis Matrix.toBilin'_stdBasis
@[simp]
@@ -207,64 +169,47 @@ theorem Matrix.toBilin'_toMatrix' (B : BilinForm R₂ (n → R₂)) :
@[simp]
theorem BilinForm.toMatrix'_toBilin' (M : Matrix n n R₂) :
BilinForm.toMatrix' (Matrix.toBilin' M) = M :=
- BilinForm.toMatrix'.apply_symm_apply M
+ LinearMap.toMatrix₂'.apply_symm_apply M
#align bilin_form.to_matrix'_to_bilin' BilinForm.toMatrix'_toBilin'
@[simp]
theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
BilinForm.toMatrix' B i j = B (stdBasis R₂ (fun _ => R₂) i 1) (stdBasis R₂ (fun _ => R₂) j 1) :=
- rfl
+ LinearMap.toMatrix₂'_apply _ _ _
#align bilin_form.to_matrix'_apply BilinForm.toMatrix'_apply
-- Porting note: dot notation for bundled maps doesn't work in the rest of this section
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.comp l r) =
- (LinearMap.toMatrix' l)ᵀ * BilinForm.toMatrix' B * LinearMap.toMatrix' r := by
- ext i j
- simp only [BilinForm.toMatrix'_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
- LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
- rw [sum_comm]
- conv_lhs => rw [← BilinForm.sum_repr_mul_repr_mul (Pi.basisFun R₂ n) (l _) (r _)]
- rw [Finsupp.sum_fintype]
- · apply sum_congr rfl
- rintro i' -
- rw [Finsupp.sum_fintype]
- · apply sum_congr rfl
- rintro j' -
- simp only [smul_eq_mul, Pi.basisFun_repr, mul_assoc, mul_comm, mul_left_comm,
- Pi.basisFun_apply, of_apply]
- · intros
- simp only [zero_smul, smul_zero]
- · intros
- simp only [zero_smul, Finsupp.sum_zero]
+ (LinearMap.toMatrix' l)ᵀ * BilinForm.toMatrix' B * LinearMap.toMatrix' r :=
+ LinearMap.toMatrix₂'_compl₁₂ (toLin B) _ _
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ * BilinForm.toMatrix' B := by
- simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, toMatrix'_id, Matrix.mul_one]
+ BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ * BilinForm.toMatrix' B :=
+ LinearMap.toMatrix₂'_comp (toLin B) _
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- BilinForm.toMatrix' (B.compRight f) = BilinForm.toMatrix' B * LinearMap.toMatrix' f := by
- simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, toMatrix'_id, transpose_one,
- Matrix.one_mul]
+ BilinForm.toMatrix' (B.compRight f) = BilinForm.toMatrix' B * LinearMap.toMatrix' f :=
+ LinearMap.toMatrix₂'_compl₂ (toLin B) _
#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
(N : Matrix n o R₂) : M * BilinForm.toMatrix' B * N =
- BilinForm.toMatrix' (B.comp (Matrix.toLin' Mᵀ) (Matrix.toLin' N)) := by
- simp only [B.toMatrix'_comp, transpose_transpose, toMatrix'_toLin']
+ BilinForm.toMatrix' (B.comp (Matrix.toLin' Mᵀ) (Matrix.toLin' N)) :=
+ LinearMap.mul_toMatrix₂'_mul (toLin B) _ _
#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
- M * BilinForm.toMatrix' B = BilinForm.toMatrix' (B.compLeft (Matrix.toLin' Mᵀ)) := by
- simp only [toMatrix'_compLeft, transpose_transpose, toMatrix'_toLin']
+ M * BilinForm.toMatrix' B = BilinForm.toMatrix' (B.compLeft (Matrix.toLin' Mᵀ)) :=
+ LinearMap.mul_toMatrix' (toLin B) _
#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
- BilinForm.toMatrix' B * M = BilinForm.toMatrix' (B.compRight (Matrix.toLin' M)) := by
- simp only [toMatrix'_compRight, toMatrix'_toLin']
+ BilinForm.toMatrix' B * M = BilinForm.toMatrix' (B.compRight (Matrix.toLin' M)) :=
+ LinearMap.toMatrix₂'_mul (toLin B) _
#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
@@ -289,7 +234,7 @@ variable [DecidableEq n] (b : Basis n R₂ M₂)
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
`n`-by-`n` matrices with entries in `R`, if `b` is an `R`-basis for `M`. -/
noncomputable def BilinForm.toMatrix : BilinForm R₂ M₂ ≃ₗ[R₂] Matrix n n R₂ :=
- (BilinForm.congr b.equivFun).trans BilinForm.toMatrix'
+ BilinForm.toLin ≪≫ₗ (LinearMap.toMatrix₂ b b)
#align bilin_form.to_matrix BilinForm.toMatrix
/-- `BilinForm.toMatrix b` is the equivalence between `R`-bilinear forms on `M` and
@@ -300,23 +245,20 @@ noncomputable def Matrix.toBilin : Matrix n n R₂ ≃ₗ[R₂] BilinForm R₂ M
@[simp]
theorem BilinForm.toMatrix_apply (B : BilinForm R₂ M₂) (i j : n) :
- BilinForm.toMatrix b B i j = B (b i) (b j) := by
- rw [BilinForm.toMatrix, LinearEquiv.trans_apply, BilinForm.toMatrix'_apply, congr_apply,
- b.equivFun_symm_stdBasis, b.equivFun_symm_stdBasis]
+ BilinForm.toMatrix b B i j = B (b i) (b j) :=
+ LinearMap.toMatrix₂_apply _ _ (toLin B) _ _
#align bilin_form.to_matrix_apply BilinForm.toMatrix_apply
@[simp]
theorem Matrix.toBilin_apply (M : Matrix n n R₂) (x y : M₂) :
- Matrix.toBilin b M x y = ∑ i, ∑ j, b.repr x i * M i j * b.repr y j := by
- rw [Matrix.toBilin, BilinForm.toMatrix, LinearEquiv.symm_trans_apply, ← Matrix.toBilin']
- simp only [congr_symm, congr_apply, LinearEquiv.symm_symm, Matrix.toBilin'_apply,
- Basis.equivFun_apply]
+ Matrix.toBilin b M x y = ∑ i, ∑ j, b.repr x i * M i j * b.repr y j :=
+ Matrix.toLinearMap₂_apply _ _ _ _ _
#align matrix.to_bilin_apply Matrix.toBilin_apply
-- Not a `simp` lemma since `BilinForm.toMatrix` needs an extra argument
theorem BilinearForm.toMatrixAux_eq (B : BilinForm R₂ M₂) :
BilinForm.toMatrixAux (R₂ := R₂) b B = BilinForm.toMatrix b B :=
- ext fun i j => by rw [BilinForm.toMatrix_apply, BilinForm.toMatrixAux_apply]
+ LinearMap.toMatrix₂Aux_eq _ _ (toLin B)
#align bilinear_form.to_matrix_aux_eq BilinearForm.toMatrixAux_eq
@[simp]
@@ -336,8 +278,7 @@ theorem Matrix.toBilin_basisFun : Matrix.toBilin (Pi.basisFun R₂ n) = Matrix.t
theorem BilinForm.toMatrix_basisFun :
BilinForm.toMatrix (Pi.basisFun R₂ n) = BilinForm.toMatrix' := by
- ext B
- rw [BilinForm.toMatrix_apply, BilinForm.toMatrix'_apply, Pi.basisFun_apply, Pi.basisFun_apply]
+ rw [BilinForm.toMatrix, BilinForm.toMatrix', LinearMap.toMatrix₂_basisFun]
#align bilin_form.to_matrix_basis_fun BilinForm.toMatrix_basisFun
@[simp]
@@ -361,63 +302,50 @@ variable [DecidableEq o]
-- Cannot be a `simp` lemma because `b` must be inferred.
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
- (LinearMap.toMatrix c b l)ᵀ * BilinForm.toMatrix b B * LinearMap.toMatrix c b r := by
- ext i j
- simp only [BilinForm.toMatrix_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
- LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
- rw [sum_comm]
- conv_lhs => rw [← BilinForm.sum_repr_mul_repr_mul b]
- rw [Finsupp.sum_fintype]
- · apply sum_congr rfl
- rintro i' -
- rw [Finsupp.sum_fintype]
- · apply sum_congr rfl
- rintro j' -
- simp only [smul_eq_mul, LinearMap.toMatrix_apply, Basis.equivFun_apply, mul_assoc, mul_comm,
- mul_left_comm]
- · intros
- simp only [zero_smul, smul_zero]
- · intros
- simp only [zero_smul, Finsupp.sum_zero]
+ (LinearMap.toMatrix c b l)ᵀ * BilinForm.toMatrix b B * LinearMap.toMatrix c b r :=
+ LinearMap.toMatrix₂_compl₁₂ _ _ _ _ (toLin B) _ _
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
- BilinForm.toMatrix b (B.compLeft f) = (LinearMap.toMatrix b b f)ᵀ * BilinForm.toMatrix b B := by
- simp only [compLeft, BilinForm.toMatrix_comp b b, toMatrix_id, Matrix.mul_one]
+ BilinForm.toMatrix b (B.compLeft f) = (LinearMap.toMatrix b b f)ᵀ * BilinForm.toMatrix b B :=
+ LinearMap.toMatrix₂_comp _ _ _ (toLin B) _
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
- BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B * LinearMap.toMatrix b b f := by
- simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, toMatrix_id, transpose_one,
- Matrix.one_mul]
+ BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B * LinearMap.toMatrix b b f :=
+ LinearMap.toMatrix₂_compl₂ _ _ _ (toLin B) _
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
- (b.toMatrix c)ᵀ * BilinForm.toMatrix b B * b.toMatrix c = BilinForm.toMatrix c B := by
- rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
+ (b.toMatrix c)ᵀ * BilinForm.toMatrix b B * b.toMatrix c = BilinForm.toMatrix c B :=
+ LinearMap.toMatrix₂_mul_basis_toMatrix _ _ _ _ (toLin B)
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
M * BilinForm.toMatrix b B * N =
BilinForm.toMatrix c (B.comp (Matrix.toLin c b Mᵀ) (Matrix.toLin c b N)) :=
- by simp only [B.toMatrix_comp b c, toMatrix_toLin, transpose_transpose]
+ LinearMap.mul_toMatrix₂_mul _ _ _ _ (toLin B) _ _
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
- M * BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (Matrix.toLin b b Mᵀ)) := by
- rw [B.toMatrix_compLeft b, toMatrix_toLin, transpose_transpose]
+ M * BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (Matrix.toLin b b Mᵀ)) :=
+ LinearMap.mul_toMatrix₂ _ _ _ (toLin B) _
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
- BilinForm.toMatrix b B * M = BilinForm.toMatrix b (B.compRight (Matrix.toLin b b M)) := by
- rw [B.toMatrix_compRight b, toMatrix_toLin]
+ BilinForm.toMatrix b B * M = BilinForm.toMatrix b (B.compRight (Matrix.toLin b b M)) :=
+ LinearMap.toMatrix₂_mul _ _ _ (toLin B) _
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
- (Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ * M * Q) :=
- (BilinForm.toMatrix c).injective
- (by simp only [BilinForm.toMatrix_comp b c, BilinForm.toMatrix_toBilin, toMatrix_toLin])
+ (Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ * M * Q) := by
+ rw [Matrix.toBilin,
+ BilinForm.toMatrix, Matrix.toBilin, BilinForm.toMatrix, LinearEquiv.trans_symm,
+ LinearEquiv.trans_symm, toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
+ toMatrix₂_symm, BilinForm.toLin_symm, LinearEquiv.trans_apply,
+ ← Matrix.toLinearMap₂_compl₁₂ b b c c]
+ rfl
#align matrix.to_bilin_comp Matrix.toBilin_comp
end ToMatrix
@@ -438,57 +366,22 @@ variable (J J₃ A A' : Matrix n n R₃)
theorem isAdjointPair_toBilin' [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin' J) (Matrix.toBilin' J₃) (Matrix.toLin' A)
(Matrix.toLin' A') ↔
- Matrix.IsAdjointPair J J₃ A A' := by
- rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
- have h :
- ∀ B B' : BilinForm R₃ (n → R₃), B = B' ↔ BilinForm.toMatrix' B = BilinForm.toMatrix' B' := by
- intro B B'
- constructor <;> intro h
- · rw [h]
- · exact BilinForm.toMatrix'.injective h
- rw [h, BilinForm.toMatrix'_compLeft, BilinForm.toMatrix'_compRight, LinearMap.toMatrix'_toLin',
- LinearMap.toMatrix'_toLin', BilinForm.toMatrix'_toBilin', BilinForm.toMatrix'_toBilin']
- rfl
+ Matrix.IsAdjointPair J J₃ A A' :=
+ isAdjointPair_toLinearMap₂' _ _ _ _
#align is_adjoint_pair_to_bilin' isAdjointPair_toBilin'
@[simp]
theorem isAdjointPair_toBilin [DecidableEq n] :
BilinForm.IsAdjointPair (Matrix.toBilin b J) (Matrix.toBilin b J₃) (Matrix.toLin b b A)
(Matrix.toLin b b A') ↔
- Matrix.IsAdjointPair J J₃ A A' := by
- rw [BilinForm.isAdjointPair_iff_compLeft_eq_compRight]
- have h : ∀ B B' : BilinForm R₃ M₃, B = B' ↔ BilinForm.toMatrix b B = BilinForm.toMatrix b B' := by
- intro B B'
- constructor <;> intro h
- · rw [h]
- · exact (BilinForm.toMatrix b).injective h
- rw [h, BilinForm.toMatrix_compLeft, BilinForm.toMatrix_compRight, LinearMap.toMatrix_toLin,
- LinearMap.toMatrix_toLin, BilinForm.toMatrix_toBilin, BilinForm.toMatrix_toBilin]
- rfl
+ Matrix.IsAdjointPair J J₃ A A' :=
+ isAdjointPair_toLinearMap₂ _ _ _ _ _ _
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
(Pᵀ * J * P).IsAdjointPair (Pᵀ * J * P) A A' ↔
- J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹) := by
- have h' : IsUnit P.det := P.isUnit_iff_isUnit_det.mp h
- -- Porting note: the original proof used a complicated conv and timed out
- let u := P.nonsingInvUnit h'
- have coe_u : (u : Matrix n n R₃) = P := rfl
- have coe_u_inv : (↑u⁻¹ : Matrix n n R₃) = P⁻¹ := rfl
- let v := Pᵀ.nonsingInvUnit (P.isUnit_det_transpose h')
- have coe_v : (v : Matrix n n R₃) = Pᵀ := rfl
- have coe_v_inv : (↑v⁻¹ : Matrix n n R₃) = P⁻¹ᵀ := P.transpose_nonsing_inv.symm
- set x := Aᵀ * Pᵀ * J with x_def
- set y := J * P * A' with y_def
- simp only [Matrix.IsAdjointPair]
- calc (Aᵀ * (Pᵀ * J * P) = Pᵀ * J * P * A')
- ↔ (x * ↑u = ↑v * y) := ?_
- _ ↔ (↑v⁻¹ * x = y * ↑u⁻¹) := ?_
- _ ↔ ((P * A * P⁻¹)ᵀ * J = J * (P * A' * P⁻¹)) := ?_
- · simp only [mul_assoc, x_def, y_def, coe_u, coe_v]
- · rw [Units.eq_mul_inv_iff_mul_eq, mul_assoc ↑v⁻¹ x, Units.inv_mul_eq_iff_eq_mul]
- · rw [x_def, y_def, coe_u_inv, coe_v_inv]
- simp only [Matrix.mul_assoc, Matrix.transpose_mul]
+ J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹) :=
+ Matrix.isAdjointPair_equiv _ _ _ _ h
#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'
variable [DecidableEq n]
LinearAlgebra.BilinearForm
. (#8879)
Also renamed BilinearForm.restrictSymm
to BilinearForm.IsSymm.restrict
.
@@ -7,7 +7,7 @@ import Mathlib.LinearAlgebra.Matrix.Basis
import Mathlib.LinearAlgebra.Matrix.Nondegenerate
import Mathlib.LinearAlgebra.Matrix.NonsingularInverse
import Mathlib.LinearAlgebra.Matrix.ToLinearEquiv
-import Mathlib.LinearAlgebra.BilinearForm
+import Mathlib.LinearAlgebra.BilinearForm.Properties
import Mathlib.LinearAlgebra.Matrix.SesquilinearForm
#align_import linear_algebra.matrix.bilinear_form from "leanprover-community/mathlib"@"075b3f7d19b9da85a0b54b3e33055a74fc388dec"
@@ -568,7 +568,8 @@ theorem _root_.Matrix.nondegenerate_toBilin_iff {M : Matrix ι ι R₃} (b : Bas
rw [← Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin, Matrix.nondegenerate_toBilin'_iff]
#align matrix.nondegenerate_to_bilin_iff Matrix.nondegenerate_toBilin_iff
--- Lemmas transferring nondegeneracy between a bilinear form and its associated matrix
+/-! Lemmas transferring nondegeneracy between a bilinear form and its associated matrix -/
+
@[simp]
theorem nondegenerate_toMatrix'_iff {B : BilinForm R₃ (ι → R₃)} :
B.toMatrix'.Nondegenerate ↔ B.Nondegenerate :=
@@ -591,7 +592,8 @@ theorem Nondegenerate.toMatrix {B : BilinForm R₃ M₃} (h : B.Nondegenerate) (
(nondegenerate_toMatrix_iff b).mpr h
#align bilin_form.nondegenerate.to_matrix BilinForm.Nondegenerate.toMatrix
--- Some shorthands for combining the above with `Matrix.nondegenerate_of_det_ne_zero`
+/-! Some shorthands for combining the above with `Matrix.nondegenerate_of_det_ne_zero` -/
+
theorem nondegenerate_toBilin'_iff_det_ne_zero {M : Matrix ι ι A} :
M.toBilin'.Nondegenerate ↔ M.det ≠ 0 := by
rw [Matrix.nondegenerate_toBilin'_iff, Matrix.nondegenerate_iff_det_ne_zero]
⬝
notation in favor of HMul
(#6487)
The main difficulty here is that *
has a slightly difference precedence to ⬝
. notably around smul
and neg
.
The other annoyance is that ↑U ⬝ A ⬝ ↑U⁻¹ : Matrix m m 𝔸
now has to be written U.val * A * (U⁻¹).val
in order to typecheck.
A downside of this change to consider: if you have a goal of A * (B * C) = (A * B) * C
, mul_assoc
now gives the illusion of matching, when in fact Matrix.mul_assoc
is needed. Previously the distinct symbol made it easy to avoid this mistake.
On the flipside, there is now no need to rewrite by Matrix.mul_eq_mul
all the time (indeed, the lemma is now removed).
@@ -220,7 +220,7 @@ theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
@[simp]
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.comp l r) =
- (LinearMap.toMatrix' l)ᵀ ⬝ BilinForm.toMatrix' B ⬝ LinearMap.toMatrix' r := by
+ (LinearMap.toMatrix' l)ᵀ * BilinForm.toMatrix' B * LinearMap.toMatrix' r := by
ext i j
simp only [BilinForm.toMatrix'_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
@@ -241,34 +241,34 @@ theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o →
#align bilin_form.to_matrix'_comp BilinForm.toMatrix'_comp
theorem BilinForm.toMatrix'_compLeft (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ ⬝ BilinForm.toMatrix' B := by
+ BilinForm.toMatrix' (B.compLeft f) = (LinearMap.toMatrix' f)ᵀ * BilinForm.toMatrix' B := by
simp only [BilinForm.compLeft, BilinForm.toMatrix'_comp, toMatrix'_id, Matrix.mul_one]
#align bilin_form.to_matrix'_comp_left BilinForm.toMatrix'_compLeft
theorem BilinForm.toMatrix'_compRight (B : BilinForm R₂ (n → R₂)) (f : (n → R₂) →ₗ[R₂] n → R₂) :
- BilinForm.toMatrix' (B.compRight f) = BilinForm.toMatrix' B ⬝ LinearMap.toMatrix' f := by
+ BilinForm.toMatrix' (B.compRight f) = BilinForm.toMatrix' B * LinearMap.toMatrix' f := by
simp only [BilinForm.compRight, BilinForm.toMatrix'_comp, toMatrix'_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix'_comp_right BilinForm.toMatrix'_compRight
theorem BilinForm.mul_toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix o n R₂)
- (N : Matrix n o R₂) : M ⬝ BilinForm.toMatrix' B ⬝ N =
+ (N : Matrix n o R₂) : M * BilinForm.toMatrix' B * N =
BilinForm.toMatrix' (B.comp (Matrix.toLin' Mᵀ) (Matrix.toLin' N)) := by
simp only [B.toMatrix'_comp, transpose_transpose, toMatrix'_toLin']
#align bilin_form.mul_to_matrix'_mul BilinForm.mul_toMatrix'_mul
theorem BilinForm.mul_toMatrix' (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
- M ⬝ BilinForm.toMatrix' B = BilinForm.toMatrix' (B.compLeft (Matrix.toLin' Mᵀ)) := by
+ M * BilinForm.toMatrix' B = BilinForm.toMatrix' (B.compLeft (Matrix.toLin' Mᵀ)) := by
simp only [toMatrix'_compLeft, transpose_transpose, toMatrix'_toLin']
#align bilin_form.mul_to_matrix' BilinForm.mul_toMatrix'
theorem BilinForm.toMatrix'_mul (B : BilinForm R₂ (n → R₂)) (M : Matrix n n R₂) :
- BilinForm.toMatrix' B ⬝ M = BilinForm.toMatrix' (B.compRight (Matrix.toLin' M)) := by
+ BilinForm.toMatrix' B * M = BilinForm.toMatrix' (B.compRight (Matrix.toLin' M)) := by
simp only [toMatrix'_compRight, toMatrix'_toLin']
#align bilin_form.to_matrix'_mul BilinForm.toMatrix'_mul
theorem Matrix.toBilin'_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
- M.toBilin'.comp (Matrix.toLin' P) (Matrix.toLin' Q) = Matrix.toBilin' (Pᵀ ⬝ M ⬝ Q) :=
+ M.toBilin'.comp (Matrix.toLin' P) (Matrix.toLin' Q) = Matrix.toBilin' (Pᵀ * M * Q) :=
BilinForm.toMatrix'.injective
(by simp only [BilinForm.toMatrix'_comp, BilinForm.toMatrix'_toBilin', toMatrix'_toLin'])
#align matrix.to_bilin'_comp Matrix.toBilin'_comp
@@ -361,7 +361,7 @@ variable [DecidableEq o]
-- Cannot be a `simp` lemma because `b` must be inferred.
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
- (LinearMap.toMatrix c b l)ᵀ ⬝ BilinForm.toMatrix b B ⬝ LinearMap.toMatrix c b r := by
+ (LinearMap.toMatrix c b l)ᵀ * BilinForm.toMatrix b B * LinearMap.toMatrix c b r := by
ext i j
simp only [BilinForm.toMatrix_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
@@ -382,40 +382,40 @@ theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R
#align bilin_form.to_matrix_comp BilinForm.toMatrix_comp
theorem BilinForm.toMatrix_compLeft (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
- BilinForm.toMatrix b (B.compLeft f) = (LinearMap.toMatrix b b f)ᵀ ⬝ BilinForm.toMatrix b B := by
+ BilinForm.toMatrix b (B.compLeft f) = (LinearMap.toMatrix b b f)ᵀ * BilinForm.toMatrix b B := by
simp only [compLeft, BilinForm.toMatrix_comp b b, toMatrix_id, Matrix.mul_one]
#align bilin_form.to_matrix_comp_left BilinForm.toMatrix_compLeft
theorem BilinForm.toMatrix_compRight (B : BilinForm R₂ M₂) (f : M₂ →ₗ[R₂] M₂) :
- BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B ⬝ LinearMap.toMatrix b b f := by
+ BilinForm.toMatrix b (B.compRight f) = BilinForm.toMatrix b B * LinearMap.toMatrix b b f := by
simp only [BilinForm.compRight, BilinForm.toMatrix_comp b b, toMatrix_id, transpose_one,
Matrix.one_mul]
#align bilin_form.to_matrix_comp_right BilinForm.toMatrix_compRight
@[simp]
theorem BilinForm.toMatrix_mul_basis_toMatrix (c : Basis o R₂ M₂) (B : BilinForm R₂ M₂) :
- (b.toMatrix c)ᵀ ⬝ BilinForm.toMatrix b B ⬝ b.toMatrix c = BilinForm.toMatrix c B := by
+ (b.toMatrix c)ᵀ * BilinForm.toMatrix b B * b.toMatrix c = BilinForm.toMatrix c B := by
rw [← LinearMap.toMatrix_id_eq_basis_toMatrix, ← BilinForm.toMatrix_comp, BilinForm.comp_id_id]
#align bilin_form.to_matrix_mul_basis_to_matrix BilinForm.toMatrix_mul_basis_toMatrix
theorem BilinForm.mul_toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix o n R₂) (N : Matrix n o R₂) :
- M ⬝ BilinForm.toMatrix b B ⬝ N =
+ M * BilinForm.toMatrix b B * N =
BilinForm.toMatrix c (B.comp (Matrix.toLin c b Mᵀ) (Matrix.toLin c b N)) :=
by simp only [B.toMatrix_comp b c, toMatrix_toLin, transpose_transpose]
#align bilin_form.mul_to_matrix_mul BilinForm.mul_toMatrix_mul
theorem BilinForm.mul_toMatrix (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
- M ⬝ BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (Matrix.toLin b b Mᵀ)) := by
+ M * BilinForm.toMatrix b B = BilinForm.toMatrix b (B.compLeft (Matrix.toLin b b Mᵀ)) := by
rw [B.toMatrix_compLeft b, toMatrix_toLin, transpose_transpose]
#align bilin_form.mul_to_matrix BilinForm.mul_toMatrix
theorem BilinForm.toMatrix_mul (B : BilinForm R₂ M₂) (M : Matrix n n R₂) :
- BilinForm.toMatrix b B ⬝ M = BilinForm.toMatrix b (B.compRight (Matrix.toLin b b M)) := by
+ BilinForm.toMatrix b B * M = BilinForm.toMatrix b (B.compRight (Matrix.toLin b b M)) := by
rw [B.toMatrix_compRight b, toMatrix_toLin]
#align bilin_form.to_matrix_mul BilinForm.toMatrix_mul
theorem Matrix.toBilin_comp (M : Matrix n n R₂) (P Q : Matrix n o R₂) :
- (Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ ⬝ M ⬝ Q) :=
+ (Matrix.toBilin b M).comp (toLin c b P) (toLin c b Q) = Matrix.toBilin c (Pᵀ * M * Q) :=
(BilinForm.toMatrix c).injective
(by simp only [BilinForm.toMatrix_comp b c, BilinForm.toMatrix_toBilin, toMatrix_toLin])
#align matrix.to_bilin_comp Matrix.toBilin_comp
@@ -468,8 +468,8 @@ theorem isAdjointPair_toBilin [DecidableEq n] :
#align is_adjoint_pair_to_bilin isAdjointPair_toBilin
theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : IsUnit P) :
- (Pᵀ ⬝ J ⬝ P).IsAdjointPair (Pᵀ ⬝ J ⬝ P) A A' ↔
- J.IsAdjointPair J (P ⬝ A ⬝ P⁻¹) (P ⬝ A' ⬝ P⁻¹) := by
+ (Pᵀ * J * P).IsAdjointPair (Pᵀ * J * P) A A' ↔
+ J.IsAdjointPair J (P * A * P⁻¹) (P * A' * P⁻¹) := by
have h' : IsUnit P.det := P.isUnit_iff_isUnit_det.mp h
-- Porting note: the original proof used a complicated conv and timed out
let u := P.nonsingInvUnit h'
@@ -480,7 +480,7 @@ theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : I
have coe_v_inv : (↑v⁻¹ : Matrix n n R₃) = P⁻¹ᵀ := P.transpose_nonsing_inv.symm
set x := Aᵀ * Pᵀ * J with x_def
set y := J * P * A' with y_def
- simp only [Matrix.IsAdjointPair, ← Matrix.mul_eq_mul]
+ simp only [Matrix.IsAdjointPair]
calc (Aᵀ * (Pᵀ * J * P) = Pᵀ * J * P * A')
↔ (x * ↑u = ↑v * y) := ?_
_ ↔ (↑v⁻¹ * x = y * ↑u⁻¹) := ?_
@@ -488,7 +488,7 @@ theorem Matrix.isAdjointPair_equiv' [DecidableEq n] (P : Matrix n n R₃) (h : I
· simp only [mul_assoc, x_def, y_def, coe_u, coe_v]
· rw [Units.eq_mul_inv_iff_mul_eq, mul_assoc ↑v⁻¹ x, Units.inv_mul_eq_iff_eq_mul]
· rw [x_def, y_def, coe_u_inv, coe_v_inv]
- simp only [Matrix.mul_eq_mul, Matrix.mul_assoc, Matrix.transpose_mul]
+ simp only [Matrix.mul_assoc, Matrix.transpose_mul]
#align matrix.is_adjoint_pair_equiv' Matrix.isAdjointPair_equiv'
variable [DecidableEq n]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -40,21 +40,21 @@ bilinear form, bilin form, BilinearForm, matrix, basis
-/
-variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
+variable {R : Type*} {M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
-variable {R₁ : Type _} {M₁ : Type _} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁]
+variable {R₁ : Type*} {M₁ : Type*} [Ring R₁] [AddCommGroup M₁] [Module R₁ M₁]
-variable {R₂ : Type _} {M₂ : Type _} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂]
+variable {R₂ : Type*} {M₂ : Type*} [CommSemiring R₂] [AddCommMonoid M₂] [Module R₂ M₂]
-variable {R₃ : Type _} {M₃ : Type _} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃]
+variable {R₃ : Type*} {M₃ : Type*} [CommRing R₃] [AddCommGroup M₃] [Module R₃ M₃]
-variable {V : Type _} {K : Type _} [Field K] [AddCommGroup V] [Module K V]
+variable {V : Type*} {K : Type*} [Field K] [AddCommGroup V] [Module K V]
variable {B : BilinForm R M} {B₁ : BilinForm R₁ M₁} {B₂ : BilinForm R₂ M₂}
section Matrix
-variable {n o : Type _}
+variable {n o : Type*}
open BigOperators
@@ -352,7 +352,7 @@ theorem BilinForm.toMatrix_toBilin (M : Matrix n n R₂) :
(BilinForm.toMatrix b).apply_symm_apply M
#align bilin_form.to_matrix_to_bilin BilinForm.toMatrix_toBilin
-variable {M₂' : Type _} [AddCommMonoid M₂'] [Module R₂ M₂']
+variable {M₂' : Type*} [AddCommMonoid M₂'] [Module R₂ M₂']
variable (c : Basis o R₂ M₂')
@@ -428,7 +428,7 @@ section MatrixAdjoints
open Matrix
-variable {n : Type _} [Fintype n]
+variable {n : Type*} [Fintype n]
variable (b : Basis n R₃ M₃)
@@ -536,9 +536,9 @@ section Det
open Matrix
-variable {A : Type _} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinForm A M₃)
+variable {A : Type*} [CommRing A] [IsDomain A] [Module A M₃] (B₃ : BilinForm A M₃)
-variable {ι : Type _} [DecidableEq ι] [Fintype ι]
+variable {ι : Type*} [DecidableEq ι] [Fintype ι]
theorem _root_.Matrix.nondegenerate_toBilin'_iff_nondegenerate_toBilin {M : Matrix ι ι R₂}
(b : Basis ι R₂ M₂) : M.toBilin'.Nondegenerate ↔ (Matrix.toBilin b M).Nondegenerate :=
@@ -2,11 +2,6 @@
Copyright (c) 2020 Anne Baanen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anne Baanen, Kexing Ying
-
-! This file was ported from Lean 3 source module linear_algebra.matrix.bilinear_form
-! leanprover-community/mathlib commit 075b3f7d19b9da85a0b54b3e33055a74fc388dec
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.LinearAlgebra.Matrix.Basis
import Mathlib.LinearAlgebra.Matrix.Nondegenerate
@@ -15,6 +10,8 @@ import Mathlib.LinearAlgebra.Matrix.ToLinearEquiv
import Mathlib.LinearAlgebra.BilinearForm
import Mathlib.LinearAlgebra.Matrix.SesquilinearForm
+#align_import linear_algebra.matrix.bilinear_form from "leanprover-community/mathlib"@"075b3f7d19b9da85a0b54b3e33055a74fc388dec"
+
/-!
# Bilinear form
ext
(#5258)
Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@@ -145,7 +145,7 @@ def BilinForm.toMatrix' : BilinForm R₂ (n → R₂) ≃ₗ[R₂] Matrix n n R
invFun := Matrix.toBilin'Aux
left_inv := fun B ↦ by convert toBilin'Aux_toMatrixAux B
right_inv := fun M => by
- ext (i j)
+ ext i j
simp only [toFun_eq_coe, BilinForm.toMatrixAux_apply, Matrix.toBilin'Aux_stdBasis] }
#align bilin_form.to_matrix' BilinForm.toMatrix'
@@ -224,7 +224,7 @@ theorem BilinForm.toMatrix'_apply (B : BilinForm R₂ (n → R₂)) (i j : n) :
theorem BilinForm.toMatrix'_comp (B : BilinForm R₂ (n → R₂)) (l r : (o → R₂) →ₗ[R₂] n → R₂) :
BilinForm.toMatrix' (B.comp l r) =
(LinearMap.toMatrix' l)ᵀ ⬝ BilinForm.toMatrix' B ⬝ LinearMap.toMatrix' r := by
- ext (i j)
+ ext i j
simp only [BilinForm.toMatrix'_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
@@ -365,7 +365,7 @@ variable [DecidableEq o]
theorem BilinForm.toMatrix_comp (B : BilinForm R₂ M₂) (l r : M₂' →ₗ[R₂] M₂) :
BilinForm.toMatrix c (B.comp l r) =
(LinearMap.toMatrix c b l)ᵀ ⬝ BilinForm.toMatrix b B ⬝ LinearMap.toMatrix c b r := by
- ext (i j)
+ ext i j
simp only [BilinForm.toMatrix_apply, BilinForm.comp_apply, transpose_apply, Matrix.mul_apply,
LinearMap.toMatrix', LinearEquiv.coe_mk, sum_mul]
rw [sum_comm]
The unported dependencies are