|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Pierre-Alexandre Bazin. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Pierre-Alexandre Bazin |
| 5 | +-/ |
| 6 | +import analysis.seminorm |
| 7 | +/-! |
| 8 | +# The lattice of seminorms is not distributive |
| 9 | +
|
| 10 | +We provide an example of three seminorms over the ℝ-vector space ℝ×ℝ which don't satisfy the lattice |
| 11 | +distributivity property `(p ⊔ q1) ⊓ (p ⊔ q2) ≤ p ⊔ (q1 ⊓ q2)`. |
| 12 | +
|
| 13 | +This proves the lattice `seminorm ℝ (ℝ × ℝ)` is not distributive. |
| 14 | +
|
| 15 | +## References |
| 16 | +
|
| 17 | +* https://en.wikipedia.org/wiki/Seminorm#Examples |
| 18 | +-/ |
| 19 | + |
| 20 | +namespace seminorm_not_distrib |
| 21 | +open_locale nnreal |
| 22 | + |
| 23 | +private lemma bdd_below_range_add {𝕜 E : Type*} [normed_field 𝕜] [add_comm_group E] [module 𝕜 E] |
| 24 | + (x : E) (p q : seminorm 𝕜 E) : |
| 25 | + bdd_below (set.range (λ (u : E), p u + q (x - u))) := |
| 26 | +by { use 0, rintro _ ⟨x, rfl⟩, exact add_nonneg (p.nonneg _) (q.nonneg _) } |
| 27 | + |
| 28 | +@[simps] noncomputable def p : seminorm ℝ (ℝ×ℝ) := |
| 29 | +(norm_seminorm ℝ ℝ).comp (linear_map.fst _ _ _) ⊔ (norm_seminorm ℝ ℝ).comp (linear_map.snd _ _ _) |
| 30 | + |
| 31 | +@[simps] noncomputable def q1 : seminorm ℝ (ℝ×ℝ) := |
| 32 | +(4 : ℝ≥0) • (norm_seminorm ℝ ℝ).comp (linear_map.fst _ _ _) |
| 33 | + |
| 34 | +@[simps] noncomputable def q2 : seminorm ℝ (ℝ×ℝ) := |
| 35 | +(4 : ℝ≥0) • (norm_seminorm ℝ ℝ).comp (linear_map.snd _ _ _) |
| 36 | + |
| 37 | +lemma eq_one : (p ⊔ (q1 ⊓ q2)) (1, 1) = 1 := |
| 38 | +begin |
| 39 | + dsimp [-seminorm.inf_apply], |
| 40 | + rw [sup_idem, norm_one, sup_eq_left], |
| 41 | + apply cinfi_le_of_le (bdd_below_range_add _ _ _) ((0, 1) : ℝ×ℝ), dsimp, |
| 42 | + simp only [norm_zero, smul_zero, sub_self, add_zero, zero_le_one] |
| 43 | +end |
| 44 | + |
| 45 | +/-- This is a counterexample to the distributivity of the lattice `seminorm ℝ (ℝ × ℝ)`. -/ |
| 46 | +lemma not_distrib : ¬((p ⊔ q1) ⊓ (p ⊔ q2) ≤ p ⊔ (q1 ⊓ q2)) := |
| 47 | +begin |
| 48 | + intro le_sup_inf, |
| 49 | + have c : ¬(4/3 ≤ (1:ℝ)) := by norm_num, |
| 50 | + apply c, nth_rewrite 2 ← eq_one, |
| 51 | + apply le_trans _ (le_sup_inf _), |
| 52 | + apply le_cinfi, intro x, |
| 53 | + cases le_or_lt x.fst (1/3) with h1 h1, |
| 54 | + { cases le_or_lt x.snd (2/3) with h2 h2, |
| 55 | + { calc 4/3 = 4 * (1 - 2/3) : by norm_num |
| 56 | + ... ≤ 4 * (1 - x.snd) : (mul_le_mul_left zero_lt_four).mpr (sub_le_sub_left h2 _) |
| 57 | + ... ≤ 4 * |1 - x.snd| : (mul_le_mul_left zero_lt_four).mpr (le_abs_self _) |
| 58 | + ... = q2 ((1, 1) - x) : rfl |
| 59 | + ... ≤ (p ⊔ q2) ((1, 1) - x) : le_sup_right |
| 60 | + ... ≤ (p ⊔ q1) x + (p ⊔ q2) ((1, 1) - x) : le_add_of_nonneg_left ((p ⊔ q1).nonneg _) }, |
| 61 | + { calc 4/3 = 2/3 + (1 - 1/3) : by norm_num |
| 62 | + ... ≤ x.snd + (1 - x.fst) : add_le_add (le_of_lt h2) (sub_le_sub_left h1 _) |
| 63 | + ... ≤ |x.snd| + |1 - x.fst| : add_le_add (le_abs_self _) (le_abs_self _) |
| 64 | + ... ≤ p x + p ((1, 1) - x) : add_le_add le_sup_right le_sup_left |
| 65 | + ... ≤ (p ⊔ q1) x + (p ⊔ q2) ((1, 1) - x) : add_le_add le_sup_left le_sup_left } }, |
| 66 | + { calc 4/3 = 4 * (1/3) : by norm_num |
| 67 | + ... ≤ 4 * x.fst : (mul_le_mul_left zero_lt_four).mpr (le_of_lt h1) |
| 68 | + ... ≤ 4 * |x.fst| : (mul_le_mul_left zero_lt_four).mpr (le_abs_self _) |
| 69 | + ... = q1 x : rfl |
| 70 | + ... ≤ (p ⊔ q1) x : le_sup_right |
| 71 | + ... ≤ (p ⊔ q1) x + (p ⊔ q2) ((1, 1) - x) : le_add_of_nonneg_right ((p ⊔ q2).nonneg _) } |
| 72 | +end |
| 73 | + |
| 74 | +end seminorm_not_distrib |
0 commit comments