next | previous | forward | backward | up | top | index | toc | Macaulay2 web site
RandomObjects :: RandomObject

RandomObject -- framework for creation of random objects

Description

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 : R=ZZ/3[x_0..x_2];
i7 : (random planeCurve)(2,R)

            2           2
o7 = ideal(x  + x x  - x  - x x )
            0    0 1    1    1 2

o7 : Ideal of R

We can certify the curve by using the option Certify

i8 : (random planeCurve)(2,R,Certify=>true)

            2           2           2
o8 = ideal(x  + x x  - x  - x x  - x )
            0    0 1    1    1 2    2

o8 : 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.

i9 : tally apply(3^4,i->(random planeCurve)(2,R,Certify=>true,Attempts=>1) === null)

o9 = Tally{false => 64}
           true => 17

o9 : Tally

Methods that use an object of class RandomObject :

For the programmer

The object RandomObject is a type, with ancestor classes MutableHashTable < HashTable < Thing.