# radicalContainment -- whether an element is contained in the radical of an ideal

## Synopsis

• Usage:
radicalContainment(g, I)
• Inputs:
• Optional inputs:
• Strategy => ..., default value "Rabinowitsch"
• Outputs:
• , true if g is in the radical of I, and false otherwise

## Description

This method determines if a given element g is contained in the radical of a given ideal I. There are 2 algorithms implemented for doing so: the first (default) uses the Rabinowitsch trick in the proof of the Nullstellensatz, and is called with Strategy => "Rabinowitsch". The second algorithm, for homogeneous ideals, uses a theorem of Kollar to obtain an effective upper bound on the required power to check containment, together with repeated squaring, and is called with Strategy => "Kollar". The latter algorithm is generally quite fast if a Grobner basis of I has already been computed. A recommended way to do so is to check ordinary containment, i.e. g % I == 0, before calling this function.

 i1 : d = (4,5,6,7) o1 = (4, 5, 6, 7) o1 : Sequence i2 : n = #d o2 = 4 i3 : R = QQ[x_0..x_n] o3 = R o3 : PolynomialRing i4 : I = ideal homogenize(matrix{{x_1^(d#0)} | apply(toList(1..n-2), i -> x_i - x_(i+1)^(d#i)) | {x_(n-1) - x_0^(d#-1)}}, x_n) 4 5 4 6 5 7 6 o4 = ideal (x , - x + x x , - x + x x , - x + x x ) 1 2 1 4 3 2 4 0 3 4 o4 : Ideal of R i5 : D = product(I_*/degree/sum) o5 = 840 i6 : x_0^(D-1) % I != 0 and x_0^D % I == 0 o6 = true i7 : elapsedTime radicalContainment(x_0, I) -- 0.21795 seconds elapsed o7 = true i8 : elapsedTime radicalContainment(x_0, I, Strategy => "Kollar") -- 0.00414752 seconds elapsed o8 = true i9 : elapsedTime radicalContainment(x_n, I, Strategy => "Kollar") -- 0.00322103 seconds elapsed o9 = false