analysis.convex.extrema
⟷
Mathlib.Analysis.Convex.Extrema
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,7 +5,7 @@ Authors: Frédéric Dupuis
-/
import Analysis.Convex.Function
import Topology.Algebra.Affine
-import Topology.LocalExtr
+import Topology.Order.LocalExtr
import Topology.MetricSpace.Basic
#align_import analysis.convex.extrema from "leanprover-community/mathlib"@"814d76e2247d5ba8bc024843552da1278bfe9e5c"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -35,7 +35,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
(h_local_min : IsLocalMinOn f (Icc a b) a) (h_conv : ConvexOn ℝ (Icc a b) f) :
IsMinOn f (Icc a b) a := by
rintro c hc; dsimp only [mem_set_of_eq]
- rw [IsLocalMinOn, nhdsWithin_Icc_eq_nhdsWithin_Ici a_lt_b] at h_local_min
+ rw [IsLocalMinOn, nhdsWithin_Icc_eq_nhdsWithin_Ici a_lt_b] at h_local_min
rcases hc.1.eq_or_lt with (rfl | a_lt_c); · exact le_rfl
have H₁ : ∀ᶠ y in 𝓝[>] a, f a ≤ f y :=
h_local_min.filter_mono (nhdsWithin_mono _ Ioi_subset_Ici_self)
@@ -66,7 +66,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
simpa only [maps_to', ← segment_eq_image_lineMap] using h_conv.1.segment_subset a_in_s x_in_s
have fg_local_min_on : IsLocalMinOn (f ∘ g) (Icc 0 1) 0 :=
by
- rw [← hg0] at h_localmin
+ rw [← hg0] at h_localmin
exact h_localmin.comp_continuous_on h_maps hgc.continuous_on (left_mem_Icc.2 zero_le_one)
have fg_min_on : IsMinOn (f ∘ g) (Icc 0 1 : Set ℝ) 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -43,7 +43,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
rcases(H₁.and H₂).exists with ⟨y, hfy, hy_ac⟩
rcases(Convex.mem_Ioc a_lt_c).mp hy_ac with ⟨ya, yc, ya₀, yc₀, yac, rfl⟩
suffices : ya • f a + yc • f a ≤ ya • f a + yc • f c
- exact (smul_le_smul_iff_of_pos yc₀).1 (le_of_add_le_add_left this)
+ exact (smul_le_smul_iff_of_pos_left yc₀).1 (le_of_add_le_add_left this)
calc
ya • f a + yc • f a = f a := by rw [← add_smul, yac, one_smul]
_ ≤ f (ya * a + yc * c) := hfy
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Frédéric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Frédéric Dupuis
-/
-import Mathbin.Analysis.Convex.Function
-import Mathbin.Topology.Algebra.Affine
-import Mathbin.Topology.LocalExtr
-import Mathbin.Topology.MetricSpace.Basic
+import Analysis.Convex.Function
+import Topology.Algebra.Affine
+import Topology.LocalExtr
+import Topology.MetricSpace.Basic
#align_import analysis.convex.extrema from "leanprover-community/mathlib"@"814d76e2247d5ba8bc024843552da1278bfe9e5c"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Frédéric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Frédéric Dupuis
-
-! This file was ported from Lean 3 source module analysis.convex.extrema
-! leanprover-community/mathlib commit 814d76e2247d5ba8bc024843552da1278bfe9e5c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Convex.Function
import Mathbin.Topology.Algebra.Affine
import Mathbin.Topology.LocalExtr
import Mathbin.Topology.MetricSpace.Basic
+#align_import analysis.convex.extrema from "leanprover-community/mathlib"@"814d76e2247d5ba8bc024843552da1278bfe9e5c"
+
/-!
# Minima and maxima of convex functions
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -31,6 +31,7 @@ open Set Filter Function
open scoped Classical Topology
+#print IsMinOn.of_isLocalMinOn_of_convexOn_Icc /-
/-- Helper lemma for the more general case: `is_min_on.of_is_local_min_on_of_convex_on`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_lt_b : a < b)
@@ -51,7 +52,9 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
_ ≤ f (ya * a + yc * c) := hfy
_ ≤ ya • f a + yc • f c := h_conv.2 (left_mem_Icc.2 a_lt_b.le) hc ya₀ yc₀.le yac
#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Icc
+-/
+#print IsMinOn.of_isLocalMinOn_of_convexOn /-
/-- A local minimum of a convex function is a global minimum, restricted to a set `s`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a ∈ s)
@@ -74,22 +77,29 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
exact (h_conv.comp_affine_map g).Subset h_maps (convex_Icc 0 1)
simpa only [hg0, hg1, comp_app, mem_set_of_eq] using fg_min_on (right_mem_Icc.2 zero_le_one)
#align is_min_on.of_is_local_min_on_of_convex_on IsMinOn.of_isLocalMinOn_of_convexOn
+-/
+#print IsMaxOn.of_isLocalMaxOn_of_concaveOn /-
/-- A local maximum of a concave function is a global maximum, restricted to a set `s`. -/
theorem IsMaxOn.of_isLocalMaxOn_of_concaveOn {f : E → β} {a : E} (a_in_s : a ∈ s)
(h_localmax : IsLocalMaxOn f s a) (h_conc : ConcaveOn ℝ s f) : IsMaxOn f s a :=
@IsMinOn.of_isLocalMinOn_of_convexOn _ βᵒᵈ _ _ _ _ _ _ _ _ s f a a_in_s h_localmax h_conc
#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOn
+-/
+#print IsMinOn.of_isLocalMin_of_convex_univ /-
/-- A local minimum of a convex function is a global minimum. -/
theorem IsMinOn.of_isLocalMin_of_convex_univ {f : E → β} {a : E} (h_local_min : IsLocalMin f a)
(h_conv : ConvexOn ℝ univ f) : ∀ x, f a ≤ f x := fun x =>
(IsMinOn.of_isLocalMinOn_of_convexOn (mem_univ a) (h_local_min.on univ) h_conv) (mem_univ x)
#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univ
+-/
+#print IsMaxOn.of_isLocalMax_of_convex_univ /-
/-- A local maximum of a concave function is a global maximum. -/
theorem IsMaxOn.of_isLocalMax_of_convex_univ {f : E → β} {a : E} (h_local_max : IsLocalMax f a)
(h_conc : ConcaveOn ℝ univ f) : ∀ x, f x ≤ f a :=
@IsMinOn.of_isLocalMin_of_convex_univ _ βᵒᵈ _ _ _ _ _ _ _ _ f a h_local_max h_conc
#align is_max_on.of_is_local_max_of_convex_univ IsMaxOn.of_isLocalMax_of_convex_univ
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -50,7 +50,6 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
ya • f a + yc • f a = f a := by rw [← add_smul, yac, one_smul]
_ ≤ f (ya * a + yc * c) := hfy
_ ≤ ya • f a + yc • f c := h_conv.2 (left_mem_Icc.2 a_lt_b.le) hc ya₀ yc₀.le yac
-
#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Icc
/-- A local minimum of a convex function is a global minimum, restricted to a set `s`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -37,7 +37,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
(h_local_min : IsLocalMinOn f (Icc a b) a) (h_conv : ConvexOn ℝ (Icc a b) f) :
IsMinOn f (Icc a b) a := by
rintro c hc; dsimp only [mem_set_of_eq]
- rw [IsLocalMinOn, nhdsWithin_Icc_eq_nhdsWithin_Ici a_lt_b] at h_local_min
+ rw [IsLocalMinOn, nhdsWithin_Icc_eq_nhdsWithin_Ici a_lt_b] at h_local_min
rcases hc.1.eq_or_lt with (rfl | a_lt_c); · exact le_rfl
have H₁ : ∀ᶠ y in 𝓝[>] a, f a ≤ f y :=
h_local_min.filter_mono (nhdsWithin_mono _ Ioi_subset_Ici_self)
@@ -67,7 +67,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
simpa only [maps_to', ← segment_eq_image_lineMap] using h_conv.1.segment_subset a_in_s x_in_s
have fg_local_min_on : IsLocalMinOn (f ∘ g) (Icc 0 1) 0 :=
by
- rw [← hg0] at h_localmin
+ rw [← hg0] at h_localmin
exact h_localmin.comp_continuous_on h_maps hgc.continuous_on (left_mem_Icc.2 zero_le_one)
have fg_min_on : IsMinOn (f ∘ g) (Icc 0 1 : Set ℝ) 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -29,7 +29,7 @@ variable {E β : Type _} [AddCommGroup E] [TopologicalSpace E] [Module ℝ E] [T
open Set Filter Function
-open Classical Topology
+open scoped Classical Topology
/-- Helper lemma for the more general case: `is_min_on.of_is_local_min_on_of_convex_on`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,12 +31,6 @@ open Set Filter Function
open Classical Topology
-/- warning: is_min_on.of_is_local_min_on_of_convex_on_Icc -> IsMinOn.of_isLocalMinOn_of_convexOn_Icc is a dubious translation:
-lean 3 declaration is
- forall {β : Type.{u1}} [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)) _inst_7))] {f : Real -> β} {a : Real} {b : Real}, (LT.lt.{0} Real Real.hasLt a b) -> (IsLocalMinOn.{0, u1} Real β (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.preorder a b) a) -> (ConvexOn.{0, 0, u1} Real Real β Real.orderedSemiring Real.addCommMonoid (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (Mul.toSMul.{0} Real Real.hasMul) (SMulZeroClass.toHasSmul.{0, u1} Real β (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)) _inst_7)))) (Set.Icc.{0} Real Real.preorder a b) f) -> (IsMinOn.{0, u1} Real β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.preorder a b) a)
-but is expected to have type
- forall {β : Type.{u1}} [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : Real -> β} {a : Real} {b : Real}, (LT.lt.{0} Real Real.instLTReal a b) -> (IsLocalMinOn.{0, u1} Real β (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.instPreorderReal a b) a) -> (ConvexOn.{0, 0, u1} Real Real β Real.orderedSemiring Real.instAddCommMonoidReal (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (Algebra.toSMul.{0, 0} Real Real Real.instCommSemiringReal Real.semiring (Algebra.id.{0} Real Real.instCommSemiringReal)) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.Icc.{0} Real Real.instPreorderReal a b) f) -> (IsMinOn.{0, u1} Real β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.instPreorderReal a b) a)
-Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Iccₓ'. -/
/-- Helper lemma for the more general case: `is_min_on.of_is_local_min_on_of_convex_on`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_lt_b : a < b)
@@ -59,12 +53,6 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Icc
-/- warning: is_min_on.of_is_local_min_on_of_convex_on -> IsMinOn.of_isLocalMinOn_of_convexOn is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {s : Set.{u1} E} {f : E -> β} {a : E}, (Membership.Mem.{u1, u1} E (Set.{u1} E) (Set.hasMem.{u1} E) a s) -> (IsLocalMinOn.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) s f) -> (IsMinOn.{u1, u2} E β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a)
-but is expected to have type
- forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {s : Set.{u2} E} {f : E -> β} {a : E}, (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) a s) -> (IsLocalMinOn.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a) -> (ConvexOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) s f) -> (IsMinOn.{u2, u1} E β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a)
-Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_on_of_convex_on IsMinOn.of_isLocalMinOn_of_convexOnₓ'. -/
/-- A local minimum of a convex function is a global minimum, restricted to a set `s`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a ∈ s)
@@ -88,36 +76,18 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
simpa only [hg0, hg1, comp_app, mem_set_of_eq] using fg_min_on (right_mem_Icc.2 zero_le_one)
#align is_min_on.of_is_local_min_on_of_convex_on IsMinOn.of_isLocalMinOn_of_convexOn
-/- warning: is_max_on.of_is_local_max_on_of_concave_on -> IsMaxOn.of_isLocalMaxOn_of_concaveOn is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {s : Set.{u1} E} {f : E -> β} {a : E}, (Membership.Mem.{u1, u1} E (Set.{u1} E) (Set.hasMem.{u1} E) a s) -> (IsLocalMaxOn.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) s f) -> (IsMaxOn.{u1, u2} E β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a)
-but is expected to have type
- forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {s : Set.{u2} E} {f : E -> β} {a : E}, (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) a s) -> (IsLocalMaxOn.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a) -> (ConcaveOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) s f) -> (IsMaxOn.{u2, u1} E β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a)
-Case conversion may be inaccurate. Consider using '#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOnₓ'. -/
/-- A local maximum of a concave function is a global maximum, restricted to a set `s`. -/
theorem IsMaxOn.of_isLocalMaxOn_of_concaveOn {f : E → β} {a : E} (a_in_s : a ∈ s)
(h_localmax : IsLocalMaxOn f s a) (h_conc : ConcaveOn ℝ s f) : IsMaxOn f s a :=
@IsMinOn.of_isLocalMinOn_of_convexOn _ βᵒᵈ _ _ _ _ _ _ _ _ s f a a_in_s h_localmax h_conc
#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOn
-/- warning: is_min_on.of_is_local_min_of_convex_univ -> IsMinOn.of_isLocalMin_of_convex_univ is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f a) (f x))
-but is expected to have type
- forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConvexOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f a) (f x))
-Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univₓ'. -/
/-- A local minimum of a convex function is a global minimum. -/
theorem IsMinOn.of_isLocalMin_of_convex_univ {f : E → β} {a : E} (h_local_min : IsLocalMin f a)
(h_conv : ConvexOn ℝ univ f) : ∀ x, f a ≤ f x := fun x =>
(IsMinOn.of_isLocalMinOn_of_convexOn (mem_univ a) (h_local_min.on univ) h_conv) (mem_univ x)
#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univ
-/- warning: is_max_on.of_is_local_max_of_convex_univ -> IsMaxOn.of_isLocalMax_of_convex_univ is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f x) (f a))
-but is expected to have type
- forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConcaveOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f x) (f a))
-Case conversion may be inaccurate. Consider using '#align is_max_on.of_is_local_max_of_convex_univ IsMaxOn.of_isLocalMax_of_convex_univₓ'. -/
/-- A local maximum of a concave function is a global maximum. -/
theorem IsMaxOn.of_isLocalMax_of_convex_univ {f : E → β} {a : E} (h_local_max : IsLocalMax f a)
(h_conc : ConcaveOn ℝ univ f) : ∀ x, f x ≤ f a :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -42,11 +42,9 @@ Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_
theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_lt_b : a < b)
(h_local_min : IsLocalMinOn f (Icc a b) a) (h_conv : ConvexOn ℝ (Icc a b) f) :
IsMinOn f (Icc a b) a := by
- rintro c hc
- dsimp only [mem_set_of_eq]
+ rintro c hc; dsimp only [mem_set_of_eq]
rw [IsLocalMinOn, nhdsWithin_Icc_eq_nhdsWithin_Ici a_lt_b] at h_local_min
- rcases hc.1.eq_or_lt with (rfl | a_lt_c)
- · exact le_rfl
+ rcases hc.1.eq_or_lt with (rfl | a_lt_c); · exact le_rfl
have H₁ : ∀ᶠ y in 𝓝[>] a, f a ≤ f y :=
h_local_min.filter_mono (nhdsWithin_mono _ Ioi_subset_Ici_self)
have H₂ : ∀ᶠ y in 𝓝[>] a, y ∈ Ioc a c := Ioc_mem_nhdsWithin_Ioi (left_mem_Ico.2 a_lt_c)
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -104,7 +104,7 @@ theorem IsMaxOn.of_isLocalMaxOn_of_concaveOn {f : E → β} {a : E} (a_in_s : a
/- warning: is_min_on.of_is_local_min_of_convex_univ -> IsMinOn.of_isLocalMin_of_convex_univ is a dubious translation:
lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f a) (f x))
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f a) (f x))
but is expected to have type
forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConvexOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f a) (f x))
Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univₓ'. -/
@@ -116,7 +116,7 @@ theorem IsMinOn.of_isLocalMin_of_convex_univ {f : E → β} {a : E} (h_local_min
/- warning: is_max_on.of_is_local_max_of_convex_univ -> IsMaxOn.of_isLocalMax_of_convex_univ is a dubious translation:
lean 3 declaration is
- forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f x) (f a))
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toHasLe.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f x) (f a))
but is expected to have type
forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConcaveOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f x) (f a))
Case conversion may be inaccurate. Consider using '#align is_max_on.of_is_local_max_of_convex_univ IsMaxOn.of_isLocalMax_of_convex_univₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/347636a7a80595d55bedf6e6fbd996a3c39da69a
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Frédéric Dupuis
! This file was ported from Lean 3 source module analysis.convex.extrema
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 814d76e2247d5ba8bc024843552da1278bfe9e5c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.MetricSpace.Basic
/-!
# Minima and maxima of convex functions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We show that if a function `f : E → β` is convex, then a local minimum is also
a global minimum, and likewise for concave functions.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/c9236f47f5b9df573443aa499c0d3968769628b7
@@ -28,6 +28,12 @@ open Set Filter Function
open Classical Topology
+/- warning: is_min_on.of_is_local_min_on_of_convex_on_Icc -> IsMinOn.of_isLocalMinOn_of_convexOn_Icc is a dubious translation:
+lean 3 declaration is
+ forall {β : Type.{u1}} [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)) _inst_7))] {f : Real -> β} {a : Real} {b : Real}, (LT.lt.{0} Real Real.hasLt a b) -> (IsLocalMinOn.{0, u1} Real β (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.preorder a b) a) -> (ConvexOn.{0, 0, u1} Real Real β Real.orderedSemiring Real.addCommMonoid (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (Mul.toSMul.{0} Real Real.hasMul) (SMulZeroClass.toHasSmul.{0, u1} Real β (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} β (AddMonoid.toAddZeroClass.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)) _inst_7)))) (Set.Icc.{0} Real Real.preorder a b) f) -> (IsMinOn.{0, u1} Real β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.preorder a b) a)
+but is expected to have type
+ forall {β : Type.{u1}} [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : Real -> β} {a : Real} {b : Real}, (LT.lt.{0} Real Real.instLTReal a b) -> (IsLocalMinOn.{0, u1} Real β (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.instPreorderReal a b) a) -> (ConvexOn.{0, 0, u1} Real Real β Real.orderedSemiring Real.instAddCommMonoidReal (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (Algebra.toSMul.{0, 0} Real Real Real.instCommSemiringReal Real.semiring (Algebra.id.{0} Real Real.instCommSemiringReal)) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.Icc.{0} Real Real.instPreorderReal a b) f) -> (IsMinOn.{0, u1} Real β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f (Set.Icc.{0} Real Real.instPreorderReal a b) a)
+Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Iccₓ'. -/
/-- Helper lemma for the more general case: `is_min_on.of_is_local_min_on_of_convex_on`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_lt_b : a < b)
@@ -52,6 +58,12 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Icc
+/- warning: is_min_on.of_is_local_min_on_of_convex_on -> IsMinOn.of_isLocalMinOn_of_convexOn is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {s : Set.{u1} E} {f : E -> β} {a : E}, (Membership.Mem.{u1, u1} E (Set.{u1} E) (Set.hasMem.{u1} E) a s) -> (IsLocalMinOn.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) s f) -> (IsMinOn.{u1, u2} E β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a)
+but is expected to have type
+ forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {s : Set.{u2} E} {f : E -> β} {a : E}, (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) a s) -> (IsLocalMinOn.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a) -> (ConvexOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) s f) -> (IsMinOn.{u2, u1} E β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a)
+Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_on_of_convex_on IsMinOn.of_isLocalMinOn_of_convexOnₓ'. -/
/-- A local minimum of a convex function is a global minimum, restricted to a set `s`.
-/
theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a ∈ s)
@@ -75,18 +87,36 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
simpa only [hg0, hg1, comp_app, mem_set_of_eq] using fg_min_on (right_mem_Icc.2 zero_le_one)
#align is_min_on.of_is_local_min_on_of_convex_on IsMinOn.of_isLocalMinOn_of_convexOn
+/- warning: is_max_on.of_is_local_max_on_of_concave_on -> IsMaxOn.of_isLocalMaxOn_of_concaveOn is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {s : Set.{u1} E} {f : E -> β} {a : E}, (Membership.Mem.{u1, u1} E (Set.{u1} E) (Set.hasMem.{u1} E) a s) -> (IsLocalMaxOn.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) s f) -> (IsMaxOn.{u1, u2} E β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f s a)
+but is expected to have type
+ forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {s : Set.{u2} E} {f : E -> β} {a : E}, (Membership.mem.{u2, u2} E (Set.{u2} E) (Set.instMembershipSet.{u2} E) a s) -> (IsLocalMaxOn.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a) -> (ConcaveOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) s f) -> (IsMaxOn.{u2, u1} E β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f s a)
+Case conversion may be inaccurate. Consider using '#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOnₓ'. -/
/-- A local maximum of a concave function is a global maximum, restricted to a set `s`. -/
theorem IsMaxOn.of_isLocalMaxOn_of_concaveOn {f : E → β} {a : E} (a_in_s : a ∈ s)
(h_localmax : IsLocalMaxOn f s a) (h_conc : ConcaveOn ℝ s f) : IsMaxOn f s a :=
@IsMinOn.of_isLocalMinOn_of_convexOn _ βᵒᵈ _ _ _ _ _ _ _ _ s f a a_in_s h_localmax h_conc
#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOn
+/- warning: is_min_on.of_is_local_min_of_convex_univ -> IsMinOn.of_isLocalMin_of_convex_univ is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConvexOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f a) (f x))
+but is expected to have type
+ forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMin.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConvexOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f a) (f x))
+Case conversion may be inaccurate. Consider using '#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univₓ'. -/
/-- A local minimum of a convex function is a global minimum. -/
theorem IsMinOn.of_isLocalMin_of_convex_univ {f : E → β} {a : E} (h_local_min : IsLocalMin f a)
(h_conv : ConvexOn ℝ univ f) : ∀ x, f a ≤ f x := fun x =>
(IsMinOn.of_isLocalMinOn_of_convexOn (mem_univ a) (h_local_min.on univ) h_conv) (mem_univ x)
#align is_min_on.of_is_local_min_of_convex_univ IsMinOn.of_isLocalMin_of_convex_univ
+/- warning: is_max_on.of_is_local_max_of_convex_univ -> IsMaxOn.of_isLocalMax_of_convex_univ is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} {β : Type.{u2}} [_inst_1 : AddCommGroup.{u1} E] [_inst_2 : TopologicalSpace.{u1} E] [_inst_3 : Module.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u1} E _inst_2 (AddCommGroup.toAddGroup.{u1} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u1} Real E (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u2} β] [_inst_7 : Module.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))] [_inst_8 : OrderedSMul.{0, u2} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u2} Real β Real.monoidWithZero (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (OrderedAddCommMonoid.toAddCommMonoid.{u2} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u1, u2} E β _inst_2 (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6)) f a) -> (ConcaveOn.{0, u1, u2} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u2} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u2} β _inst_6)) (SMulZeroClass.toHasSmul.{0, u1} Real E (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (SMulWithZero.toSmulZeroClass.{0, u1} Real E (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (MulActionWithZero.toSMulWithZero.{0, u1} Real E (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u1} E (AddMonoid.toAddZeroClass.{u1} E (AddCommMonoid.toAddMonoid.{u1} E (AddCommGroup.toAddCommMonoid.{u1} E _inst_1)))) (Module.toMulActionWithZero.{0, u1} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u1} E _inst_1) _inst_3)))) (SMulZeroClass.toHasSmul.{0, u2} Real β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real β (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real Real.semiring)))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real β (Semiring.toMonoidWithZero.{0} Real Real.semiring) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6))))) (Module.toMulActionWithZero.{0, u2} Real β Real.semiring (AddCommGroup.toAddCommMonoid.{u2} β (OrderedAddCommGroup.toAddCommGroup.{u2} β _inst_6)) _inst_7)))) (Set.univ.{u1} E) f) -> (forall (x : E), LE.le.{u2} β (Preorder.toLE.{u2} β (PartialOrder.toPreorder.{u2} β (OrderedAddCommGroup.toPartialOrder.{u2} β _inst_6))) (f x) (f a))
+but is expected to have type
+ forall {E : Type.{u2}} {β : Type.{u1}} [_inst_1 : AddCommGroup.{u2} E] [_inst_2 : TopologicalSpace.{u2} E] [_inst_3 : Module.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1)] [_inst_4 : TopologicalAddGroup.{u2} E _inst_2 (AddCommGroup.toAddGroup.{u2} E _inst_1)] [_inst_5 : ContinuousSMul.{0, u2} Real E (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) _inst_2] [_inst_6 : OrderedAddCommGroup.{u1} β] [_inst_7 : Module.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))] [_inst_8 : OrderedSMul.{0, u1} Real β Real.orderedSemiring (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (AddMonoid.toZero.{u1} β (AddCommMonoid.toAddMonoid.{u1} β (OrderedAddCommMonoid.toAddCommMonoid.{u1} β (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7))] {f : E -> β} {a : E}, (IsLocalMax.{u2, u1} E β _inst_2 (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6)) f a) -> (ConcaveOn.{0, u2, u1} Real E β Real.orderedSemiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) (OrderedCancelAddCommMonoid.toOrderedAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) (SMulZeroClass.toSMul.{0, u2} Real E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (SMulWithZero.toSMulZeroClass.{0, u2} Real E Real.instZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real E Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E _inst_1))))) (Module.toMulActionWithZero.{0, u2} Real E Real.semiring (AddCommGroup.toAddCommMonoid.{u2} E _inst_1) _inst_3)))) (SMulZeroClass.toSMul.{0, u1} Real β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real β Real.instZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real β Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β (OrderedAddCommGroup.toAddCommGroup.{u1} β _inst_6)))))) (Module.toMulActionWithZero.{0, u1} Real β Real.semiring (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} β (OrderedAddCommGroup.toOrderedCancelAddCommMonoid.{u1} β _inst_6)) _inst_7)))) (Set.univ.{u2} E) f) -> (forall (x : E), LE.le.{u1} β (Preorder.toLE.{u1} β (PartialOrder.toPreorder.{u1} β (OrderedAddCommGroup.toPartialOrder.{u1} β _inst_6))) (f x) (f a))
+Case conversion may be inaccurate. Consider using '#align is_max_on.of_is_local_max_of_convex_univ IsMaxOn.of_isLocalMax_of_convex_univₓ'. -/
/-- A local maximum of a concave function is a global maximum. -/
theorem IsMaxOn.of_isLocalMax_of_convex_univ {f : E → β} {a : E} (h_local_max : IsLocalMax f a)
(h_conc : ConcaveOn ℝ univ f) : ∀ x, f x ≤ f a :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -22,7 +22,8 @@ variable {E β : Type*} [AddCommGroup E] [TopologicalSpace E] [Module ℝ E] [To
open Set Filter Function
-open Classical Topology
+open scoped Classical
+open Topology
/-- Helper lemma for the more general case: `IsMinOn.of_isLocalMinOn_of_convexOn`.
-/
@@ -57,7 +57,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
have hg1 : g 1 = x := AffineMap.lineMap_apply_one a x
have hgc : Continuous g := AffineMap.lineMap_continuous
have h_maps : MapsTo g (Icc 0 1) s := by
- simpa only [mapsTo', ← segment_eq_image_lineMap] using h_conv.1.segment_subset a_in_s x_in_s
+ simpa only [g, mapsTo', ← segment_eq_image_lineMap] using h_conv.1.segment_subset a_in_s x_in_s
have fg_local_min_on : IsLocalMinOn (f ∘ g) (Icc 0 1) 0 := by
rw [← hg0] at h_localmin
exact h_localmin.comp_continuousOn h_maps hgc.continuousOn (left_mem_Icc.2 zero_le_one)
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -39,8 +39,8 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
have H₂ : ∀ᶠ y in 𝓝[>] a, y ∈ Ioc a c := Ioc_mem_nhdsWithin_Ioi (left_mem_Ico.2 a_lt_c)
rcases (H₁.and H₂).exists with ⟨y, hfy, hy_ac⟩
rcases (Convex.mem_Ioc a_lt_c).mp hy_ac with ⟨ya, yc, ya₀, yc₀, yac, rfl⟩
- suffices : ya • f a + yc • f a ≤ ya • f a + yc • f c
- exact (smul_le_smul_iff_of_pos_left yc₀).1 (le_of_add_le_add_left this)
+ suffices ya • f a + yc • f a ≤ ya • f a + yc • f c from
+ (smul_le_smul_iff_of_pos_left yc₀).1 (le_of_add_le_add_left this)
calc
ya • f a + yc • f a = f a := by rw [← add_smul, yac, one_smul]
_ ≤ f (ya * a + yc * c) := hfy
•
lemmas (#9179)
Remove the duplicates introduced in #8869 by sorting the lemmas in Algebra.Order.SMul
into three files:
Algebra.Order.Module.Defs
for the order isomorphism induced by scalar multiplication by a positivity elementAlgebra.Order.Module.Pointwise
for the order properties of scalar multiplication of sets. This file is new. I credit myself for https://github.com/leanprover-community/mathlib/pull/9078Algebra.Order.Module.OrderedSMul
: The material about OrderedSMul
per se. Inherits the copyright header from Algebra.Order.SMul
. This file should eventually be deleted.I move each #align
to the correct file. On top of that, I delete unused redundant OrderedSMul
instances (they were useful in Lean 3, but not anymore) and eq_of_smul_eq_smul_of_pos_of_le
/eq_of_smul_eq_smul_of_neg_of_le
since those lemmas are weird and unused.
@@ -40,7 +40,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
rcases (H₁.and H₂).exists with ⟨y, hfy, hy_ac⟩
rcases (Convex.mem_Ioc a_lt_c).mp hy_ac with ⟨ya, yc, ya₀, yc₀, yac, rfl⟩
suffices : ya • f a + yc • f a ≤ ya • f a + yc • f c
- exact (smul_le_smul_iff_of_pos yc₀).1 (le_of_add_le_add_left this)
+ exact (smul_le_smul_iff_of_pos_left yc₀).1 (le_of_add_le_add_left this)
calc
ya • f a + yc • f a = f a := by rw [← add_smul, yac, one_smul]
_ ≤ f (ya * a + yc * c) := hfy
[@foo](https://github.com/foo) _ _ _ _ _ ...
by named arguments (#8702)
Using Lean4's named arguments, we manage to remove a few hard-to-read explicit function calls [@foo](https://github.com/foo) _ _ _ _ _ ...
which used to be necessary in Lean3.
Occasionally, this results in slightly longer code. The benefit of named arguments is readability, as well as to reduce the brittleness of the code when the argument order is changed.
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -70,7 +70,7 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn {f : E → β} {a : E} (a_in_s : a
/-- A local maximum of a concave function is a global maximum, restricted to a set `s`. -/
theorem IsMaxOn.of_isLocalMaxOn_of_concaveOn {f : E → β} {a : E} (a_in_s : a ∈ s)
(h_localmax : IsLocalMaxOn f s a) (h_conc : ConcaveOn ℝ s f) : IsMaxOn f s a :=
- @IsMinOn.of_isLocalMinOn_of_convexOn _ βᵒᵈ _ _ _ _ _ _ _ _ s f a a_in_s h_localmax h_conc
+ IsMinOn.of_isLocalMinOn_of_convexOn (β := βᵒᵈ) a_in_s h_localmax h_conc
#align is_max_on.of_is_local_max_on_of_concave_on IsMaxOn.of_isLocalMaxOn_of_concaveOn
/-- A local minimum of a convex function is a global minimum. -/
@@ -82,5 +82,5 @@ theorem IsMinOn.of_isLocalMin_of_convex_univ {f : E → β} {a : E} (h_local_min
/-- A local maximum of a concave function is a global maximum. -/
theorem IsMaxOn.of_isLocalMax_of_convex_univ {f : E → β} {a : E} (h_local_max : IsLocalMax f a)
(h_conc : ConcaveOn ℝ univ f) : ∀ x, f x ≤ f a :=
- @IsMinOn.of_isLocalMin_of_convex_univ _ βᵒᵈ _ _ _ _ _ _ _ _ f a h_local_max h_conc
+ IsMinOn.of_isLocalMin_of_convex_univ (β := βᵒᵈ) h_local_max h_conc
#align is_max_on.of_is_local_max_of_convex_univ IsMaxOn.of_isLocalMax_of_convex_univ
This reduces the main file from 3340 to 2220 lines. The remaining file is somewhat entangled, so splitting is less obvious. Help is welcome, though a follow-up PR is probably better :-)
I've kept copyright and authors as they were originally.
@@ -5,8 +5,7 @@ Authors: Frédéric Dupuis
-/
import Mathlib.Analysis.Convex.Function
import Mathlib.Topology.Algebra.Affine
-import Mathlib.Topology.LocalExtr
-import Mathlib.Topology.MetricSpace.Basic
+import Mathlib.Topology.MetricSpace.PseudoMetric
#align_import analysis.convex.extrema from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -38,8 +38,8 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
have H₁ : ∀ᶠ y in 𝓝[>] a, f a ≤ f y :=
h_local_min.filter_mono (nhdsWithin_mono _ Ioi_subset_Ici_self)
have H₂ : ∀ᶠ y in 𝓝[>] a, y ∈ Ioc a c := Ioc_mem_nhdsWithin_Ioi (left_mem_Ico.2 a_lt_c)
- rcases(H₁.and H₂).exists with ⟨y, hfy, hy_ac⟩
- rcases(Convex.mem_Ioc a_lt_c).mp hy_ac with ⟨ya, yc, ya₀, yc₀, yac, rfl⟩
+ rcases (H₁.and H₂).exists with ⟨y, hfy, hy_ac⟩
+ rcases (Convex.mem_Ioc a_lt_c).mp hy_ac with ⟨ya, yc, ya₀, yc₀, yac, rfl⟩
suffices : ya • f a + yc • f a ≤ ya • f a + yc • f c
exact (smul_le_smul_iff_of_pos yc₀).1 (le_of_add_le_add_left this)
calc
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -18,7 +18,7 @@ a global minimum, and likewise for concave functions.
-/
-variable {E β : Type _} [AddCommGroup E] [TopologicalSpace E] [Module ℝ E] [TopologicalAddGroup E]
+variable {E β : Type*} [AddCommGroup E] [TopologicalSpace E] [Module ℝ E] [TopologicalAddGroup E]
[ContinuousSMul ℝ E] [OrderedAddCommGroup β] [Module ℝ β] [OrderedSMul ℝ β] {s : Set E}
open Set Filter Function
@@ -2,17 +2,14 @@
Copyright (c) 2020 Frédéric Dupuis. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Frédéric Dupuis
-
-! This file was ported from Lean 3 source module analysis.convex.extrema
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Convex.Function
import Mathlib.Topology.Algebra.Affine
import Mathlib.Topology.LocalExtr
import Mathlib.Topology.MetricSpace.Basic
+#align_import analysis.convex.extrema from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
/-!
# Minima and maxima of convex functions
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -49,7 +49,6 @@ theorem IsMinOn.of_isLocalMinOn_of_convexOn_Icc {f : ℝ → β} {a b : ℝ} (a_
ya • f a + yc • f a = f a := by rw [← add_smul, yac, one_smul]
_ ≤ f (ya * a + yc * c) := hfy
_ ≤ ya • f a + yc • f c := h_conv.2 (left_mem_Icc.2 a_lt_b.le) hc ya₀ yc₀.le yac
-
#align is_min_on.of_is_local_min_on_of_convex_on_Icc IsMinOn.of_isLocalMinOn_of_convexOn_Icc
/-- A local minimum of a convex function is a global minimum, restricted to a set `s`.
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file