-
Notifications
You must be signed in to change notification settings - Fork 259
/
BallAction.lean
208 lines (161 loc) Β· 10.1 KB
/
BallAction.lean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
/-
Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov, Heather Macbeth
-/
import Mathlib.Analysis.Normed.Field.UnitBall
import Mathlib.Analysis.NormedSpace.Basic
#align_import analysis.normed_space.ball_action from "leanprover-community/mathlib"@"3339976e2bcae9f1c81e620836d1eb736e3c4700"
/-!
# Multiplicative actions of/on balls and spheres
Let `E` be a normed vector space over a normed field `π`. In this file we define the following
multiplicative actions.
- The closed unit ball in `π` acts on open balls and closed balls centered at `0` in `E`.
- The unit sphere in `π` acts on open balls, closed balls, and spheres centered at `0` in `E`.
-/
open Metric Set
variable {π π' E : Type*} [NormedField π] [NormedField π'] [SeminormedAddCommGroup E]
[NormedSpace π E] [NormedSpace π' E] {r : β}
section ClosedBall
instance mulActionClosedBallBall : MulAction (closedBall (0 : π) 1) (ball (0 : E) r) where
smul c x :=
β¨(c : π) β’ βx,
mem_ball_zero_iff.2 <| by
simpa only [norm_smul, one_mul] using
mul_lt_mul' (mem_closedBall_zero_iff.1 c.2) (mem_ball_zero_iff.1 x.2) (norm_nonneg _)
one_posβ©
one_smul x := Subtype.ext <| one_smul π _
mul_smul cβ cβ x := Subtype.ext <| mul_smul _ _ _
#align mul_action_closed_ball_ball mulActionClosedBallBall
instance continuousSMul_closedBall_ball : ContinuousSMul (closedBall (0 : π) 1) (ball (0 : E) r) :=
β¨(continuous_subtype_val.fst'.smul continuous_subtype_val.snd').subtype_mk _β©
#align has_continuous_smul_closed_ball_ball continuousSMul_closedBall_ball
instance mulActionClosedBallClosedBall :
MulAction (closedBall (0 : π) 1) (closedBall (0 : E) r) where
smul c x :=
β¨(c : π) β’ βx,
mem_closedBall_zero_iff.2 <| by
simpa only [norm_smul, one_mul] using
mul_le_mul (mem_closedBall_zero_iff.1 c.2) (mem_closedBall_zero_iff.1 x.2) (norm_nonneg _)
zero_le_oneβ©
one_smul x := Subtype.ext <| one_smul π _
mul_smul cβ cβ x := Subtype.ext <| mul_smul _ _ _
#align mul_action_closed_ball_closed_ball mulActionClosedBallClosedBall
instance continuousSMul_closedBall_closedBall :
ContinuousSMul (closedBall (0 : π) 1) (closedBall (0 : E) r) :=
β¨(continuous_subtype_val.fst'.smul continuous_subtype_val.snd').subtype_mk _β©
#align has_continuous_smul_closed_ball_closed_ball continuousSMul_closedBall_closedBall
end ClosedBall
section Sphere
instance mulActionSphereBall : MulAction (sphere (0 : π) 1) (ball (0 : E) r) where
smul c x := inclusion sphere_subset_closedBall c β’ x
one_smul _ := Subtype.ext <| one_smul _ _
mul_smul _ _ _ := Subtype.ext <| mul_smul _ _ _
#align mul_action_sphere_ball mulActionSphereBall
instance continuousSMul_sphere_ball : ContinuousSMul (sphere (0 : π) 1) (ball (0 : E) r) :=
β¨(continuous_subtype_val.fst'.smul continuous_subtype_val.snd').subtype_mk _β©
#align has_continuous_smul_sphere_ball continuousSMul_sphere_ball
instance mulActionSphereClosedBall : MulAction (sphere (0 : π) 1) (closedBall (0 : E) r) where
smul c x := inclusion sphere_subset_closedBall c β’ x
one_smul _ := Subtype.ext <| one_smul _ _
mul_smul _ _ _ := Subtype.ext <| mul_smul _ _ _
#align mul_action_sphere_closed_ball mulActionSphereClosedBall
instance continuousSMul_sphere_closedBall :
ContinuousSMul (sphere (0 : π) 1) (closedBall (0 : E) r) :=
β¨(continuous_subtype_val.fst'.smul continuous_subtype_val.snd').subtype_mk _β©
#align has_continuous_smul_sphere_closed_ball continuousSMul_sphere_closedBall
instance mulActionSphereSphere : MulAction (sphere (0 : π) 1) (sphere (0 : E) r) where
smul c x :=
β¨(c : π) β’ βx,
mem_sphere_zero_iff_norm.2 <| by
rw [norm_smul, mem_sphere_zero_iff_norm.1 c.coe_prop, mem_sphere_zero_iff_norm.1 x.coe_prop,
one_mul]β©
one_smul x := Subtype.ext <| one_smul _ _
mul_smul cβ cβ x := Subtype.ext <| mul_smul _ _ _
#align mul_action_sphere_sphere mulActionSphereSphere
instance continuousSMul_sphere_sphere : ContinuousSMul (sphere (0 : π) 1) (sphere (0 : E) r) :=
β¨(continuous_subtype_val.fst'.smul continuous_subtype_val.snd').subtype_mk _β©
#align has_continuous_smul_sphere_sphere continuousSMul_sphere_sphere
end Sphere
section IsScalarTower
variable [NormedAlgebra π π'] [IsScalarTower π π' E]
instance isScalarTower_closedBall_closedBall_closedBall :
IsScalarTower (closedBall (0 : π) 1) (closedBall (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_closed_ball_closed_ball_closed_ball isScalarTower_closedBall_closedBall_closedBall
instance isScalarTower_closedBall_closedBall_ball :
IsScalarTower (closedBall (0 : π) 1) (closedBall (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_closed_ball_closed_ball_ball isScalarTower_closedBall_closedBall_ball
instance isScalarTower_sphere_closedBall_closedBall :
IsScalarTower (sphere (0 : π) 1) (closedBall (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_sphere_closed_ball_closed_ball isScalarTower_sphere_closedBall_closedBall
instance isScalarTower_sphere_closedBall_ball :
IsScalarTower (sphere (0 : π) 1) (closedBall (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_sphere_closed_ball_ball isScalarTower_sphere_closedBall_ball
instance isScalarTower_sphere_sphere_closedBall :
IsScalarTower (sphere (0 : π) 1) (sphere (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_sphere_sphere_closed_ball isScalarTower_sphere_sphere_closedBall
instance isScalarTower_sphere_sphere_ball :
IsScalarTower (sphere (0 : π) 1) (sphere (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_sphere_sphere_ball isScalarTower_sphere_sphere_ball
instance isScalarTower_sphere_sphere_sphere :
IsScalarTower (sphere (0 : π) 1) (sphere (0 : π') 1) (sphere (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : E)β©
#align is_scalar_tower_sphere_sphere_sphere isScalarTower_sphere_sphere_sphere
instance isScalarTower_sphere_ball_ball :
IsScalarTower (sphere (0 : π) 1) (ball (0 : π') 1) (ball (0 : π') 1) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : π')β©
#align is_scalar_tower_sphere_ball_ball isScalarTower_sphere_ball_ball
instance isScalarTower_closedBall_ball_ball :
IsScalarTower (closedBall (0 : π) 1) (ball (0 : π') 1) (ball (0 : π') 1) :=
β¨fun a b c => Subtype.ext <| smul_assoc (a : π) (b : π') (c : π')β©
#align is_scalar_tower_closed_ball_ball_ball isScalarTower_closedBall_ball_ball
end IsScalarTower
section SMulCommClass
variable [SMulCommClass π π' E]
instance instSMulCommClass_closedBall_closedBall_closedBall :
SMulCommClass (closedBall (0 : π) 1) (closedBall (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_closed_ball_closed_ball_closed_ball instSMulCommClass_closedBall_closedBall_closedBall
instance instSMulCommClass_closedBall_closedBall_ball :
SMulCommClass (closedBall (0 : π) 1) (closedBall (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_closed_ball_closed_ball_ball instSMulCommClass_closedBall_closedBall_ball
instance instSMulCommClass_sphere_closedBall_closedBall :
SMulCommClass (sphere (0 : π) 1) (closedBall (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_sphere_closed_ball_closed_ball instSMulCommClass_sphere_closedBall_closedBall
instance instSMulCommClass_sphere_closedBall_ball :
SMulCommClass (sphere (0 : π) 1) (closedBall (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_sphere_closed_ball_ball instSMulCommClass_sphere_closedBall_ball
instance instSMulCommClass_sphere_ball_ball [NormedAlgebra π π'] :
SMulCommClass (sphere (0 : π) 1) (ball (0 : π') 1) (ball (0 : π') 1) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : π')β©
#align smul_comm_class_sphere_ball_ball instSMulCommClass_sphere_ball_ball
instance instSMulCommClass_sphere_sphere_closedBall :
SMulCommClass (sphere (0 : π) 1) (sphere (0 : π') 1) (closedBall (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_sphere_sphere_closed_ball instSMulCommClass_sphere_sphere_closedBall
instance instSMulCommClass_sphere_sphere_ball :
SMulCommClass (sphere (0 : π) 1) (sphere (0 : π') 1) (ball (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_sphere_sphere_ball instSMulCommClass_sphere_sphere_ball
instance instSMulCommClass_sphere_sphere_sphere :
SMulCommClass (sphere (0 : π) 1) (sphere (0 : π') 1) (sphere (0 : E) r) :=
β¨fun a b c => Subtype.ext <| smul_comm (a : π) (b : π') (c : E)β©
#align smul_comm_class_sphere_sphere_sphere instSMulCommClass_sphere_sphere_sphere
end SMulCommClass
variable (π)
variable [CharZero π]
theorem ne_neg_of_mem_sphere {r : β} (hr : r β 0) (x : sphere (0 : E) r) : x β -x := fun h =>
ne_zero_of_mem_sphere hr x ((self_eq_neg π _).mp (by (conv_lhs => rw [h]); rfl))
#align ne_neg_of_mem_sphere ne_neg_of_mem_sphere
theorem ne_neg_of_mem_unit_sphere (x : sphere (0 : E) 1) : x β -x :=
ne_neg_of_mem_sphere π one_ne_zero x
#align ne_neg_of_mem_unit_sphere ne_neg_of_mem_unit_sphere