#10340: Strange error in groebner_basis()
----------------------------+-----------------------------------------------
Reporter: sbulygin | Owner: mvngu
Type: defect | Status: new
Priority: minor | Milestone:
Component: cryptography | Keywords: groebner_basis, Boolean Polynomials
Author: Stas Bulygin | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
----------------------------+-----------------------------------------------
There is a ValueError occurring quite strangely when calling
groebner_basis() for an ideal in BooleanPolynomialRing. Here is the
example code
{{{
R.<Y0100, Y0101, Y0102, Y0103, Y0104, Y0105, Y0106, Y0107, Y0108, Y0109,
Y0110, Y0111, Y0112, Y0113, Y0114, Y0115, Y0116, Y0117, Y0118, Y0119,
Y0120, Y0121, Y0122, Y0123, Y0124, Y0125, Y0126, Y0127, Y0128, Y0129,
Y0130, Y0131, Y0132, Y0133, Y0134, Y0135, Y0136, Y0137, Y0138, Y0139,
Y0140, Y0141, Y0142, Y0143, Y0144, Y0145, Y0146, Y0147, X0100, X0101,
X0102, X0103, X0104, X0105, X0106, X0107, X0108, X0109, X0110, X0111,
X0112, X0113, X0114, X0115, X0116, X0117, X0118, X0119, X0120, X0121,
X0122, X0123, X0124, X0125, X0126, X0127, X0128, X0129, X0130, X0131,
X0132, X0133, X0134, X0135, X0136, X0137, X0138, X0139, X0140, X0141,
X0142, X0143, X0144, X0145, X0146, X0147, K00, K01, K02, K03, K04, K05,
K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K20,
K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35,
K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46,
K47>=BooleanPolynomialRing(order="degrevlex")
I=ideal([X0100 + K00 + 1,
X0101 + K01,
X0102 + K02 + 1,
X0103 + K03 + 1,
X0104 + K04,
X0105 + K05 + 1,
X0106 + K06,
X0107 + K07 + 1,
X0108 + K08,
X0109 + K09 + 1,
X0110 + K10 + 1,
X0111 + K11 + 1,
X0112 + K12 + 1,
X0113 + K13,
X0114 + K14 + 1,
X0115 + K15 + 1,
X0116 + K16 + 1,
X0117 + K17,
X0118 + K18,
X0119 + K19 + 1,
X0120 + K20 + 1,
X0121 + K21 + 1,
X0122 + K22 + 1,
X0123 + K23 + 1,
X0124 + K24 + 1,
X0125 + K25 + 1,
X0126 + K26,
X0127 + K27 + 1,
X0128 + K28,
X0129 + K29,
X0130 + K30,
X0131 + K31 + 1,
X0132 + K32 + 1,
X0133 + K33,
X0134 + K34,
X0135 + K35 + 1,
X0136 + K36,
X0137 + K37 + 1,
X0138 + K38 + 1,
X0139 + K39,
X0140 + K40 + 1,
X0141 + K41,
X0142 + K42 + 1,
X0143 + K43,
X0144 + K44,
X0145 + K45,
X0146 + K46,
X0147 + K47,
X0132 + 1,
X0116 + 1,
X0100,
X0133,
X0117 + 1,
X0101,
X0134,
X0118 + 1,
X0102 + 1,
X0135,
X0119,
X0103 + 1,
X0136 + 1,
X0120,
X0104,
X0137,
X0121 + 1,
X0105,
X0138,
X0122,
X0106 + 1,
X0139,
X0123,
X0107,
X0140 + 1,
X0124,
X0108 + 1,
X0141 + 1,
X0125 + 1,
X0109,
X0142,
X0126,
X0110,
X0143 + 1,
X0127 + 1,
X0111,
X0144 + 1,
X0128 + 1,
X0112,
X0145,
X0129,
X0113,
X0146 + 1,
X0130 + 1,
X0114 + 1,
X0147 + 1,
X0131 + 1,
X0115
])
I.groebner_basis() # reports an error
}}}
the error being
{{{
---------------------------------------------------------------------------
ValueError Traceback (most recent call
last)
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/<ipython console> in <module>()
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/sage/rings/polynomial/pbori.so in
sage.rings.polynomial.pbori.BooleanPolynomialIdeal.groebner_basis
(sage/rings/polynomial/pbori.cpp:25491)()
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in __call__(self, *args, **kwds)
138 if heuristic:
139 complete_dict=self.heuristicFunction(complete_dict)
--> 140 return self.f(**complete_dict)
141 def __init__(self,f,heuristic_function):
142
(self.argnames,self.varargs,self.varopts,self.defaults)=getargspec(f)
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in __call__(self, *args, **kwds)
138 if heuristic:
139 complete_dict=self.heuristicFunction(complete_dict)
--> 140 return self.f(**complete_dict)
141 def __init__(self,f,heuristic_function):
142
(self.argnames,self.varargs,self.varopts,self.defaults)=getargspec(f)
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
186
187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
--> 188 I=f(I,**kwds)
189 if option_set:
190 if post:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in wrapper(I, **kwds)
185 print "preprocessing for option:", option
186
--> 187 (I,state)=pre(**dict([(k,v) for (k,v) in
locals().iteritems() if k in pre_args]))
188 I=f(I,**kwds)
189 if option_set:
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/gbcore.pyc in llfirst_pre(I, prot)
223
224 def llfirst_pre(I,prot):
--> 225 (eliminated,llnf, I)=eliminate(I,on_the_fly=False,prot=prot)
226 return (I,eliminated)
227
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/ll.pyc in eliminate(polys, on_the_fly, prot,
reduction_function, optimized)
109 reduction_function=reduction_function,
110 reduce_ll_system=(not on_the_fly),
--> 111 prot=prot)
112 else:
113 reductors=ll_encode(linear_leads,reduce=(not
on_the_fly),prot=prot)
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/ll.pyc in eliminate_ll_ranked(ll_system, to_reduce,
reduction_function, reduce_ll_system, prot)
146 return iter(Monomial(v).variables()).next().index()
147 #sorted_var_indices=[var_index(v) for v in sorted_vars]
--> 148 to_ring=Ring(len(sorted_vars))
149 map_back_indices = dict([(i, var_index(v)) for (i, v) in
enumerate(sorted_vars)])
150 map_from_indices = dict([(var_index(v), i) for (i, v) in
enumerate(sorted_vars)])
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/polybori/PyPolyBoRi.pyc in Ring(n, order)
17
18 def Ring(n, order='lp'):
---> 19 return BooleanPolynomialRing(n, 'x', order=order)
20
21 BoolePolynomialVector = BooleanPolynomialVector
/home/sbulygin/Sage/sage-4.6-linux-32bit-
ubuntu_10.04_lts-i686-Linux/local/lib/python2.6/site-
packages/sage/rings/polynomial/pbori.so in
sage.rings.polynomial.pbori.BooleanPolynomialRing.__init__
(sage/rings/polynomial/pbori.cpp:4458)()
ValueError: Number of variables must be greater than 1.
}}}
Interestingly enough, the same ideal, but without the last generator gets
through
{{{
I=ideal([X0100 + K00 + 1,
X0101 + K01,
X0102 + K02 + 1,
X0103 + K03 + 1,
X0104 + K04,
X0105 + K05 + 1,
X0106 + K06,
X0107 + K07 + 1,
X0108 + K08,
X0109 + K09 + 1,
X0110 + K10 + 1,
X0111 + K11 + 1,
X0112 + K12 + 1,
X0113 + K13,
X0114 + K14 + 1,
X0115 + K15 + 1,
X0116 + K16 + 1,
X0117 + K17,
X0118 + K18,
X0119 + K19 + 1,
X0120 + K20 + 1,
X0121 + K21 + 1,
X0122 + K22 + 1,
X0123 + K23 + 1,
X0124 + K24 + 1,
X0125 + K25 + 1,
X0126 + K26,
X0127 + K27 + 1,
X0128 + K28,
X0129 + K29,
X0130 + K30,
X0131 + K31 + 1,
X0132 + K32 + 1,
X0133 + K33,
X0134 + K34,
X0135 + K35 + 1,
X0136 + K36,
X0137 + K37 + 1,
X0138 + K38 + 1,
X0139 + K39,
X0140 + K40 + 1,
X0141 + K41,
X0142 + K42 + 1,
X0143 + K43,
X0144 + K44,
X0145 + K45,
X0146 + K46,
X0147 + K47,
X0132 + 1,
X0116 + 1,
X0100,
X0133,
X0117 + 1,
X0101,
X0134,
X0118 + 1,
X0102 + 1,
X0135,
X0119,
X0103 + 1,
X0136 + 1,
X0120,
X0104,
X0137,
X0121 + 1,
X0105,
X0138,
X0122,
X0106 + 1,
X0139,
X0123,
X0107,
X0140 + 1,
X0124,
X0108 + 1,
X0141 + 1,
X0125 + 1,
X0109,
X0142,
X0126,
X0110,
X0143 + 1,
X0127 + 1,
X0111,
X0144 + 1,
X0128 + 1,
X0112,
X0145,
X0129,
X0113,
X0146 + 1,
X0130 + 1,
X0114 + 1,
X0147 + 1,
X0131 + 1
])
I.groebner_basis() # works
}}}
the result being
{{{
[X0100, X0101, X0102 + 1, X0103 + 1, X0104, X0105, X0106 + 1, X0107, X0108
+ 1, X0109, X0110, X0111, X0112, X0113, X0114 + 1, X0115 + K15 + 1, X0116
+ 1, X0117 + 1, X0118 + 1, X0119, X0120, X0121 + 1, X0122, X0123, X0124,
X0125 + 1, X0126, X0127 + 1, X0128 + 1, X0129, X0130 + 1, X0131 + 1, X0132
+ 1, X0133, X0134, X0135, X0136 + 1, X0137, X0138, X0139, X0140 + 1, X0141
+ 1, X0142, X0143 + 1, X0144 + 1, X0145, X0146 + 1, X0147 + 1, K00 + 1,
K01, K02, K03, K04, K05 + 1, K06 + 1, K07 + 1, K08 + 1, K09 + 1, K10 + 1,
K11 + 1, K12 + 1, K13, K14, K16, K17 + 1, K18 + 1, K19 + 1, K20 + 1, K21,
K22 + 1, K23 + 1, K24 + 1, K25, K26, K27, K28 + 1, K29, K30 + 1, K31, K32,
K33, K34, K35 + 1, K36 + 1, K37 + 1, K38 + 1, K39, K40, K41 + 1, K42 + 1,
K43 + 1, K44 + 1, K45, K46 + 1, K47 + 1]
}}}
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10340>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.