Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
294 commits
Select commit Hold shift + click to select a range
4cdee5a
Further adjust
mans0954 Feb 15, 2025
8048257
Try direct proof
mans0954 Feb 15, 2025
23da494
Golf
mans0954 Feb 15, 2025
7c056c0
Ball of any radius
mans0954 Feb 16, 2025
e2c3f6c
Push it down to SeminormedAddCommGroup
mans0954 Feb 16, 2025
a738670
Fix
mans0954 Feb 16, 2025
0071949
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 17, 2025
e67c761
Put it back together
mans0954 Feb 17, 2025
c884495
Get rid of test
mans0954 Feb 17, 2025
7276d5f
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 17, 2025
740f01a
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 21, 2025
05996bf
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Feb 21, 2025
497f32d
Fix
mans0954 Feb 21, 2025
8c0e59c
Fix
mans0954 Feb 21, 2025
1e89144
Reduce imports
mans0954 Feb 21, 2025
22536f6
Shake
mans0954 Feb 21, 2025
0f66720
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 21, 2025
89774b7
Order
mans0954 Feb 21, 2025
d618236
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 25, 2025
09e84fe
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 26, 2025
4eb112f
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Feb 27, 2025
5d1a072
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Mar 1, 2025
f8148c2
Update Mathlib/Analysis/LocallyConvex/Basic.lean
mans0954 Mar 2, 2025
ef62918
Revert "Update Mathlib/Analysis/LocallyConvex/Basic.lean"
mans0954 Mar 2, 2025
93f8401
Update Mathlib/Analysis/Normed/Module/Dual.lean
mans0954 Mar 2, 2025
c7069a7
Save the bipolar theorem to later
mans0954 Mar 2, 2025
8e4925c
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Mar 10, 2025
6e69ff6
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Mar 10, 2025
c968034
Merge branch 'master' into mans0954/polar_AbsConvex
mans0954 Apr 5, 2025
312c8ad
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Apr 5, 2025
cd6d3fa
Update Mathlib/Analysis/LocallyConvex/Basic.lean
mans0954 Apr 5, 2025
b8c3a7e
Fix
mans0954 Apr 5, 2025
8ae80b3
Merge branch 'mans0954/polar_AbsConvex' into mans0954/bipolar-theorem
mans0954 Apr 5, 2025
af0c3ff
Get it building again
mans0954 Apr 5, 2025
dc1aa39
Better
mans0954 Apr 5, 2025
6e1d3a3
Merge branch 'mans0954/polar_AbsConvex' into mans0954/bipolar-theorem
mans0954 Apr 5, 2025
9c5c169
Build with sorry
mans0954 Apr 5, 2025
326c14b
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Apr 8, 2025
db6173c
Pin down sorry
mans0954 Apr 8, 2025
64eb847
weaken absConvexHull_zero_mem hypothesis
mans0954 Apr 8, 2025
c3a3437
Exact
mans0954 Apr 8, 2025
b522a28
Add zero_mem_absConvexHull
mans0954 Apr 8, 2025
fde0f10
Merge branch 'mans0954/zero_mem_absConvexHull' into mans0954/bipolar-…
mans0954 Apr 8, 2025
c825297
Use zero_mem_absConvexHull
mans0954 Apr 8, 2025
6ba56eb
Clarify
mans0954 Apr 9, 2025
5ebdc2e
Put bipolar theorem in own file
mans0954 Apr 9, 2025
eb6e4bd
Move LinearMap.polar_AbsConvex into Analysis/LocallyConvex/Bipolar
mans0954 Apr 9, 2025
beefe91
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Apr 12, 2025
a49b263
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Jun 12, 2025
9936341
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Jun 24, 2025
c0294a5
Add ref
mans0954 Jun 29, 2025
7f7245e
More ref
mans0954 Jun 29, 2025
f55e8c1
More doc
mans0954 Jun 29, 2025
ff6f4d8
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Jun 29, 2025
01a7822
An element of the topological dual has a closed kernel
mans0954 Jun 30, 2025
38bf89d
Notes
mans0954 Jun 30, 2025
47ad62b
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Jul 2, 2025
d14d43a
mem_span_of_iInf_ker_le_ker
mans0954 Jul 20, 2025
51b135a
Obtain V
mans0954 Jul 20, 2025
5e2e630
Bludgeon our way through
mans0954 Jul 20, 2025
de3a4e7
Progress
mans0954 Jul 20, 2025
f941430
Not sure I follow
mans0954 Jul 20, 2025
a8b1fb2
sup
mans0954 Jul 20, 2025
b7d0b85
Easy direction
mans0954 Jul 20, 2025
77070ac
iff
mans0954 Jul 20, 2025
04394aa
Get something that builds
mans0954 Jul 20, 2025
1fc13f9
Remove junk
mans0954 Jul 20, 2025
f450f66
Doc the def for now
mans0954 Jul 20, 2025
3f539ee
Remove the topology not needed for the theorem
mans0954 Jul 20, 2025
9fdfe50
Golf a bit
mans0954 Jul 20, 2025
14dca85
Tidy
mans0954 Jul 20, 2025
a1068ee
Move
mans0954 Jul 20, 2025
571f693
functional_mem_span_iff
mans0954 Jul 20, 2025
41d3f3c
Add Rudin as a reference
mans0954 Jul 20, 2025
1c0ca0e
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 Jul 21, 2025
b5dc975
Remove dupe
mans0954 Jul 21, 2025
284543c
Flip functional_mem_span_iff
mans0954 Jul 21, 2025
e2d33d4
toLinearMap₁₂
mans0954 Jul 21, 2025
318ad8b
plug in functional_mem_span_iff
mans0954 Jul 21, 2025
52ae1a4
Show surjective, subject to test5
mans0954 Jul 21, 2025
57c3503
Progress
mans0954 Jul 21, 2025
4188456
Progress
mans0954 Jul 21, 2025
0f7cde6
Show surjective
mans0954 Jul 21, 2025
8ba3ad1
Remove dead code
mans0954 Jul 21, 2025
997c567
Docstring
mans0954 Jul 21, 2025
f0fa9ff
Shake
mans0954 Jul 21, 2025
e7c7a03
Try to rephrase this in terms of
mans0954 Jul 21, 2025
4f23358
testnew
mans0954 Jul 21, 2025
16cc684
Tidy it up a bit
mans0954 Jul 21, 2025
ed83a0b
Golf
mans0954 Jul 22, 2025
eb76b90
Make a right meal of it
mans0954 Jul 22, 2025
df2813e
continuous iff note
mans0954 Jul 22, 2025
2a98691
Add some notes
mans0954 Jul 22, 2025
b2a2eb5
Golf
mans0954 Jul 22, 2025
88974d5
Golf
mans0954 Jul 22, 2025
8e62d54
Golf
mans0954 Jul 22, 2025
af6a1f3
Absorbant
mans0954 Jul 23, 2025
ea426cf
precise_absorb
mans0954 Jul 24, 2025
56504bf
Comment out check
mans0954 Jul 25, 2025
31cbdba
isBounded_of_Continuous'
mans0954 Jul 25, 2025
a8fbbe5
Shake
mans0954 Jul 26, 2025
5f752dc
Remove original isBounded_of_Continuous
mans0954 Jul 26, 2025
26ce3d1
Golf
mans0954 Jul 26, 2025
66fa50f
Restate in terms of a family of linear functionals
mans0954 Jul 26, 2025
0e41ae9
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Jul 26, 2025
de63d67
Simp only
mans0954 Jul 26, 2025
05fa872
suffices
mans0954 Jul 26, 2025
1b19f42
Tidy
mans0954 Jul 26, 2025
6928d0f
Restate as function
mans0954 Jul 26, 2025
6f90cb6
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 Jul 26, 2025
ea80bed
Fix
mans0954 Jul 26, 2025
3efb9ba
Remove precise_absorb
mans0954 Jul 26, 2025
27c1006
Add Conway as a reference
mans0954 Jul 27, 2025
66c3c9d
dualEmbedding_isInjective_of_separatingRight
mans0954 Jul 27, 2025
eb475de
right-separating, F linear equiv to topological dual of E
mans0954 Jul 27, 2025
9461729
Add the opposite equivalence
mans0954 Jul 27, 2025
18013fa
End of binomial theorem by contra
mans0954 Jul 27, 2025
b141ee5
One more sorry to go
mans0954 Jul 27, 2025
22c38b2
Bipolar
mans0954 Jul 27, 2025
e38e908
Remove dead code
mans0954 Jul 27, 2025
780684a
Remove a lot of my WiP comments
mans0954 Jul 27, 2025
dcc7e4a
Tidy up more
mans0954 Jul 27, 2025
fd5f63b
Golf
mans0954 Jul 27, 2025
e9a184a
Golf
mans0954 Jul 27, 2025
4de65cf
Golf
mans0954 Jul 27, 2025
05a5aca
Golf
mans0954 Jul 27, 2025
9ca880e
Golf
mans0954 Jul 27, 2025
385125d
Golf
mans0954 Jul 27, 2025
3ed0704
Golf
mans0954 Jul 27, 2025
1b23429
Fill in module docstring
mans0954 Jul 27, 2025
d7d4931
ADedecker's suggestion
mans0954 Jul 28, 2025
e4e37d2
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 Jul 28, 2025
2a19dd0
Glue the proof back together
mans0954 Jul 29, 2025
77bc66d
Remove unused result
mans0954 Jul 29, 2025
a850dfa
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Jul 30, 2025
655eeba
New ContinuousLinearMap.toLinearMap₂
mans0954 Jul 30, 2025
9f38491
Fix
mans0954 Jul 30, 2025
a9f3416
Slight Golf
mans0954 Jul 30, 2025
20c00c4
Fix
mans0954 Jul 30, 2025
7e2650c
Dot notation
mans0954 Jul 30, 2025
3dbd154
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 Aug 1, 2025
efe9df3
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 Aug 1, 2025
2b25beb
Seminorm.continuous_iff
mans0954 Aug 3, 2025
14770ca
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 Aug 3, 2025
8ef63d2
Fix
mans0954 Aug 3, 2025
9781dc0
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Aug 3, 2025
9255e77
Remove example
mans0954 Aug 3, 2025
c87b0ab
Add docstring
mans0954 Aug 4, 2025
c4b5398
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Aug 4, 2025
0260f15
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Aug 12, 2025
8629a9a
Remove unused argument
mans0954 Aug 12, 2025
45cf40a
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 Aug 12, 2025
8ae603b
shake
mans0954 Aug 12, 2025
327f51b
Use StrongDual
mans0954 Aug 12, 2025
86ee793
Fix reference
mans0954 Aug 13, 2025
7e9be62
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 Aug 15, 2025
a305eb3
Remove Mathlib.Data.Finsupp.Order
mans0954 Aug 15, 2025
b7ae5e5
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Aug 15, 2025
cc4b024
Update Mathlib/Analysis/LocallyConvex/WeakDual.lean
mans0954 Aug 15, 2025
1582a68
closedAbsConvexHull_empty
mans0954 Aug 16, 2025
32182d6
closure
mans0954 Aug 16, 2025
3fe585d
Merge branch 'master' into mans0954/functional_mem_span_iff
mans0954 Aug 16, 2025
1b79958
Merge branch 'mans0954/functional_mem_span_iff' into mans0954/bipolar…
mans0954 Aug 16, 2025
c0a817e
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Aug 19, 2025
4b1b425
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
5348f62
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
a74625e
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
a0f7e5f
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
7d6af67
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
a4f7b8a
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
ad5a7a7
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
539adc0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 19, 2025
e9e0c47
Fix
mans0954 Aug 19, 2025
da67fa8
Remove temporary lemma
mans0954 Aug 19, 2025
cdb9184
Golf
mans0954 Aug 19, 2025
80e2d65
Fix
mans0954 Aug 19, 2025
7680487
Golf
mans0954 Aug 19, 2025
af33319
Shorten
mans0954 Aug 20, 2025
6d69c3f
remove redundant opens
mans0954 Aug 20, 2025
16d7b9f
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Aug 20, 2025
9c8dcfc
Remove duplicate variables
mans0954 Aug 20, 2025
f0f254b
Relax 𝕜
mans0954 Aug 20, 2025
ef52c1f
Reduce hypothesis
mans0954 Aug 20, 2025
1ef125e
Move dualEmbedding_injective_of_separatingRight
mans0954 Aug 20, 2025
65d8111
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Aug 20, 2025
adeee3e
Use the StrongDual in HahnBanach/Separation
mans0954 Aug 21, 2025
82c0240
Use the StrongDual in HahnBanach/SeparatingDual
mans0954 Aug 21, 2025
520ef72
Use the StrongDual in HahnBanach/Extension
mans0954 Aug 21, 2025
b0116ff
Use StrongDual in WeakBilin.eval
mans0954 Aug 21, 2025
7611372
Use StrongDual in Analysis/LocallyConvex/WeakSpace
mans0954 Aug 21, 2025
c833ca1
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Aug 23, 2025
b9fc4f2
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 11, 2025
13d1f06
Shake
mans0954 Sep 11, 2025
4b9fd46
Update Mathlib/Topology/Algebra/Module/StrongTopology.lean
mans0954 Sep 12, 2025
c486102
Update Mathlib/Topology/Algebra/Module/WeakBilin.lean
mans0954 Sep 12, 2025
beb52e2
Update Mathlib/Analysis/LocallyConvex/AbsConvex.lean
mans0954 Sep 12, 2025
0ecc892
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 12, 2025
fc5191e
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 12, 2025
8c270ce
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 12, 2025
505efbc
Try moving stuff about
mans0954 Sep 13, 2025
ed4cfbb
Shake
mans0954 Sep 13, 2025
576b3bf
Move results around
mans0954 Sep 13, 2025
6dcdd5a
Remove artefact
mans0954 Sep 13, 2025
d42a780
Reduce imports
mans0954 Sep 13, 2025
03262af
Reduce imports
mans0954 Sep 13, 2025
85ee89d
WhiteSpace
mans0954 Sep 13, 2025
ce1a60d
Update docstrings
mans0954 Sep 13, 2025
f182f04
Add more precise reference
mans0954 Sep 13, 2025
f4bc804
Merge sections
mans0954 Sep 13, 2025
333c9ba
Outline the idea of the proof in comments
mans0954 Sep 13, 2025
c4f2bf9
Use a better name for 'Holding' fill in docstring
mans0954 Sep 14, 2025
6cabd88
Fix import
mans0954 Sep 14, 2025
02329a0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 14, 2025
97098e5
Fix
mans0954 Sep 14, 2025
732117e
Rename toLinearMap₂
mans0954 Sep 14, 2025
2791a64
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 14, 2025
e14d624
Move polar_AbsConvex
mans0954 Sep 14, 2025
234bc70
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 14, 2025
e15b6f6
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 14, 2025
1c6859a
Fix
mans0954 Sep 14, 2025
00500e3
Pull out variables
mans0954 Sep 14, 2025
f0d8934
Reorder
mans0954 Sep 14, 2025
c69aba4
Make closureOperator_polar_gc_empty_of_separatingLeft an example
mans0954 Sep 14, 2025
1738a29
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 18, 2025
45759e5
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 22, 2025
a89ebb3
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 26, 2025
4e57919
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 30, 2025
8ddacf6
Update Mathlib/Analysis/LocallyConvex/Polar.lean
mans0954 Sep 30, 2025
a8c1b91
Fix
mans0954 Sep 30, 2025
8209650
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 30, 2025
ef7534c
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 30, 2025
b479a9d
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 30, 2025
6580cd0
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 30, 2025
2190f9c
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 30, 2025
e08ab8a
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
mans0954 Sep 30, 2025
57de288
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 30, 2025
1b05b80
Update Mathlib/Topology/Algebra/Module/LinearSpan.lean
mans0954 Sep 30, 2025
767a423
Remove overlapping def
mans0954 Sep 30, 2025
4e41cde
Add docstring
mans0954 Sep 30, 2025
0f0658e
Update docstring
mans0954 Sep 30, 2025
d2d5cb6
Better assumption names
mans0954 Sep 30, 2025
75c772f
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Sep 30, 2025
1123906
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Oct 3, 2025
5dd3fb8
Merge branch 'master' into mans0954/bipolar-theorem
mans0954 Oct 9, 2025
d3ba373
Fix
mans0954 Oct 9, 2025
23ed474
Merge branch 'master' into mans0954/bipolar-theorem
faenuccio Jan 4, 2026
e27bf62
Update Mathlib/Analysis/LocallyConvex/Bipolar.lean
faenuccio Jan 4, 2026
b23db5e
try to fix
j-loreaux Mar 23, 2026
1483008
mk_all
j-loreaux Mar 23, 2026
c94a48d
Merge branch 'master' into mans0954/bipolar-theorem
j-loreaux Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Mathlib.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1968,6 +1968,7 @@ public import Mathlib.Analysis.LocallyConvex.AbsConvexOpen
public import Mathlib.Analysis.LocallyConvex.BalancedCoreHull
public import Mathlib.Analysis.LocallyConvex.Barrelled
public import Mathlib.Analysis.LocallyConvex.Basic
public import Mathlib.Analysis.LocallyConvex.Bipolar
public import Mathlib.Analysis.LocallyConvex.Bounded
public import Mathlib.Analysis.LocallyConvex.ContinuousOfBounded
public import Mathlib.Analysis.LocallyConvex.Montel
Expand Down Expand Up @@ -7246,6 +7247,7 @@ public import Mathlib.Topology.Algebra.Module.FiniteDimensionBilinear
public import Mathlib.Topology.Algebra.Module.LinearMap
public import Mathlib.Topology.Algebra.Module.LinearMapPiProd
public import Mathlib.Topology.Algebra.Module.LinearPMap
public import Mathlib.Topology.Algebra.Module.LinearSpan
public import Mathlib.Topology.Algebra.Module.LocallyConvex
public import Mathlib.Topology.Algebra.Module.ModuleTopology
public import Mathlib.Topology.Algebra.Module.Multilinear.Basic
Expand Down
4 changes: 4 additions & 0 deletions Mathlib/Analysis/LocallyConvex/AbsConvex.lean
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ theorem closedAbsConvexHull_closure_eq_closedAbsConvexHull {s : Set E} :
(closure_subset_closedAbsConvexHull (𝕜 := 𝕜) (E := E))))
((closedAbsConvexHull 𝕜).monotone subset_closure)

@[simp]
theorem closedAbsConvexHull_empty : closedAbsConvexHull 𝕜 (∅ : Set E) = ∅ :=
subset_eq_empty (closedAbsConvexHull_min (fun _ a ↦ a) AbsConvex.empty isClosed_empty) rfl

end AbsolutelyConvex

section NormedField
Expand Down
143 changes: 143 additions & 0 deletions Mathlib/Analysis/LocallyConvex/Bipolar.lean
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
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
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] :
B.polar_gc.closureOperator s = closedAbsConvexHull (E := WeakBilin B) 𝕜 s := by
simp [flip_polar_polar_eq]

end RCLike

end LinearMap
23 changes: 23 additions & 0 deletions Mathlib/Analysis/LocallyConvex/Polar.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ Authors: Moritz Doll, Kalle Kytölä
module

public import Mathlib.Analysis.Normed.Module.Basic
public import Mathlib.Analysis.RCLike.Lemmas
public import Mathlib.LinearAlgebra.SesquilinearForm.Basic
public import Mathlib.Topology.Algebra.Module.WeakBilin
public import Mathlib.Analysis.LocallyConvex.AbsConvex
public import Mathlib.Analysis.Normed.Module.Convex

/-!
# Polar set
Expand Down Expand Up @@ -261,3 +264,23 @@ theorem polar_univ : polar 𝕜 (univ : Set E) = {(0 : StrongDual 𝕜 E)} :=
end

end StrongDual

namespace LinearMap

section NormedField

variable [RCLike 𝕜] [AddCommMonoid E] [AddCommMonoid F]
variable [Module 𝕜 E] [Module 𝕜 F]

variable {B : E →ₗ[𝕜] F →ₗ[𝕜] 𝕜} (s : Set E)

open ComplexOrder in
theorem absConvex_polar : AbsConvex 𝕜 (B.polar s) := by
rw [polar_eq_biInter_preimage]
exact AbsConvex.iInter₂ fun i hi =>
⟨balanced_closedBall_zero.mulActionHom_preimage (f := (B i : (F →ₑ[(RingHom.id 𝕜)] 𝕜))),
(convex_RCLike_iff_convex_real.mpr (convex_closedBall 0 1)).linear_preimage _⟩

end NormedField

end LinearMap
32 changes: 1 addition & 31 deletions Mathlib/Analysis/LocallyConvex/WeakDual.lean
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public import Mathlib.Analysis.LocallyConvex.WithSeminorms
public import Mathlib.LinearAlgebra.Dual.Lemmas
public import Mathlib.LinearAlgebra.Finsupp.Span
public import Mathlib.Topology.Algebra.Module.WeakBilin
public import Mathlib.Topology.Algebra.Module.LinearSpan

/-!
# Weak Dual in Topological Vector Spaces
Expand Down Expand Up @@ -39,7 +40,6 @@ convex and we explicitly give a neighborhood basis in terms of the family of sem
## References

* [Bourbaki, *Topological Vector Spaces*][bourbaki1987]
* [Rudin, *Functional Analysis*][rudin1991]

## Tags

Expand Down Expand Up @@ -100,34 +100,6 @@ open scoped NNReal

section

section TopologicalRing

variable [Finite ι] [Field 𝕜] [t𝕜 : TopologicalSpace 𝕜] [IsTopologicalRing 𝕜]
[AddCommGroup E] [Module 𝕜 E] [T0Space 𝕜]

/- A linear functional `φ` can be expressed as a linear combination of 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𝕜
constructor
· exact 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)
· intro φ_cont
refine 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 only [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 `φ`
Expand Down Expand Up @@ -200,8 +172,6 @@ weak topology. -/
noncomputable def leftDualEquiv (hl : B.SeparatingLeft) : E ≃ₗ[𝕜] StrongDual 𝕜 (WeakBilin B.flip) :=
rightDualEquiv _ (LinearMap.flip_separatingRight.mpr hl)

end NontriviallyNormedField

end

end LinearMap
Expand Down
107 changes: 107 additions & 0 deletions Mathlib/Topology/Algebra/Module/LinearSpan.lean
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
Loading
Loading