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.
This is an attempt giving some partial results.
Set $s=\sin(2\pi/5)$ and $c=2s^2 - 3/2=\cos(2\pi/5)$. We show that if there is a positive answer, then the slopes of the edges are contained in the field $\mathbb Q(s)$, but none of the slopes is rational.
Let $u_0,\ldots,u_4$ be five putative rational points on the five sides of the regular pentagon. We allow that some points coincide. Note however that $u_i=u_j$ can only happen if $i-j\in\{-1,0,1\}$ (indices taken modulo $5$).
The rational group $\text{SO}(2,\mathbb Q)$ of rotations is dense in $\text{SO}(2,\mathbb R)$ (in view of the rational parametrization $x=2t/(1+t^2), y=(1-t^2)/(1+t^2)$ of the unit circle).
In particular, we may and do assume the following:
- None of the slopes is vertical.
- If $(x_i,y_i)=u_i\ne u_j=(x_j,y_j)$, then $x_i\ne x_j$ and $y_i\ne y_j$.
- $x_0=y_0=0$, $x_1=1$.
Let $m$ be the slope of the edge through $u_0$. By repeated rotation of the vector $(1,m)$ by $2\pi/5$, we get the slopes through the $u_i$'s. By intersecting the lines through these points, we get the vertices of the pentagon. Let $p_i$ be the intersection of the lines through $u_i$ and $u_{i+1}$. The condition which has to hold is that the vector $p_{i+2}-p_{i+1}$ is $p_{i+1}-p_i$ rotated by $2\pi/5$.
For $i=3$ this yields the condition \begin{align} q_0+q_1m &= 0\text{ where}\\ q_0 &= (-4x_3 + 4x_4)s^3 + (2y_1 + 2y_3)s^2 + (3x_3 - 2x_4 - 1)s - 3/2y_1 - y_3 + 1/2y_4\\ q_1 &= (-4y_3 + 4y_4)s^3 + (-2x_3 - 2)s^2 + (-y_1 + 3y_3 - 2y_4)s + x_3 - 1/2x_4 + 3/2 \end{align} We use that $s$ has degree $4$ over $\mathbb Q$, and $s^4 - 5/4s^2 + 5/16=0$.
Suppose that $m$ is not in the field generated by $s$. Then $q_1=q_0=0$. The linear independence of $1,s,s^2,s^3$ yields $8$ equations in the $x_i$'s and $y_i$'s. Let $q_i[j]$ be the coefficient in $q_i$ of $s^j$. We get the contradiction \begin{equation} 0 = q_0[3] + 8q_1[0] + 2q_1[2] = (-4x_3 + 4x_4)+8(x_3 - 1/2x_4 + 3/2)+2(-2x_3 - 2)=8. \end{equation} Similarly, we show that $m$ is not rational. Suppose that $m$ is rational. Then $q[j]:=q_0[j]+mq_1[j]$ vanishes for $j=0,1,2,3$. One computes that \begin{equation} 8mq[0]-4q[1]+4mq[2]-3q[3]=4(1-x_4)(1+m^2), \end{equation} so $4(1-x_4)(1+m^2)=0$. Of course $1+m^2\ne0$, hence $x_4=1=x_1$, which contradicts our assumption $u_4\ne u_1$ (and different $x$-coordinates for different $u_i$'s).
The SageMath code below does the actual computation. In order to continue, one can use $q$ to eliminate $m$ in the other equations (collected in the list L
in the program). Using Groebner bases one gets certain conditions on the $x_i$'s and $y_i$'s, but I wasn't able to get a contradiction, nor a positive example. The computations just became too heavy, so a better idea is needed.
vars = [f'x_{i}' for i in range(2, 5)]
vars += [f'y_{i}' for i in range(1, 5)]
vars += ['m', 's']
R = PolynomialRing(QQ, vars)
R.inject_variables()
f = s^4 - 5/4*s^2 + 5/16
c = 2*s^2 - 3/2
def u(i):
i = i%5
if i == 0:
return 0, 0
if i == 1:
return 1, y_1
return R.gen(i-2), R.gen(i+2)
def rot(u):
"""Rotate vector u by 2*pi/5"""
x, y = u
return (x*c - y*s)%f, (x*s + y*c)%f
def diff(u, v):
return u[0]-v[0], u[1]-v[1]
slope = (1, m)
p = []
for k in range(7):
ux, uy = u(k)
sux, suy = slope
slope = rot(slope)
vx, vy = u(k+1)
svx, svy = slope
x = suy*svx*ux - sux*svx*uy - sux*svy*vx + sux*svx*vy
y = suy*svy*ux - sux*svy*uy - suy*svy*vx + suy*svx*vy
p.append((x%f, y%f))
deltas = [diff(p[k+1], p[k]) for k in range(6)]
L = [diff(deltas[k+1], rot(deltas[k]))[0] for k in range(4)]
q = [z for z in L if z.degree(m) == 1][0]
lq = [R(z) for z in q.polynomial(m)]
def L2N(L): #Get the coefficients of the polynomial in s
N = []
for z in L:
N += [R(_) for _ in z.polynomial(s).coefficients()]
return N
print('Checking that m in Q(s):')
N = L2N(lq)
print(1 in ideal(N), R(1).lift(N))
print('Checking that m is not rational:')
N = L2N([q])
w = (1-x_4)*(m^2+1)
print(w in ideal(N), w.lift(N))