sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.41k stars 475 forks source link

singular interface does not support nc algebras over fields with parameters. #22204

Open miguelmarco opened 7 years ago

miguelmarco commented 7 years ago

Currently we have the following behaviour:

sage: from sage.rings.polynomial.plural import g_Algebra
sage: M1 = matrix([[0,1,1],[0,0,1],[0,0,0]])
sage: M2 = matrix([[0,1,1],[0,0,1],[0,0,0]])
sage: g_Algebra(QQ, M1, M2, ['x','y','z'])
Noncommutative Multivariate Polynomial Ring in x, y, z over Rational Field, nc-relations: {z*y: y*z + 1, y*x: x*y + 1, z*x: x*z + 1}

But if we try to use a ring with parameters:

sage: F.<t> = QQ[]
sage: G = F.fraction_field()
sage: g_Algebra(G, M1, M2, ['x','y','z'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-ff6199c53224> in <module>()
----> 1 g_Algebra(G, M1, M2, ['x','y','z'])

/home/mmarco/sage/src/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.__call__ (/home/mmarco/sage/src/build/cythonized/sage/structure/factory.c:1938)()
    362         key, kwds = self.create_key_and_extra_args(*args, **kwds)
    363         version = self.get_version(sage_version)
--> 364         return self.get_object(version, key, kwds)
    365 
    366     cpdef get_object(self, version, key, extra_args):

/home/mmarco/sage/src/sage/structure/factory.pyx in sage.structure.factory.UniqueFactory.get_object (/home/mmarco/sage/src/build/cythonized/sage/structure/factory.c:2320)()
    405         except KeyError:
    406             pass
--> 407         obj = self.create_object(version, key, **extra_args)
    408         self._cache[version, cache_key] = obj
    409         try:

/home/mmarco/sage/src/sage/rings/polynomial/plural.pyx in sage.rings.polynomial.plural.G_AlgFactory.create_object (/home/mmarco/sage/src/build/cythonized/sage/rings/polynomial/plural.cpp:4825)()
    173         base_ring,names,c,d,order,category = key
    174         check = extra_args.get('check')
--> 175         return NCPolynomialRing_plural(base_ring, names, c,d, order, category, check)
    176     def create_key_and_extra_args(self, base_ring, c,d, names=None, order=None,
    177                                  category=None,check=None):

/home/mmarco/sage/src/sage/rings/polynomial/plural.pyx in sage.rings.polynomial.plural.NCPolynomialRing_plural.__init__ (/home/mmarco/sage/src/build/cythonized/sage/rings/polynomial/plural.cpp:5941)()
    327         ncalgebra = singular_function('nc_algebra')
    328 
--> 329         cdef RingWrap rw = ncalgebra(self._c, self._d, ring = P)
    330 
    331         #       rw._output()

/home/mmarco/sage/src/sage/libs/singular/function.pyx in sage.libs.singular.function.SingularFunction.__call__ (/home/mmarco/sage/src/build/cythonized/sage/libs/singular/function.cpp:15141)()
   1320                 ring = dummy_ring
   1321         if not (isinstance(ring, MPolynomialRing_libsingular) or isinstance(ring, NCPolynomialRing_plural)):
-> 1322             raise TypeError("Cannot call Singular function '%s' with ring parameter of type '%s'"%(self._name,type(ring)))
   1323         return call_function(self, args, ring, interruptible, attributes)
   1324 

TypeError: Cannot call Singular function 'nc_algebra' with ring parameter of type '<class 'sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_polydict_domain_with_category'>'

CC: @malb @simon-king-jena @burcin @tscrim

Component: interfaces

Keywords: singular, plural

Author: Miguel Marco

Issue created by migration from https://trac.sagemath.org/ticket/22204

tscrim commented 7 years ago
comment:1

This is something Singular can handle, correct?

miguelmarco commented 7 years ago
comment:2

yes, Singular handles this case just as the one without parameters:


                     SINGULAR                                 /
 A Computer Algebra System for Polynomial Computations       /   version 4.1.0
                                                           0<
 by: W. Decker, G.-M. Greuel, G. Pfister, H. Schoenemann     \   Nov 2016
FB Mathematik der Universitaet, D-67653 Kaiserslautern        \
> LIB "nctools.lib";
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/nctools.lib (4.0.3.3,Sep_2016)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/matrix.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/general.lib (4.0.0.1,Jan_2014)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/random.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/inout.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/poly.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/ring.lib (4.0.3.5,Nov_2016)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/primdec.lib (4.0.2.0,Apr_2015)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/absfact.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/triang.lib (4.0.0.0,Jun_2013)
// ** loaded /home/mmarco/sage/local/bin/../share/singular/LIB/elim.lib (4.0.0.1,Jan_2014)
> ring r1 = (0,Q),(x,y,z),Dp;
> matrix C[3][3];
> matrix D[3][3];
> C[1,2]=Q2;   C[1,3]=1/Q2;  C[2,3]=Q2;
> D[1,2]=-Q*z; D[1,3]=1/Q*y; D[2,3]=-Q*x;
> def S=nc_algebra(C,D);
> setring S;S;
//   characteristic : 0
//   1 parameter    : Q 
//   minpoly        : 0
//   number of vars : 3
//        block   1 : ordering Dp
//                  : names    x y z
//        block   2 : ordering C
//   noncommutative relations:
//    yx=(Q2)*xy+(-Q)*z
//    zx=1/(Q2)*xz+1/(Q)*y
//    zy=(Q2)*yz+(-Q)*x
> y*x;
(Q2)*xy+(-Q)*z
> x*y;
xy
tscrim commented 7 years ago
comment:3

I don't understand Sage's mechanism for converting stuff to Singular. I suspect it should be just tweaking some things in NCPolynomialRing_plural, but I don't have any specific ideas.