Here is what I got so far by translating Amit Khetans bires.mpl into Axiom (I'm struggling with guessing the right coercions...) Help is very much appreciated!:
)abbrev package BIRES bires ++ Description: ++ This package implements Amit Khetan's bivariate resultant algorithm bires(R:Ring, VarSet: List Symbol): Exports == Implementation where polR == DistributedMultivariatePolynomial(VarSet, R) VarList == OrderedVariableList(VarSet) Exports == with resultant: (List polR) -> Matrix polR Implementation == add resultant(polylist) == supp := parts(union(union(set(primitiveMonomials(polylist.1))$Set(polR), set(primitiveMonomials(polylist.2))$Set(polR)), set(primitiveMonomials(polylist.3))$Set(polR))) vars := [index(1), index(2)]$List(VarList) C := matrix [[coefficient(polylist.i, vars, degree(supp.j, vars)) for i in 1..3] for j in 1..#supp]
My current solution to this problem is to do something like
res1:=resultant(p1,p2,x) res2:=resultant(p1,p3,x) result:=gcd(res1,res2)
In fact, this gives me a complete solution of the system. Unfortunately, for my application this is too slow. The problem is that res1 and res2 are huge polynomials, since p1, p2 and p3 have total degree about 30 and larger. So, hoping for a faster method, I stumbled over multivariate resultants, which achieve nearly what I need, the only problem being the nontriviality condition. I was advised to look at Amit Khetan's algorithm, and, in the hope of somehow solving this latter problem, I began to translate his algorithm, available online from
http://www.math.umass.edu/~khetan/software/bires.mpl
However, I have not pursued this further, since simple tests in Maple showed that his implementation is in fact a lot slower than my naive algorithm. In fact, it seems that his algorithm is not especially well suited for my problem at hand. I contacted Amit, and he said he would try to help me next week.
Martin