The affine height of a tuple #
Mathlib's Height.mulHeight is a height on projective space: it is invariant under scaling
(Height.mulHeight_smul_eq_mulHeight), so it is a function of the line through a tuple rather
than of the tuple. Quantities that are not homogeneous in the tuple, such as the value
∑ i, a i * x i of a linear form or the determinant of a matrix, scale with their arguments, so
no bound on their height can be stated in terms of the projective heights of the arguments, which
are scale-invariant. This file defines the affine
height of a tuple x : ι → K, the projective height of the tuple with a coordinate 1
appended:
Height.mulHeightAff x = Height.mulHeight fun o : Option ι ↦ o.elim 1 x,
and its logarithm Height.logHeightAff. For a finite index type ι, the local factor at each
place is max (⨆ i, v (x i)) 1 (Height.mulHeightAff_eq), so the affine height is the tuple
analogue of Height.mulHeight₁ and agrees with it on a one-element tuple
(Height.mulHeightAff_unique, Height.mulHeightAff_fin_one).
The affine height is deliberately not invariant under scaling
(Height.exists_mulHeightAff_smul_ne). What it gains is domination: for finite index types, it
bounds the projective height of the tuple and the height of every coordinate, and it can only
drop under re-indexing. In the other direction, it is bounded above by the product of the
scalar heights of the coordinates.
Main definitions #
Height.mulHeightAff: the multiplicative affine height of a tuple.Height.logHeightAff: its logarithm.
Main results #
Height.mulHeightAff_eq: for finiteι, the affine height as a product of the local factorsmax (⨆ i, v (x i)) 1;Height.prod_mulHeightAff_eqsplits a finite product of affine heights into the products of these local factors place by place.Height.iSup_option_elim_eq_max,Height.iSup_option_elim_smul_le: the local factormax (⨆ i, v (x i)) 1for any nonnegative multiplicativev, and its bound for a scalar multiple;Height.mul_log_iSup_option_elim_smul_leturns a logarithmic bound forv cand the local sup norm ofxinto one for the local factor ofc • x.Height.hasFiniteMulSupport_max_iSup_nonarchAbsVal: the nonarchimedean local factors are1at all but finitely many places.Height.mulHeight_le_mulHeightAff,Height.mulHeight₁_le_mulHeightAff: for finiteι, the affine height dominates the projective height of the tuple and the height of each coordinate. The second fails forHeight.mulHeight.Height.mulHeightAff_le_prod_mulHeight₁: for finiteι, the affine height is at most∏ i, mulHeight₁ (x i);Height.logHeightAff_le_sum_logHeight₁is its logarithmic form.Height.mulHeightAff_comp_le,Height.mulHeightAff_comp_equiv: monotonicity under re-indexing between finite index types, and equality for a bijection between arbitrary ones.Height.mulHeight_cons_one: forx : Fin n → K, prepending the coordinate1withFin.consinstead of appending it gives the same height.Height.mulHeightAff_zero,Height.mulHeightAff_one: the zero tuple and the tuple of ones have affine height1.Height.mulHeightAff_unique,Height.mulHeightAff_fin_one: on a one-element tuple the affine height isHeight.mulHeight₁.Height.exists_mulHeightAff_smul_ne: the affine height is not invariant under scaling.
Implementation notes #
The appended coordinate is indexed by none : Option ι. The type Option ι is finite when ι
is, and re-indexing along f : ι → ι' becomes re-indexing along Option.map f.
The finiteness of the multiplicative support of the nonarchimedean local factors rests on
Height.hasFiniteMulSupport_iSup_nonarchAbsVal, which is private in
Mathlib/NumberTheory/Height/Basic.lean; it is reached by import all, as Mathlib's own
Mathlib/NumberTheory/Height/MvPolynomial.lean does.
References #
- E. Bombieri and W. Gubler, Heights in Diophantine Geometry, Cambridge University Press, 2006, §1.5.
- The statements and proofs follow
ArithmeticHeights/Affine.leanofrwst/Subspace-Theorems(commite443c24, Apache 2.0), restated against Mathlib's height API.
The affine height of a tuple x : ι → K: the projective height Height.mulHeight of
the tuple with a coordinate 1 appended.
Unlike Height.mulHeight it is not invariant under scaling
(Height.exists_mulHeightAff_smul_ne); for finite ι it dominates the projective height
(Height.mulHeight_le_mulHeightAff) and the height of every coordinate
(Height.mulHeight₁_le_mulHeightAff).
Instances For
The affine logarithmic height of a tuple, the logarithm of Height.mulHeightAff.
Instances For
The defining formula of Height.mulHeightAff, to unfold it into Height.mulHeight.
The defining formula of Height.logHeightAff as the logarithm of Height.mulHeightAff.
The affine height does not change under a bijective re-indexing.
The tuple of ones has affine height 1: appending a coordinate 1 gives the tuple of ones
on Option ι.
The tuple of ones has affine logarithmic height 0.
The logarithmic form of Height.mulHeightAff_comp_equiv.
The affine height may equally be computed by prepending the coordinate 1 to a tuple
indexed by Fin n: the projective height of Fin.cons 1 x is Height.mulHeightAff x.
The logarithmic form of Height.mulHeight_cons_one.
The zero tuple has affine height 1, with no finiteness assumption on its index type.
The zero tuple has affine logarithmic height 0.
The local sup norm ⨆ i, v (x i) of a nonzero finite tuple is positive.
The local factor of the affine height: the local sup norm of a tuple with a coordinate 1
appended is max (⨆ i, v (x i)) 1.
The local factor of the affine height of a scalar multiple c • x is at most
max (v c * ⨆ i, v (x i)) 1.
A logarithmic bound m * log (v c) + m * log (⨆ i, v (x i)) ≤ B with 0 ≤ m and 0 ≤ B
bounds m times the logarithm of the local factor of the affine height of c • x.
The affine height as a product of local factors: at each place v the factor is
max (⨆ i, v (x i)) 1, the tuple analogue of the local factor max (v x) 1 of
Height.mulHeight₁.
The nonarchimedean local factor max (⨆ i, v (x i)) 1 of the affine height is 1 at all
but finitely many places.
A finite product of affine heights, split place by place: the local factor at v is the
product ∏ k, max (⨆ i, v (y k i)) 1 of the local factors of the tuples y k.
The affine height of a tuple is at least 1.
The affine height of a tuple is positive.
The affine height of a tuple is nonzero.
The affine logarithmic height of a tuple is nonnegative.
The projective height of a tuple is at most its affine height.
The logarithmic form of Height.mulHeight_le_mulHeightAff.
The affine height of x ∘ f is at most that of x, for any re-indexing f.
The logarithmic form of Height.mulHeightAff_comp_le.
On a one-element tuple the affine height is the height Height.mulHeight₁ of the unique
coordinate.
The logarithmic form of Height.mulHeightAff_unique.
The affine height of ![x] is Height.mulHeight₁ x: with the appended coordinate 1, the
affine height of a one-element tuple recovers the height of its entry.
The logarithmic form of Height.mulHeightAff_fin_one.
The height of each coordinate is at most the affine height of the tuple. The analogous
bound for Height.mulHeight is false, since the projective height is invariant under scaling.
The logarithmic form of Height.mulHeight₁_le_mulHeightAff.
The affine height is at most the product of the scalar heights of its coordinates.
The affine logarithmic height is at most the sum of the scalar logarithmic heights.
The affine height is not invariant under scaling. Over ℚ, doubling the tuple ![1]
changes its affine height from 1 to 2, while the projective height of every tuple is
unchanged by scaling (Height.mulHeight_smul_eq_mulHeight).