@@ -1053,57 +1053,27 @@ end⟩
10531053lemma continuous_of_le_add_edist {f : α → ℝ≥0 ∞} (C : ℝ≥0 ∞)
10541054 (hC : C ≠ ⊤) (h : ∀x y, f x ≤ f y + C * edist x y) : continuous f :=
10551055begin
1056- refine continuous_iff_continuous_at.2 (λx, tendsto_order.2 ⟨_, _⟩),
1057- show ∀e, e < f x → ∀ᶠ y in 𝓝 x, e < f y,
1058- { assume e he,
1059- let ε := min (f x - e) 1 ,
1060- have : ε ≠ ⊤ := ne_top_of_le_ne_top ennreal.coe_ne_top (min_le_right _ _),
1061- have : 0 < ε := by simp [ε, hC, he, ennreal.zero_lt_one],
1062- have : 0 < C⁻¹ * (ε/2 ) := bot_lt_iff_ne_bot.2 (by simp [hC, (ne_of_lt this ).symm, mul_eq_zero]),
1063- have I : C * (C⁻¹ * (ε/2 )) < ε,
1064- { by_cases C_zero : C = 0 ,
1065- { simp [C_zero, ‹0 < ε›] },
1066- { calc C * (C⁻¹ * (ε/2 )) = (C * C⁻¹) * (ε/2 ) : by simp [mul_assoc]
1067- ... = ε/2 : by simp [ennreal.mul_inv_cancel C_zero hC]
1068- ... < ε : ennreal.half_lt_self (‹0 < ε›.ne') (‹ε ≠ ⊤›) }},
1069- have : ball x (C⁻¹ * (ε/2 )) ⊆ {y : α | e < f y},
1070- { rintros y hy,
1071- by_cases htop : f y = ⊤,
1072- { simp [htop, lt_top_iff_ne_top, ne_top_of_lt he] },
1073- { rw [emetric.mem_ball] at hy,
1074- have : e + ε < f y + ε := calc
1075- e + ε ≤ e + (f x - e) : add_le_add_left (min_le_left _ _) _
1076- ... = f x : ennreal.add_sub_cancel_of_le he.le
1077- ... ≤ f y + C * edist x y : h x y
1078- ... = f y + C * edist y x : by simp [edist_comm]
1079- ... ≤ f y + C * (C⁻¹ * (ε/2 )) :
1080- add_le_add_left (mul_le_mul_left' (le_of_lt hy) _) _
1081- ... < f y + ε : ennreal.add_lt_add_left htop I,
1082- show e < f y, from lt_of_add_lt_add_right this } },
1083- apply filter.mem_of_superset (ball_mem_nhds _ (‹0 < C⁻¹ * (ε/2 )›)) this },
1084- show ∀e, f x < e → ∀ᶠ y in 𝓝 x, f y < e,
1085- { assume e he,
1086- let ε := min (e - f x) 1 ,
1087- have : ε < ⊤ := lt_of_le_of_lt (min_le_right _ _) (by simp [lt_top_iff_ne_top]),
1088- have : 0 < ε := by simp [ε, he, ennreal.zero_lt_one],
1089- have : 0 < C⁻¹ * (ε/2 ) := bot_lt_iff_ne_bot.2 (by simp [hC, (ne_of_lt this ).symm, mul_eq_zero]),
1090- have I : C * (C⁻¹ * (ε/2 )) < ε,
1091- { by_cases C_zero : C = 0 ,
1092- simp [C_zero, ‹0 < ε›],
1093- calc C * (C⁻¹ * (ε/2 )) = (C * C⁻¹) * (ε/2 ) : by simp [mul_assoc]
1094- ... = ε/2 : by simp [ennreal.mul_inv_cancel C_zero hC]
1095- ... < ε : ennreal.half_lt_self (‹0 < ε›.ne') (‹ε < ⊤›.ne) },
1096- have : ball x (C⁻¹ * (ε/2 )) ⊆ {y : α | f y < e},
1097- { rintros y hy,
1098- have htop : f x ≠ ⊤ := ne_top_of_lt he,
1099- show f y < e, from calc
1100- f y ≤ f x + C * edist y x : h y x
1101- ... ≤ f x + C * (C⁻¹ * (ε/2 )) :
1102- add_le_add_left (mul_le_mul_left' (le_of_lt hy) _) _
1103- ... < f x + ε : ennreal.add_lt_add_left htop I
1104- ... ≤ f x + (e - f x) : add_le_add_left (min_le_left _ _) _
1105- ... = e : by simp [le_of_lt he] },
1106- apply filter.mem_of_superset (ball_mem_nhds _ (‹0 < C⁻¹ * (ε/2 )›)) this },
1056+ rcases eq_or_ne C 0 with (rfl|C0),
1057+ { simp only [zero_mul, add_zero] at h,
1058+ exact continuous_of_const (λ x y, le_antisymm (h _ _) (h _ _)) },
1059+ { refine continuous_iff_continuous_at.2 (λ x, _),
1060+ by_cases hx : f x = ∞,
1061+ { have : f =ᶠ[𝓝 x] (λ _, ∞),
1062+ { filter_upwards [emetric.ball_mem_nhds x ennreal.coe_lt_top],
1063+ refine λ y (hy : edist y x < ⊤), _, rw edist_comm at hy,
1064+ simpa [hx, hC, hy.ne] using h x y },
1065+ exact this.continuous_at },
1066+ { refine (ennreal.tendsto_nhds hx).2 (λ ε (ε0 : 0 < ε), _),
1067+ filter_upwards [emetric.closed_ball_mem_nhds x (ennreal.div_pos_iff.2 ⟨ε0 .ne', hC⟩)],
1068+ have hεC : C * (ε / C) = ε := ennreal.mul_div_cancel' C0 hC,
1069+ refine λ y (hy : edist y x ≤ ε / C), ⟨sub_le_iff_right.2 _, _⟩,
1070+ { rw edist_comm at hy,
1071+ calc f x ≤ f y + C * edist x y : h x y
1072+ ... ≤ f y + C * (ε / C) : add_le_add_left (mul_le_mul_left' hy C) (f y)
1073+ ... = f y + ε : by rw hεC },
1074+ { calc f y ≤ f x + C * edist y x : h y x
1075+ ... ≤ f x + C * (ε / C) : add_le_add_left (mul_le_mul_left' hy C) (f x)
1076+ ... = f x + ε : by rw hεC } } }
11071077end
11081078
11091079theorem continuous_edist : continuous (λp:α×α, edist p.1 p.2 ) :=
0 commit comments