This is QthPower.info, produced by Macaulay2, version 1.21

QthPower
********

Description
===========

This package computes the integral closure of type I affine domains and some
slightly more general integral extensions of polynomial rings P using the
qth-power algorithm from D.A.Leonard, Finding the missing functions for
one-point AG codes, IEEE Trans. Inform.Theory, 47(6), 2001, pp. 2566-3573,
D.A.Leonard and R.Pellikaan, Integral closures and weight functions over finite
fields, Finite Fields and Their Applications 9(4), 2003, pp. 479-504,
D.A.Leonard, A weighted module view of integral closures of affine domains of
type I, Advances in Mathematics of Communication 3(1), 2009, pp. 1-11. ({ t
icFracP} in the {     t IntegralClosure} package of { t Macaulay2} and {      t
normalP} in { t Singular}'s { t normal} package are attempts to generalize this
to generic input by ignoring all of the structure that is required by this
package.) Also this package contains the extension to examples over the
rationals; which, in turn, allows for quicker answers over ZZ/q for most large
q, which can be produced if desired merely by changing the coefficient ring
from QQ to ZZ/q.

Author
======

  * Douglas A. Leonard (see http://www.dms.auburn.edu/~leonada )
    <leonada@auburn.edu>

Version
=======

This documentation describes version 1.02 of QthPower.

Source code
===========

The source code from which this documentation is derived is in the file
QthPower.m2 (see common/share/Macaulay2/QthPower.m2 ).

Exports
=======

  * Functions and commands
      * grevlexWeight -- transform a weight matrix into a
        monomial ordering matrix
      * minimization -- change to a better Noether
        normalization suggested by the induced weights
      * qthConductor -- computes a conductor element which
        also lives in the given Noether normalization, P
      * qthIntegralClosure -- computes integral
        closures in positive characteristic
      * rationalIntegralClosure -- computes
        integral closures over the rationals
      * testWeightMatrix -- test compatibility of
        weight matrix with Groebner basis elements
      * weightGrevlex -- transform a weight matrix into a
        monomial ordering matrix
  * Methods
      * "grevlexWeight(Matrix)" -- see grevlexWeight, --
        transform a weight matrix into a monomial ordering matrix
      * "minimization(List,List,Ring,Matrix)" -- see minimization,
        -- change to a better Noether normalization suggested by
        the induced weights
      * "qthConductor(Ideal,ZZ)" -- see qthConductor, --
        computes a conductor element which also lives in the given Noether
        normalization, P
      * "qthIntegralClosure(Matrix,Ring,List)" -- see qthIntegralClosure,
        -- computes integral closures in positive
        characteristic
      * "rationalIntegralClosure(Matrix,Ring,List)" -- see
        rationalIntegralClosure, -- computes integral
        closures over the rationals
      * "testWeightMatrix(Matrix,Ring,List)" -- see testWeightMatrix,
        -- test compatibility of weight matrix with Groebner
        basis elements
      * "weightGrevlex(Matrix)" -- see weightGrevlex, --
        transform a weight matrix into a monomial ordering matrix

For the programmer
==================

The object QthPower, is a package (Macaulay2Doc).

grevlexWeight -- transform a weight matrix into a monomial ordering matrix
**************************************************************************

Synopsis
========

  * Usage:
        wtgrev=grevlexWeight(wtR)
  * Inputs:
      * wtR, a weight matrix
  * Outputs:
      * wtgrev, a matrix (Macaulay2Doc), grevlex-over-weight
        matrix

Description
===========

+-----------------------------------+
|i1 : wtR = matrix{{5,6,6},{3,6,0}};|
|                                   |
|              2        3           |
|o1 : Matrix ZZ  <--- ZZ            |
+-----------------------------------+
|i2 : grevlexWeight(wtR)            |
|                                   |
|o2 = | 1 0 0 |                     |
|     | 5 6 6 |                     |
|     | 3 6 0 |                     |
|                                   |
|              3        3           |
|o2 : Matrix ZZ  <--- ZZ            |
+-----------------------------------+

It is not standard in algebra systems to have a weighted monomial ordering
based on one row of weights such as matrix{{5,6,6}} extended to
matrix{{1,1,0},{1,0,0},{5,6,6}}, While M2 could extend it to
matrix{{1,1,1},{1,1,0},{1,0,0},{5,6,6}} fairly easily, the method here allows
for more than one independent row of a matrix matrix{{5,6,6},{3,6,0}} to be
extended to matrix{{1,0,0},{5,6,6},{3,6,0}}.

Ways to use grevlexWeight :
===========================

  * "grevlexWeight(Matrix)"

For the programmer
==================

The object grevlexWeight, is a method function (Macaulay2Doc).

minimization -- change to a better Noether normalization suggested by the induced weights
*****************************************************************************************

Synopsis
========

  * Usage:
        (newwticR,newicR,newrelicR) = minimization(fractions, relicR, icR, wticR)
  * Inputs:
      * fractions, ring elements defining a P-module generating set for icR
      * relicR, a Gr"obner basis for the relation ideal
      * icR, a ring
      * wticR, a weight matrix
  * Outputs:
      * newwticR, a matrix (Macaulay2Doc), weight matrix
      * newicR, a ring (Macaulay2Doc), ring
      * newrelicR, a list (Macaulay2Doc), Gr"obner basis of
        relations

Description
===========

+-----------------------------------------------------------------------------+
|i1 : wtR = matrix{{31,12}};                                                  |
|                                                                             |
|              1        2                                                     |
|o1 : Matrix ZZ  <--- ZZ                                                      |
+-----------------------------------------------------------------------------+
|i2 : Rq = ZZ/2[y,x,Weights=>entries weightGrevlex(wtR)];                     |
+-----------------------------------------------------------------------------+
|i3 : Iq = {y^12+y^11+y^10*x^2+y^8*x^9+x^31};                                 |
+-----------------------------------------------------------------------------+
|i4 : ic1 = qthIntegralClosure(wtR,Rq,Iq)                                     |
|                                                                             |
|        28   11    7 9    10    9 2   10 3    6 12    9 3    8 5   9 6       |
|o4 = ({x  , y   + y x  + y   + y x , y  x  + y x   + y x  + y x , y x  +     |
|                                                                             |
|     ------------------------------------------------------------------------|
|      5 15    8 6    7 8   8 9    4 18    7 9    6 11   7 12    3 21    6 12 |
|     y x   + y x  + y x , y x  + y x   + y x  + y x  , y x   + y x   + y x   |
|                                                                             |
|     ------------------------------------------------------------------------|
|        5 14   6 15    2 24    5 15    4 17     28   5 18      27    4 18    |
|     + y x  , y x   + y x   + y x   + y x  , y*x  , y x   + y*x   + y x   +  |
|                                                                             |
|     ------------------------------------------------------------------------|
|      3 20   2 26      26   4 21    3 21    2 23   3 24    2 24      26     2|
|     y x  , y x   + y*x  , y x   + y x   + y x  , y x   + y x   + y*x  }, {p |
|                                                                            0|
|     ------------------------------------------------------------------------|
|                  3       2       5             2               2       5    |
|     + p p   + p p   + p p   + p p  , p p  + p p   + p p   + p p   + p p  ,  |
|        1 11    2 11    3 11    5 11   0 1    0 11    3 11    5 11    6 11   |
|     ------------------------------------------------------------------------|
|                       4       3                     2       5               |
|     p p  + p p   + p p   + p p  , p p  + p p   + p p   + p p  , p p  +      |
|      0 2    1 11    3 11    4 11   0 3    5 11    6 11    7 11   0 4        |
|     ------------------------------------------------------------------------|
|        3                     2       5                     2       5        |
|     p p  , p p  + p p   + p p   + p p  , p p  + p p   + p p   + p p  , p p  |
|      1 11   0 5    6 11    7 11    8 11   0 6    7 11    8 11    9 11   0 7 |
|     ------------------------------------------------------------------------|
|                  2        5                      2     5             2      |
|     + p p   + p p   + p  p  , p p  + p p   + p  p   + p  , p p  + p p   +   |
|        8 11    9 11    10 11   0 8    9 11    10 11    11   0 9    4 11     |
|     ------------------------------------------------------------------------|
|               2                         2      2               2       5    |
|     p  p   + p  , p p   + p p   + p  , p  + p p   + p p   + p p   + p p  ,  |
|      10 11    11   0 10    2 11    11   1    1 11    5 11    6 11    7 11   |
|     ------------------------------------------------------------------------|
|               2               4                     2       5             3 |
|     p p  + p p   + p p   + p p  , p p  + p p   + p p   + p p  , p p  + p p  |
|      1 2    2 11    3 11    5 11   1 3    6 11    7 11    8 11   1 4    3 11|
|     ------------------------------------------------------------------------|
|          2                     2       5                     2        5     |
|     + p p  , p p  + p p   + p p   + p p  , p p  + p p   + p p   + p  p  ,   |
|        4 11   1 5    7 11    8 11    9 11   1 6    8 11    9 11    10 11    |
|     ------------------------------------------------------------------------|
|                        2     5             2              2                 |
|     p p  + p p   + p  p   + p  , p p  + p p   + p  p   + p  , p p  + p p   +|
|      1 7    9 11    10 11    11   1 8    4 11    10 11    11   1 9    2 11  |
|     ------------------------------------------------------------------------|
|                       2           3                          4              |
|     p  , p p   + p , p  + p  + p p   + p , p p  + p p   + p p  , p p  +     |
|      11   1 10    0   2    0    1 11    2   2 3    5 11    6 11   2 4       |
|     ------------------------------------------------------------------------|
|        2                          4                     4                   |
|     p p   + p , p p  + p p   + p p  , p p  + p p   + p p  , p p  + p p   +  |
|      0 11    4   2 5    6 11    7 11   2 6    7 11    8 11   2 7    8 11    |
|     ------------------------------------------------------------------------|
|        4                      4                    4                        |
|     p p  , p p  + p p   + p  p  , p p  + p  p   + p  , p p   + p p   + p  , |
|      9 11   2 8    9 11    10 11   2 9    10 11    11   2 10    4 11    11  |
|     ------------------------------------------------------------------------|
|      2      2               2       5             3             2           |
|     p  + p p   + p p   + p p   + p p  , p p  + p p  , p p  + p p   + p p   +|
|      3    5 11    7 11    8 11    9 11   3 4    5 11   3 5    6 11    8 11  |
|     ------------------------------------------------------------------------|
|        2        5             2                2     5             2        |
|     p p   + p  p  , p p  + p p   + p p   + p  p   + p  , p p  + p p   +     |
|      9 11    10 11   3 6    7 11    9 11    10 11    11   3 7    4 11       |
|     ------------------------------------------------------------------------|
|        2              2                     2                         2     |
|     p p   + p  p   + p  , p p  + p p   + p p   + p  , p p  + p  + p  p  ,   |
|      8 11    10 11    11   3 8    2 11    9 11    11   3 9    0    10 11    |
|     ------------------------------------------------------------------------|
|                   2    2      2                  3             3            |
|     p p   + p  + p  , p  + p p   + p , p p  + p p  , p p  + p p  , p p  +   |
|      3 10    1    11   4    2 11    4   4 5    6 11   4 6    7 11   4 7     |
|     ------------------------------------------------------------------------|
|        3             3              3            3    2      2              |
|     p p  , p p  + p p  , p p  + p  p  , p p   + p  , p  + p p   + p p   +   |
|      8 11   4 8    9 11   4 9    10 11   4 10    11   5    7 11    9 11     |
|     ------------------------------------------------------------------------|
|         2     5             2       2              2                     2  |
|     p  p   + p  , p p  + p p   + p p   + p  p   + p  , p p  + p p   + p p   |
|      10 11    11   5 6    4 11    8 11    10 11    11   5 7    2 11    9 11 |
|     ------------------------------------------------------------------------|
|                            2                2                2              |
|     + p  , p p  + p  + p  p  , p p  + p  + p  , p p   + p , p  + p p   +    |
|        11   5 8    0    10 11   5 9    1    11   5 10    3   6    2 11      |
|     ------------------------------------------------------------------------|
|        2                         2                2                         |
|     p p   + p  , p p  + p  + p  p  , p p  + p  + p  , p p  + p , p p   + p ,|
|      9 11    11   6 7    0    10 11   6 8    1    11   6 9    3   6 10    5 |
|     ------------------------------------------------------------------------|
|      2         2                                      2                     |
|     p  + p  + p  , p p  + p , p p  + p , p p   + p , p  + p , p p  + p ,    |
|      7    1    11   7 8    3   7 9    5   7 10    6   8    5   8 9    6     |
|     ------------------------------------------------------------------------|
|                  2                    2         ZZ                          |
|     p p   + p , p  + p , p p   + p , p   + p }, --[p ..p  ], | 45 40 38 35  |
|      8 10    7   9    7   9 10    8   10    9    2  0   11                  |
|     ------------------------------------------------------------------------|
|     31 30 25 20 15 10 5 12 |)                                               |
|                                                                             |
|o4 : Sequence                                                                |
+-----------------------------------------------------------------------------+
|i5 : ic2 = minimization(ic1); toString ic2                                   |
|                                                                             |
|o6 = {matrix {{45, 40, 38, 35, 31, 30, 25, 20, 15, 10, 12, 5}},              |
|     (ZZ/2)[p_0..p_11], {p_10^3+p_4*p_11, p_4*p_10+p_2*p_11+p_10,            |
|     p_2*p_10+p_11^10+p_10^2*p_11^2+p_10,                                    |
|     p_4^2+p_10*p_11^10+p_4*p_11^3+p_4+p_10^2,                               |
|     p_2*p_4+p_10^2*p_11^9+p_2*p_11^3+p_4+p_10*p_11^2,                       |
|     p_2^2+p_4*p_11^9+p_11^12+p_11^9+p_10^2*p_11^4+p_2+p_10*p_11^2}}         |
+-----------------------------------------------------------------------------+
|i7 : ic3 = qthIntegralClosure(ic2#0,ic2#1,ic2#2)                             |
|                                                                             |
|                2              2           9      4      2    12    9        |
|o7 = ({1, p  , p  , p , p }, {p  + p  + p p  + p p  + p p  + p   + p , p p  +|
|           10   10   4   2     0    0    1 4    2 4    3 4    4     4   0 1  |
|     ------------------------------------------------------------------------|
|        3           9      2            3           10            2          |
|     p p  + p  + p p  + p p , p p  + p p  + p  + p p  , p p  + p p  + p  +   |
|      0 4    1    2 4    3 4   0 2    1 4    2    3 4    0 3    2 4    3     |
|     ------------------------------------------------------------------------|
|      10   2      3                10            3                11         |
|     p  , p  + p p  + p  + p  + p p  , p p  + p p  + p  + p p  + p  , p p  + |
|      4    1    1 4    1    2    3 4    1 2    2 4    2    3 4    4    1 3   |
|     ------------------------------------------------------------------------|
|                 2      2                       2        ZZ                  |
|     p p  + p , p  + p p  + p p , p p  + p p , p  + p }, --[p ..p ], | 38 31 |
|      0 4    3   2    0 4    3 4   2 3    1 4   3    2    2  0   4           |
|     ------------------------------------------------------------------------|
|     24 12 5 |)                                                              |
|                                                                             |
|o7 : Sequence                                                                |
+-----------------------------------------------------------------------------+
|i8 : R1=ZZ/2[f38,f31,f12,f5,Weights=> entries                                |
|-----------------------------------------------------------------------------|
|weightGrevlex(matrix{{38,31,12,5}})];                                        |
+-----------------------------------------------------------------------------+
|i9 : phi1=map(R1,ic2#1,matrix{{0,0,f38,0,f31,0,0,0,0,0,f12,f5}});            |
|                                                                             |
|                     ZZ                                                      |
|o9 : RingMap R1 <--- --[p ..p  ]                                             |
|                      2  0   11                                              |
+-----------------------------------------------------------------------------+
|i10 : I1=ic2#2/(v->phi1(v))                                                  |
|                                                                             |
|          3                                               10      2  2       |
|o10 = {f12  + f31*f5, f31*f12 + f38*f5 + f12, f38*f12 + f5   + f12 f5  + f12,|
|      -----------------------------------------------------------------------|
|         2         10         3            2               2  9         3    |
|      f31  + f12*f5   + f31*f5  + f31 + f12 , f38*f31 + f12 f5  + f38*f5  +  |
|      -----------------------------------------------------------------------|
|                  2     2         9     12     9      2  4               2   |
|      f31 + f12*f5 , f38  + f31*f5  + f5   + f5  + f12 f5  + f38 + f12*f5 }  |
|                                                                             |
|o10 : List                                                                   |
+-----------------------------------------------------------------------------+
|i11 : G1=transpose gens gb ideal I1                                          |
|                                                                             |
|o11 = {-3}  | f12^3+f31f5                                    |               |
|      {-2}  | f31f12+f38f5+f12                               |               |
|      {-10} | f38f12+f5^10+f12^2f5^2+f12                     |               |
|      {-11} | f31^2+f12f5^10+f31f5^3+f31+f12^2               |               |
|      {-11} | f38f31+f12^2f5^9+f38f5^3+f31+f12f5^2           |               |
|      {-12} | f38^2+f31f5^9+f5^12+f5^9+f12^2f5^4+f38+f12f5^2 |               |
|                                                                             |
|               6        1                                                    |
|o11 : Matrix R1  <--- R1                                                     |
+-----------------------------------------------------------------------------+
|i12 : R2=ZZ/2[f38,f31,f24,f12,f5,MonomialOrder=>{Weights=>{1,1,1,1,0},Weights|
|-----------------------------------------------------------------------------|
|=>{1,1,1,0,0},Weights=>{1,1,0,0,0},Weights=>{1,0,0,0,0},Weights=>{38,31,24,12|
|-----------------------------------------------------------------------------|
|,5}}];                                                                       |
+-----------------------------------------------------------------------------+
|i13 : phi2=map(R2,R1,matrix{{f38,f31,f12,f5}});                              |
|                                                                             |
|o13 : RingMap R2 <--- R1                                                     |
+-----------------------------------------------------------------------------+
|i14 : I2=ideal((flatten entries G1)/(v->phi2(v)))+ideal(f12^2-f24)           |
|                                                                             |
|                3                                                2  2        |
|o14 = ideal (f12  + f31*f5, f31*f12 + f38*f5 + f12, f38*f12 + f12 f5  + f12 +|
|      -----------------------------------------------------------------------|
|        10     2      2         3               10               2  9        |
|      f5  , f31  + f12  + f31*f5  + f31 + f12*f5  , f38*f31 + f12 f5  +      |
|      -----------------------------------------------------------------------|
|            3               2     2      2  4               9         2      |
|      f38*f5  + f31 + f12*f5 , f38  + f12 f5  + f38 + f31*f5  + f12*f5  +    |
|      -----------------------------------------------------------------------|
|        12     9     2                                                       |
|      f5   + f5 , f12  + f24)                                                |
|                                                                             |
|o14 : Ideal of R2                                                            |
+-----------------------------------------------------------------------------+
|i15 : G2=transpose gens gb I2                                                |
|                                                                             |
|o15 = {-2}  | f12^2+f24                                    |                 |
|      {-2}  | f24f12+f31f5                                 |                 |
|      {-2}  | f31f12+f38f5+f12                             |                 |
|      {-10} | f38f12+f24f5^2+f12+f5^10                     |                 |
|      {-3}  | f24^2+f38f5^2+f12f5                          |                 |
|      {-11} | f31f24+f24f5^3+f24+f12f5+f5^11               |                 |
|      {-11} | f38f24+f31f5^3+f24+f12f5^10                  |                 |
|      {-11} | f31^2+f31f5^3+f31+f24+f12f5^10               |                 |
|      {-10} | f38f31+f38f5^3+f31+f24f5^9+f12f5^2           |                 |
|      {-12} | f38^2+f38+f31f5^9+f24f5^4+f12f5^2+f5^12+f5^9 |                 |
|                                                                             |
|               10        1                                                   |
|o15 : Matrix R2   <--- R2                                                    |
+-----------------------------------------------------------------------------+

Minimization changes the order of the variables to implicitly change to a new
Noether normalization, but doesn't actually recompute the integral closure
presentation as a strict affine algebra over the new Noether normalization.
Therefore a second call to an integral closure method is required if the output
of normalization doesn't suffice. It does produce the three outputs needed as
input to either qthIntegralClosure or rationalIntegralClosure. I don't
necessarily like this second call. At the current time it is easier to use the
output of minimization to produce manually (as above) a good minimization.

Ways to use minimization :
==========================

  * "minimization(List,List,Ring,Matrix)"

For the programmer
==================

The object minimization, is a method function (Macaulay2Doc).

qthConductor -- computes a conductor element which also lives in the given Noether normalization, P
***************************************************************************************************

Synopsis
========

  * Usage:
        qthConductor(I,depno)
  * Inputs:
      * I, ideal of relations
      * depno, number of dependent variables
  * Outputs:
      * delta, a ring element (Macaulay2Doc), a conductor
        element

Description
===========

+---------------------------------------------------------+
|i1 : wtR = matrix{{12,5}};                               |
|                                                         |
|              1        2                                 |
|o1 : Matrix ZZ  <--- ZZ                                  |
+---------------------------------------------------------+
|i2 : Rq = ZZ/2[y,x,Weights=> entries weightGrevlex(wtR)];|
+---------------------------------------------------------+
|i3 : Iq = {y^5+y^2*(x^4+x)+y*x^2+x^12};                  |
+---------------------------------------------------------+
|i4 : I  = ideal(Iq);                                     |
|                                                         |
|o4 : Ideal of Rq                                         |
+---------------------------------------------------------+
|i5 : depno = (numColumns wtR) -(numRows wtR);            |
+---------------------------------------------------------+
|i6 : delta = qthConductor(I,depno)                       |
|                                                         |
|      2                                                  |
|o6 = x                                                   |
|                                                         |
|o6 : Rq                                                  |
+---------------------------------------------------------+

This gives a canonical conductor element {      t delta} living in the given
Noether normalization, P, the subring of the last numRows(wtR) (free)
variables.

Ways to use qthConductor :
==========================

  * "qthConductor(Ideal,ZZ)"

For the programmer
==================

The object qthConductor, is a method function (Macaulay2Doc).

qthIntegralClosure -- computes integral closures in positive characteristic
***************************************************************************

Synopsis
========

  * Usage:
        (fractions,relicR,icR,wticR) = qthIntegralClosure(wtR,Rq,GB)
  * Inputs:
      * wtR, weight matrix
      * Rq, polynomial ring over ZZ/q with weight-over-grevlex order
      * GB, set of generators for the ideal of relations
  * Outputs:
      * fractions, a list (Macaulay2Doc), numerators of P-module
        generating set, the first doubling as a common denominator, hence a
        conductor element as well
      * relicR, a list (Macaulay2Doc), a Gr"obner basis for the
        ideal of induced relations
      * icR, a ring (Macaulay2Doc), grevlex-over-weight polynomial
        ring over ZZ/q for the presentation
      * wticR, a matrix (Macaulay2Doc), weight matrix for the
        integral closure

Description
===========

+-----------------------------------------------------------------------------+
|i1 : wtR = matrix{{5,6,6},{3,6,0}};                                          |
|                                                                             |
|              2        3                                                     |
|o1 : Matrix ZZ  <--- ZZ                                                      |
+-----------------------------------------------------------------------------+
|i2 : Rq = ZZ/23[x,y,z,Weights=>entries weightGrevlex(wtR)];                  |
+-----------------------------------------------------------------------------+
|i3 : GB = {x^6+x^3*z-y^3*z^2};                                               |
+-----------------------------------------------------------------------------+
|i4 : (fractions,relicR,icR,wticR) = qthIntegralClosure(wtR,Rq,GB)            |
|                                                                             |
|        2      2    5    2    4            3 2   2 2      2                  |
|o4 = ({y z, x*y z, x  + x z, x y + x*y*z, x y , x y z}, {p  - p p p  + p p , |
|                                                          0    2 5 6    4 6  |
|     ------------------------------------------------------------------------|
|                    2          2                                 2         3 |
|     p p  + p  - p p , p p  - p p , p p  - p p p , p p  - p p , p  + p  - p ,|
|      0 1    0    3 5   0 2    5 6   0 3    4 5 6   0 4    1 6   1    1    5 |
|     ------------------------------------------------------------------------|
|               2                                  2                          |
|     p p  - p p , p p  - p p , p p  - p p  + p , p  - p p  - p , p p  - p p  |
|      1 2    4 5   1 3    0 5   1 4    2 5    4   2    0 5    3   2 3    1 6 |
|     ------------------------------------------------------------------------|
|                         2                       2                           |
|     - p , p p  - p p , p  - p p , p p  - p p , p  - p }, icR, | 10 9 8 7 5 6|
|        6   2 4    3 5   3    2 6   3 4    5 6   4    0        | 6  9 6 3 3 6|
|     ------------------------------------------------------------------------|
|     6 |)                                                                    |
|     0 |                                                                     |
|                                                                             |
|o4 : Sequence                                                                |
+-----------------------------------------------------------------------------+

The presentation is therefore a quotient ring, icR ( with grevlex-over-weight
monomial ordering implicit from wticR) modulo the ideal, relicR, of induced
relations that define the P-algebra multiplication and possible P-linear
dependencies. The fractions returned could be used to define a map from
(fractions#0)icR to Rq. Note that if wtR*matrix{{6},{0},{0}} eq max{
wtR*matrix{{3},{0},{1}},wtR*matrix{{0},{3},{2}} in the example above, the
algorithm will undoubtedly fail at some step.

See also
========

  * icFractions (IntegralClosure) -- fractions integral over
    an affine domain
  * integralClosure (IntegralClosure) -- integral
    closure of an ideal or a domain
  * icFracP (IntegralClosure) -- compute the integral closure in
    prime characteristic

Ways to use qthIntegralClosure :
================================

  * "qthIntegralClosure(Matrix,Ring,List)"

For the programmer
==================

The object qthIntegralClosure, is a method function (Macaulay2Doc).

rationalIntegralClosure -- computes integral closures over the rationals
************************************************************************

Synopsis
========

  * Usage:
        (fractions,relicR,icR,wticR) = rationalIntegralClosure(wtR,Rq,GB)
  * Inputs:
      * wtR, weight matrix
      * R0, polynomial ring over QQ with weight-over-grevlex order
      * GB, set of generators for the ideal of relations
  * Outputs:
      * fractions, a list (Macaulay2Doc), a list of numerators for
        a P-module generating set, the first doubling as a common denominator,
        hence a conductor element as well
      * relicR, a list (Macaulay2Doc), a Gr"obner basis for the
        ideal of induced relations
      * icR, a ring (Macaulay2Doc), a grevlex-over-weight
        polynomial ring over QQ for the presentation
      * wticR, a matrix (Macaulay2Doc),  weight matrix for the
        integral closure

Description
===========

+-----------------------------------------------------------------------------+
|i1 : wtR = matrix{{11,6}};                                                   |
|                                                                             |
|              1        2                                                     |
|o1 : Matrix ZZ  <--- ZZ                                                      |
+-----------------------------------------------------------------------------+
|i2 : R0 = QQ[y,x,Weights=> entries weightGrevlex(wtR)];                      |
+-----------------------------------------------------------------------------+
|i3 : GB = {(y^2-3/4*y-15/17*x)^3-9*y*x^4*(y^2-3/4*y-15/17*x)-27*x^11};       |
+-----------------------------------------------------------------------------+
|i4 : (fractions,relicR,icR,wticR) = rationalIntegralClosure(wtR,R0,GB)       |
| 9                                                                           |
|x                                                                            |
|(3, 1)                                                                       |
|     11                                                                      |
|(5, x  )                                                                     |
|     9                                                                       |
|(7, x )                                                                      |
|7                                                                            |
|{p_0^2-3*p_0+p_1*p_5^3+p_2*p_5^5+3*p_2*p_5^2+2*p_3*p_5^5-2*p_4*p_5^4+2*p_4*p_|
|      9                                                                      |
|(13, x )                                                                     |
|13                                                                           |
|{p_0^2+2*p_0+4*p_1*p_5^3-p_2*p_5^5-3*p_2*p_5^2+4*p_3*p_5^5+6*p_4*p_5^4-6*p_4*|
|      9                                                                      |
|(19, x )                                                                     |
|19                                                                           |
|{p_0^2+p_0+6*p_1*p_5^3-8*p_2*p_5^5-5*p_2*p_5^2+4*p_3*p_5^5+3*p_4*p_5^4-9*p_4*|
|      9                                                                      |
|(23, x )                                                                     |
|23                                                                           |
|{p_0^2+11*p_0+3*p_1*p_5^3-4*p_2*p_5^5+11*p_2*p_5^2+10*p_3*p_5^5+10*p_4*p_5^4+|
|      9                                                                      |
|(29, x )                                                                     |
|29                                                                           |
|{p_0^2+4*p_0+13*p_1*p_5^3+2*p_2*p_5^5+6*p_2*p_5^2-11*p_3*p_5^5+12*p_4*p_5^4-5|
|      9                                                                      |
|(31, x )                                                                     |
|31                                                                           |
|{p_0^2+3*p_0-3*p_1*p_5^3+4*p_2*p_5^5+12*p_2*p_5^2+5*p_3*p_5^5+9*p_4*p_5^4-11*|
|      9                                                                      |
|(37, x )                                                                     |
|37                                                                           |
|{p_0^2+16*p_0+11*p_1*p_5^3+10*p_2*p_5^5-7*p_2*p_5^2+16*p_3*p_5^5+11*p_4*p_5^4|
|                                                                             |
|        5   2 3   3   3   15 4     5   4    3 3    30 2 2    9 2    45   2   |
|o4 = ({x , y x  - -y*x  - --x , y*x , y x - -y x - --y x  + --y x + --y*x  + |
|                  4       17                2      17       16      34       |
|     ------------------------------------------------------------------------|
|     225 3   3 3   15   4    9   3   45 4   5   9 4   30 3    27 3   45 2    |
|     ---x , y x  - --y*x  - --y*x  - --x , y  - -y  - --y x + --y  + --y x + |
|     289           17       16       68         4     17      16     17      |
|     ------------------------------------------------------------------------|
|     225   2   27 2   135       675 2     2   135     81   3        5        |
|     ---y*x  - --y  - ---y*x - ----x }, {p  - ---p  + --p p  - 27p p  -      |
|     289       64     136      1156       0    17 0    4 1 5      2 5        |
|     ------------------------------------------------------------------------|
|          2         5   405   4   243   3   1215       729 5             2   |
|     81p p  - 243p p  - ---p p  - ---p p  - ----p p  + ---p , p p  - 9p p  - |
|        2 5       3 5    17 4 5    8  4 5    17  4 5    4  5   0 1     0 5   |
|     ------------------------------------------------------------------------|
|     135     27       81   4        6   405 5   243 4              4         |
|     ---p  - --p p  - --p p  - 27p p  - ---p  + ---p , p p  - 27p p  - 81p p |
|      17 1    2 2 5    4 3 5      4 5    17 5    16 5   0 2      1 5      1 5|
|     ------------------------------------------------------------------------|
|       135     81   4   243           6                 15     27          6 |
|     - ---p  + --p p  + ---p p  - 243p , p p  - 9p p  - --p  + --p p  - 27p ,|
|        17 2    2 4 5    4  4 5       5   0 3     1 5   17 2    4 4 5      5 |
|     ------------------------------------------------------------------------|
|                         4   135     81 4   2   9           2   15       9   |
|     p p  - 9p p  - 27p p  - ---p  + --p , p  - -p p  - 9p p  - --p p  - -p  |
|      0 4     2 5      3 5    17 4    4 5   1   4 0 5     1 5   17 2 5   4 2 |
|     ------------------------------------------------------------------------|
|       27   2      7         27         2        5   135       81     81 5   |
|     + --p p  - 27p , p p  - --p  - 9p p  - 27p p  - ---p p  + --p  - --p ,  |
|        4 4 5      5   1 2    2 1     2 5      3 5    17 4 5    8 4    4 5   |
|     ------------------------------------------------------------------------|
|            3        2   15       9                  3     2           27    |
|     p p  - -p  - p p  - --p p  + -p , p p  - p p  - -p , p  - 9p p  - --p  -|
|      1 3   2 1    2 5   17 4 5   8 4   1 4    0 5   2 2   2     0 5    4 2  |
|     ------------------------------------------------------------------------|
|          5                3                 27        5   2   3        2    |
|     27p p , p p  - p p  - -p , p p  - 9p  + --p  - 27p , p  - -p  - p p  -  |
|        4 5   2 3    0 5   4 2   2 4     1    4 4      5   3   4 3    4 5    |
|     ------------------------------------------------------------------------|
|     15                3     2                                               |
|     --p , p p  - p  + -p , p  - p }, icR, | 25 21 20 11 10 6 |)             |
|     17 5   3 4    1   4 4   4    2                                          |
|                                                                             |
|o4 : Sequence                                                                |
|-----------------------------------------------------------------------------|
|5^3+p_4*p_5+2*p_5^5, p_0*p_1-2*p_0*p_5^2-3*p_1-3*p_2*p_5-p_3*p_5^4+p_4*p_5^6-|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^3+5*p_4*p_5-3*p_5^5, p_0*p_1+4*p_0*p_5^2+2*p_1+6*p_2*p_5-4*p_3*p_5^4-p_4*|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^3+9*p_4*p_5-3*p_5^5, p_0*p_1-9*p_0*p_5^2+p_1-4*p_2*p_5-6*p_3*p_5^4-8*p_4*|
|                                                                             |
|                                                                             |
|                                                                             |
|7*p_4*p_5^3+7*p_4*p_5+4*p_5^5, p_0*p_1-9*p_0*p_5^2+11*p_1-2*p_2*p_5-3*p_3*p_5|
|                                                                             |
|                                                                             |
|                                                                             |
|*p_4*p_5^3+7*p_4*p_5+p_5^5, p_0*p_1-9*p_0*p_5^2+4*p_1+p_2*p_5-13*p_3*p_5^4+2*|
|                                                                             |
|                                                                             |
|                                                                             |
|p_4*p_5^3-4*p_4*p_5+4*p_5^5, p_0*p_1-9*p_0*p_5^2+3*p_1+2*p_2*p_5+3*p_3*p_5^4+|
|                                                                             |
|                                                                             |
|                                                                             |
|+2*p_4*p_5^3-4*p_4*p_5-12*p_5^5, p_0*p_1-9*p_0*p_5^2+16*p_1+5*p_2*p_5-11*p_3*|
|-----------------------------------------------------------------------------|
|2*p_5^5-p_5^4, p_0*p_2+p_1*p_5^4+3*p_1*p_5-3*p_2+2*p_4*p_5^4+3*p_4*p_5+2*p_5^|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^6+6*p_5^5+3*p_5^4, p_0*p_2-p_1*p_5^4-3*p_1*p_5+2*p_2-5*p_4*p_5^4-p_4*p_5+|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^6+3*p_5^5-5*p_5^4, p_0*p_2-8*p_1*p_5^4-5*p_1*p_5+p_2-7*p_4*p_5^4-p_4*p_5+|
|                                                                             |
|                                                                             |
|                                                                             |
|^4-4*p_4*p_5^6+10*p_5^5+8*p_5^4, p_0*p_2-4*p_1*p_5^4+11*p_1*p_5+11*p_2+6*p_4*|
|                                                                             |
|                                                                             |
|                                                                             |
|p_4*p_5^6+12*p_5^5-12*p_5^4, p_0*p_2+2*p_1*p_5^4+6*p_1*p_5+4*p_2-3*p_4*p_5^4+|
|                                                                             |
|                                                                             |
|                                                                             |
|4*p_4*p_5^6+9*p_5^5-10*p_5^4, p_0*p_2+4*p_1*p_5^4+12*p_1*p_5+3*p_2-6*p_4*p_5^|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^4+10*p_4*p_5^6+11*p_5^5-p_5^4, p_0*p_2+10*p_1*p_5^4-7*p_1*p_5+16*p_2-15*p|
|-----------------------------------------------------------------------------|
|6, p_0*p_3-2*p_1*p_5+2*p_2-2*p_4*p_5+p_5^6, p_0*p_4-2*p_2*p_5+p_3*p_5^4-3*p_4|
|                                                                             |
|                                                                             |
|                                                                             |
|4*p_5^6, p_0*p_3+4*p_1*p_5+6*p_2-3*p_4*p_5-p_5^6, p_0*p_4+4*p_2*p_5-p_3*p_5^4|
|                                                                             |
|                                                                             |
|                                                                             |
|4*p_5^6, p_0*p_3-9*p_1*p_5-2*p_2+2*p_4*p_5-8*p_5^6, p_0*p_4-9*p_2*p_5-8*p_3*p|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^4+9*p_4*p_5+10*p_5^6, p_0*p_3-9*p_1*p_5-9*p_2+p_4*p_5-4*p_5^6, p_0*p_4-9*|
|                                                                             |
|                                                                             |
|                                                                             |
|10*p_4*p_5-11*p_5^6, p_0*p_3-9*p_1*p_5-6*p_2+14*p_4*p_5+2*p_5^6, p_0*p_4-9*p_|
|                                                                             |
|                                                                             |
|                                                                             |
|4-9*p_4*p_5+5*p_5^6, p_0*p_3-9*p_1*p_5-10*p_2-p_4*p_5+4*p_5^6, p_0*p_4-9*p_2*|
|                                                                             |
|                                                                             |
|                                                                             |
|_4*p_5^4-4*p_4*p_5+16*p_5^6, p_0*p_3-9*p_1*p_5+10*p_2+16*p_4*p_5+10*p_5^6, p_|
|-----------------------------------------------------------------------------|
|+p_5^4, p_1^2+3*p_0*p_5-2*p_1*p_5^2+2*p_2*p_5+3*p_2-2*p_4*p_5^2+p_5^7, p_1*p_|
|                                                                             |
|                                                                             |
|                                                                             |
|+2*p_4+4*p_5^4, p_1^2+p_0*p_5+4*p_1*p_5^2+6*p_2*p_5+p_2-3*p_4*p_5^2-p_5^7, p_|
|                                                                             |
|                                                                             |
|                                                                             |
|_5^4+p_4+6*p_5^4, p_1^2-7*p_0*p_5-9*p_1*p_5^2-2*p_2*p_5-7*p_2+2*p_4*p_5^2-8*p|
|                                                                             |
|                                                                             |
|                                                                             |
|p_2*p_5-4*p_3*p_5^4+11*p_4+3*p_5^4, p_1^2-8*p_0*p_5-9*p_1*p_5^2-9*p_2*p_5-8*p|
|                                                                             |
|                                                                             |
|                                                                             |
|2*p_5+2*p_3*p_5^4+4*p_4+13*p_5^4, p_1^2+5*p_0*p_5-9*p_1*p_5^2-6*p_2*p_5+5*p_2|
|                                                                             |
|                                                                             |
|                                                                             |
|p_5+4*p_3*p_5^4+3*p_4-3*p_5^4, p_1^2-10*p_0*p_5-9*p_1*p_5^2-10*p_2*p_5-10*p_2|
|                                                                             |
|                                                                             |
|                                                                             |
|0*p_4-9*p_2*p_5+10*p_3*p_5^4+16*p_4+11*p_5^4, p_1^2+7*p_0*p_5-9*p_1*p_5^2+10*|
|-----------------------------------------------------------------------------|
|2-3*p_1-2*p_2*p_5^2+p_3*p_5^5-3*p_4*p_5-3*p_4-p_5^5, p_1*p_3+2*p_1-p_2*p_5^  |
|                                                                             |
|                                                                             |
|                                                                             |
|1*p_2+6*p_1+4*p_2*p_5^2-p_3*p_5^5+2*p_4*p_5+2*p_4-4*p_5^5, p_1*p_3+5*p_1-p_  |
|                                                                             |
|                                                                             |
|                                                                             |
|_5^7, p_1*p_2-4*p_1-9*p_2*p_5^2-8*p_3*p_5^5+p_4*p_5+3*p_4-6*p_5^5, p_1*p_3+  |
|                                                                             |
|                                                                             |
|                                                                             |
|_2+p_4*p_5^2-4*p_5^7, p_1*p_2-2*p_1-9*p_2*p_5^2-4*p_3*p_5^5+11*p_4*p_5-10*p  |
|                                                                             |
|                                                                             |
|                                                                             |
|+14*p_4*p_5^2+2*p_5^7, p_1*p_2+p_1-9*p_2*p_5^2+2*p_3*p_5^5+4*p_4*p_5-8*p_4-  |
|                                                                             |
|                                                                             |
|                                                                             |
|-p_4*p_5^2+4*p_5^7, p_1*p_2+2*p_1-9*p_2*p_5^2+4*p_3*p_5^5+3*p_4*p_5+14*p_4+  |
|                                                                             |
|                                                                             |
|                                                                             |
|p_2*p_5+7*p_2+16*p_4*p_5^2+10*p_5^7, p_1*p_2+5*p_1-9*p_2*p_5^2+10*p_3*p_5^5  |
|-----------------------------------------------------------------------------|
|2+2*p_4*p_5+2*p_4, p_1*p_4-p_0*p_5+2*p_2, p_2^2-2*p_0*p_5+2*p_2+p_4*p_5^5, p_|
|                                                                             |
|                                                                             |
|                                                                             |
|2*p_5^2+6*p_4*p_5+6*p_4, p_1*p_4-p_0*p_5+5*p_2, p_2^2+4*p_0*p_5+3*p_2-p_4*p_5|
|                                                                             |
|                                                                             |
|                                                                             |
|8*p_1-p_2*p_5^2-2*p_4*p_5-6*p_4, p_1*p_4-p_0*p_5+8*p_2, p_2^2-9*p_0*p_5-2*p_2|
|                                                                             |
|                                                                             |
|                                                                             |
|_4-3*p_5^5, p_1*p_3+10*p_1-p_2*p_5^2-9*p_4*p_5+4*p_4, p_1*p_4-p_0*p_5+10*p_2,|
|                                                                             |
|                                                                             |
|                                                                             |
|13*p_5^5, p_1*p_3+13*p_1-p_2*p_5^2-6*p_4*p_5+12*p_4, p_1*p_4-p_0*p_5+13*p_2, |
|                                                                             |
|                                                                             |
|                                                                             |
|3*p_5^5, p_1*p_3+14*p_1-p_2*p_5^2-10*p_4*p_5+5*p_4, p_1*p_4-p_0*p_5+14*p_2, p|
|                                                                             |
|                                                                             |
|                                                                             |
|+16*p_4*p_5-13*p_4-11*p_5^5, p_1*p_3+17*p_1-p_2*p_5^2+10*p_4*p_5+15*p_4, p_1*|
|-----------------------------------------------------------------------------|
|2*p_3-p_0*p_5+p_2, p_2*p_4-2*p_1-2*p_4+p_5^5, p_3^2+p_3-p_4*p_5^2+2*p_5, p_3*|
|                                                                             |
|                                                                             |
|                                                                             |
|^5, p_2*p_3-p_0*p_5-4*p_2, p_2*p_4+4*p_1-3*p_4-p_5^5, p_3^2-4*p_3-p_4*p_5^2+6|
|                                                                             |
|                                                                             |
|                                                                             |
|-8*p_4*p_5^5, p_2*p_3-p_0*p_5+4*p_2, p_2*p_4-9*p_1+2*p_4-8*p_5^5, p_3^2+4*p_3|
|                                                                             |
|                                                                             |
|                                                                             |
| p_2^2-9*p_0*p_5-p_2-4*p_4*p_5^5, p_2*p_3-p_0*p_5+5*p_2, p_2*p_4-9*p_1+p_4-4*|
|                                                                             |
|                                                                             |
|                                                                             |
|p_2^2-9*p_0*p_5-14*p_2+2*p_4*p_5^5, p_2*p_3-p_0*p_5-8*p_2, p_2*p_4-9*p_1+14*p|
|                                                                             |
|                                                                             |
|                                                                             |
|_2^2-9*p_0*p_5+p_2+4*p_4*p_5^5, p_2*p_3-p_0*p_5+7*p_2, p_2*p_4-9*p_1-p_4+4*p_|
|                                                                             |
|                                                                             |
|                                                                             |
|p_4-p_0*p_5+17*p_2, p_2^2-9*p_0*p_5-16*p_2+10*p_4*p_5^5, p_2*p_3-p_0*p_5-10*p|
|-----------------------------------------------------------------------------|
|p_4-p_1-p_4, p_4^2-p_2}                                                      |
|                                                                             |
|                                                                             |
|                                                                             |
|*p_5, p_3*p_4-p_1+4*p_4, p_4^2-p_2}                                          |
|                                                                             |
|                                                                             |
|                                                                             |
|-p_4*p_5^2-2*p_5, p_3*p_4-p_1-4*p_4, p_4^2-p_2}                              |
|                                                                             |
|                                                                             |
|                                                                             |
|p_5^5, p_3^2+5*p_3-p_4*p_5^2-9*p_5, p_3*p_4-p_1-5*p_4, p_4^2-p_2}            |
|                                                                             |
|                                                                             |
|                                                                             |
|_4+2*p_5^5, p_3^2-8*p_3-p_4*p_5^2-6*p_5, p_3*p_4-p_1+8*p_4, p_4^2-p_2}       |
|                                                                             |
|                                                                             |
|                                                                             |
|5^5, p_3^2+7*p_3-p_4*p_5^2-10*p_5, p_3*p_4-p_1-7*p_4, p_4^2-p_2}             |
|                                                                             |
|                                                                             |
|                                                                             |
|_2, p_2*p_4-9*p_1+16*p_4+10*p_5^5, p_3^2-10*p_3-p_4*p_5^2+10*p_5, p_3*p_4-p_1|
|-----------------------------------------------------------------------------|
|+10*p_4, p_4^2-p_2}                                                          |
+-----------------------------------------------------------------------------+

This is just like qthIntegralClosure except over QQ instead of ZZ/q. It calls
qthIntegralClosure for several small primes q and reconciles the results using
the Chinese Remainder Theorem and the extended Euclidean algorithm.

See also
========

  * icFractions (IntegralClosure) -- fractions integral over
    an affine domain
  * integralClosure (IntegralClosure) -- integral
    closure of an ideal or a domain

Ways to use rationalIntegralClosure :
=====================================

  * "rationalIntegralClosure(Matrix,Ring,List)"

For the programmer
==================

The object rationalIntegralClosure, is a
method function (Macaulay2Doc).

testWeightMatrix -- test compatibility of weight matrix with Groebner basis elements
************************************************************************************

Synopsis
========

  * Usage:
        L=testWeightMatrix(wtr,r,GB)
  * Inputs:
      * wtr, weight matrix
      * r, polynomial ring with weight-over-grevlex order
      * GB, list of generators for the ideal of relations
  * Outputs:
      * L, list of boolean checks

Description
===========

+--------------------------------------------------------+
|i1 : wtr=matrix{{5,6,6},{2,6,0}};                       |
|                                                        |
|              2        3                                |
|o1 : Matrix ZZ  <--- ZZ                                 |
+--------------------------------------------------------+
|i2 : r=ZZ/2[x,y,z,Weights=> entries weightGrevlex(wtr)];|
+--------------------------------------------------------+
|i3 : GB={x^6+x^3*z-y^3*z^2};                            |
+--------------------------------------------------------+
|i4 : L=testWeightMatrix(wtr,r,GB)                       |
|                                                        |
|o4 = {false}                                            |
|                                                        |
|o4 : List                                               |
+--------------------------------------------------------+

each test should be true if the weight matrix is compatible

Ways to use testWeightMatrix :
==============================

  * "testWeightMatrix(Matrix,Ring,List)"

For the programmer
==================

The object testWeightMatrix, is a method function (Macaulay2Doc).

weightGrevlex -- transform a weight matrix into a monomial ordering matrix
**************************************************************************

Synopsis
========

  * Usage:
        wtgrev=weightGrevlex(wtR)
  * Inputs:
      * wtR, a weight matrix
  * Outputs:
      * wtgrev, a matrix (Macaulay2Doc), weight-over-grevlex
        matrix

Description
===========

+-----------------------------------+
|i1 : wtR = matrix{{5,6,6},{3,6,0}};|
|                                   |
|              2        3           |
|o1 : Matrix ZZ  <--- ZZ            |
+-----------------------------------+
|i2 : weightGrevlex(wtR)            |
|                                   |
|o2 = | 5 6 6 |                     |
|     | 3 6 0 |                     |
|     | 1 0 0 |                     |
|                                   |
|              3        3           |
|o2 : Matrix ZZ  <--- ZZ            |
+-----------------------------------+

It is standard in other algebra systems to have a weighted monomial ordering
based on one row of weights such as matrix{{5,6,6}} being extended to
matrix{{5,6,6},{1,1,0},{1,0,0}}, whereas M2 would extend it to
matrix{{5,6,6},{1,1,1},{1,1,0}}. The method here allows for more than one
independent row of weights matrix{{5,6,6},{3,6,0}} to be extended to
matrix{{5,6,6},{3,6,0},{1,0,0}}. Note that the number of rows necessarily
matches the number of (free) variables, those of P, since the rightmost square
submatrix defines a monomial ordering on P.

Ways to use weightGrevlex :
===========================

  * "weightGrevlex(Matrix)"

For the programmer
==================

The object weightGrevlex, is a method function (Macaulay2Doc).