-
Notifications
You must be signed in to change notification settings - Fork 346
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Merged by Bors] - feat (LinearAlgebra/RootSystem/Finite): nondegeneracy of canonical bilinear form restricted to root span #18569
Conversation
PR summary 4c23080813Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice!
I've just done a first pass. However I can't help wondering if you really need to be working with both Module.rank
and Module.finrank
. Would it be possible to avoid Module.rank
and just use Module.finrank
throughout?
Possible approach for the contents of section GeneralScalarsMoveToDefs
abbrev rootSpan := span R (range P.root)
abbrev corootSpan := span R (range P.coroot)
instance : Module.Finite R P.rootSpan := Finite.span_of_finite R <| finite_range P.root
instance : Module.Finite R P.corootSpan := Finite.span_of_finite R <| finite_range P.coroot
end GeneralScalarsMoveToDefs
@[simp]
lemma finrank_rootSpan_map_polarization_eq_finrank_corootSpan :
finrank R (P.rootSpan.map P.Polarization) = finrank R P.corootSpan := by
sorry
@[simp]
lemma finrank_corootSpan_map_coPolarization_eq_finrank_crootSpan :
finrank R (P.corootSpan.map P.CoPolarization) = finrank R P.rootSpan :=
P.flip.finrank_rootSpan_map_polarization_eq_finrank_corootSpan
/-- An auxiliary lemma en route to `RootPairing.finrank_corootSpan_eq`. -/
private lemma finrank_corootSpan_le :
finrank R P.corootSpan ≤ finrank R P.rootSpan := by
sorry
lemma finrank_corootSpan_eq :
finrank R P.corootSpan = finrank R P.rootSpan :=
le_antisymm P.finrank_corootSpan_le P.flip.finrank_corootSpan_le
lemma disjoint_rootSpan_ker_polarization :
Disjoint P.rootSpan (LinearMap.ker P.Polarization) := by
sorry
lemma mem_ker_polarization_of_rootForm_self_eq_zero {x : M} (hx : P.RootForm x x = 0) :
x ∈ LinearMap.ker P.Polarization := by
rw [LinearMap.mem_ker, Polarization_apply]
rw [rootForm_self_zero_iff] at hx
exact Fintype.sum_eq_zero _ fun i ↦ by simp [hx i]
lemma eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero {x : M}
(hx : x ∈ P.rootSpan) (hx' : P.RootForm x x = 0) :
x = 0 := by
rw [← Submodule.mem_bot (R := R), ← P.disjoint_rootSpan_ker_polarization.eq_bot]
exact ⟨hx, P.mem_ker_polarization_of_rootForm_self_eq_zero hx'⟩
-- Requires adding `import Mathlib.LinearAlgebra.QuadraticForm.Basic`
lemma _root_.RootSystem.rootFormAnisotropic (P : RootSystem ι R M N) :
P.RootForm.toQuadraticMap.Anisotropic := by
refine fun x ↦ P.eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero ?_
rw [rootSpan, P.span_eq_top]
exact Submodule.mem_top |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will try to review more later
bot fix style |
Thanks 🎉 bors merge |
…linear form restricted to root span (#18569) The canonical bilinear form for a root pairing over a linearly ordered commutative ring is nondegenerate when restricted to the span of roots. Co-authored-by: leanprover-community-mathlib4-bot <[email protected]>
Pull request successfully merged into master. Build succeeded: |
…linear form restricted to root span (#18569) The canonical bilinear form for a root pairing over a linearly ordered commutative ring is nondegenerate when restricted to the span of roots. Co-authored-by: leanprover-community-mathlib4-bot <[email protected]>
theorem sum_mul_self_eq_zero_iff (s : Finset ι) (f : ι → R) : | ||
∑ i ∈ s, f i * f i = 0 ↔ ∀ i ∈ s, f i = 0 := by | ||
induction s using Finset.cons_induction with | ||
| empty => simp | ||
| cons i s his ih => | ||
simp only [Finset.sum_cons, Finset.mem_cons, forall_eq_or_imp] | ||
refine ⟨fun hc => ?_, fun h => by simpa [h.1] using ih.mpr h.2⟩ | ||
have hi : f i * f i ≤ 0 := by | ||
rw [← hc, le_add_iff_nonneg_right] | ||
exact Finset.sum_nonneg fun i _ ↦ mul_self_nonneg (f i) | ||
have h : f i * f i = 0 := (eq_of_le_of_le (mul_self_nonneg (f i)) hi).symm | ||
exact ⟨zero_eq_mul_self.mp h.symm, ih.mp (by rw [← hc, h, zero_add])⟩ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be proven in greater generality and much more easily:
theorem sum_mul_self_eq_zero_iff [LinearOrderedRing R] (s : Finset ι) (f : ι → R) :
∑ i ∈ s, f i * f i = 0 ↔ ∀ i ∈ s, f i = 0 := by
rw [sum_eq_zero_iff_of_nonneg fun _ _ ↦ mul_self_nonneg _]
simp
I do this golfing in my own inequality PR #19311.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is much better!
The canonical bilinear form for a root pairing over a linearly ordered commutative ring is nondegenerate when restricted to the span of roots.