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: Define dual submodule wrt bilinear form #8997
Conversation
erdOne
commented
Dec 12, 2023
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.
Thanks!
bors d+
intro z hz | ||
simpa using congr_arg (algebraMap R S) (LinearMap.congr_fun e ⟨z, hz⟩) | ||
|
||
lemma dualSubmodule_span_of_basis {ι} [Fintype ι] [DecidableEq ι] [FiniteDimensional S M] |
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.
FiniteDimensional S M
is automatic since you have a finite basis.
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.
But dualBasis
needs [FiniteDimensional S M]
. Or maybe we should remove that from dualBasis
.
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.
You can write
let _ : FiniteDimensional S M := ...
before the :
and it should be happy (not 100% sure the syntax is exactly that, but it is similar, and I forgot if we want let
or letI
here).
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.
lemma dualSubmodule_span_of_basis {ι} [Fintype ι] [DecidableEq ι] (hB : B.Nondegenerate)
(b : Basis ι S M) :
letI _ : FiniteDimensional S M := FiniteDimensional.of_fintype_basis b
B.dualSubmodule (Submodule.span R (Set.range b)) =
Submodule.span R (Set.range <| B.dualBasis hB b) := by
let _ : FiniteDimensional S M := FiniteDimensional.of_fintype_basis b
apply le_antisymm
· intro x hx
rw [← (B.dualBasis hB b).sum_repr x]
apply sum_mem
rintro i -
obtain ⟨r, hr⟩ := hx (b i) (Submodule.subset_span ⟨_, rfl⟩)
simp only [dualBasis_repr_apply, ← hr, Algebra.linearMap_apply, algebraMap_smul]
apply Submodule.smul_mem
exact Submodule.subset_span ⟨_, rfl⟩
· rw [Submodule.span_le]
rintro _ ⟨i, rfl⟩ y hy
obtain ⟨f, rfl⟩ := (mem_span_range_iff_exists_fun _).mp hy
simp only [sum_right, bilin_smul_right]
apply sum_mem
rintro j -
rw [← IsScalarTower.algebraMap_smul S (f j), B.bilin_smul_right, apply_dualBasis_left,
mul_ite, mul_one, mul_zero, ← (algebraMap R S).map_zero, ← apply_ite]
exact ⟨_, rfl⟩
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 added that over at dualBasis
.
✌️ erdOne can now approve this pull request. To approve and merge a pull request, simply reply with |
bors merge |
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
Pull request successfully merged into master. Build succeeded: |
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>