RandomObject bundles the necessary functions for the construction of certified random objects parametrized by a unirational moduli space $M$.
RandomObject is a MutableHashTable as ancestor and needs to have the following keys:
* Construction: the method function assigned to this key contains a unirationality construction.
* Certification: the method function assigned to this key checks whether the constructed object fulfills certain conditions.
In the following example we construct plane curves of degree $d$. The Certification checks whether they are irreducible over the coefficient field.
i1 : constructPlaneCurve = method(TypicalValue=>Ideal, Options=>{Certify=>false})
o1 = constructPlaneCurve
o1 : MethodFunctionWithOptions
|
i2 : constructPlaneCurve(ZZ,PolynomialRing):=opt->(d,R) -> ideal random(R^1,R^{1:-d})
o2 = -*Function[stdio:2:44-2:78]*-
o2 : FunctionClosure
|
i3 : certifyPlaneCurve = method(TypicalValue=>Boolean) o3 = certifyPlaneCurve o3 : MethodFunction |
i4 : certifyPlaneCurve(Ideal,ZZ,PolynomialRing):=(I,d,R)-> #decompose I==1 o4 = -*Function[stdio:4:52-4:69]*- o4 : FunctionClosure |
i5 : planeCurve = new RandomObject from {
Construction => constructPlaneCurve,
Certification => certifyPlaneCurve
}
o5 = planeCurve
o5 : RandomObject
|
We construct a curve of degree $2$ as follows
i6 : setRandomSeed("alpha");
|
i7 : R=ZZ/3[x_0..x_2]; |
i8 : (random planeCurve)(2,R)
2
o8 = ideal(- x - x x + x x - x x )
0 0 1 0 2 1 2
o8 : Ideal of R
|
We can certify the curve by using the option Certify
i9 : (random planeCurve)(2,R,Certify=>true)
2 2 2
o9 = ideal(- x + x + x x + x )
0 1 0 2 2
o9 : Ideal of R
|
We have chosen a small finite field as ground field. Hence, there is a certain chance that the curve is not irreducible. We can check this if we limit the number of attempts to $1$. If the curve is then reducible, null is returned.
i10 : tally apply(3^4,i->(random planeCurve)(2,R,Certify=>true,Attempts=>1) === null)
o10 = Tally{false => 66}
true => 15
o10 : Tally
|
The object RandomObject is a type, with ancestor classes MutableHashTable < HashTable < Thing.