| 1421 | } |
| 1422 | |
| 1423 | void HilbertSeries_OrbitData(ideal S, int lV, bool IG_CASE, bool mgrad, bool odp, int trunDegHs) |
| 1424 | { |
| 1425 | |
| 1426 | /* new story: |
| 1427 | no lV is needed, i.e. it is to be determined |
| 1428 | the rest is extracted from the interface input list in extra.cc and makes the input of this proc |
| 1429 | called from extra.cc |
| 1430 | */ |
| 1431 | |
| 1432 | /* |
| 1433 | * This is based on iterative right colon operations on a |
| 1434 | * two-sided monomial ideal of the free associative algebra. |
| 1435 | * The algorithm terminates for those monomial ideals |
| 1436 | * whose monomials define "regular formal languages", |
| 1437 | * that is, all monomials of the input ideal can be obtained |
| 1438 | * from finite languages by applying finite number of |
| 1439 | * rational operations. |
| 1440 | */ |
| 1441 | |
| 1442 | int trInd; |
| 1443 | S = minimalMonomialGenSet(S); |
| 1444 | if( !idIs0(S) && p_Totaldegree(S->m[0], currRing)==0) |
| 1445 | { |
| 1446 | PrintS("Hilbert Series:\n 0\n"); |
| 1447 | return; |
| 1448 | } |
| 1449 | int (*POS)(ideal, poly, std::vector<ideal>, std::vector<poly>, int, int); |
| 1450 | if(trunDegHs != 0) |
| 1451 | { |
| 1452 | Print("\nTruncation degree = %d\n",trunDegHs); |
| 1453 | POS=&positionInOrbitTruncationCase; |
| 1454 | } |
| 1455 | else |
| 1456 | { |
| 1457 | if(IG_CASE) |
| 1458 | { |
| 1459 | if(idIs0(S)) |
| 1460 | { |
| 1461 | WerrorS("wrong input: it is not an infinitely gen. case"); |
| 1462 | return; |
| 1463 | } |
| 1464 | trInd = p_Totaldegree(S->m[IDELEMS(S)-1], currRing); |
| 1465 | POS = &positionInOrbit_IG_Case; |
| 1466 | } |
| 1467 | else |
| 1468 | POS = &positionInOrbit_FG_Case; |
| 1469 | } |
| 1470 | std::vector<ideal > idorb; |
| 1471 | std::vector< poly > polist; |
| 1472 | |
| 1473 | ideal orb_init = idInit(1, 1); |
| 1474 | idorb.push_back(orb_init); |
| 1475 | |
| 1476 | polist.push_back( p_One(currRing)); |
| 1477 | |
| 1478 | std::vector< std::vector<int> > posMat; |
| 1479 | std::vector<int> posRow(lV,0); |
| 1480 | std::vector<int> C; |
no test coverage detected