@@ -23,6 +23,9 @@ We define the following equivalences:
23
23
`category_theory` convention (apply `e`, then `e'`), not the convention used in function
24
24
composition and compositions of bundled morphisms.
25
25
26
+ We equip `affine_equiv k P P` with a `group` structure with multiplication corresponding to
27
+ composition in `affine_equiv.group`.
28
+
26
29
## Tags
27
30
28
31
affine space, affine equivalence
@@ -45,7 +48,7 @@ structure affine_equiv (k P₁ P₂ : Type*) {V₁ V₂ : Type*} [ring k]
45
48
46
49
notation P₁ ` ≃ᵃ[`:25 k:25 `] `:0 P₂:0 := affine_equiv k P₁ P₂
47
50
48
- variables {k V₁ V₂ V₃ V₄ P₁ P₂ P₃ P ₄ : Type *} [ring k]
51
+ variables {k P₁ P₂ P₃ P₄ V₁ V₂ V₃ V ₄ : Type *} [ring k]
49
52
[add_comm_group V₁] [module k V₁] [add_torsor V₁ P₁]
50
53
[add_comm_group V₂] [module k V₂] [add_torsor V₂ P₂]
51
54
[add_comm_group V₃] [module k V₃] [add_torsor V₃ P₃]
@@ -162,6 +165,15 @@ def mk' (e : P₁ → P₂) (e' : V₁ ≃ₗ[k] V₂) (p : P₁) (h : ∀ p' :
162
165
163
166
@[simp] lemma symm_linear (e : P₁ ≃ᵃ[k] P₂) : e.linear.symm = e.symm.linear := rfl
164
167
168
+ /-- See Note [custom simps projection] -/
169
+ def simps.apply (e : P₁ ≃ᵃ[k] P₂) : P₁ → P₂ := e
170
+
171
+ /-- See Note [custom simps projection] -/
172
+ def simps.symm_apply (e : P₁ ≃ᵃ[k] P₂) : P₂ → P₁ := e.symm
173
+
174
+ initialize_simps_projections affine_equiv
175
+ (to_equiv_to_fun → apply, to_equiv_inv_fun → symm_apply, linear → linear as_prefix, -to_equiv)
176
+
165
177
protected lemma bijective (e : P₁ ≃ᵃ[k] P₂) : bijective e := e.to_equiv.bijective
166
178
protected lemma surjective (e : P₁ ≃ᵃ[k] P₂) : surjective e := e.to_equiv.surjective
167
179
protected lemma injective (e : P₁ ≃ᵃ[k] P₂) : injective e := e.to_equiv.injective
@@ -242,21 +254,39 @@ lemma mul_def (e e' : P₁ ≃ᵃ[k] P₁) : e * e' = e'.trans e := rfl
242
254
243
255
lemma inv_def (e : P₁ ≃ᵃ[k] P₁) : e⁻¹ = e.symm := rfl
244
256
257
+ /-- `affine_equiv.linear` on automorphisms is a `monoid_hom`. -/
258
+ @[simps] def linear_hom : (P₁ ≃ᵃ[k] P₁) →* (V₁ ≃ₗ[k] V₁) :=
259
+ { to_fun := linear,
260
+ map_one' := rfl,
261
+ map_mul' := λ _ _, rfl }
262
+
263
+ /-- The group of `affine_equiv`s are equivalent to the group of units of `affine_map`.
264
+
265
+ This is the affine version of `linear_map.general_linear_group.general_linear_equiv`. -/
266
+ @[simps]
267
+ def equiv_units_affine_map : (P₁ ≃ᵃ[k] P₁) ≃* units (P₁ →ᵃ[k] P₁) :=
268
+ { to_fun := λ e, ⟨e, e.symm, congr_arg coe e.symm_trans_self, congr_arg coe e.self_trans_symm⟩,
269
+ inv_fun := λ u,
270
+ { to_fun := (u : P₁ →ᵃ[k] P₁), inv_fun := (↑(u⁻¹) : P₁ →ᵃ[k] P₁),
271
+ left_inv := affine_map.congr_fun u.inv_mul,
272
+ right_inv := affine_map.congr_fun u.mul_inv,
273
+ linear := linear_map.general_linear_group.general_linear_equiv _ _ $
274
+ units.map (by exact affine_map.linear_hom) u,
275
+ map_vadd' := λ _ _, (u : P₁ →ᵃ[k] P₁).map_vadd _ _ },
276
+ left_inv := λ e, affine_equiv.ext $ λ x, rfl,
277
+ right_inv := λ u, units.ext $ affine_map.ext $ λ x, rfl,
278
+ map_mul' := λ e₁ e₂, rfl }
279
+
245
280
variable (k)
246
281
247
282
/-- The map `v ↦ v +ᵥ b` as an affine equivalence between a module `V` and an affine space `P` with
248
283
tangent space `V`. -/
284
+ @[simps]
249
285
def vadd_const (b : P₁) : V₁ ≃ᵃ[k] P₁ :=
250
286
{ to_equiv := equiv.vadd_const b,
251
287
linear := linear_equiv.refl _ _,
252
288
map_vadd' := λ p v, add_vadd _ _ _ }
253
289
254
- @[simp] lemma linear_vadd_const (b : P₁) : (vadd_const k b).linear = linear_equiv.refl k V₁ := rfl
255
-
256
- @[simp] lemma vadd_const_apply (b : P₁) (v : V₁) : vadd_const k b v = v +ᵥ b := rfl
257
-
258
- @[simp] lemma vadd_const_symm_apply (b p : P₁) : (vadd_const k b).symm p = p -ᵥ b := rfl
259
-
260
290
/-- `p' ↦ p -ᵥ p'` as an equivalence. -/
261
291
def const_vsub (p : P₁) : P₁ ≃ᵃ[k] V₁ :=
262
292
{ to_equiv := equiv.const_vsub p,
@@ -270,17 +300,12 @@ def const_vsub (p : P₁) : P₁ ≃ᵃ[k] V₁ :=
270
300
variable (P₁)
271
301
272
302
/-- The map `p ↦ v +ᵥ p` as an affine automorphism of an affine space. -/
303
+ @[simps]
273
304
def const_vadd (v : V₁) : P₁ ≃ᵃ[k] P₁ :=
274
305
{ to_equiv := equiv.const_vadd P₁ v,
275
306
linear := linear_equiv.refl _ _,
276
307
map_vadd' := λ p w, vadd_comm _ _ _ }
277
308
278
- @[simp] lemma linear_const_vadd (v : V₁) : (const_vadd k P₁ v).linear = linear_equiv.refl _ _ := rfl
279
-
280
- @[simp] lemma const_vadd_apply (v : V₁) (p : P₁) : const_vadd k P₁ v p = v +ᵥ p := rfl
281
-
282
- @[simp] lemma const_vadd_symm_apply (v : V₁) (p : P₁) : (const_vadd k P₁ v).symm p = -v +ᵥ p := rfl
283
-
284
309
section homothety
285
310
286
311
omit V₁
@@ -291,21 +316,7 @@ include V
291
316
/-- Fixing a point in affine space, homothety about this point gives a group homomorphism from (the
292
317
centre of) the units of the scalars into the group of affine equivalences. -/
293
318
def homothety_units_mul_hom (p : P) : units R →* P ≃ᵃ[R] P :=
294
- { to_fun := λ t,
295
- { to_fun := affine_map.homothety p (t : R),
296
- inv_fun := affine_map.homothety p (↑t⁻¹ : R),
297
- left_inv := λ p, by simp [← affine_map.comp_apply, ← affine_map.homothety_mul],
298
- right_inv := λ p, by simp [← affine_map.comp_apply, ← affine_map.homothety_mul],
299
- linear :=
300
- { inv_fun := linear_map.lsmul R V (↑t⁻¹ : R),
301
- left_inv := λ v, by simp [smul_smul],
302
- right_inv := λ v, by simp [smul_smul],
303
- .. linear_map.lsmul R V t, },
304
- map_vadd' := λ p v, by simp only [vadd_vsub_assoc, smul_add, add_vadd, affine_map.coe_line_map,
305
- affine_map.homothety_eq_line_map, equiv.coe_fn_mk, linear_equiv.coe_mk,
306
- linear_map.lsmul_apply, linear_map.to_fun_eq_coe], },
307
- map_one' := by { ext, simp, },
308
- map_mul' := λ t₁ t₂, by { ext, simp [← affine_map.comp_apply, ← affine_map.homothety_mul], }, }
319
+ equiv_units_affine_map.symm.to_monoid_hom.comp $ units.map (affine_map.homothety_hom p)
309
320
310
321
@[simp] lemma coe_homothety_units_mul_hom_apply (p : P) (t : units R) :
311
322
(homothety_units_mul_hom p t : P → P) = affine_map.homothety p (t : R) :=
318
329
@[simp] lemma coe_homothety_units_mul_hom_eq_homothety_hom_coe (p : P) :
319
330
(coe : (P ≃ᵃ[R] P) → P →ᵃ[R] P) ∘ homothety_units_mul_hom p =
320
331
(affine_map.homothety_hom p) ∘ (coe : units R → R) :=
321
- by { ext, simp, }
332
+ funext $ λ _, rfl
322
333
323
334
end homothety
324
335
0 commit comments