001/*
002 * $Id$
003 */
004
005package edu.jas.application;
006
007
008import java.util.ArrayList;
009import java.util.List;
010
011import edu.jas.arith.BigRational;
012import edu.jas.gb.GBOptimized;
013import edu.jas.gb.GBProxy;
014import edu.jas.gb.GroebnerBase;
015import edu.jas.gb.GroebnerBaseAbstract;
016import edu.jas.gb.GroebnerBaseParallel;
017import edu.jas.gbufd.GBFactory;
018import edu.jas.kern.ComputerThreads;
019import edu.jas.poly.GenPolynomial;
020import edu.jas.poly.GenPolynomialRing;
021import edu.jas.poly.PolynomialList;
022
023
024/**
025 * ExamplesGeoTheorems for Groebner base usage.
026 * @author GeoGebra developers
027 * @author Kovács Zoltán
028 * @author Heinz Kredel
029 */
030public class ExamplesGeoTheorems {
031
032
033    /**
034     * main.
035     */
036    public static void main(String[] args) {
037        example10();
038        example11();
039        example12();
040        example13();
041        example14();
042        example15();
043        example16();
044        example17();
045        ComputerThreads.terminate();
046    }
047
048
049    /**
050     * get Pappus Example.
051     */
052    public static List<GenPolynomial<BigRational>> getExample() {
053        String[] vars = { "a1", "a2", "b1", "b2", "c1", "c2", "d1", "d2", "e1", "e2", "f1", "f2", "g1", "g2",
054                "h1", "h2", "i1", "i2", "j1", "j2", "z1", "z2", "z3" };
055
056        BigRational br = new BigRational();
057        GenPolynomialRing<BigRational> pring = new GenPolynomialRing<BigRational>(br, vars);
058
059        GenPolynomial<BigRational> e1 = pring.parse("(a1*(b2 - c2) + a2*( - b1 + c1) + b1*c2 - b2*c1)");
060        GenPolynomial<BigRational> e2 = pring.parse("(d1*(e2 - f2) + d2*( - e1 + f1) + e1*f2 - e2*f1)");
061        GenPolynomial<BigRational> e3 = pring.parse("(a1*( - e2 + h2) + a2*(e1 - h1) - e1*h2 + e2*h1)");
062        GenPolynomial<BigRational> e4 = pring.parse("(b1*(d2 - h2) + b2*( - d1 + h1) + d1*h2 - d2*h1)");
063        GenPolynomial<BigRational> e5 = pring.parse("(c1*(d2 - i2) + c2*( - d1 + i1) + d1*i2 - d2*i1)");
064        GenPolynomial<BigRational> e6 = pring.parse("(a1*( - f2 + i2) + a2*(f1 - i1) - f1*i2 + f2*i1)");
065        GenPolynomial<BigRational> e7 = pring.parse("(c1*(e2 - j2) + c2*( - e1 + j1) + e1*j2 - e2*j1)");
066        GenPolynomial<BigRational> e8 = pring.parse("(b1*( - f2 + j2) + b2*(f1 - j1) - f1*j2 + f2*j1)");
067        GenPolynomial<BigRational> e9 = pring
068                        .parse("(a1*(b2*z2 - d2*z2) + a2*( - b1*z2 + d1*z2) + b1*d2*z2 - b2*d1*z2 - 1)");
069        GenPolynomial<BigRational> e10 = pring
070                        .parse("(a1*(b2*z3 - e2*z3) + a2*( - b1*z3 + e1*z3) + b1*e2*z3 - b2*e1*z3 - 1)");
071        GenPolynomial<BigRational> e11 = pring
072                        .parse("(h1*(i2*z1 - j2*z1) + h2*( - i1*z1 + j1*z1) + i1*j2*z1 - i2*j1*z1 - 1)");
073
074        List<GenPolynomial<BigRational>> cp = new ArrayList<GenPolynomial<BigRational>>(11);
075        cp.add(e1);
076        cp.add(e2);
077        cp.add(e3);
078        cp.add(e4);
079        cp.add(e5);
080        cp.add(e6);
081        cp.add(e7);
082        cp.add(e8);
083        cp.add(e9);
084        cp.add(e10);
085        cp.add(e11);
086        return cp;
087    }
088
089
090    /**
091     * Example Pappus, sequential.
092     */
093    public static void example10() {
094        List<GenPolynomial<BigRational>> cp = getExample();
095        BigRational br = new BigRational();
096        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
097
098        GroebnerBase<BigRational> sgb = GBFactory.getImplementation(br);
099        List<GenPolynomial<BigRational>> gb;
100        long t;
101        t = System.currentTimeMillis();
102        gb = sgb.GB(cp);
103        t = System.currentTimeMillis() - t;
104        //System.out.println("gb = " + gb);
105        System.out.println("time(gb) = " + t);
106        t = System.currentTimeMillis();
107        gb = sgb.GB(cp);
108        t = System.currentTimeMillis() - t;
109        //System.out.println("gb = " + gb);
110        System.out.println("time(gb) = " + t);
111
112        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
113        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
114        System.out.println("cp = " + cp);
115        System.out.println("id = " + id);
116
117        Dimension dim = id.dimension();
118        System.out.println("dim = " + dim);
119    }
120
121
122    /**
123     * Example Pappus, parallel proxy.
124     */
125    public static void example11() {
126        List<GenPolynomial<BigRational>> cp = getExample();
127        BigRational br = new BigRational();
128        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
129
130        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getProxy(br);
131        List<GenPolynomial<BigRational>> gb;
132        long t;
133        t = System.currentTimeMillis();
134        gb = sgb.GB(cp);
135        t = System.currentTimeMillis() - t;
136        //System.out.println("gb = " + gb);
137        System.out.println("time(proxy-gb) = " + t);
138        t = System.currentTimeMillis();
139        gb = sgb.GB(cp);
140        t = System.currentTimeMillis() - t;
141        //System.out.println("gb = " + gb);
142        System.out.println("time(proxy-gb) = " + t);
143
144        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
145        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
146        System.out.println("cp = " + cp);
147        System.out.println("id = " + id);
148
149        Dimension dim = id.dimension();
150        System.out.println("dim = " + dim);
151        sgb.terminate();
152    }
153
154
155    /**
156     * Example Pappus, optimized term order.
157     */
158    public static void example12() {
159        List<GenPolynomial<BigRational>> cp = getExample();
160        BigRational br = new BigRational();
161        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
162
163        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br);
164        GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1
165        List<GenPolynomial<BigRational>> gb;
166        long t;
167        t = System.currentTimeMillis();
168        gb = ogb.GB(cp);
169        t = System.currentTimeMillis() - t;
170        //System.out.println("gb = " + gb);
171        System.out.println("time(optimized-gb) = " + t);
172        t = System.currentTimeMillis();
173        gb = ogb.GB(cp);
174        t = System.currentTimeMillis() - t;
175        //System.out.println("gb = " + gb);
176        System.out.println("time(optimized-gb) = " + t);
177
178        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
179        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
180        System.out.println("cp = " + cp);
181        System.out.println("id = " + id);
182
183        Dimension dim = id.dimension();
184        System.out.println("dim = " + dim);
185        ogb.terminate();
186    }
187
188
189    /**
190     * Example Pappus, optimized term order and parallel proxy.
191     */
192    public static void example13() {
193        List<GenPolynomial<BigRational>> cp = getExample();
194        BigRational br = new BigRational();
195        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
196
197        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getProxy(br);
198        GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1
199        List<GenPolynomial<BigRational>> gb;
200        long t;
201        t = System.currentTimeMillis();
202        gb = ogb.GB(cp);
203        t = System.currentTimeMillis() - t;
204        //System.out.println("gb = " + gb);
205        System.out.println("time(optimized-proxy-gb) = " + t);
206        t = System.currentTimeMillis();
207        gb = ogb.GB(cp);
208        t = System.currentTimeMillis() - t;
209        //System.out.println("gb = " + gb);
210        System.out.println("time(optimized-proxy-gb) = " + t);
211
212        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
213        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
214        System.out.println("cp = " + cp);
215        System.out.println("id = " + id);
216
217        Dimension dim = id.dimension();
218        System.out.println("dim = " + dim);
219        ogb.terminate();
220    }
221
222
223    /**
224     * Example Pappus, fraction free.
225     */
226    public static void example14() {
227        List<GenPolynomial<BigRational>> cp = getExample();
228        BigRational br = new BigRational();
229        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
230
231        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb);
232        List<GenPolynomial<BigRational>> gb;
233        long t;
234        t = System.currentTimeMillis();
235        gb = sgb.GB(cp);
236        t = System.currentTimeMillis() - t;
237        //System.out.println("gb = " + gb);
238        System.out.println("time(fraction-free-gb) = " + t);
239        t = System.currentTimeMillis();
240        gb = sgb.GB(cp);
241        t = System.currentTimeMillis() - t;
242        //System.out.println("gb = " + gb);
243        System.out.println("time(fraction-free-gb) = " + t);
244
245        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
246        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
247        System.out.println("cp = " + cp);
248        System.out.println("id = " + id);
249
250        Dimension dim = id.dimension();
251        System.out.println("dim = " + dim);
252        sgb.terminate();
253    }
254
255
256    /**
257     * Example Pappus, optimized and fraction free.
258     */
259    public static void example15() {
260        List<GenPolynomial<BigRational>> cp = getExample();
261        BigRational br = new BigRational();
262        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
263
264        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb);
265        GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1
266        List<GenPolynomial<BigRational>> gb;
267        long t;
268        t = System.currentTimeMillis();
269        gb = ogb.GB(cp);
270        t = System.currentTimeMillis() - t;
271        //System.out.println("gb = " + gb);
272        System.out.println("time(optimized-fraction-free-gb) = " + t);
273        t = System.currentTimeMillis();
274        gb = ogb.GB(cp);
275        t = System.currentTimeMillis() - t;
276        //System.out.println("gb = " + gb);
277        System.out.println("time(optimized-fraction-free-gb) = " + t);
278
279        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
280        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
281        System.out.println("cp = " + cp);
282        System.out.println("id = " + id);
283
284        Dimension dim = id.dimension();
285        System.out.println("dim = " + dim);
286        ogb.terminate();
287    }
288
289
290    /**
291     * Example Pappus, proxy, optimized and fraction free.
292     */
293    public static void example16() {
294        List<GenPolynomial<BigRational>> cp = getExample();
295        BigRational br = new BigRational();
296        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
297
298        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb);
299        GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(sgb, true); // false no change for GB == 1
300        GroebnerBaseAbstract<BigRational> pgb = new GroebnerBaseParallel<BigRational>();
301        GroebnerBaseAbstract<BigRational> opgb = new GBOptimized<BigRational>(pgb, true); // false no change for GB == 1
302        GroebnerBaseAbstract<BigRational> popgb = new GBProxy<BigRational>(ogb, opgb);
303        List<GenPolynomial<BigRational>> gb;
304        long t;
305        t = System.currentTimeMillis();
306        gb = popgb.GB(cp);
307        t = System.currentTimeMillis() - t;
308        //System.out.println("gb = " + gb);
309        System.out.println("time(proxy-optimized-fraction-free-gb) = " + t);
310        t = System.currentTimeMillis();
311        gb = popgb.GB(cp);
312        t = System.currentTimeMillis() - t;
313        //System.out.println("gb = " + gb);
314        System.out.println("time(proxy-optimized-fraction-free-gb) = " + t);
315
316        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
317        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
318        System.out.println("cp = " + cp);
319        System.out.println("id = " + id);
320
321        Dimension dim = id.dimension();
322        System.out.println("dim = " + dim);
323        popgb.terminate();
324    }
325
326
327    /**
328     * Example Pappus, optimized and parallel and fraction free.
329     */
330    public static void example17() {
331        List<GenPolynomial<BigRational>> cp = getExample();
332        BigRational br = new BigRational();
333        GenPolynomialRing<BigRational> pring = cp.get(0).ring;
334
335        GroebnerBaseAbstract<BigRational> sgb = GBFactory.getImplementation(br, GBFactory.Algo.ffgb);
336        GroebnerBaseAbstract<BigRational> pgb = new GroebnerBaseParallel<BigRational>();
337        GroebnerBaseAbstract<BigRational> ppgb = new GBProxy<BigRational>(sgb, pgb);
338        GroebnerBaseAbstract<BigRational> ogb = new GBOptimized<BigRational>(ppgb, true); // false no change for GB == 1
339        List<GenPolynomial<BigRational>> gb;
340        long t;
341        t = System.currentTimeMillis();
342        gb = ogb.GB(cp);
343        t = System.currentTimeMillis() - t;
344        //System.out.println("gb = " + gb);
345        System.out.println("time(optimized-proxy-fraction-free-gb) = " + t);
346        t = System.currentTimeMillis();
347        gb = ogb.GB(cp);
348        t = System.currentTimeMillis() - t;
349        //System.out.println("gb = " + gb);
350        System.out.println("time(optimized-proxy-fraction-free-gb) = " + t);
351
352        PolynomialList<BigRational> pl = new PolynomialList<BigRational>(pring, gb);
353        Ideal<BigRational> id = new Ideal<BigRational>(pl, true);
354        System.out.println("cp = " + cp);
355        System.out.println("id = " + id);
356
357        Dimension dim = id.dimension();
358        System.out.println("dim = " + dim);
359        ogb.terminate();
360    }
361
362}