Affine equivalences #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define affine_equiv k P₁ P₂
(notation: P₁ ≃ᵃ[k] P₂
) to be the type of affine
equivalences between P₁
and `P₂, i.e., equivalences such that both forward and inverse maps are
affine maps.
We define the following equivalences:
-
affine_equiv.refl k P
: the identity map as anaffine_equiv
; -
e.symm
: the inverse map of anaffine_equiv
as anaffine_equiv
; -
e.trans e'
: composition of twoaffine_equiv
s; note that the order followsmathlib
'scategory_theory
convention (applye
, thene'
), not the convention used in function composition and compositions of bundled morphisms.
We equip affine_equiv k P P
with a group
structure with multiplication corresponding to
composition in affine_equiv.group
.
Tags #
affine space, affine equivalence
- to_equiv : P₁ ≃ P₂
- linear : V₁ ≃ₗ[k] V₂
- map_vadd' : ∀ (p : P₁) (v : V₁), ⇑(self.to_equiv) (v +ᵥ p) = ⇑(self.linear) v +ᵥ ⇑(self.to_equiv) p
An affine equivalence is an equivalence between affine spaces such that both forward and inverse maps are affine.
We define it using an equiv
for the map and a linear_equiv
for the linear part in order
to allow affine equivalences with good definitional equalities.
Instances for affine_equiv
- affine_equiv.has_sizeof_inst
- affine_equiv.equiv_like
- affine_equiv.has_coe_to_fun
- affine_equiv.equiv.has_coe
- affine_equiv.affine_map.has_coe
- affine_equiv.group
Reinterpret an affine_equiv
as an affine_map
.
Equations
- affine_equiv.equiv.has_coe = {coe := affine_equiv.to_equiv _inst_7}
Equations
Construct an affine equivalence by verifying the relation between the map and its linear part at
one base point. Namely, this function takes a map e : P₁ → P₂
, a linear equivalence
e' : V₁ ≃ₗ[k] V₂
, and a point p
such that for any other point p'
we have
e p' = e' (p' -ᵥ p) +ᵥ e p
.
Inverse of an affine equivalence as an affine equivalence.
See Note [custom simps projection]
Equations
See Note [custom simps projection]
Equations
Bijective affine maps are affine isomorphisms.
Equations
- affine_equiv.of_bijective hφ = {to_equiv := {to_fun := (equiv.of_bijective ⇑φ hφ).to_fun, inv_fun := (equiv.of_bijective ⇑φ hφ).inv_fun, left_inv := _, right_inv := _}, linear := linear_equiv.of_bijective φ.linear _, map_vadd' := _}
Identity map as an affine_equiv
.
Equations
- affine_equiv.refl k P₁ = {to_equiv := equiv.refl P₁, linear := linear_equiv.refl k V₁ _inst_3, map_vadd' := _}
Composition of two affine_equiv
alences, applied left to right.
Equations
- affine_equiv.group = {mul := λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e, mul_assoc := _, one := affine_equiv.refl k P₁ _inst_4, one_mul := _, mul_one := _, npow := div_inv_monoid.npow._default (affine_equiv.refl k P₁) (λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e) affine_equiv.trans_refl affine_equiv.refl_trans, npow_zero' := _, npow_succ' := _, inv := affine_equiv.symm _inst_4, div := div_inv_monoid.div._default (λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e) affine_equiv.group._proof_4 (affine_equiv.refl k P₁) affine_equiv.trans_refl affine_equiv.refl_trans (div_inv_monoid.npow._default (affine_equiv.refl k P₁) (λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e) affine_equiv.trans_refl affine_equiv.refl_trans) affine_equiv.group._proof_5 affine_equiv.group._proof_6 affine_equiv.symm, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow._default (λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e) affine_equiv.group._proof_8 (affine_equiv.refl k P₁) affine_equiv.trans_refl affine_equiv.refl_trans (div_inv_monoid.npow._default (affine_equiv.refl k P₁) (λ (e e' : P₁ ≃ᵃ[k] P₁), e'.trans e) affine_equiv.trans_refl affine_equiv.refl_trans) affine_equiv.group._proof_9 affine_equiv.group._proof_10 affine_equiv.symm, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, mul_left_inv := _}
affine_equiv.linear
on automorphisms is a monoid_hom
.
Equations
- affine_equiv.linear_hom = {to_fun := affine_equiv.linear _inst_4, map_one' := _, map_mul' := _}
The group of affine_equiv
s are equivalent to the group of units of affine_map
.
This is the affine version of linear_map.general_linear_group.general_linear_equiv
.
Equations
- affine_equiv.equiv_units_affine_map = {to_fun := λ (e : P₁ ≃ᵃ[k] P₁), {val := ↑e, inv := ↑(e.symm), val_inv := _, inv_val := _}, inv_fun := λ (u : (P₁ →ᵃ[k] P₁)ˣ), {to_equiv := {to_fun := ⇑↑u, inv_fun := ⇑↑u⁻¹, left_inv := _, right_inv := _}, linear := ⇑(linear_map.general_linear_group.general_linear_equiv k V₁) (⇑(units.map affine_map.linear_hom) u), map_vadd' := _}, left_inv := _, right_inv := _, map_mul' := _}
The map v ↦ v +ᵥ b
as an affine equivalence between a module V
and an affine space P
with
tangent space V
.
Equations
- affine_equiv.vadd_const k b = {to_equiv := equiv.vadd_const b, linear := linear_equiv.refl k V₁ _inst_3, map_vadd' := _}
p' ↦ p -ᵥ p'
as an equivalence.
Equations
- affine_equiv.const_vsub k p = {to_equiv := equiv.const_vsub p, linear := linear_equiv.neg k _inst_3, map_vadd' := _}
The map p ↦ v +ᵥ p
as an affine automorphism of an affine space.
Note that there is no need for an affine_map.const_vadd
as it is always an equivalence.
This is roughly to distrib_mul_action.to_linear_equiv
as +ᵥ
is to •
.
Equations
- affine_equiv.const_vadd k P₁ v = {to_equiv := equiv.const_vadd P₁ v, linear := linear_equiv.refl k V₁ _inst_3, map_vadd' := _}
A more bundled version of affine_equiv.const_vadd
.
Equations
- affine_equiv.const_vadd_hom k P₁ = {to_fun := λ (v : multiplicative V₁), affine_equiv.const_vadd k P₁ (⇑multiplicative.to_add v), map_one' := _, map_mul' := _}
Fixing a point in affine space, homothety about this point gives a group homomorphism from (the centre of) the units of the scalars into the group of affine equivalences.
Point reflection in x
as a permutation.
Equations
x
is the only fixed point of point_reflection x
. This lemma requires
x + x = y + y ↔ x = y
. There is no typeclass to use here, so we add it as an explicit argument.
Interpret a linear equivalence between modules as an affine equivalence.