Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 27 additions & 0 deletions Mathlib/Analysis/Convex/Intrinsic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ Authors: Paul Reichert, YaΓ«l Dillies
-/
module

import Mathlib.Analysis.Convex.Topology

public import Mathlib.Analysis.Normed.Affine.AddTorsorBases

/-!
Expand Down Expand Up @@ -440,6 +442,31 @@ protected theorem Convex.intrinsicClosure (hs : Convex π•œ s) : Convex π•œ (in

end Convex

section IntrinsicClosure

variable {E : Type*} [Field π•œ] [PartialOrder π•œ] [AddCommGroup E] [Module π•œ E] [TopologicalSpace E]
[IsTopologicalAddGroup E] [ContinuousConstSMul π•œ E]

open Homeomorph in
/-- If `x ∈ intrinsicInterior π•œ C` and `y ∈ intrinsicClosure π•œ C`, then the open segment
from `x` to `y` stays in `intrinsicInterior π•œ C`. This is the intrinsic-closure form;
the ambient-closure statement is the finite-dimensional corollary below. -/
theorem Convex.openSegment_intrinsicInterior_intrinsicClosure_subset_intrinsicInterior {C : Set E}
(hC : Convex π•œ C) {x y : E} (hx : x ∈ intrinsicInterior π•œ C) (hy : y ∈ intrinsicClosure π•œ C) :
openSegment π•œ x y βŠ† intrinsicInterior π•œ C := by
rcases mem_intrinsicInterior.1 hx with ⟨xA, hxA, rfl⟩
rcases mem_intrinsicClosure.1 hy with ⟨yA, hyA, rfl⟩
letI : Nonempty (affineSpan π•œ C) := ⟨xA⟩
let A := (affineSpan π•œ C).subtype.comp (AffineEquiv.vaddConst π•œ xA).toAffineMap
rw [intrinsicInterior, ← (vaddConst xA).image_interior_preimage_comp]
intro _ hz
simpa [A] using! Convex.openSegment_image_interior_closure_preimage_subset (A := A) hC
(by simpa [A] using! ((vaddConst xA).mem_interior_preimage_comp _ 0).2 (by simpa))
(by simpa [A] using! ((vaddConst xA).mem_closure_preimage_comp _ (yA -α΅₯ xA)).2 (by simpa))
(by simpa [A] using hz)

end IntrinsicClosure

private theorem aux {Ξ± Ξ² : Type*} [TopologicalSpace Ξ±] [TopologicalSpace Ξ²] (Ο† : Ξ± β‰ƒβ‚œ Ξ²)
(s : Set Ξ²) : (interior s).Nonempty ↔ (interior (Ο† ⁻¹' s)).Nonempty := by
rw [← Ο†.image_symm, ← Ο†.symm.image_interior, image_nonempty]
Expand Down
16 changes: 16 additions & 0 deletions Mathlib/Analysis/Convex/Topology.lean
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,22 @@ theorem Convex.openSegment_interior_closure_subset_interior {s : Set E} (hs : Co
rintro _ ⟨a, b, ha, hb, hab, rfl⟩
exact hs.combo_interior_closure_mem_interior hx hy ha hb.le hab

omit [TopologicalSpace E] [IsTopologicalAddGroup E] [ContinuousConstSMul π•œ E] in
/-- For a convex set `s`, the open segment between affine images of points in
`interior (A ⁻¹' s)` and `closure (A ⁻¹' s)` is contained in the affine image of
`interior (A ⁻¹' s)`. -/
theorem Convex.openSegment_image_interior_closure_preimage_subset {F : Type*}
[AddCommGroup F] [Module π•œ F] [TopologicalSpace F] [IsTopologicalAddGroup F]
[ContinuousConstSMul π•œ F] {A : F →ᡃ[π•œ] E} {s} (hs : Convex π•œ s)
{x y} (hx : x ∈ interior (A ⁻¹' s)) (hy : y ∈ closure (A ⁻¹' s)) :
openSegment π•œ (A x) (A y) βŠ† A '' interior (A ⁻¹' s) := by
rintro _ ⟨a, b, ha, hb, hab, rfl⟩
refine ⟨AffineMap.lineMap x y b, ?_, ?_⟩
Β· apply (hs.affine_preimage A).openSegment_interior_closure_subset_interior hx hy
refine ⟨a, b, ha, hb, hab, ?_⟩
rw [AffineMap.lineMap_apply_module, sub_eq_iff_eq_add.2 hab.symm]
Β· rw [A.apply_lineMap, AffineMap.lineMap_apply_module, sub_eq_iff_eq_add.2 hab.symm]

theorem Convex.openSegment_interior_self_subset_interior {s : Set E} (hs : Convex π•œ s) {x y : E}
(hx : x ∈ interior s) (hy : y ∈ s) : openSegment π•œ x y βŠ† interior s :=
hs.openSegment_interior_closure_subset_interior hx (subset_closure hy)
Expand Down
10 changes: 10 additions & 0 deletions Mathlib/Topology/Algebra/Module/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ theorem ContinuousNeg.of_continuousConstSMul [ContinuousConstSMul R M] : Continu

end

section Submodule

variable {R M : Type*} [Semiring R] [AddCommMonoid M] [Module R M] [TopologicalSpace M]
[ContinuousConstSMul R M]

instance Submodule.continuousConstSMul (S : Submodule R M) : ContinuousConstSMul R S :=
IsInducing.subtypeVal.continuousConstSMul id fun {_} {_} => rfl

end Submodule

section

variable {R : Type*} {M : Type*} [Ring R] [TopologicalSpace R] [TopologicalSpace M]
Expand Down
15 changes: 15 additions & 0 deletions Mathlib/Topology/Homeomorph/Defs.lean
Original file line number Diff line number Diff line change
Expand Up @@ -297,15 +297,30 @@ theorem isClosedEmbedding (h : X β‰ƒβ‚œ Y) : IsClosedEmbedding h :=
theorem preimage_closure (h : X β‰ƒβ‚œ Y) (s : Set Y) : h ⁻¹' closure s = closure (h ⁻¹' s) :=
h.isOpenMap.preimage_closure_eq_closure_preimage h.continuous _

omit [TopologicalSpace Z] in
theorem mem_closure_preimage_comp (e : X β‰ƒβ‚œ Y) (f : Y β†’ Z) {s : Set Z} (x : X) :
x ∈ closure ((f ∘ e) ⁻¹' s) ↔ e x ∈ closure (f ⁻¹' s) := by
rw [preimage_comp, ← e.preimage_closure, mem_preimage]

theorem image_closure (h : X β‰ƒβ‚œ Y) (s : Set X) : h '' closure s = closure (h '' s) := by
rw [← preimage_symm, preimage_closure]

theorem preimage_interior (h : X β‰ƒβ‚œ Y) (s : Set Y) : h ⁻¹' interior s = interior (h ⁻¹' s) :=
h.isOpenMap.preimage_interior_eq_interior_preimage h.continuous _

omit [TopologicalSpace Z] in
theorem mem_interior_preimage_comp (e : X β‰ƒβ‚œ Y) (f : Y β†’ Z) {s : Set Z} (x : X) :
x ∈ interior ((f ∘ e) ⁻¹' s) ↔ e x ∈ interior (f ⁻¹' s) := by
rw [preimage_comp, ← e.preimage_interior, mem_preimage]

theorem image_interior (h : X β‰ƒβ‚œ Y) (s : Set X) : h '' interior s = interior (h '' s) := by
rw [← preimage_symm, preimage_interior]

omit [TopologicalSpace Z] in
theorem image_interior_preimage_comp (e : X β‰ƒβ‚œ Y) (f : Y β†’ Z) (s : Set Z) :
(f ∘ e) '' interior ((f ∘ e) ⁻¹' s) = f '' interior (f ⁻¹' s) := by
simp only [preimage_comp, image_comp, e.image_interior, image_preimage]

theorem preimage_frontier (h : X β‰ƒβ‚œ Y) (s : Set Y) : h ⁻¹' frontier s = frontier (h ⁻¹' s) :=
h.isOpenMap.preimage_frontier_eq_frontier_preimage h.continuous _

Expand Down
Loading