# QuasiAlgebraicSet(R, Var, Expon, Dpoly)ΒΆ

- R: GcdDomain
- Var: OrderedSet
- Expon: OrderedAbelianMonoidSup
- Dpoly: PolynomialCategory(R, Expon, Var)

QuasiAlgebraicSet constructs a domain representing quasi-algebraic sets, which is the intersection of a Zariski closed set, defined as the common zeros of a given list of polynomials (the defining polynomials for equations), and a principal Zariski open set, defined as the complement of the common zeros of a polynomial `f`

(the defining polynomial for the inequation). This domain provides simplification of a user-given representation using groebner basis computations. There are two simplification routines: the first function idealSimplify uses groebner basis of ideals alone, while the second, simplify uses both groebner basis and factorization. The resulting defining equations `L`

always form a groebner basis, and the resulting defining inequation `f`

is always reduced. The function simplify may be applied several times if desired. A third simplification routine radicalSimplify is provided in QuasiAlgebraicSet2 for comparison study only, as it is inefficient compared to the other two, as well as is restricted to only certain coefficient domains. For detail analysis and a comparison of the three methods, please consult the reference cited. A polynomial function `q`

defined on the quasi-algebraic set is equivalent to its reduced form with respect to `L`

. While this may be obtained using the usual normal form algorithm, there is no canonical form for `q`

. The ordering in groebner basis computation is determined by the data type of the input polynomials. If it is possible we suggest to use refinements of total degree orderings.

- =: (%, %) -> Boolean
- from BasicType
- ~=: (%, %) -> Boolean
- from BasicType
- coerce: % -> OutputForm
- from CoercibleTo OutputForm

- definingEquations: % -> List Dpoly
`definingEquations(s)`

returns a list of defining polynomials for equations, that is, for the Zariski closed part of`s`

.

- definingInequation: % -> Dpoly
`definingInequation(s)`

returns a single defining polynomial for the inequation, that is, the Zariski open part of`s`

.

- empty: () -> %
`empty()`

returns the empty quasi-algebraic set

- empty?: % -> Boolean
`empty?(s)`

returns`true`

if the quasialgebraic set`s`

has no points, and`false`

otherwise.- hash: % -> SingleInteger
- from SetCategory
- hashUpdate!: (HashState, %) -> HashState
- from SetCategory

- idealSimplify: % -> %
`idealSimplify(s)`

returns a different and presumably simpler representation of`s`

with the defining polynomials for the equations forming a groebner basis, and the defining polynomial for the inequation reduced with respect to the basis, using Buchberger`'s`

algorithm.- latex: % -> String
- from SetCategory

- quasiAlgebraicSet: (List Dpoly, Dpoly) -> %
`quasiAlgebraicSet(pl, q)`

returns the quasi-algebraic set with defining equations`p`

= 0 for`p`

belonging to the list`pl`

, and defining inequation`q`

`~=`

0.

- setStatus: (%, Union(Boolean, failed)) -> %
`setStatus(s, t)`

returns the same representation for`s`

, but asserts the following: if`t`

is`true`

, then`s`

is empty, if`t`

is`false`

, then`s`

is non-empty, and if`t`

= “failed”, then no assertion is made (that is, “don`'t`

know”). Note: for internal use only, with care.

- simplify: % -> % if R has EuclideanDomain and R has CharacteristicZero
`simplify(s)`

returns a different and presumably simpler representation of`s`

with the defining polynomials for the equations forming a groebner basis, and the defining polynomial for the inequation reduced with respect to the basis, using a heuristic algorithm based on factoring.

- status: % -> Union(Boolean, failed)
`status(s)`

returns`true`

if the quasi-algebraic set is empty,`false`

if it is not, and “failed” if not yet known