001    /*
002     * $Id: Examples.java 3432 2010-12-24 14:28:19Z kredel $
003     */
004    
005    package edu.jas.gbufd;
006    
007    
008    import java.io.IOException;
009    import java.io.Reader;
010    import java.io.StringReader;
011    import java.util.ArrayList;
012    import java.util.List;
013    
014    import org.apache.log4j.BasicConfigurator;
015    
016    import edu.jas.arith.BigRational;
017    import edu.jas.arith.ModInteger;
018    import edu.jas.arith.ModIntegerRing;
019    import edu.jas.gb.GroebnerBase;
020    import edu.jas.poly.GenPolynomial;
021    import edu.jas.poly.GenPolynomialRing;
022    import edu.jas.poly.GenPolynomialTokenizer;
023    import edu.jas.poly.PolynomialList;
024    import edu.jas.poly.TermOrder;
025    
026    
027    /**
028     * Examples for Groebner base usage.
029     * @author Christoph Zengler.
030     * @author Heinz Kredel.
031     */
032    public class Examples {
033    
034    
035        /**
036         * main.
037         */
038        public static void main(String[] args) {
039            BasicConfigurator.configure();
040            //example1();
041            //example2();
042            //example3();
043            exampleGB();
044            //exampleGB1();
045            //exampleGBTrinks();
046        }
047    
048    
049        /**
050         * example1. Coefficients in Boolean residue class ring.
051         * 
052         */
053        public static void example1() {
054            // moved to edu.jas.application.Examples
055        }
056    
057    
058        /*
059         * example2. Coefficients in Boolean residue class ring with cuppling of
060         * variables.
061         * 
062         */
063        public static void example2() {
064            // moved to edu.jas.application.Examples
065        }
066    
067    
068        /**
069         * example3. Coefficients in Boolean ring and additional idempotent
070         * generators.
071         * 
072         */
073        public static void example3() {
074            String[] vars = { "v3", "v2", "v1" };
075    
076            ModIntegerRing z2 = new ModIntegerRing(2);
077            GenPolynomialRing<ModInteger> z2p = new GenPolynomialRing<ModInteger>(z2, vars.length, new TermOrder(
078                    TermOrder.INVLEX), vars);
079            List<GenPolynomial<ModInteger>> fieldPolynomials = new ArrayList<GenPolynomial<ModInteger>>();
080    
081            //add v1^2 + v1, v2^2 + v2, v3^2 + v3 to fieldPolynomials
082            for (int i = 0; i < vars.length; i++) {
083                GenPolynomial<ModInteger> var = z2p.univariate(i);
084                fieldPolynomials.add(var.multiply(var).sum(var));
085            }
086    
087    
088            List<GenPolynomial<ModInteger>> polynomials = new ArrayList<GenPolynomial<ModInteger>>();
089    
090            GenPolynomial<ModInteger> v1 = z2p.univariate(0);
091            GenPolynomial<ModInteger> v2 = z2p.univariate(1);
092            GenPolynomial<ModInteger> v3 = z2p.univariate(2);
093            GenPolynomial<ModInteger> notV1 = v1.sum(z2p.ONE);
094            GenPolynomial<ModInteger> notV2 = v2.sum(z2p.ONE);
095            GenPolynomial<ModInteger> notV3 = v3.sum(z2p.ONE);
096    
097            //v1*v2
098            GenPolynomial<ModInteger> p1 = v1.multiply(v2);
099    
100            //v1*v2 + v1 + v2 + 1
101            GenPolynomial<ModInteger> p2 = notV1.multiply(notV2);
102    
103            //v1*v3 + v1 + v3 + 1
104            GenPolynomial<ModInteger> p3 = notV1.multiply(notV3);
105    
106            polynomials.add(p1);
107            polynomials.add(p2);
108            polynomials.add(p3);
109    
110            polynomials.addAll(fieldPolynomials);
111    
112            //GroebnerBase<ModInteger> gb = new GroebnerBaseSeq<ModInteger>();
113            GroebnerBase<ModInteger> gb = GBFactory.getImplementation(z2);
114    
115            List<GenPolynomial<ModInteger>> G = gb.GB(polynomials);
116    
117            System.out.println(G);
118        }
119    
120    
121        /**
122         * Example GBase.
123         * 
124         */
125        @SuppressWarnings("unchecked")
126        static public void exampleGB1() {
127            BigRational coeff = new BigRational();
128            GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff);
129    
130            String exam = "(x1,x2,y) G " + "( " + "( x1 + x2 - 10 ), ( 2 x1 - x2 + 4 ) " + ") ";
131            Reader source = new StringReader(exam);
132            GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
133            PolynomialList<BigRational> F = null;
134    
135            try {
136                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
137            } catch (ClassCastException e) {
138                e.printStackTrace();
139            } catch (IOException e) {
140                e.printStackTrace();
141            }
142            System.out.println("F = " + F);
143    
144            List<GenPolynomial<BigRational>> G = gb.GB(F.list);
145    
146            PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G);
147            System.out.println("G = " + trinks);
148        }
149    
150    
151        /**
152         * Example GBase.
153         * 
154         */
155        @SuppressWarnings("unchecked")
156        static public void exampleGB() {
157            BigRational coeff = new BigRational();
158            GroebnerBase<BigRational> gb = GBFactory.getImplementation(coeff);
159    
160            String exam = "(x,y) G " + "( " + "( y - ( x^2 - 1 ) ) " + ") ";
161            Reader source = new StringReader(exam);
162            GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
163            PolynomialList<BigRational> F = null;
164    
165            try {
166                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
167            } catch (ClassCastException e) {
168                e.printStackTrace();
169            } catch (IOException e) {
170                e.printStackTrace();
171            }
172            System.out.println("F = " + F);
173    
174            List<GenPolynomial<BigRational>> G = gb.GB(F.list);
175    
176            PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G);
177            System.out.println("G = " + trinks);
178        }
179    
180    
181        /**
182         * Example Trinks GBase.
183         * 
184         */
185        @SuppressWarnings("unchecked")
186        static public void exampleGBTrinks() {
187            BigRational coeff = new BigRational();
188            GroebnerBase<BigRational> bb = GBFactory.getImplementation(coeff);
189    
190            String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), "
191                    + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
192                    + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), "
193                    + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") ";
194            Reader source = new StringReader(exam);
195            GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
196            PolynomialList<BigRational> F = null;
197    
198            try {
199                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
200            } catch (ClassCastException e) {
201                e.printStackTrace();
202            } catch (IOException e) {
203                e.printStackTrace();
204            }
205            System.out.println("F = " + F);
206    
207            List<GenPolynomial<BigRational>> G = bb.GB(F.list);
208    
209            PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G);
210            System.out.println("G = " + trinks);
211        }
212    
213    }