Skip to content

Commit fbebe66

Browse files
committed
feat(Analysis/Convex/Function): composition of strictly and non-strictly convex functions (leanprover-community#40830)
We currently have composition lemmas for `StrictCon{vex/cave}On` of the form: ```lean theorem StrictConvexOn.comp : StrictConvexOn 𝕜 (f '' s) g → StrictMonoOn g (f '' s) → StrictConvexOn 𝕜 s f → s.InjOn f → StrictConvexOn 𝕜 s (g ∘ f) ``` If we let either function be convex instead of strictly convex we get: ```lean theorem ConvexOn.comp_strictConvexOn : ConvexOn 𝕜 (f '' s) g → StrictMonoOn g (f '' s) → StrictConvexOn 𝕜 s f → StrictConvexOn 𝕜 s (g ∘ f) theorem StrictConvexOn.comp_convexOn : StrictConvexOn 𝕜 (f '' s) g → MonotoneOn g (f '' s) → ConvexOn 𝕜 s f → s.InjOn f → StrictConvexOn 𝕜 s (g ∘ f) ``` In a `Module` these are both stronger than the original version (since `StrictConvexOn` implies `ConvexOn`), but they work over any `SMul`.
1 parent 324e878 commit fbebe66

1 file changed

Lines changed: 44 additions & 9 deletions

File tree

Mathlib/Analysis/Convex/Function.lean

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,23 +166,58 @@ theorem StrictConvexOn.comp (hg : StrictConvexOn 𝕜 (f '' s) g) (hf : StrictCo
166166
hf.2 hx hy hxy ha hb hab).trans <|
167167
hg.2 (mem_image_of_mem f hx) (mem_image_of_mem f hy) (mt (hf' hx hy) hxy) ha hb hab⟩
168168

169+
theorem StrictConcaveOn.comp_strictConvexOn (hg : StrictConcaveOn 𝕜 (f '' s) g)
170+
(hf : StrictConvexOn 𝕜 s f) (hg' : StrictAntiOn g (f '' s)) (hf' : s.InjOn f) :
171+
StrictConcaveOn 𝕜 s (g ∘ f) :=
172+
hg.dual.comp hf hg' hf'
173+
169174
theorem StrictConcaveOn.comp (hg : StrictConcaveOn 𝕜 (f '' s) g) (hf : StrictConcaveOn 𝕜 s f)
170175
(hg' : StrictMonoOn g (f '' s)) (hf' : s.InjOn f) : StrictConcaveOn 𝕜 s (g ∘ f) :=
171-
⟨hf.1, fun _ hx _ hy hxy _ _ ha hb hab =>
172-
(hg.2 (mem_image_of_mem f hx) (mem_image_of_mem f hy) (mt (hf' hx hy) hxy) ha hb hab).trans <|
173-
hg' (hg.1 (mem_image_of_mem f hx) (mem_image_of_mem f hy) ha.le hb.le hab)
174-
(mem_image_of_mem f <| hf.1 hx hy ha.le hb.le hab) <|
175-
hf.2 hx hy hxy ha hb hab⟩
176+
hg.comp_strictConvexOn (β := βᵒᵈ) hf hg'.dual hf'
176177

177178
theorem StrictConvexOn.comp_strictConcaveOn (hg : StrictConvexOn 𝕜 (f '' s) g)
178179
(hf : StrictConcaveOn 𝕜 s f) (hg' : StrictAntiOn g (f '' s)) (hf' : s.InjOn f) :
179180
StrictConvexOn 𝕜 s (g ∘ f) :=
180181
hg.dual.comp hf hg' hf'
181182

182-
theorem StrictConcaveOn.comp_strictConvexOn (hg : StrictConcaveOn 𝕜 (f '' s) g)
183-
(hf : StrictConvexOn 𝕜 s f) (hg' : StrictAntiOn g (f '' s)) (hf' : s.InjOn f) :
184-
StrictConcaveOn 𝕜 s (g ∘ f) :=
185-
hg.dual.comp hf hg' hf'
183+
theorem ConvexOn.comp_strictConvexOn (hg : ConvexOn 𝕜 (f '' s) g) (hf : StrictConvexOn 𝕜 s f)
184+
(hg' : StrictMonoOn g (f '' s)) : StrictConvexOn 𝕜 s (g ∘ f) := by
185+
refine ⟨hf.left, fun x hx y hy hxy a b ha hb hab ↦ .trans_le (b := g (a • f x + b • f y)) ?_ ?_⟩
186+
· refine hg' (mem_image_of_mem f <| hf.1 hx hy ha.le hb.le hab) ?_ <| hf.2 hx hy hxy ha hb hab
187+
exact hg.left (mem_image_of_mem f hx) (mem_image_of_mem f hy) ha.le hb.le hab
188+
· exact hg.right (mem_image_of_mem f hx) (mem_image_of_mem f hy) ha.le hb.le hab
189+
190+
theorem ConcaveOn.comp_strictConvexOn (hg : ConcaveOn 𝕜 (f '' s) g) (hf : StrictConvexOn 𝕜 s f)
191+
(hg' : StrictAntiOn g (f '' s)) : StrictConcaveOn 𝕜 s (g ∘ f) :=
192+
hg.dual.comp_strictConvexOn hf hg'
193+
194+
theorem ConcaveOn.comp_strictConcaveOn (hg : ConcaveOn 𝕜 (f '' s) g) (hf : StrictConcaveOn 𝕜 s f)
195+
(hg' : StrictMonoOn g (f '' s)) : StrictConcaveOn 𝕜 s (g ∘ f) :=
196+
hg.comp_strictConvexOn (β := βᵒᵈ) hf hg'.dual
197+
198+
theorem ConvexOn.comp_strictConcaveOn (hg : ConvexOn 𝕜 (f '' s) g) (hf : StrictConcaveOn 𝕜 s f)
199+
(hg' : StrictAntiOn g (f '' s)) : StrictConvexOn 𝕜 s (g ∘ f) :=
200+
hg.dual.comp_strictConcaveOn hf hg'
201+
202+
theorem StrictConvexOn.comp_convexOn (hg : StrictConvexOn 𝕜 (f '' s) g) (hf : ConvexOn 𝕜 s f)
203+
(hg' : MonotoneOn g (f '' s)) (hf' : s.InjOn f) : StrictConvexOn 𝕜 s (g ∘ f) := by
204+
refine ⟨hf.left, fun x hx y hy hxy a b ha hb hab ↦ .trans_le' (b := g (a • f x + b • f y)) ?_ ?_⟩
205+
· exact hg.right (mem_image_of_mem f hx) (mem_image_of_mem f hy) (hf'.ne hx hy hxy) ha hb hab
206+
· refine hg' ?_ ?_ <| hf.right hx hy ha.le hb.le hab
207+
· exact mem_image_of_mem f <| hf.left hx hy ha.le hb.le hab
208+
· exact hg.left (mem_image_of_mem f hx) (mem_image_of_mem f hy) ha.le hb.le hab
209+
210+
theorem StrictConcaveOn.comp_convexOn (hg : StrictConcaveOn 𝕜 (f '' s) g) (hf : ConvexOn 𝕜 s f)
211+
(hg' : AntitoneOn g (f '' s)) (hf' : s.InjOn f) : StrictConcaveOn 𝕜 s (g ∘ f) :=
212+
hg.dual.comp_convexOn hf hg' hf'
213+
214+
theorem StrictConvexOn.comp_concaveOn (hg : StrictConvexOn 𝕜 (f '' s) g) (hf : ConcaveOn 𝕜 s f)
215+
(hg' : AntitoneOn g (f '' s)) (hf' : s.InjOn f) : StrictConvexOn 𝕜 s (g ∘ f) :=
216+
hg.comp_convexOn (β := βᵒᵈ) hf hg'.dual hf'
217+
218+
theorem StrictConcaveOn.comp_concaveOn (hg : StrictConcaveOn 𝕜 (f '' s) g) (hf : ConcaveOn 𝕜 s f)
219+
(hg' : MonotoneOn g (f '' s)) (hf' : s.InjOn f) : StrictConcaveOn 𝕜 s (g ∘ f) :=
220+
hg.dual.comp_concaveOn hf hg' hf'
186221

187222
end SMul
188223

0 commit comments

Comments
 (0)