This is Maple code corresponding to the paper "A small frame and a certificate of its injectivity" (arXiv:1502.04656) 

 

> with(ListTools); -1; with(LinearAlgebra); -1; with(Groebner); -1
 

Here an injective 4x11 frame V: 

 

> V := Transpose(Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [1, `*`(9, I), `+`(`-`(5), `-`(`*`(7, I))), `+`(`-`(6), `-`(`*`(7, I)))], [1, `+`(1, `-`(I)), `+`(`-`(5), `-`(`*`(2, I)))...
V := Transpose(Matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [1, `*`(9, I), `+`(`-`(5), `-`(`*`(7, I))), `+`(`-`(6), `-`(`*`(7, I)))], [1, `+`(1, `-`(I)), `+`(`-`(5), `-`(`*`(2, I)))...
 

The 4 x4 Hermitian matrix Q, parametrized by the 16 variables x[j, k], y[j, k]: 

 

> Q := Matrix([[x[1, 1], `+`(x[1, 2], `*`(I, `*`(y[1, 2]))), `+`(x[1, 3], `*`(I, `*`(y[1, 3]))), `+`(x[1, 4], `*`(I, `*`(y[1, 4])))], [`+`(x[1, 2], `-`(`*`(`+`(I), `*`(y[1, 2])))), x[2, 2], `+`(x[2, 3],...
Q := Matrix([[x[1, 1], `+`(x[1, 2], `*`(I, `*`(y[1, 2]))), `+`(x[1, 3], `*`(I, `*`(y[1, 3]))), `+`(x[1, 4], `*`(I, `*`(y[1, 4])))], [`+`(x[1, 2], `-`(`*`(`+`(I), `*`(y[1, 2])))), x[2, 2], `+`(x[2, 3],...
 

The vectors V define frame measurements on Q, which are linear forms in the variables x[j,k], y[j,k]. These are collected into L: 

 

> L := [seq(Typesetting:-delayDotProduct(Typesetting:-delayDotProduct(HermitianTranspose(V[1 .. 4, k]), Q), V[1 .. 4, k]), k = 1 .. 11)]; -1
 

The matrix Q has rank at most two if all its 3x3 minors vanish.  We collect them into the list rk2 and join them with the linear forms L:  

 

> S := combinat[choose](4, 3); -1
 

> rk2 := [seq(seq(Determinant(SubMatrix(Q, r, c)), r = S), c = S)]; -1
 

> Eq := [op(L), op(rk2)]; -1
 

Then we compute a Groebner basis of this collection of polynomials, choosing the monomial order so as to eliminate all the variables by x[3,4] and y[3,4]. The first polynomial is the desired polynomial f: 

 

> gb := Basis(Eq, plex(x[1, 1], x[1, 2], x[1, 3], x[1, 4], x[2, 2], x[2, 3], x[2, 4], x[3, 3], x[4, 4], y[1, 2], y[1, 3], y[1, 4], y[2, 3], y[2, 4], x[3, 4], y[3, 4])); -1
gb := Basis(Eq, plex(x[1, 1], x[1, 2], x[1, 3], x[1, 4], x[2, 2], x[2, 3], x[2, 4], x[3, 3], x[4, 4], y[1, 2], y[1, 3], y[1, 4], y[2, 3], y[2, 4], x[3, 4], y[3, 4])); -1
 

> f := gb[1]
 

f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
f := `+`(`*`(47599685697454466246329412358483179722150043354437125082025800902606928597206272254845887202098485215232, `*`(`^`(x[3, 4], 20))), `-`(`*`(9408757898677587698385207544032012686757747191942...
(1)
 

Using Sturm sequences, we compute the number of real roots of f(x,1) and find that it has none.  

 

> sturm(subs(y[3, 4] = 1, f), x[3, 4], `+`(`-`(infinity)), infinity)
 

0 (2)
 

Our last computation checks that the system of equations Eq=0 has no non-zero solutions with y[3,4]=0. We do this by adjoining y[3,4] and X-1 to our equations for each variable X=x[j,k], y[j,k] and computing a Groebner basis.  For each variable, we find a Groebner basis [1], certifying that there are no such solutions.  

 

 

> xyvar := [x[1, 1], x[1, 2], x[1, 3], x[1, 4], x[2, 2], x[2, 3], x[2, 4], x[3, 3], x[4, 4], y[1, 2], y[1, 3], y[1, 4], y[2, 3], y[2, 4], x[3, 4], y[3, 4]]; -1
 

> seq(Basis([op(Eq), op([`+`(xyvar[k], `-`(1)), y[3, 4]])], grevlex), k = 1 .. 16)
 

[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1] (3)
 

>