Skip to main content
Slightly clarified code in Update 3
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107
vars = [f'l_{i}' for i in range(5)]
vars += ['cx', 'cy', 'rx', 'ry', 's']
S = PolynomialRing(QQ, vars)
S.inject_variables()
f = s^4 - 5/4*s^2 + 5/16 # s = sin(2*pi/5), f = minpol of s
c = 2*s^2 - 3/2

rxy = vector(S, (rx, ry))
cxy = vector(S, (cx, cy)  # c = cos(2*pi/5)

R = matrix([[c, s], [-s, c]])

def redvec(v):
    return vector((v[0]%f, v[1]%f))

def p(i):
    i = i%5
return redvec(vector(S, (cx, cy)) return+ redvecR^(cxyi%5)*vector(S, +(rx, R^i*rxyry)))

def l(i):
    return S.gen(i%5)

def q(i):
    return (1-l(i))*p(i) + l(i)*p(i+1)

def pseu(u, v):
    return matrix([u,v]).det()

def scalp(u, v):
    return u[0]*v[0] + u[1]*v[1]

A = sum(pseu(q(i), q(i-1)) for i in range(5))
B = sum(pseu(q(i), q(i-2)) for i in range(5))
C = sum(scalp(q(i), q(i-1)-q(i-2)) for i in range(5))
D = A + B
E = 3*B - A

uranix = ((5*D^2 + E^2 -10*C^2)^2 - 20*(C^2 - D*E)^2) % f
print(uranix%furanix == 0)
vars = [f'l_{i}' for i in range(5)]
vars += ['cx', 'cy', 'rx', 'ry', 's']
S = PolynomialRing(QQ, vars)
S.inject_variables()
f = s^4 - 5/4*s^2 + 5/16
c = 2*s^2 - 3/2

rxy = vector(S, (rx, ry))
cxy = vector(S, (cx, cy))

R = matrix([[c, s], [-s, c]])

def redvec(v):
    return vector((v[0]%f, v[1]%f))

def p(i):
    i = i%5
    return redvec(cxy + R^i*rxy)

def l(i):
    return S.gen(i%5)

def q(i):
    return (1-l(i))*p(i) + l(i)*p(i+1)

def pseu(u, v):
    return matrix([u,v]).det()

def scalp(u, v):
    return u[0]*v[0] + u[1]*v[1]

A = sum(pseu(q(i), q(i-1)) for i in range(5))
B = sum(pseu(q(i), q(i-2)) for i in range(5))
C = sum(scalp(q(i), q(i-1)-q(i-2)) for i in range(5))
D = A + B
E = 3*B - A

uranix = (5*D^2 + E^2 -10*C^2)^2 - 20*(C^2 - D*E)^2
print(uranix%f == 0)
vars = [f'l_{i}' for i in range(5)]
vars += ['cx', 'cy', 'rx', 'ry', 's']
S = PolynomialRing(QQ, vars)
S.inject_variables()
f = s^4 - 5/4*s^2 + 5/16 # s = sin(2*pi/5), f = minpol of s
c = 2*s^2 - 3/2          # c = cos(2*pi/5)

R = matrix([[c, s], [-s, c]])

def redvec(v):
    return vector((v[0]%f, v[1]%f))

def p(i):
    return redvec(vector(S, (cx, cy)) + R^(i%5)*vector(S, (rx, ry)))

def l(i):
    return S.gen(i%5)

def q(i):
    return (1-l(i))*p(i) + l(i)*p(i+1)

def pseu(u, v):
    return matrix([u,v]).det()

def scalp(u, v):
    return u[0]*v[0] + u[1]*v[1]

A = sum(pseu(q(i), q(i-1)) for i in range(5))
B = sum(pseu(q(i), q(i-2)) for i in range(5))
C = sum(scalp(q(i), q(i-1)-q(i-2)) for i in range(5))
D = A + B
E = 3*B - A

uranix = ((5*D^2 + E^2 -10*C^2)^2 - 20*(C^2 - D*E)^2) % f
print(uranix == 0)
Confirmed uranix's solution
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107

Update 3: The answer by uranix which finally settles the question is extremely clever! The essential point is the algebraic relation between $C, D, E$. The following Sage code (which can be run e.g. in the SageMathCell) verifies that his calculation is indeed correct:

vars = [f'l_{i}' for i in range(5)]
vars += ['cx', 'cy', 'rx', 'ry', 's']
S = PolynomialRing(QQ, vars)
S.inject_variables()
f = s^4 - 5/4*s^2 + 5/16
c = 2*s^2 - 3/2

rxy = vector(S, (rx, ry))
cxy = vector(S, (cx, cy))

R = matrix([[c, s], [-s, c]])

def redvec(v):
    return vector((v[0]%f, v[1]%f))

def p(i):
    i = i%5
    return redvec(cxy + R^i*rxy)

def l(i):
    return S.gen(i%5)

def q(i):
    return (1-l(i))*p(i) + l(i)*p(i+1)

def pseu(u, v):
    return matrix([u,v]).det()

def scalp(u, v):
    return u[0]*v[0] + u[1]*v[1]

A = sum(pseu(q(i), q(i-1)) for i in range(5))
B = sum(pseu(q(i), q(i-2)) for i in range(5))
C = sum(scalp(q(i), q(i-1)-q(i-2)) for i in range(5))
D = A + B
E = 3*B - A

uranix = (5*D^2 + E^2 -10*C^2)^2 - 20*(C^2 - D*E)^2
print(uranix%f == 0)

Update 2: (Answering the question of uranix in the comments) In L, we set $m=m_0+m_1s+m_2s^2+m_3s^3$, and grouping by powers of $s$, we get $16$ equations in $y1, x2, y2, x3, y3, x4, y4$ and the $m_i$'s. After running the displayed code from the original answer, run the following code:

Update 2: (Answering the question of uranix in the comments) In L, we set $m=m_0+m_1s+m_2s^2+m_3s^3$, and grouping by powers of $s$, we get $16$ equations in $y1, x2, y2, x3, y3, x4, y4$ and the $m_i$'s. After running the displayed code from the original answer, run the following code:

Update 3: The answer by uranix which finally settles the question is extremely clever! The essential point is the algebraic relation between $C, D, E$. The following Sage code (which can be run e.g. in the SageMathCell) verifies that his calculation is indeed correct:

vars = [f'l_{i}' for i in range(5)]
vars += ['cx', 'cy', 'rx', 'ry', 's']
S = PolynomialRing(QQ, vars)
S.inject_variables()
f = s^4 - 5/4*s^2 + 5/16
c = 2*s^2 - 3/2

rxy = vector(S, (rx, ry))
cxy = vector(S, (cx, cy))

R = matrix([[c, s], [-s, c]])

def redvec(v):
    return vector((v[0]%f, v[1]%f))

def p(i):
    i = i%5
    return redvec(cxy + R^i*rxy)

def l(i):
    return S.gen(i%5)

def q(i):
    return (1-l(i))*p(i) + l(i)*p(i+1)

def pseu(u, v):
    return matrix([u,v]).det()

def scalp(u, v):
    return u[0]*v[0] + u[1]*v[1]

A = sum(pseu(q(i), q(i-1)) for i in range(5))
B = sum(pseu(q(i), q(i-2)) for i in range(5))
C = sum(scalp(q(i), q(i-1)-q(i-2)) for i in range(5))
D = A + B
E = 3*B - A

uranix = (5*D^2 + E^2 -10*C^2)^2 - 20*(C^2 - D*E)^2
print(uranix%f == 0)

Update 2: (Answering the question of uranix in the comments) In L, we set $m=m_0+m_1s+m_2s^2+m_3s^3$, and grouping by powers of $s$, we get $16$ equations in $y1, x2, y2, x3, y3, x4, y4$ and the $m_i$'s. After running the displayed code from the original answer, run the following code:

Enhanced the answer
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107

Update 2: (Answering the question of uranix in the comments) In L, we set $m=m_0+m_1s+m_2s^2+m_3s^3$, and grouping by powers of $s$, we get $16$ equations in $y1, x2, y2, x3, y3, x4, y4$ and the $m_i$'s. After running the displayed code from the original answer, run the following code:

vars += ['m0', 'm1', 'm2', 'm3']
S = PolynomialRing(QQ, vars)
S.inject_variables()
LL = [S(z).subs({m:m0 + m1*s + m2*s^2 + m3*s^3})%f for z in L]
N = []
for z in LL:
    N += [S(_) for _ in z.polynomial(s).coefficients()]
I = ideal(N)
cubic = 64*m0*m1^2 - 64*m0^2*m2 - 80*m0*m2^2 - 20*m2^3 + 160*m0*m1*m3 + 40*m1*m2*m3 + 80*m0*m3^2 + 25*m2*m3^2 - 64*m2
print(cubic in I)
print(I.elimination_ideal(S.gens()[:7]))

The second to last line verifies that the cubic indeed has to vanish. And the last line shows how the cubic was obtained from eliminating variables. (If one would like to know how cubic is expressed in term of the polynomials in N, run cubic.lift(I).)

Update 1: With the notation from below, an example where an edge has slope $m$ requires $m\in\mathbb Q(s)$ where $s=\sin(2\pi/5)$. Note that $s$ has degree $4$ over $\mathbb Q$. If we write $m=m_0+m_1s+m_2s^2+m_3s^3$ with rational $m_i$, then a further necessary condition is \begin{equation} 64m_0m_1^2 - 64m_0^2m_2 - 80m_0m_2^2 - 20m_2^3 + 160m_0m_1m_3 + 40m_1m_2m_3 + 80m_0m_3^2 + 25m_2m_3^2 - 64m_2=0. \end{equation} This condition is essentially sufficient for the following: There are $5$ distinct rational points $u_i$, one on each line through an edge. This cubic has many rational solutions. (I guess it is rationally parametrized or at least unirational) Still, none of these points so far forced all the $u_i$'s to lie inside each edge. This additional condition amounts to high degree polynomial inequalities.

Update: With the notation from below, an example where an edge has slope $m$ requires $m\in\mathbb Q(s)$ where $s=\sin(2\pi/5)$. Note that $s$ has degree $4$ over $\mathbb Q$. If we write $m=m_0+m_1s+m_2s^2+m_3s^3$ with rational $m_i$, then a further necessary condition is \begin{equation} 64m_0m_1^2 - 64m_0^2m_2 - 80m_0m_2^2 - 20m_2^3 + 160m_0m_1m_3 + 40m_1m_2m_3 + 80m_0m_3^2 + 25m_2m_3^2 - 64m_2=0. \end{equation} This condition is essentially sufficient for the following: There are $5$ distinct rational points $u_i$, one on each line through an edge. This cubic has many rational solutions. (I guess it is rationally parametrized or at least unirational) Still, none of these points so far forced all the $u_i$'s to lie inside each edge. This additional condition amounts to high degree polynomial inequalities.

Update 2: (Answering the question of uranix in the comments) In L, we set $m=m_0+m_1s+m_2s^2+m_3s^3$, and grouping by powers of $s$, we get $16$ equations in $y1, x2, y2, x3, y3, x4, y4$ and the $m_i$'s. After running the displayed code from the original answer, run the following code:

vars += ['m0', 'm1', 'm2', 'm3']
S = PolynomialRing(QQ, vars)
S.inject_variables()
LL = [S(z).subs({m:m0 + m1*s + m2*s^2 + m3*s^3})%f for z in L]
N = []
for z in LL:
    N += [S(_) for _ in z.polynomial(s).coefficients()]
I = ideal(N)
cubic = 64*m0*m1^2 - 64*m0^2*m2 - 80*m0*m2^2 - 20*m2^3 + 160*m0*m1*m3 + 40*m1*m2*m3 + 80*m0*m3^2 + 25*m2*m3^2 - 64*m2
print(cubic in I)
print(I.elimination_ideal(S.gens()[:7]))

The second to last line verifies that the cubic indeed has to vanish. And the last line shows how the cubic was obtained from eliminating variables. (If one would like to know how cubic is expressed in term of the polynomials in N, run cubic.lift(I).)

Update 1: With the notation from below, an example where an edge has slope $m$ requires $m\in\mathbb Q(s)$ where $s=\sin(2\pi/5)$. Note that $s$ has degree $4$ over $\mathbb Q$. If we write $m=m_0+m_1s+m_2s^2+m_3s^3$ with rational $m_i$, then a further necessary condition is \begin{equation} 64m_0m_1^2 - 64m_0^2m_2 - 80m_0m_2^2 - 20m_2^3 + 160m_0m_1m_3 + 40m_1m_2m_3 + 80m_0m_3^2 + 25m_2m_3^2 - 64m_2=0. \end{equation} This condition is essentially sufficient for the following: There are $5$ distinct rational points $u_i$, one on each line through an edge. This cubic has many rational solutions. (I guess it is rationally parametrized or at least unirational) Still, none of these points so far forced all the $u_i$'s to lie inside each edge. This additional condition amounts to high degree polynomial inequalities.

deleted 50 characters in body
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107
Loading
Further partial result
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107
Loading
Source Link
Peter Mueller
  • 22.5k
  • 1
  • 75
  • 107
Loading