using LinearAlgebra
using AbstractAlgebra

function printgood(msg)
  printstyled("✓", color = :green)
  println(" ", msg)
end

function printbad(msg)
  printstyled("✗", color = :red)
  println(" ", msg)
end

F, gens = rational_function_field(AbstractAlgebra.Rationals{BigInt}(), ["x", "t₁", "t₂", "t₃"])
x = gens[1]
t = gens[2:4]

# three mutually tangent spheres which are all perpendicular to the x, y plane
M = matrix_space(F, 7, 7)
gram = M(F[
   1    -1    -1 -1 -1  t[1] t[2];
  -1     1    -1 -1 -1  x    t[3]
  -1    -1     1 -1 -1 -1   -1;
  -1    -1    -1  1 -1 -1   -1;
  -1    -1    -1 -1  1 -1   -1;
   t[1]  x    -1 -1 -1  1   -1;
   t[2]  t[3] -1 -1 -1 -1    1
])

r, p, L, U = lu(gram)
if isone(p)
  printgood("Found a solution")
else
  printbad("Didn't find a solution")
end
solution = transpose(L)
mform = U * inv(solution)