From 9778fff221a64bfb5c8373305b28b0d1c031a8e8 Mon Sep 17 00:00:00 2001 From: bhutz Date: Fri, 5 Nov 2021 11:41:54 -0500 Subject: [PATCH] 32687: fix lower bound in height difference in projective_ds --- .../arithmetic_dynamics/projective_ds.py | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py index d4cb66af782..11c5b326900 100644 --- a/src/sage/dynamics/arithmetic_dynamics/projective_ds.py +++ b/src/sage/dynamics/arithmetic_dynamics/projective_ds.py @@ -2116,10 +2116,10 @@ def height_difference_bound(self, prec=None): sage: P. = ProjectiveSpace(ZZ,2) sage: f = DynamicalSystem_projective([4*x^2+100*y^2, 210*x*y, 10000*z^2]) sage: f.height_difference_bound() - 11.0020998412042 + 12.1007121298723 sage: f.normalize_coordinates() sage: f.height_difference_bound() - 10.3089526606443 + 11.4075649493124 A number field example:: @@ -2128,7 +2128,7 @@ def height_difference_bound(self, prec=None): sage: P. = ProjectiveSpace(K,2) sage: f = DynamicalSystem_projective([1/(c+1)*x^2+c*y^2, 210*x*y, 10000*z^2]) sage: f.height_difference_bound() - 11.0020998412042 + 12.1007121298723 :: @@ -2136,6 +2136,13 @@ def height_difference_bound(self, prec=None): sage: f = DynamicalSystem_projective([x^2, QQbar(sqrt(-1))*y^2, QQbar(sqrt(3))*z^2]) sage: f.height_difference_bound() 3.43967790223022 + + :: + + sage: P. = ProjectiveSpace(QQ, 1) + sage: f = DynamicalSystem([5*x^2 + 3*x*y , y^2 + 3*x^2]) + sage: f.height_difference_bound(prec=100) + 5.3375380797013179737224159274 """ FF = FractionField(self.domain().base_ring()) #lift will only work over fields, so coercing into FF if not FF in NumberFields(): @@ -2159,19 +2166,12 @@ def height_difference_bound(self, prec=None): #compute lower bound - from explicit polynomials of Nullstellensatz CR = f.domain().coordinate_ring() I = CR.ideal(f.defining_polynomials()) - MCP = [] + maxh = 0 for k in range(N + 1): CoeffPolys = (CR.gen(k) ** D).lift(I) - Res = lcm([1] + [abs(coeff.denominator()) for val in CoeffPolys - for coeff in val.coefficients()]) - h = max([c.global_height() for g in CoeffPolys for c in (Res*g).coefficients()]) - MCP.append([Res, h]) #since we need to clear denominators - maxh = 0 - gcdRes = 0 - for val in MCP: - gcdRes = gcd(gcdRes, val[0]) - maxh = max(maxh, val[1]) - L = abs(R(gcdRes).log() - R((N + 1) * binomial(N + D - d, D - d)).log() - maxh) + h = max([c.global_height(prec) for g in CoeffPolys for c in (g).coefficients()]) + maxh = max(maxh, h) + L = R((N + 1) * binomial(N + D - d, D - d)).log() + maxh C = max(U, L) #height difference dh(P) - L <= h(f(P)) <= dh(P) +U return C / (d - 1) @@ -6940,7 +6940,7 @@ def conjugating_set(self, other, R=None, num_cpus=2): sage: P. = ProjectiveSpace(GF(7), 1) sage: D6 = DynamicalSystem_projective([y^2, x^2]) - sage: D6.conjugating_set(D6) + sage: sorted(D6.conjugating_set(D6)) [ [1 0] [0 1] [0 2] [4 0] [2 0] [0 4] [0 1], [1 0], [1 0], [0 1], [0 1], [1 0]