@@ -99,6 +99,9 @@ nonneg_of_mul_nonneg_left this two_pos
99
99
theorem dist_pos_of_ne {x y : α} (h : x ≠ y) : dist x y > 0 :=
100
100
lt_of_le_of_ne dist_nonneg (by simp * at *)
101
101
102
+ theorem dist_le_zero_iff {x y : α} : dist x y ≤ 0 ↔ x = y :=
103
+ by simpa [le_antisymm_iff, dist_nonneg] using @dist_eq_zero_iff _ _ x y
104
+
102
105
theorem ne_of_dist_pos {x y : α} (h : dist x y > 0 ) : x ≠ y :=
103
106
assume : x = y,
104
107
have 0 < (0 :real), by simp [this ] at h; exact h,
239
242
240
243
theorem is_open_metric : is_open s ↔ (∀x∈s, ∃ε>0 , open_ball x ε ⊆ s) :=
241
244
by simp [is_open_iff_nhds, mem_nhds_sets_iff_metric]
245
+
246
+ instance prod.metric_space_max [metric_space α] [metric_space β] : metric_space (α × β) :=
247
+ { dist := λ x y, max (dist x.1 y.1 ) (dist x.2 y.2 ),
248
+ dist_self := λ x, by simp,
249
+ eq_of_dist_eq_zero := λ x y h, begin
250
+ cases max_le_iff.1 (le_of_eq h) with h₁ h₂,
251
+ exact prod.ext.2 ⟨dist_le_zero_iff.1 h₁, dist_le_zero_iff.1 h₂⟩
252
+ end ,
253
+ dist_comm := λ x y, by simp [dist_comm],
254
+ dist_triangle := λ x y z, max_le
255
+ (le_trans (dist_triangle _ _ _) (add_le_add (le_max_left _ _) (le_max_left _ _)))
256
+ (le_trans (dist_triangle _ _ _) (add_le_add (le_max_right _ _) (le_max_right _ _))),
257
+ uniformity_dist := begin
258
+ refine prod_uniformity.trans _,
259
+ simp [uniformity_dist, vmap_infi],
260
+ rw ← infi_inf_eq, congr, funext,
261
+ rw ← infi_inf_eq, congr, funext,
262
+ simp [inf_principal, set_eq_def, max_lt_iff]
263
+ end ,
264
+ to_uniform_space := prod.uniform_space }
0 commit comments