-
Notifications
You must be signed in to change notification settings - Fork 1.2k
feat(Analysis/LocallyConvex/Polar): Bipolar theorem #26345
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
Open
mans0954
wants to merge
294
commits into
leanprover-community:master
Choose a base branch
from
mans0954:mans0954/bipolar-theorem
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
294 commits
Select commit
Hold shift + click to select a range
4cdee5a
Further adjust
mans0954 8048257
Try direct proof
mans0954 23da494
Golf
mans0954 7c056c0
Ball of any radius
mans0954 e2c3f6c
Push it down to SeminormedAddCommGroup
mans0954 a738670
Fix
mans0954 0071949
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 e67c761
Put it back together
mans0954 c884495
Get rid of test
mans0954 7276d5f
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 740f01a
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 05996bf
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 497f32d
Fix
mans0954 8c0e59c
Fix
mans0954 1e89144
Reduce imports
mans0954 22536f6
Shake
mans0954 0f66720
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 89774b7
Order
mans0954 d618236
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 09e84fe
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 4eb112f
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 5d1a072
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 f8148c2
Update Mathlib/Analysis/LocallyConvex/Basic.lean
mans0954 ef62918
Revert "Update Mathlib/Analysis/LocallyConvex/Basic.lean"
mans0954 93f8401
Update Mathlib/Analysis/Normed/Module/Dual.lean
mans0954 c7069a7
Save the bipolar theorem to later
mans0954 8e4925c
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 6e69ff6
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 c968034
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 312c8ad
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 cd6d3fa
Update Mathlib/Analysis/LocallyConvex/Basic.lean
mans0954 b8c3a7e
Fix
mans0954 8ae80b3
Merge branch 'mans0954/polar_AbsConvex' into mans0954/bipolar-theorem
mans0954 af0c3ff
Get it building again
mans0954 dc1aa39
Better
mans0954 6e1d3a3
Merge branch 'mans0954/polar_AbsConvex' into mans0954/bipolar-theorem
mans0954 9c5c169
Build with sorry
mans0954 326c14b
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 db6173c
Pin down sorry
mans0954 64eb847
weaken absConvexHull_zero_mem hypothesis
mans0954 c3a3437
Exact
mans0954 b522a28
Add zero_mem_absConvexHull
mans0954 fde0f10
Merge branch 'mans0954/zero_mem_absConvexHull' into mans0954/bipolar-…
mans0954 c825297
Use zero_mem_absConvexHull
mans0954 6ba56eb
Clarify
mans0954 5ebdc2e
Put bipolar theorem in own file
mans0954 eb6e4bd
Move LinearMap.polar_AbsConvex into Analysis/LocallyConvex/Bipolar
mans0954 beefe91
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 a49b263
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 9936341
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 c0294a5
Add ref
mans0954 7f7245e
More ref
mans0954 f55e8c1
More doc
mans0954 ff6f4d8
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 01a7822
An element of the topological dual has a closed kernel
mans0954 38bf89d
Notes
mans0954 47ad62b
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 d14d43a
mem_span_of_iInf_ker_le_ker
mans0954 51b135a
Obtain V
mans0954 5e2e630
Bludgeon our way through
mans0954 de3a4e7
Progress
mans0954 f941430
Not sure I follow
mans0954 a8b1fb2
sup
mans0954 b7d0b85
Easy direction
mans0954 77070ac
iff
mans0954 04394aa
Get something that builds
mans0954 1fc13f9
Remove junk
mans0954 f450f66
Doc the def for now
mans0954 3f539ee
Remove the topology not needed for the theorem
mans0954 9fdfe50
Golf a bit
mans0954 14dca85
Tidy
mans0954 a1068ee
Move
mans0954 571f693
functional_mem_span_iff
mans0954 41d3f3c
Add Rudin as a reference
mans0954 1c0ca0e
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 b5dc975
Remove dupe
mans0954 284543c
Flip functional_mem_span_iff
mans0954 e2d33d4
toLinearMap₁₂
mans0954 318ad8b
plug in functional_mem_span_iff
mans0954 52ae1a4
Show surjective, subject to test5
mans0954 57c3503
Progress
mans0954 4188456
Progress
mans0954 0f7cde6
Show surjective
mans0954 8ba3ad1
Remove dead code
mans0954 997c567
Docstring
mans0954 f0fa9ff
Shake
mans0954 e7c7a03
Try to rephrase this in terms of
mans0954 4f23358
testnew
mans0954 16cc684
Tidy it up a bit
mans0954 ed83a0b
Golf
mans0954 eb76b90
Make a right meal of it
mans0954 df2813e
continuous iff note
mans0954 2a98691
Add some notes
mans0954 b2a2eb5
Golf
mans0954 88974d5
Golf
mans0954 8e62d54
Golf
mans0954 af6a1f3
Absorbant
mans0954 ea426cf
precise_absorb
mans0954 56504bf
Comment out check
mans0954 31cbdba
isBounded_of_Continuous'
mans0954 a8fbbe5
Shake
mans0954 5f752dc
Remove original isBounded_of_Continuous
mans0954 26ce3d1
Golf
mans0954 66fa50f
Restate in terms of a family of linear functionals
mans0954 0e41ae9
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 de63d67
Simp only
mans0954 05fa872
suffices
mans0954 1b19f42
Tidy
mans0954 6928d0f
Restate as function
mans0954 6f90cb6
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 ea80bed
Fix
mans0954 3efb9ba
Remove precise_absorb
mans0954 27c1006
Add Conway as a reference
mans0954 66c3c9d
dualEmbedding_isInjective_of_separatingRight
mans0954 eb475de
right-separating, F linear equiv to topological dual of E
mans0954 9461729
Add the opposite equivalence
mans0954 18013fa
End of binomial theorem by contra
mans0954 b141ee5
One more sorry to go
mans0954 22c38b2
Bipolar
mans0954 e38e908
Remove dead code
mans0954 780684a
Remove a lot of my WiP comments
mans0954 dcc7e4a
Tidy up more
mans0954 fd5f63b
Golf
mans0954 e9a184a
Golf
mans0954 4de65cf
Golf
mans0954 05a5aca
Golf
mans0954 9ca880e
Golf
mans0954 385125d
Golf
mans0954 3ed0704
Golf
mans0954 1b23429
Fill in module docstring
mans0954 d7d4931
ADedecker's suggestion
mans0954 e4e37d2
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 2a19dd0
Glue the proof back together
mans0954 77bc66d
Remove unused result
mans0954 a850dfa
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 655eeba
New ContinuousLinearMap.toLinearMap₂
mans0954 9f38491
Fix
mans0954 a9f3416
Slight Golf
mans0954 20c00c4
Fix
mans0954 7e2650c
Dot notation
mans0954 3dbd154
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 efe9df3
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 2b25beb
Seminorm.continuous_iff
mans0954 14770ca
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 8ef63d2
Fix
mans0954 9781dc0
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 9255e77
Remove example
mans0954 c87b0ab
Add docstring
mans0954 c4b5398
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 0260f15
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 8629a9a
Remove unused argument
mans0954 45cf40a
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 8ae603b
shake
mans0954 327f51b
Use StrongDual
mans0954 86ee793
Fix reference
mans0954 7e9be62
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 a305eb3
Remove Mathlib.Data.Finsupp.Order
mans0954 b7ae5e5
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 cc4b024
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 1582a68
closedAbsConvexHull_empty
mans0954 32182d6
closure
mans0954 3fe585d
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 1b79958
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 c0a817e
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 4b1b425
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 5348f62
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 a74625e
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 a0f7e5f
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 7d6af67
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 a4f7b8a
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 ad5a7a7
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 539adc0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 e9e0c47
Fix
mans0954 da67fa8
Remove temporary lemma
mans0954 cdb9184
Golf
mans0954 80e2d65
Fix
mans0954 7680487
Golf
mans0954 af33319
Shorten
mans0954 6d69c3f
remove redundant opens
mans0954 16d7b9f
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 9c8dcfc
Remove duplicate variables
mans0954 f0f254b
Relax 𝕜
mans0954 ef52c1f
Reduce hypothesis
mans0954 1ef125e
Move dualEmbedding_injective_of_separatingRight
mans0954 65d8111
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 adeee3e
Use the StrongDual in HahnBanach/Separation
mans0954 82c0240
Use the StrongDual in HahnBanach/SeparatingDual
mans0954 520ef72
Use the StrongDual in HahnBanach/Extension
mans0954 b0116ff
Use StrongDual in WeakBilin.eval
mans0954 7611372
Use StrongDual in Analysis/LocallyConvex/WeakSpace
mans0954 c833ca1
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 b9fc4f2
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 13d1f06
Shake
mans0954 4b9fd46
Update Mathlib/Topology/Algebra/Module/StrongTopology.lean
mans0954 c486102
Update Mathlib/Topology/Algebra/Module/WeakBilin.lean
mans0954 beb52e2
Update Mathlib/Analysis/LocallyConvex/AbsConvex.lean
mans0954 0ecc892
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 fc5191e
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 8c270ce
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 505efbc
Try moving stuff about
mans0954 ed4cfbb
Shake
mans0954 576b3bf
Move results around
mans0954 6dcdd5a
Remove artefact
mans0954 d42a780
Reduce imports
mans0954 03262af
Reduce imports
mans0954 85ee89d
WhiteSpace
mans0954 ce1a60d
Update docstrings
mans0954 f182f04
Add more precise reference
mans0954 f4bc804
Merge sections
mans0954 333c9ba
Outline the idea of the proof in comments
mans0954 c4f2bf9
Use a better name for 'Holding' fill in docstring
mans0954 6cabd88
Fix import
mans0954 02329a0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 97098e5
Fix
mans0954 732117e
Rename toLinearMap₂
mans0954 2791a64
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 e14d624
Move polar_AbsConvex
mans0954 234bc70
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 e15b6f6
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 1c6859a
Fix
mans0954 00500e3
Pull out variables
mans0954 f0d8934
Reorder
mans0954 c69aba4
Make closureOperator_polar_gc_empty_of_separatingLeft an example
mans0954 1738a29
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 45759e5
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 a89ebb3
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 4e57919
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 8ddacf6
Update Mathlib/Analysis/LocallyConvex/Polar.lean
mans0954 a8c1b91
Fix
mans0954 8209650
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 ef7534c
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 b479a9d
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 6580cd0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 2190f9c
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 e08ab8a
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 57de288
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 1b05b80
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 767a423
Remove overlapping def
mans0954 4e41cde
Add docstring
mans0954 0f0658e
Update docstring
mans0954 d2d5cb6
Better assumption names
mans0954 75c772f
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 1123906
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 5dd3fb8
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 d3ba373
Fix
mans0954 23ed474
Merge branch 'master' into mans0954/bipolar-theorem
faenuccio e27bf62
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
faenuccio b23db5e
try to fix
j-loreaux 1483008
mk_all
j-loreaux c94a48d
Merge branch 'master' into mans0954/bipolar-theorem
j-loreaux File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| /- | ||
| Copyright (c) 2025 Christopher Hoskin. All rights reserved. | ||
| Released under Apache 2.0 license as described in the file LICENSE. | ||
| Authors: Christopher Hoskin | ||
| -/ | ||
| module | ||
|
|
||
| public import Mathlib.Analysis.LocallyConvex.Polar | ||
| public import Mathlib.Analysis.LocallyConvex.WeakDual | ||
| public import Mathlib.Analysis.Normed.Module.Convex | ||
| public import Mathlib.Analysis.LocallyConvex.Separation | ||
|
|
||
| /-! | ||
|
|
||
| # Bipolar Theorem | ||
|
|
||
| ## Main statements | ||
|
|
||
| - `LinearMap.flip_polar_polar_eq`: The Bipolar Theorem: The bipolar of a set coincides with its | ||
| closed absolutely convex hull. | ||
|
|
||
| ## References | ||
|
|
||
| * [Conway, *A course in functional analysis*][conway1990] | ||
|
|
||
| ## Tags | ||
|
|
||
| bipolar, locally convex space | ||
| -/ | ||
|
|
||
| public section | ||
|
|
||
| open scoped ComplexOrder | ||
|
|
||
| variable {𝕜 E F : Type*} | ||
|
|
||
| namespace LinearMap | ||
|
|
||
| section | ||
|
|
||
| variable [NontriviallyNormedField 𝕜] [AddCommMonoid E] [AddCommMonoid F] | ||
| variable [Module 𝕜 E] [Module 𝕜 F] | ||
|
|
||
| variable {B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜} (s : Set E) | ||
|
|
||
| /- | ||
| When `B` is left-separating, the closure of the empty set is the singleton `{0}`. This is in | ||
| contrast to the closed absolutely convex hull of the empty set, which is again the empty set. | ||
| c.f. `closureOperator_polar_gc_nonempty` below. | ||
| -/ | ||
| example (h : SeparatingLeft B) : B.polar_gc.closureOperator (∅ : Set E) = {0} := by | ||
mans0954 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| simp only [GaloisConnection.closureOperator_apply, Function.comp_apply, polar_empty, | ||
| OrderDual.ofDual_toDual, (B.flip.polar_univ h)] | ||
|
|
||
| end | ||
|
|
||
|
|
||
| section RCLike | ||
|
|
||
| variable [RCLike 𝕜] [AddCommGroup E] [AddCommGroup F] | ||
| variable [Module 𝕜 E] [Module 𝕜 F] | ||
|
|
||
| variable {B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜} | ||
|
|
||
| variable [Module ℝ E] [IsScalarTower ℝ 𝕜 E] | ||
|
|
||
| /- | ||
| The Bipolar Theorem: The bipolar of a set coincides with its closed absolutely convex hull. | ||
| [Conway, *A course in functional analysis*, Chapter V. 1.8][conway1990] | ||
| -/ | ||
| open scoped ComplexConjugate | ||
mans0954 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| theorem flip_polar_polar_eq {s : Set E} [Nonempty s] : | ||
| B.flip.polar (B.polar s) = closedAbsConvexHull (E := WeakBilin B) 𝕜 s := by | ||
| refine subset_antisymm ?_ <| closedAbsConvexHull_min (E := WeakBilin B) | ||
| (subset_bipolar B s) (absConvex_polar _) (polar_isClosed B.flip _) | ||
| rw [← Set.compl_subset_compl] | ||
| -- Let `x` be an element not in `(closedAbsConvexHull 𝕜) s` | ||
| intro x hx | ||
| -- Use the Geometric Hahn-Banach theorem to obtain a function `f` and a constant `u` separating | ||
| -- `(closedAbsConvexHull 𝕜) s` and `x` | ||
| obtain ⟨f, ⟨u, ⟨hf₁, hf₂⟩⟩⟩ := | ||
| RCLike.geometric_hahn_banach_closed_point (𝕜 := 𝕜) (E := WeakBilin B) | ||
| (by rw [← convex_RCLike_iff_convex_real (K := 𝕜)]; exact absConvex_convexClosedHull.2) | ||
| isClosed_closedAbsConvexHull hx | ||
| -- `0` is in `(closedAbsConvexHull 𝕜) s` so `u` must be strictly positive | ||
| have f_zero_lt_u : RCLike.re (f 0) < u := | ||
| (hf₁ 0) (absConvexHull_subset_closedAbsConvexHull zero_mem_absConvexHull) | ||
| rw [map_zero, map_zero] at f_zero_lt_u | ||
| -- Rescale `f` as `g` in order that for all `a` in `(closedAbsConvexHull 𝕜) s` `Re (g a) < 1` | ||
| set g := (1/u : ℝ) • f with fg | ||
| have u_smul_g_eq_f : u • g = f := by | ||
| rw [fg, one_div, ← smul_assoc, smul_eq_mul, mul_inv_cancel₀ (ne_of_lt f_zero_lt_u).symm, | ||
| one_smul] | ||
| have re_g_a_lt_one {a : _} (ha : a ∈ (closedAbsConvexHull (E := WeakBilin B) 𝕜) s) : | ||
| RCLike.re (g a) < 1 := by | ||
| rw [fg, ContinuousLinearMap.coe_smul', Pi.smul_apply, RCLike.smul_re, one_div, | ||
| ← (inv_mul_cancel₀ (lt_iff_le_and_ne.mp f_zero_lt_u).2.symm)] | ||
| exact mul_lt_mul_of_pos_left ((hf₁ _) ha) (inv_pos_of_pos f_zero_lt_u) | ||
| -- The dual embedding is surjective, let `f₀` be the element of `F` corresponding to `g` | ||
| obtain ⟨f₀, hf₀⟩ := B.dualEmbedding_surjective g | ||
| -- Then, by construction, `f₀` is in the polar of `s` | ||
| have mem_polar : f₀ ∈ (B.polar (E := WeakBilin B) s) := by | ||
| simp only [← hf₀, WeakBilin.eval, coe_mk, AddHom.coe_mk, ContinuousLinearMap.coe_mk'] | ||
| at re_g_a_lt_one | ||
| intro x₂ hx₂ | ||
| let l := conj (B x₂ f₀) / ‖B x₂ f₀‖ | ||
| have lnorm : ‖l‖ ≤ 1 := by | ||
| rw [norm_div, RCLike.norm_conj, norm_algebraMap', norm_norm] | ||
| exact div_self_le_one _ | ||
| have i1 : RCLike.re ((B.flip f₀) (l • x₂)) ≤ 1 := le_of_lt <| re_g_a_lt_one | ||
| <| balanced_iff_smul_mem.mp absConvex_convexClosedHull.1 lnorm | ||
| (subset_closedAbsConvexHull hx₂) | ||
| rwa [CompatibleSMul.map_smul, smul_eq_mul, mul_comm, ← mul_div_assoc, LinearMap.flip_apply, | ||
| RCLike.mul_conj, sq, mul_self_div_self, RCLike.ofReal_re] at i1 | ||
| -- and `1 < Re (B x f₀)` | ||
| have one_lt_x_f₀ : 1 < RCLike.re (B x f₀) := by | ||
| rw [← one_lt_inv_mul₀ f_zero_lt_u] at hf₂ | ||
| suffices u⁻¹ * RCLike.re (f x) = RCLike.re ((B x) f₀) by exact lt_of_lt_of_eq hf₂ this | ||
| rw [← RCLike.re_ofReal_mul] | ||
| congr | ||
| simp only [map_inv₀, ← u_smul_g_eq_f, ← hf₀, WeakBilin.eval, coe_mk, AddHom.coe_mk, | ||
| ContinuousLinearMap.coe_smul', ContinuousLinearMap.coe_mk', Pi.smul_apply, | ||
| Algebra.mul_smul_comm] | ||
| rw [← smul_eq_mul, ← smul_assoc] | ||
| norm_cast | ||
| simp only [smul_eq_mul, mul_inv_cancel₀ (ne_of_lt f_zero_lt_u).symm, map_one, one_mul] | ||
| exact flip_apply (f := B) (n:= f₀) (m := x) | ||
| -- From which it follows that `x` can't be in the bipolar of `s` | ||
| exact fun hc ↦ ((lt_iff_le_not_ge.mp one_lt_x_f₀).2) | ||
| (Preorder.le_trans (RCLike.re ((B x) f₀)) ‖(B x) f₀‖ 1 | ||
| (RCLike.re_le_norm ((B x) f₀)) (hc f₀ mem_polar)) | ||
|
|
||
| /- | ||
| This fails when `s` is empty. Indeed, `closedAbsConvexHull (E := WeakBilin B) 𝕜 s` is the empty set, | ||
| but `B.polar_gc.closureOperator s` equals `{0}` when `B` is left separating (see example above). | ||
| -/ | ||
| lemma closureOperator_polar_gc_nonempty {s : Set E} [Nonempty s] : | ||
mans0954 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| B.polar_gc.closureOperator s = closedAbsConvexHull (E := WeakBilin B) 𝕜 s := by | ||
| simp [flip_polar_polar_eq] | ||
|
|
||
| end RCLike | ||
|
|
||
| end LinearMap | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| /- | ||
| Copyright (c) 2025 Christopher Hoskin. All rights reserved. | ||
| Released under Apache 2.0 license as described in the file LICENSE. | ||
| Authors: Christopher Hoskin | ||
| -/ | ||
| module | ||
|
|
||
| public import Mathlib.LinearAlgebra.Dual.Lemmas | ||
| public import Mathlib.Topology.Algebra.Ring.Basic | ||
| public import Mathlib.Analysis.Normed.Field.Basic | ||
| public import Mathlib.Analysis.Normed.Group.Uniform | ||
| public import Mathlib.Topology.Algebra.MulAction | ||
| public import Mathlib.Topology.Algebra.Monoid | ||
| public import Mathlib.Analysis.Normed.Field.Lemmas | ||
| public import Mathlib.LinearAlgebra.Finsupp.Span | ||
| public import Mathlib.Analysis.LocallyConvex.WithSeminorms | ||
|
|
||
| /-! | ||
| # Linear Span | ||
|
|
||
| ## Main statements | ||
|
|
||
| - `LinearMap.mem_span_iff_continuous_of_finite` A linear functional `φ` can be expressed as a linear | ||
| combination of finitely many linear functionals `f₁,…,fₙ` if and only if `φ` is continuous with | ||
| respect to the topology induced by `f₁,…,fₙ`. | ||
| - `LinearMap.mem_span_iff_continuous` A linear functional `φ` is in the span of a collection of | ||
| linear functionals if and only if `φ` is continuous with respect to the topology induced by the | ||
| collection of linear functionals. | ||
|
|
||
| ## References | ||
|
|
||
| * [Rudin, *Functional Analysis*][rudin1991] | ||
|
|
||
| ## Tags | ||
|
|
||
| span, continuous | ||
|
|
||
| -/ | ||
|
|
||
| public section | ||
|
|
||
| open Topology TopologicalSpace | ||
|
|
||
| namespace LinearMap | ||
|
|
||
| variable {ι 𝕜 E F : Type*} | ||
|
|
||
| section TopologicalRing | ||
|
|
||
| variable [Finite ι] [Field 𝕜] [t𝕜 : TopologicalSpace 𝕜] [IsTopologicalRing 𝕜] [T0Space 𝕜] | ||
| [AddCommGroup E] [Module 𝕜 E] | ||
|
|
||
| /- A linear functional `φ` can be expressed as a linear combination of finitely many linear | ||
| functionals `f₁,…,fₙ` if and only if `φ` is continuous with respect to the topology induced by | ||
| `f₁,…,fₙ`. See `LinearMap.mem_span_iff_continuous` for a result about arbitrary collections of | ||
| linear functionals. -/ | ||
| theorem mem_span_iff_continuous_of_finite {f : ι → E →ₗ[𝕜] 𝕜} (φ : E →ₗ[𝕜] 𝕜) : | ||
| φ ∈ Submodule.span 𝕜 (Set.range f) ↔ Continuous[⨅ i, induced (f i) t𝕜, t𝕜] φ := by | ||
| let _ := ⨅ i, induced (f i) t𝕜 | ||
| refine ⟨Submodule.span_induction | ||
| (Set.forall_mem_range.mpr fun i ↦ continuous_iInf_dom continuous_induced_dom) continuous_zero | ||
| (fun _ _ _ _ ↦ .add) (fun c _ _ h ↦ h.const_smul c), fun φ_cont ↦ ?_⟩ | ||
| apply mem_span_of_iInf_ker_le_ker fun x hx ↦ ?_ | ||
| simp_rw [Submodule.mem_iInf, LinearMap.mem_ker] at hx ⊢ | ||
| have : Inseparable x 0 := by | ||
| -- Maybe missing lemmas about `Inseparable`? | ||
| simp_rw [Inseparable, nhds_iInf, nhds_induced, hx, map_zero] | ||
| simpa [map_zero] using (this.map φ_cont).eq | ||
|
|
||
| end TopologicalRing | ||
|
|
||
| section NontriviallyNormedField | ||
|
|
||
| variable [NontriviallyNormedField 𝕜] [AddCommGroup E] [Module 𝕜 E] | ||
|
|
||
| /- A linear functional `φ` is in the span of a collection of linear functionals if and only if `φ` | ||
| is continuous with respect to the topology induced by the collection of linear functionals. See | ||
| `LinearMap.mem_span_iff_continuous_of_finite` for a result about finite collections of linear | ||
| functionals. -/ | ||
| theorem mem_span_iff_continuous {f : ι → E →ₗ[𝕜] 𝕜} (φ : E →ₗ[𝕜] 𝕜) : | ||
| φ ∈ Submodule.span 𝕜 (Set.range f) ↔ | ||
| Continuous[⨅ i, induced (f i) inferInstance, inferInstance] φ := by | ||
| letI t𝕜 : TopologicalSpace 𝕜 := inferInstance | ||
| letI t₁ : TopologicalSpace E := ⨅ i, induced (f i) t𝕜 | ||
| letI t₂ (s : Finset ι) : TopologicalSpace E := ⨅ i : s, induced (f i) t𝕜 | ||
| suffices | ||
| Continuous[t₁, t𝕜] φ ↔ ∃ s : Finset ι, Continuous[t₂ s, t𝕜] φ by | ||
| simp only [Submodule.span_range_eq_iSup, this, ← mem_span_iff_continuous_of_finite, | ||
| iSup_subtype] | ||
| rw [Submodule.mem_iSup_iff_exists_finset] | ||
| have t₁_group : @IsTopologicalAddGroup E t₁ _ := | ||
| topologicalAddGroup_iInf fun _ ↦ topologicalAddGroup_induced _ | ||
| have t₂_group (s : Finset ι) : @IsTopologicalAddGroup E (t₂ s) _ := | ||
| topologicalAddGroup_iInf fun _ ↦ topologicalAddGroup_induced _ | ||
| have t₁_smul : @ContinuousSMul 𝕜 E _ _ t₁ := | ||
| continuousSMul_iInf fun _ ↦ continuousSMul_induced _ | ||
| have t₂_smul (s : Finset ι) : @ContinuousSMul 𝕜 E _ _ (t₂ s) := | ||
| continuousSMul_iInf fun _ ↦ continuousSMul_induced _ | ||
| simp only [Seminorm.continuous_iff_continuous_comp (norm_withSeminorms 𝕜 𝕜), forall_const] | ||
| conv in Continuous _ => rw [Seminorm.continuous_iff one_pos, nhds_iInf] | ||
| conv in Continuous _ => | ||
| rw [let _ := t₂ s; Seminorm.continuous_iff one_pos, nhds_iInf, iInf_subtype] | ||
| rw [Filter.mem_iInf_finite] | ||
|
|
||
| end NontriviallyNormedField | ||
|
|
||
| end LinearMap |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.