feat(algebra/add_torsor, linear_algebra/affine_space/affine_equiv, analysis/normed_space/affine_isometry): base_at construction#8837
feat(algebra/add_torsor, linear_algebra/affine_space/affine_equiv, analysis/normed_space/affine_isometry): base_at construction#8837hrmacbeth wants to merge 14 commits into
base_at construction#8837Conversation
| def _root_.add_equiv.base_at (f : G ≃+ G) (x : P) : perm P := | ||
| ((vadd_const x).symm.trans f.to_equiv).trans (vadd_const x) |
There was a problem hiding this comment.
A few other reasonable definitions:
| def _root_.add_equiv.base_at (f : G ≃+ G) (x : P) : perm P := | |
| ((vadd_const x).symm.trans f.to_equiv).trans (vadd_const x) | |
| def _root_.equiv.base_at {G' P' : Type*} [add_group G'] [add_torsor G' P'] (f : G ≃ G') (x : P) (y : P') : | |
| P ≃ P':= | |
| ((vadd_const x).symm.trans f).trans (vadd_const y) | |
| def _root_.add_equiv.base_at {G' P' : Type*} [add_group G'] [add_torsor G' P'] (f : G ≃+ G') (x : P) (y : P') : | |
| P ≃ P':= | |
| f.to_equiv.base_at x y | |
| def _root_.add_aut.base_at (f : add_aut G) (x : P) : | |
| perm P := | |
| f.base_at x x |
There was a problem hiding this comment.
You're right that one could introduce a more general base_at construction which constructs, from an isomorphism of model spaces, an isomorphism of the add_torsors according to a fixed basepoint x, y of each. It would double the size of the PR, though, so I'd rather not add it until someone needs it for something. (The version with a single add_torsor, constructing an automorphism, is more immediately useful -- it allows one to talk sensibly to talk about rotations in affine space.)
On your other point, I'd be happy to change the definition here to
| def _root_.add_equiv.base_at (f : G ≃+ G) (x : P) : perm P := | |
| ((vadd_const x).symm.trans f.to_equiv).trans (vadd_const x) | |
| def _root_.equiv.base_at (f : G ≃ G) (x : P) : perm P := | |
| ((vadd_const x).symm.trans f).trans (vadd_const x) |
if you prefer, or include both.
|
|
||
| @[simp] lemma linear_isometry_equiv_symm : | ||
| e.linear_isometry_equiv.symm = e.symm.linear_isometry_equiv := | ||
| rfl |
There was a problem hiding this comment.
| def _root_.add_equiv.base_at (f : G ≃+ G) (x : P) : perm P := | ||
| ((vadd_const x).symm.trans f.to_equiv).trans (vadd_const x) |
| ((vadd_const x).symm.trans f.to_equiv).trans (vadd_const x) | ||
|
|
||
| @[simp] lemma _root_.add_equiv.base_at_apply (f : G ≃+ G) (x y : P) : | ||
| f.base_at x y = f (y -ᵥ x) +ᵥ x := |
There was a problem hiding this comment.
Can @[simps apply] generate this? If not, are we missing some lemmas?
| ← f.map_add, vadd_vsub_assoc], | ||
| end | ||
|
|
||
| @[simp] lemma _root_.add_equiv.base_at_symm (f : G ≃+ G) (x : P) : |
There was a problem hiding this comment.
Can you add the refl variant of this lemma too?
| variables {G : Type*} {P : Type*} [add_comm_group G] [add_torsor G P] | ||
| include G | ||
|
|
||
| lemma base_at_neg (x : P) : (add_equiv.neg G).base_at x = point_reflection x := |
There was a problem hiding this comment.
Should this be in the add_equiv namespace?
| ..equiv.inv G} | ||
|
|
||
| @[simp, to_additive] lemma mul_equiv.coe_inv (G : Type*) [comm_group G] : | ||
| ⇑(mul_equiv.inv G) = λ a, a⁻¹ := |
There was a problem hiding this comment.
| ⇑(mul_equiv.inv G) = λ a, a⁻¹ := | |
| ⇑(mul_equiv.inv G) = has_inv.inv := |
There was a problem hiding this comment.
Alternately, can @[simps {fully_applied := ff}] generate this?
Add constructions
add_equiv.base_at(of typeperm),linear_equiv.base_at(of typeaffine_equiv), andlinear_isometry_equiv.base_at(of typeaffine_isometry_equiv), to describe the automorphism of anadd_torsor/normed_add_torsorobtained by fixing a basepoint, temporarily identifying theadd_torsorwith its model space using this basepoint, and applying theadd_equiv/linear_equiv/linear_isometry_equivto the space under this identification.Also API for these constructions and a few more missing lemmas.