sagemath / sage

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

Check doctest examples using QuotientRings, which do not fulfill the assumptions made on the ideal #13347

Open 38e5cd24-729d-4c04-b48f-518277c23402 opened 12 years ago

38e5cd24-729d-4c04-b48f-518277c23402 commented 12 years ago

The following files use quotient rings in their doctest examples, which contradict the assumption on the defining ideal:

ASSUMPTION:

`I` has a method `I.reduce(x)` returning the normal form
of elements `x\in R`. In other words, it is required that
`I.reduce(x)==I.reduce(y)` `\iff x-y \in I`, and
`x-I.reduce(x) in I`, for all `x,y\in R`.
            sage: P.<x> = QQ[]
            sage: F = P.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
            sage: F == loads(dumps(F))
            True
            sage: P2.<x,y> = QQ[]
            sage: F == P2.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
            False
            sage: P3.<x> = ZZ[]
            sage: F == P3.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
            True
                sage: F.<x,y,z> = FreeAlgebra(QQ, 3)
                sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
                sage: Q = Rings().parent_class.quotient(F,I); Q
                sage: MS = MatrixSpace(QQ,2)
                sage: MS.full_category_initialisation()
                sage: I = MS*MS.gens()*MS   
                sage: MS.quo(I,names = ['a','b','c','d'])
                sage: MS = MatrixSpace(QQ,2)
                sage: I = MS*MS.gens()*MS
                sage: MS.quotient_ring(I,names = ['a','b','c','d'])
            sage: MS = MatrixSpace(GF(5),2,2)
            sage: I = MS*[MS.0*MS.1,MS.2+MS.3]*MS
            sage: Q.<a,b,c,d> = MS.quo(I)
        sage: R.<x> = PolynomialRing(ZZ)
        sage: S.<xbar> = R.quo((4 + 3*x + x^2, 1 + x^2)); S
            sage: R.<x> = PolynomialRing(ZZ)
            sage: S.<xbar> = R.quo((4 + 3*x + x^2, 1 + x^2)); S
            sage: S = SteenrodAlgebra(2)
            sage: I = S*[S.0+S.1]*S
            sage: Q = S.quo(I)
        sage: MS = MatrixSpace(GF(5),2,2)
        sage: I = MS*[MS.0*MS.1,MS.2+MS.3]*MS
        sage: Q = MS.quo(I)
            sage: F.<x,y,z> = FreeAlgebra(ZZ, 3)
            sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
            sage: Q = sage.rings.ring.Ring.quotient(F,I)
            sage: R.<x> = PolynomialRing(ZZ)
            sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2])
            sage: S = R.quotient(I, 'a')
            sage: R.<x> = PolynomialRing(ZZ)
            sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2])
            sage: S = R.quotient_ring(I, 'a')
            sage: S.gens()

These examples have to be modified, one possibility is that they use quotient rings which fulfill the assumption or the reduce function of the corresponding ideal class must be provided.

See also ticket:13345 and https://groups.google.com/d/topic/sage-devel/s5y604ZPiQ8/discussion.

CC: @mstreng

Component: doctest coverage

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

mstreng commented 12 years ago
comment:1

Wow, that's a long list of faulty quotient rings in the documentation! Can you add the examples themselves, as line numbers tend to change a lot as Sage evolves?

mstreng commented 12 years ago

Description changed:

--- 
+++ 
@@ -16,4 +16,4 @@

 These examples have to be modified, one possibility is that they use quotient rings which fulfill the assumption or the reduce function of the corresponding ideal class must be provided.

-See also trac:13345 and https://groups.google.com/d/topic/sage-devel/s5y604ZPiQ8/discussion.
+See also ticket:13345 and https://groups.google.com/d/topic/sage-devel/s5y604ZPiQ8/discussion.
38e5cd24-729d-4c04-b48f-518277c23402 commented 12 years ago

Description changed:

--- 
+++ 
@@ -7,12 +7,107 @@
     ``I.reduce(x)==I.reduce(y)`` `\iff x-y \in I`, and
     ``x-I.reduce(x) in I``, for all `x,y\in R`.

-- sage/categories/pushout.py : line 2393
-- sage/categories/rings.py : lines 446, 482, 522
-- sage/structure/category_object.pyx : line 473
-- sage/rings/quotient_ring_element.py : lines 56, 98, 208
-- sage/rings/morphism.pyx : line 465
-- sage/rings/ring.pyx: lines 409, 708, 792
+- sage/categories/pushout.py :
+  - QuotientFunctor.__cmp__
+
+```
+            sage: P.<x> = QQ[]
+            sage: F = P.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
+            sage: F == loads(dumps(F))
+            True
+            sage: P2.<x,y> = QQ[]
+            sage: F == P2.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
+            False
+            sage: P3.<x> = ZZ[]
+            sage: F == P3.quo([(x^2+1)^2*(x^2-3),(x^2+1)^2*(x^5+3)]).construction()[0]
+            True
+```
+
+
+- sage/categories/rings.py :
+  - Rings.quotient
+
+```
+                sage: F.<x,y,z> = FreeAlgebra(QQ, 3)
+                sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
+                sage: Q = Rings().parent_class.quotient(F,I); Q
+```
+- Rings.quo
+
+```             
+                sage: MS = MatrixSpace(QQ,2)
+                sage: MS.full_category_initialisation()
+                sage: I = MS*MS.gens()*MS   
+                sage: MS.quo(I,names = ['a','b','c','d'])
+```
+- Rings.quotient_ring
+
+```
+                sage: MS = MatrixSpace(QQ,2)
+                sage: I = MS*MS.gens()*MS
+                sage: MS.quotient_ring(I,names = ['a','b','c','d'])
+```
+- sage/structure/category_object.pyx :
+  - CategoryObject.__temporarily_change_names
+
+```
+            sage: MS = MatrixSpace(GF(5),2,2)
+            sage: I = MS*[MS.0*MS.1,MS.2+MS.3]*MS
+            sage: Q.<a,b,c,d> = MS.quo(I)
+```
+
+- sage/rings/quotient_ring_element.py : 
+  - QuotientRingElement
+
+```
+        sage: R.<x> = PolynomialRing(ZZ)
+        sage: S.<xbar> = R.quo((4 + 3*x + x^2, 1 + x^2)); S
+```
+- QuotientRingElement.__init__
+
+```
+            sage: R.<x> = PolynomialRing(ZZ)
+            sage: S.<xbar> = R.quo((4 + 3*x + x^2, 1 + x^2)); S
+```
+- QuotientRingElement._repr_
+
+```  
+            sage: S = SteenrodAlgebra(2)
+            sage: I = S*[S.0+S.1]*S
+            sage: Q = S.quo(I)
+```
+
+- sage/rings/morphism.pyx :
+  - RingMap_lift
+
+```
+        sage: MS = MatrixSpace(GF(5),2,2)
+        sage: I = MS*[MS.0*MS.1,MS.2+MS.3]*MS
+        sage: Q = MS.quo(I)
+```
+- sage/rings/ring.pyx: 
+  - Ring.ideal_monoid
+
+```
+            sage: F.<x,y,z> = FreeAlgebra(ZZ, 3)
+            sage: I = F*[x*y+y*z,x^2+x*y-y*x-y^2]*F
+            sage: Q = sage.rings.ring.Ring.quotient(F,I)
+```
+- Ring.quotient
+
+```
+            sage: R.<x> = PolynomialRing(ZZ)
+            sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2])
+            sage: S = R.quotient(I, 'a')
+```
+- Ring.quotient_ring
+
+```
+            sage: R.<x> = PolynomialRing(ZZ)
+            sage: I = R.ideal([4 + 3*x + x^2, 1 + x^2])
+            sage: S = R.quotient_ring(I, 'a')
+            sage: S.gens()
+```

 These examples have to be modified, one possibility is that they use quotient rings which fulfill the assumption or the reduce function of the corresponding ideal class must be provided.
saraedum commented 9 years ago

Description changed:

--- 
+++ 
@@ -2,10 +2,10 @@

 ASSUMPTION:

-    ``I`` has a method ``I.reduce(x)`` returning the normal form
+    `I` has a method `I.reduce(x)` returning the normal form
     of elements `x\in R`. In other words, it is required that
-    ``I.reduce(x)==I.reduce(y)`` `\iff x-y \in I`, and
-    ``x-I.reduce(x) in I``, for all `x,y\in R`.
+    `I.reduce(x)==I.reduce(y)` `\iff x-y \in I`, and
+    `x-I.reduce(x) in I`, for all `x,y\in R`.

 - sage/categories/pushout.py :
   - QuotientFunctor.__cmp__