##### 7.5.12.0. ncfactor

Procedure from library `ncfactor.lib` (see ncfactor_lib).

Usage:
  ncfactor(h); h is a polynomial in a non-commutative polynomial algebra over a field k.

Return:
  list(list)

Purpose:
  Compute all factorizations of h.

Theory:
  Implements an ansatz-driven factorization method as outlined by Bell, Heinle and Levandovskyy in "On Noncommutative Finite Factorization Domains".

Assume:
  - k is a ring, such that factorize can factor any univariate and multivariate commutative polynomial over k.
  - There exists at least one variable in the ring.

Note:
  - works for both PLURAL and LETTERPLACE subsystems
  - Every entry of the output list is a list with factors for one possible factorization. The first factor is always a constant (1, if no nontrivial constant could be excluded).

Example:

    LIB "ncfactor.lib";
    // first, an example with PLURAL
    def R = makeUsl2();
    setring(R);
    poly p = e^3*f+e^2*f^2-e^3+e^2*f+2*e*f^2-3*e^2*h-2*e*f*h-8*e^2
    +e*f+f^2-4*e*h-2*f*h-7*e+f-h;
    ncfactor(p);
    ==> [1]:
    ==>    [1]:
    ==> 1
    ==>    [2]:
    ==>       e+1
    ==>    [3]:
    ==>       ef-e+f-2h-3
    ==>    [4]:
    ==>       e+f
    ==> [2]:
    ==>    [1]:
    ==> 1
    ==>    [2]:
    ==>       e2f+ef2-e2+f2-2eh-3e-f-2h
    ==>    [3]:
    ==>       e+1
    kill R;
    // an example with LETTERPLACE
    LIB "freegb.lib";
    ==> // ** redefining tstfreegb (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining tstfreegb (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining setLetterplaceAttributes (LIB "freegb.lib";) ./examples/\
       ncfactor.sing:10
    ==> // ** redefining setLetterplaceAttributes (LIB "freegb.lib";) ./examples/\
       ncfactor.sing:10
    ==> // ** redefining lst2str (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining mod2str (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining vct2str (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining isVar (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining letplaceGBasis (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining letplaceGBasis (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining lieBracket (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lieBracket (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lpPrint (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpPrint (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining freeGBasis (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining freeGBasis (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining crs (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining polylen (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpDegBound (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lpDegBound (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lpVarBlockSize (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining lpVarBlockSize (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining isFreeAlgebra (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining isFreeAlgebra (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining lpNcgenCount (LIB "freegb.lib";) ./examples/ncfactor.sin\
       g:10
    ==> // ** redefining lpNcgenCount (LIB "freegb.lib";) ./examples/ncfactor.sin\
       g:10
    ==> // ** redefining makeLetterplaceRing (LIB "freegb.lib";) ./examples/ncfac\
       tor.sing:10
    ==> // ** redefining makeLetterplaceRing (LIB "freegb.lib";) ./examples/ncfac\
       tor.sing:10
    ==> // ** redefining makeLetterplaceRing1 (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining makeLetterplaceRing2 (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining makeLetterplaceRing4 (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining makeLetterplaceRing3 (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining freegbold (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining stringpoly2lplace (LIB "freegb.lib";) ./examples/ncfacto\
       r.sing:10
    ==> // ** redefining addplaces (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining sent2lplace (LIB "freegb.lib";) ./examples/ncfactor.sing\
       :10
    ==> // ** redefining testnumber (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining str2lplace (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining strpower2rep (LIB "freegb.lib";) ./examples/ncfactor.sin\
       g:10
    ==> // ** redefining shiftPoly (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining lastBlock (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining test_shift (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lp2lstr (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lp2lstr (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining strList2poly (LIB "freegb.lib";) ./examples/ncfactor.sin\
       g:10
    ==> // ** redefining file2lplace (LIB "freegb.lib";) ./examples/ncfactor.sing\
       :10
    ==> // ** redefining lpPower (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpNF (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpNF (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpDivision (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lpDivision (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining lpGBPres2Poly (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining lpGBPres2Poly (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining getExpVecs (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining delSupZero (LIB "freegb.lib";) ./examples/ncfactor.sing:\
       10
    ==> // ** redefining delSupZeroList (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining makeDVec (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining makeDVecL (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining makeDVecI (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining dShiftDiv (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining lpNormalForm1 (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining lpNormalForm2 (LIB "freegb.lib";) ./examples/ncfactor.si\
       ng:10
    ==> // ** redefining isOrderingShiftInvariant (LIB "freegb.lib";) ./examples/\
       ncfactor.sing:10
    ==> // ** redefining isOrderingShiftInvariant (LIB "freegb.lib";) ./examples/\
       ncfactor.sing:10
    ==> // ** redefining lpMonomialsWithHoles (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining getlpCoeffs (LIB "freegb.lib";) ./examples/ncfactor.sing\
       :10
    ==> // ** redefining lpReduce (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining entryViolation (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining checkAssumptionsLPIV (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining checkAssumptions (LIB "freegb.lib";) ./examples/ncfactor\
       .sing:10
    ==> // ** redefining checkLPRing (LIB "freegb.lib";) ./examples/ncfactor.sing\
       :10
    ==> // ** redefining checkAssumptionIdeal (LIB "freegb.lib";) ./examples/ncfa\
       ctor.sing:10
    ==> // ** redefining checkAssumptionPoly (LIB "freegb.lib";) ./examples/ncfac\
       tor.sing:10
    ==> // ** redefining isContainedInVp (LIB "freegb.lib";) ./examples/ncfactor.\
       sing:10
    ==> // ** redefining extractLinearPart (LIB "freegb.lib";) ./examples/ncfacto\
       r.sing:10
    ==> // ** redefining isLinearVector (LIB "freegb.lib";) ./examples/ncfactor.s\
       ing:10
    ==> // ** redefining lpAssumeViolation (LIB "freegb.lib";) ./examples/ncfacto\
       r.sing:10
    ==> // ** redefining skip0 (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining ivL2lpI (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining ivL2lpI (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining iv2lp (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining iv2lp (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining iv2lpList (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining iv2lpList (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining iv2lpMat (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining iv2lpMat (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lpId2ivLi (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining lpId2ivLi (LIB "freegb.lib";) ./examples/ncfactor.sing:1\
       0
    ==> // ** redefining lp2iv (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lp2iv (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lp2ivId (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining lp2ivId (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining testLift (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining testLift (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining testSyz (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining testSyz (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ==> // ** redefining mod_init (LIB "freegb.lib";) ./examples/ncfactor.sing:10
    ring r = 0,(x,y),Dp;
    def R = freeAlgebra(r,5); setring(R);
    poly p = x*y*x - x;
    ncfactor(p);
    ==> [1]:
    ==>    [1]:
    ==> 1
    ==>    [2]:
    ==>       x*y-1
    ==>    [3]:
    ==>       x
    ==> [2]:
    ==>    [1]:
    ==> 1
    ==>    [2]:
    ==>       x
    ==>    [3]:
    ==>       y*x-1

See also: facSubWeyl; facWeyl; testNCfac.

User manual for Singular version 4.4.1, 2025, generated by texi2html.