Macaulay2 » Documentation
Packages » MatrixFactorizations :: adjoinRoot
next | previous | forward | backward | up | index | toc

adjoinRoot -- Adjoin a root of unity to the underlying object input

Description

When working with ZZ/d-graded factorizations of period > 2, the operations are often dependent on the existence of a distinguished primitive root of unity. The adjoinRoot command allows the user to adjoin or specify a distinguished root of unity to either a ring or a ZZdFactorization/ZZdFactorizationMap.

We will illustrate all of the methods of adjoining a distinguished root of unity, including the advantages/disadvantages of using certain methods.

i1 : Q = QQ[x_1..x_3];
i2 : d = 3;
i3 : Qt = adjoinRoot(d, Q, t)

o3 = Qt

o3 : QuotientRing
i4 : Qt.rootOfUnity --stores the root of unity in the ring

o4 = t

o4 : Qt
i5 : {t, t^2, t^3}

o5 = {t, - t - 1, 1}

o5 : List

Any factorization of length > 2 constructed over the ring $Qt$ will automatically cache the distinguished root of unity $t$.

i6 : Dt = ZZdfactorization {x_1*1_Qt,x_2*1_Qt,x_3*1_Qt}

       1       1       1       1
o6 = Qt  <-- Qt  <-- Qt  <-- Qt
                              
     0       1       2       0

o6 : ZZdFactorization
i7 : Dt.cache.rootOfUnity

o7 = t

o7 : Qt

If the user forgets to adjoin a root of unity, then one can directly adjoin a root to the factorization by either using adjoinRoot or tensoring with a ring that contains a root of unity.

i8 : S = QQ[x,y,z];
i9 : C = ZZdfactorization {x,y,z}

      1      1      1      1
o9 = S  <-- S  <-- S  <-- S
                           
     0      1      2      0

o9 : ZZdFactorization
i10 : C.cache.?rootOfUnity

o10 = false
i11 : Ct = adjoinRoot(C, t)

      /   S[t]   \1     /   S[t]   \1     /   S[t]   \1     /   S[t]   \1
o11 = |----------|  <-- |----------|  <-- |----------|  <-- |----------|
      | 2        |      | 2        |      | 2        |      | 2        |
      \t  + t + 1/      \t  + t + 1/      \t  + t + 1/      \t  + t + 1/
                                                             
      0                 1                 2                 0

o11 : ZZdFactorization
i12 : (Ct.cache.?rootOfUnity, Ct.cache.rootOfUnity)

o12 = (true, t)

o12 : Sequence
i13 : St = adjoinRoot(3, S, t);
i14 : Ct' = C**St

        1       1       1       1
o14 = St  <-- St  <-- St  <-- St
                               
      0       1       2       0

o14 : ZZdFactorization
i15 : Ct'.cache.rootOfUnity

o15 = t

o15 : St

Sometimes a ring already has a distinguished root of unity without the need to adjoin a new variable. The user can specify such a distinguished root of unity in this case, and all constructions for factorizations of larger period will go through using this distinguished root of unifty.

i16 : R = ZZ/3[x,y,z]

o16 = R

o16 : PolynomialRing
i17 : R.rootOfUnity = 1_R

o17 = 1

o17 : R
i18 : Cx = ZZdfactorization {x,x,x}

       1      1      1      1
o18 = R  <-- R  <-- R  <-- R
                            
      0      1      2      0

o18 : ZZdFactorization
i19 : Cy = ZZdfactorization {y,y,y}

       1      1      1      1
o19 = R  <-- R  <-- R  <-- R
                            
      0      1      2      0

o19 : ZZdFactorization
i20 : Cz = ZZdfactorization {z,z,z}

       1      1      1      1
o20 = R  <-- R  <-- R  <-- R
                            
      0      1      2      0

o20 : ZZdFactorization
i21 : Cxyz = Cx**Cy**Cz

       9      9      9      9
o21 = R  <-- R  <-- R  <-- R
                            
      0      1      2      0

o21 : ZZdFactorization
i22 : Cxyz.dd

           9                             9
o22 = 2 : R  <------------------------- R  : 0
                | z 0 0 y x 0 0 0 0 |
                | 0 z 0 0 y x 0 0 0 |
                | 0 0 z x 0 y 0 0 0 |
                | 0 0 0 z 0 0 y x 0 |
                | 0 0 0 0 z 0 0 y x |
                | 0 0 0 0 0 z x 0 y |
                | y x 0 0 0 0 z 0 0 |
                | 0 y x 0 0 0 0 z 0 |
                | x 0 y 0 0 0 0 0 z |

           9                             9
      0 : R  <------------------------- R  : 1
                | z 0 0 y x 0 0 0 0 |
                | 0 z 0 0 y x 0 0 0 |
                | 0 0 z x 0 y 0 0 0 |
                | 0 0 0 z 0 0 y x 0 |
                | 0 0 0 0 z 0 0 y x |
                | 0 0 0 0 0 z x 0 y |
                | y x 0 0 0 0 z 0 0 |
                | 0 y x 0 0 0 0 z 0 |
                | x 0 y 0 0 0 0 0 z |

           9                             9
      1 : R  <------------------------- R  : 2
                | z 0 0 y x 0 0 0 0 |
                | 0 z 0 0 y x 0 0 0 |
                | 0 0 z x 0 y 0 0 0 |
                | 0 0 0 z 0 0 y x 0 |
                | 0 0 0 0 z 0 0 y x |
                | 0 0 0 0 0 z x 0 y |
                | y x 0 0 0 0 z 0 0 |
                | 0 y x 0 0 0 0 z 0 |
                | x 0 y 0 0 0 0 0 z |

o22 : ZZdFactorizationMap
i23 : Cxyz.dd^3

           9                                                                                            9
o23 = 0 : R  <---------------------------------------------------------------------------------------- R  : 0
                | x3+y3+z3 0        0        0        0        0        0        0        0        |
                | 0        x3+y3+z3 0        0        0        0        0        0        0        |
                | 0        0        x3+y3+z3 0        0        0        0        0        0        |
                | 0        0        0        x3+y3+z3 0        0        0        0        0        |
                | 0        0        0        0        x3+y3+z3 0        0        0        0        |
                | 0        0        0        0        0        x3+y3+z3 0        0        0        |
                | 0        0        0        0        0        0        x3+y3+z3 0        0        |
                | 0        0        0        0        0        0        0        x3+y3+z3 0        |
                | 0        0        0        0        0        0        0        0        x3+y3+z3 |

           9                                                                                            9
      1 : R  <---------------------------------------------------------------------------------------- R  : 1
                | x3+y3+z3 0        0        0        0        0        0        0        0        |
                | 0        x3+y3+z3 0        0        0        0        0        0        0        |
                | 0        0        x3+y3+z3 0        0        0        0        0        0        |
                | 0        0        0        x3+y3+z3 0        0        0        0        0        |
                | 0        0        0        0        x3+y3+z3 0        0        0        0        |
                | 0        0        0        0        0        x3+y3+z3 0        0        0        |
                | 0        0        0        0        0        0        x3+y3+z3 0        0        |
                | 0        0        0        0        0        0        0        x3+y3+z3 0        |
                | 0        0        0        0        0        0        0        0        x3+y3+z3 |

           9                                                                                            9
      2 : R  <---------------------------------------------------------------------------------------- R  : 2
                | x3+y3+z3 0        0        0        0        0        0        0        0        |
                | 0        x3+y3+z3 0        0        0        0        0        0        0        |
                | 0        0        x3+y3+z3 0        0        0        0        0        0        |
                | 0        0        0        x3+y3+z3 0        0        0        0        0        |
                | 0        0        0        0        x3+y3+z3 0        0        0        0        |
                | 0        0        0        0        0        x3+y3+z3 0        0        0        |
                | 0        0        0        0        0        0        x3+y3+z3 0        0        |
                | 0        0        0        0        0        0        0        x3+y3+z3 0        |
                | 0        0        0        0        0        0        0        0        x3+y3+z3 |

o23 : ZZdFactorizationMap

The user can also adjoin roots of unity directly to maps of factorizations, if needed.

i24 : use S;
i25 : C = ZZdfactorization {x,y,z}

       1      1      1      1
o25 = S  <-- S  <-- S  <-- S
                            
      0      1      2      0

o25 : ZZdFactorization
i26 : newId = adjoinRoot(id_C, t)

          /   S[t]   \1            /   S[t]   \1
o26 = 0 : |----------|  <--------- |----------|  : 0
          | 2        |     | 1 |   | 2        |
          \t  + t + 1/             \t  + t + 1/

          /   S[t]   \1            /   S[t]   \1
      1 : |----------|  <--------- |----------|  : 1
          | 2        |     | 1 |   | 2        |
          \t  + t + 1/             \t  + t + 1/

          /   S[t]   \1            /   S[t]   \1
      2 : |----------|  <--------- |----------|  : 2
          | 2        |     | 1 |   | 2        |
          \t  + t + 1/             \t  + t + 1/

o26 : ZZdFactorizationMap
i27 : tnewId = newId**newId

          /   S[t]   \3                /   S[t]   \3
o27 = 0 : |----------|  <------------- |----------|  : 0
          | 2        |     | 1 0 0 |   | 2        |
          \t  + t + 1/     | 0 1 0 |   \t  + t + 1/
                           | 0 0 1 |

          /   S[t]   \3                /   S[t]   \3
      1 : |----------|  <------------- |----------|  : 1
          | 2        |     | 1 0 0 |   | 2        |
          \t  + t + 1/     | 0 1 0 |   \t  + t + 1/
                           | 0 0 1 |

          /   S[t]   \3                /   S[t]   \3
      2 : |----------|  <------------- |----------|  : 2
          | 2        |     | 1 0 0 |   | 2        |
          \t  + t + 1/     | 0 1 0 |   \t  + t + 1/
                           | 0 0 1 |

o27 : ZZdFactorizationMap
i28 : assert(source tnewId == (C**ring newId)**(C**ring newId))

See also

Ways to use adjoinRoot:

  • adjoinRoot(ZZ,Ring,RingElement)
  • adjoinRoot(ZZ,Ring,Symbol)
  • adjoinRoot(ZZdFactorization,RingElement)
  • adjoinRoot(ZZdFactorization,Symbol)
  • adjoinRoot(ZZdFactorizationMap,RingElement)
  • adjoinRoot(ZZdFactorizationMap,Symbol)

For the programmer

The object adjoinRoot is a method function.


The source of this document is in MatrixFactorizations/MatrixFactorizationsDOC.m2:5422:0.