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.