|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Yury Kudryashov. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Yury Kudryashov, Heather Macbeth |
| 5 | +-/ |
| 6 | +import analysis.normed.field.basic |
| 7 | +import analysis.normed.group.ball_sphere |
| 8 | + |
| 9 | +/-! |
| 10 | +# Algebraic structures on unit balls and spheres |
| 11 | +
|
| 12 | +In this file we define algebraic structures (`semigroup`, `comm_semigroup`, `monoid`, `comm_monoid`, |
| 13 | +`group`, `comm_group`) on `metric.ball (0 : 𝕜) 1`, `metric.closed_ball (0 : 𝕜) 1`, and |
| 14 | +`metric.sphere (0 : 𝕜) 1`. In each case we use the weakest possible typeclass assumption on `𝕜`, |
| 15 | +from `non_unital_semi_normed_ring` to `normed_field`. |
| 16 | +-/ |
| 17 | + |
| 18 | +open set metric |
| 19 | + |
| 20 | +variables {𝕜 : Type*} |
| 21 | + |
| 22 | +/-- Unit ball in a non unital semi normed ring as a bundled `subsemigroup`. -/ |
| 23 | +def subsemigroup.unit_ball (𝕜 : Type*) [non_unital_semi_normed_ring 𝕜] : |
| 24 | + subsemigroup 𝕜 := |
| 25 | +{ carrier := ball (0 : 𝕜) 1, |
| 26 | + mul_mem' := λ x y hx hy, |
| 27 | + begin |
| 28 | + rw [mem_ball_zero_iff] at *, |
| 29 | + exact (norm_mul_le x y).trans_lt (mul_lt_one_of_nonneg_of_lt_one_left (norm_nonneg _) |
| 30 | + hx hy.le) |
| 31 | + end } |
| 32 | + |
| 33 | +instance [non_unital_semi_normed_ring 𝕜] : semigroup (ball (0 : 𝕜) 1) := |
| 34 | +mul_mem_class.to_semigroup (subsemigroup.unit_ball 𝕜) |
| 35 | + |
| 36 | +instance [non_unital_semi_normed_ring 𝕜] : has_continuous_mul (ball (0 : 𝕜) 1) := |
| 37 | +⟨continuous_subtype_mk _ $ continuous.mul (continuous_subtype_val.comp continuous_fst) |
| 38 | + (continuous_subtype_val.comp continuous_snd)⟩ |
| 39 | + |
| 40 | +instance [semi_normed_comm_ring 𝕜] : comm_semigroup (ball (0 : 𝕜) 1) := |
| 41 | +mul_mem_class.to_comm_semigroup (subsemigroup.unit_ball 𝕜) |
| 42 | + |
| 43 | +instance [non_unital_semi_normed_ring 𝕜] : has_distrib_neg (ball (0 : 𝕜) 1) := |
| 44 | +subtype.coe_injective.has_distrib_neg (coe : ball (0 : 𝕜) 1 → 𝕜) (λ _, rfl) (λ _ _, rfl) |
| 45 | + |
| 46 | +/-- Closed unit ball in a non unital semi normed ring as a bundled `subsemigroup`. -/ |
| 47 | +def subsemigroup.unit_closed_ball (𝕜 : Type*) [non_unital_semi_normed_ring 𝕜] : |
| 48 | + subsemigroup 𝕜 := |
| 49 | +{ carrier := closed_ball 0 1, |
| 50 | + mul_mem' := λ x y hx hy, |
| 51 | + begin |
| 52 | + rw [mem_closed_ball_zero_iff] at *, |
| 53 | + exact (norm_mul_le x y).trans (mul_le_one hx (norm_nonneg _) hy) |
| 54 | + end } |
| 55 | + |
| 56 | +instance [non_unital_semi_normed_ring 𝕜] : semigroup (closed_ball (0 : 𝕜) 1) := |
| 57 | +mul_mem_class.to_semigroup (subsemigroup.unit_closed_ball 𝕜) |
| 58 | + |
| 59 | +instance [non_unital_semi_normed_ring 𝕜] : has_distrib_neg (closed_ball (0 : 𝕜) 1) := |
| 60 | +subtype.coe_injective.has_distrib_neg (coe : closed_ball (0 : 𝕜) 1 → 𝕜) (λ _, rfl) (λ _ _, rfl) |
| 61 | + |
| 62 | +instance [non_unital_semi_normed_ring 𝕜] : has_continuous_mul (closed_ball (0 : 𝕜) 1) := |
| 63 | +⟨continuous_subtype_mk _ $ continuous.mul (continuous_subtype_val.comp continuous_fst) |
| 64 | + (continuous_subtype_val.comp continuous_snd)⟩ |
| 65 | + |
| 66 | +/-- Closed unit ball in a semi normed ring as a bundled `submonoid`. -/ |
| 67 | +def submonoid.unit_closed_ball (𝕜 : Type*) [semi_normed_ring 𝕜] [norm_one_class 𝕜] : |
| 68 | + submonoid 𝕜 := |
| 69 | +{ carrier := closed_ball 0 1, |
| 70 | + one_mem' := mem_closed_ball_zero_iff.2 norm_one.le, |
| 71 | + .. subsemigroup.unit_closed_ball 𝕜 } |
| 72 | + |
| 73 | +instance [semi_normed_ring 𝕜] [norm_one_class 𝕜] : monoid (closed_ball (0 : 𝕜) 1) := |
| 74 | +submonoid_class.to_monoid (submonoid.unit_closed_ball 𝕜) |
| 75 | + |
| 76 | +instance [semi_normed_comm_ring 𝕜] [norm_one_class 𝕜] : comm_monoid (closed_ball (0 : 𝕜) 1) := |
| 77 | +submonoid_class.to_comm_monoid (submonoid.unit_closed_ball 𝕜) |
| 78 | + |
| 79 | +/-- Unit sphere in a normed division ring as a bundled `submonoid`. -/ |
| 80 | +def submonoid.unit_sphere (𝕜 : Type*) [normed_division_ring 𝕜] : submonoid 𝕜 := |
| 81 | +{ carrier := sphere (0 : 𝕜) 1, |
| 82 | + mul_mem' := λ x y hx hy, by { rw [mem_sphere_zero_iff_norm] at *, simp * }, |
| 83 | + one_mem' := mem_sphere_zero_iff_norm.2 norm_one } |
| 84 | + |
| 85 | +instance [normed_division_ring 𝕜] : group (sphere (0 : 𝕜) 1) := |
| 86 | +{ inv := λ x, ⟨x⁻¹, mem_sphere_zero_iff_norm.2 $ |
| 87 | + by rw [norm_inv, mem_sphere_zero_iff_norm.1 x.coe_prop, inv_one]⟩, |
| 88 | + mul_left_inv := λ x, subtype.coe_injective $ inv_mul_cancel $ ne_zero_of_mem_unit_sphere x, |
| 89 | + .. submonoid_class.to_monoid (submonoid.unit_sphere 𝕜) } |
| 90 | + |
| 91 | +instance [normed_division_ring 𝕜] : has_distrib_neg (sphere (0 : 𝕜) 1) := |
| 92 | +subtype.coe_injective.has_distrib_neg (coe : sphere (0 : 𝕜) 1 → 𝕜) (λ _, rfl) (λ _ _, rfl) |
| 93 | + |
| 94 | +/-- Monoid homomorphism from the unit sphere to the group of units. -/ |
| 95 | +def unit_sphere_to_units (𝕜 : Type*) [normed_division_ring 𝕜] : sphere (0 : 𝕜) 1 →* units 𝕜 := |
| 96 | +units.lift_right (submonoid.unit_sphere 𝕜).subtype (λ x, units.mk0 x $ ne_zero_of_mem_unit_sphere _) |
| 97 | + (λ x, rfl) |
| 98 | + |
| 99 | +instance [normed_division_ring 𝕜] : topological_group (sphere (0 : 𝕜) 1) := |
| 100 | +{ continuous_mul := continuous_subtype_mk _ $ (continuous_subtype_val.comp continuous_fst).mul |
| 101 | + (continuous_subtype_val.comp continuous_snd), |
| 102 | + continuous_inv := continuous_subtype_mk _ $ |
| 103 | + continuous_subtype_coe.inv₀ ne_zero_of_mem_unit_sphere } |
| 104 | + |
| 105 | +instance [normed_field 𝕜] : comm_group (sphere (0 : 𝕜) 1) := |
| 106 | +{ .. metric.sphere.group, |
| 107 | + .. submonoid_class.to_comm_monoid (submonoid.unit_sphere 𝕜) } |
0 commit comments