-
Notifications
You must be signed in to change notification settings - Fork 316
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
feat(Analysis/InnerProductSpace/Quotient): add the quotient InnerProductSpace
by the null space
#16707
base: master
Are you sure you want to change the base?
Conversation
PR summary e85a7857b0Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
Co-authored-by: Eric Wieser <[email protected]>
Co-authored-by: Eric Wieser <[email protected]>
Co-authored-by: Eric Wieser <[email protected]>
Co-authored-by: Eric Wieser <[email protected]>
InnerProductSpace.Core
by the null spaceInnerProductSpace
by the null space
…ddCommGroup` (#17007) replace the assumption `NormedAddCommGroup` to `SemiNormedAddCommGroup` in various places. motivation: with the weakened assumption the results apply to `InnerProductSpace` without `definite` assumption. This is suggested in #16707, and continues from #14024. Co-authored-by: Eric Wieser <[email protected]>
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 suspect that this is not the way to proceed here. Instead, I recommend using SeparationQuotient.
If we don't already have it, you could show that if X
is a Seminormed*
then SeparationQuotient X
is a Normed*
. Then you could define the inner product space isntance on SeparationQuotient X
.
The problem with putting this InnerProductSpace
instance on E / nullSpace \bbk E
is that we could end up with non-defeq instances later down the line. Moreover, SeparationQuotient
does almost exactly what you want already, it just doesn't have the necessary instances yet.
…roductspace-quotient
variable [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E] | ||
|
||
/-- The null space with respect to the canonical inner product. It is defined by `‖x‖ = 0` and | ||
it is proven using the Cauchy-Schwarz inequality that ` ⟪x, y⟫_𝕜 = 0` for all `y : E`. -/ |
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 isn't true, cauchy-schwarz is not used in this definition at all!
Note you can define this more generally as
variable {𝕜 E} [SeminormedRing 𝕜] [SeminormedAddCommGroup E] [Module 𝕜 E] [BoundedSMul 𝕜 E]
/-- The null space with respect to the norm. -/
def nullSpace : Submodule 𝕜 E where
carrier := {x : E | ‖x‖ = 0}
add_mem' {x y} (hx : ‖x‖ = 0) (hy : ‖y‖ = 0) := by
apply le_antisymm _ (norm_nonneg _)
refine (norm_add_le x y).trans_eq ?_
rw [hx, hy, add_zero]
zero_mem' := norm_zero
smul_mem' c x (hx : ‖x‖ = 0) := by
apply le_antisymm _ (norm_nonneg _)
refine (norm_smul_le _ _).trans_eq ?_
rw [hx, mul_zero]
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 see, I will move the docstring to the beginning.
I get "failed to synthesize BoundedSMul 𝕜 E
", although it is there... why?
import Mathlib.Analysis.InnerProductSpace.Dual
import Mathlib.Analysis.Normed.Group.Quotient
variable (𝕜 E : Type*) [k: RCLike 𝕜]
variable {𝕜 E} [SeminormedRing 𝕜] [SeminormedAddCommGroup E] [Module 𝕜 E] [BoundedSMul 𝕜 E]
/-- The null space with respect to the norm. -/
def nullSpace : Submodule 𝕜 E where
carrier := {x : E | ‖x‖ = 0}
add_mem' {x y} (hx : ‖x‖ = 0) (hy : ‖y‖ = 0) := by
apply le_antisymm _ (norm_nonneg _)
refine (norm_add_le x y).trans_eq ?_
rw [hx, hy, add_zero]
zero_mem' := norm_zero
smul_mem' c x (hx : ‖x‖ = 0) := by
apply le_antisymm _ (norm_nonneg _)
refine (norm_smul_le _ _).trans_eq ?_
rw [hx, mul_zero]
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 should remove [k: RCLike 𝕜]
, it conflicts with [SeminormedRing 𝕜]
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.
Ah ok, thank you!
I think I will have to wait until I will have decided to use SeparationQuotient
or the null space by hand.
sync to master
@j-loreaux If I use |
Yes, it is certainly different, and you'll need to define the norm again, assuming the instance doesn't already exist. But I think this is the cleaner approach. |
…roductspace-quotient
This theorem is called |
thank you, I replaced all the immediate |
simp only | ||
obtain ⟨x', hx'⟩ := surjective_mk x | ||
obtain ⟨y', hy'⟩ := surjective_mk y |
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 think cleaner as
simp only | |
obtain ⟨x', hx'⟩ := surjective_mk x | |
obtain ⟨y', hy'⟩ := surjective_mk y | |
induction x with | _ x => ?_ | |
induction y with | _ y => ?_ | |
simp only |
(untested)
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.
It gave an error "tactic 'induction' failed, major premise type is not an inductive type Quot Setoid.r". I reverted it for the moment.
sorry, I wanted to change docstrings and theorem/instance names later. I know that the PR is still very much incomplete |
Co-authored-by: Eric Wieser <[email protected]>
Co-authored-by: Eric Wieser <[email protected]>
Co-authored-by: Eric Wieser <[email protected]>
This reverts commit a80e621.
I noticed that I need to define the lift of a linear map vanishing on the null space as a linear map. Where should I define it and how? In |
…medAddCommGroup (#17416) Replace the `NormedAddCommGroup` assumption with `SemiNormedAddCommGroup` where possible. motivation: we need `toDual`, `toDualMap` etc. to define an `InnerProductSpace` instance for `SeparationQuotient`. suggested in #16707. Co-authored-by: Eric Wieser <[email protected]>
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.
Here's a much shorter way to get the InnerProductSpace
instance on SeparationQuotient
:
import Mathlib.Analysis.InnerProductSpace.Basic
variable {𝕜 E} [RCLike 𝕜] [SeminormedAddCommGroup E] [InnerProductSpace 𝕜 E]
namespace SeparationQuotient
instance : Inner 𝕜 (SeparationQuotient E) where
inner := SeparationQuotient.lift₂ Inner.inner fun _ _ _ _ hab hcd =>
((hab.prod hcd).map continuous_inner).eq
theorem inner_mk_mk (x y : E) :
inner (mk x) (mk y) = (inner x y : 𝕜) := rfl
instance : InnerProductSpace 𝕜 (SeparationQuotient E) where
norm_sq_eq_inner := Quotient.ind norm_sq_eq_inner
conj_symm := Quotient.ind₂ inner_conj_symm
add_left := Quotient.ind fun x => Quotient.ind₂ <| inner_add_left x
smul_left := Quotient.ind₂ inner_smul_left
end SeparationQuotient
ah! what should I do with this PR then? |
Probably the thing to do is go through the auxiliary lemmas you wrote and make PRs for the useful ones. Certainly we want the null space as a submodule, and the lift operations on separationQuotient look reasonable to have. |
…roductspace-quotient
…roductspace-quotient
Define the null space in the an
InnerProductSpace
withoutdefinite
and addInnerProduceSpace
structure to the quotient by the null space.Motivation: in many application such as the GNS construction, one first constructs an
InnerProductSpace
then quotients it by the null space. This file realizes this latter passage.Probably many basic lemmas are missing. Please tell me in comments.
SeminormedAddCommGroup
#17007Normed
instances for SeparationQuotient #17452