Changeset a3cc8cd in git
- Timestamp:
- Jul 7, 2015, 12:09:21 PM (8 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 4d5a3e157624291163b8d41cd28737b69b220cd4
- Parents:
- ae0188e380f485df33ffbd07d75eaca52206add7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/GBEngine/kutil.cc
rae0188 ra3cc8cd 8731 8731 poly preIntegerCheck(ideal FOrig, ideal Q) 8732 8732 { 8733 assume(nCoeff_is_Ring_Z(currRing->cf)); 8734 if(!nCoeff_is_Ring_Z(currRing->cf)) 8735 return NULL; 8733 8736 ideal F = idCopy(FOrig); 8734 8737 idSkipZeroes(F); 8735 8738 poly pmon; 8736 if(nCoeff_is_Ring_Z(currRing->cf)) 8737 { 8738 ring origR = currRing; 8739 ideal monred = idInit(1,1); 8740 for(int i=0; i<idElem(F); i++) 8741 { 8742 if(pNext(F->m[i]) == NULL) 8743 idInsertPoly(monred, F->m[i]); 8744 } 8745 int posconst = idPosConstant(F); 8746 if((posconst != -1) && (!nIsZero(F->m[posconst]->coef))) 8747 { 8748 pmon = pCopy(F->m[posconst]); 8749 return pmon; 8750 } 8751 int idelemQ = 0; 8752 if(Q!=NULL) 8753 { 8754 idelemQ = IDELEMS(Q); 8755 for(int i=0; i<idelemQ; i++) 8756 { 8757 if(pNext(Q->m[i]) == NULL) 8758 idInsertPoly(monred, Q->m[i]); 8759 } 8760 idSkipZeroes(monred); 8761 posconst = idPosConstant(monred); 8762 //the constant, if found, will be from Q 8763 if((posconst != -1) && (!nIsZero(monred->m[posconst]->coef))) 8764 { 8765 pmon = pCopy(monred->m[posconst]); 8766 return pmon; 8767 } 8768 } 8769 ring QQ_ring = rCopy0(currRing,FALSE); 8770 nKillChar(QQ_ring->cf); 8771 QQ_ring->cf = nInitChar(n_Q, NULL); 8772 rComplete(QQ_ring,1); 8773 QQ_ring = rAssure_c_dp(QQ_ring); 8774 rChangeCurrRing(QQ_ring); 8775 nMapFunc nMap = n_SetMap(origR->cf, QQ_ring->cf); 8776 ideal II = idInit(IDELEMS(F)+idelemQ+2,id_RankFreeModule(F, origR)); 8777 for(int i = 0, j = 0; i<IDELEMS(F); i++) 8778 II->m[j++] = prMapR(F->m[i], nMap, origR, QQ_ring); 8779 for(int i = 0, j = IDELEMS(F); i<idelemQ; i++) 8780 II->m[j++] = prMapR(Q->m[i], nMap, origR, QQ_ring); 8781 ideal one = kStd(II, NULL, isNotHomog, NULL); 8782 idSkipZeroes(one); 8783 if(idIsConstant(one)) 8784 { 8785 //one should be <1> 8786 for(int i = IDELEMS(II)-1; i>=0; i--) 8787 if(II->m[i] != NULL) 8788 II->m[i+1] = II->m[i]; 8789 II->m[0] = pOne(); 8790 ideal syz = idSyzygies(II, isNotHomog, NULL); 8791 poly integer = NULL; 8792 for(int i = IDELEMS(syz)-1;i>=0; i--) 8793 { 8794 if(pGetComp(syz->m[i]) == 1) 8795 { 8796 if(pIsConstant(syz->m[i])) 8797 { 8798 integer = pHead(syz->m[i]); 8799 pSetComp(integer, 0); 8800 break; 8801 } 8802 } 8803 } 8804 rChangeCurrRing(origR); 8805 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8806 pmon = prMapR(integer, nMap2, QQ_ring, origR); 8807 rDelete(QQ_ring); 8808 return pmon; 8739 ring origR = currRing; 8740 ideal monred = idInit(1,1); 8741 for(int i=0; i<idElem(F); i++) 8742 { 8743 if(pNext(F->m[i]) == NULL) 8744 idInsertPoly(monred, F->m[i]); 8745 } 8746 int posconst = idPosConstant(F); 8747 if((posconst != -1) && (!nIsZero(F->m[posconst]->coef))) 8748 { 8749 pmon = pCopy(F->m[posconst]); 8750 idDelete(&F); 8751 idDelete(&monred); 8752 return pmon; 8753 } 8754 int idelemQ = 0; 8755 if(Q!=NULL) 8756 { 8757 idelemQ = IDELEMS(Q); 8758 for(int i=0; i<idelemQ; i++) 8759 { 8760 if(pNext(Q->m[i]) == NULL) 8761 idInsertPoly(monred, Q->m[i]); 8762 } 8763 idSkipZeroes(monred); 8764 posconst = idPosConstant(monred); 8765 //the constant, if found, will be from Q 8766 if((posconst != -1) && (!nIsZero(monred->m[posconst]->coef))) 8767 { 8768 pmon = pCopy(monred->m[posconst]); 8769 idDelete(&F); 8770 idDelete(&monred); 8771 return pmon; 8772 } 8773 } 8774 ring QQ_ring = rCopy0(currRing,FALSE); 8775 nKillChar(QQ_ring->cf); 8776 QQ_ring->cf = nInitChar(n_Q, NULL); 8777 rComplete(QQ_ring,1); 8778 QQ_ring = rAssure_c_dp(QQ_ring); 8779 rChangeCurrRing(QQ_ring); 8780 nMapFunc nMap = n_SetMap(origR->cf, QQ_ring->cf); 8781 ideal II = idInit(IDELEMS(F)+idelemQ+2,id_RankFreeModule(F, origR)); 8782 for(int i = 0, j = 0; i<IDELEMS(F); i++) 8783 II->m[j++] = prMapR(F->m[i], nMap, origR, QQ_ring); 8784 for(int i = 0, j = IDELEMS(F); i<idelemQ; i++) 8785 II->m[j++] = prMapR(Q->m[i], nMap, origR, QQ_ring); 8786 ideal one = kStd(II, NULL, isNotHomog, NULL); 8787 idSkipZeroes(one); 8788 if(idIsConstant(one)) 8789 { 8790 //one should be <1> 8791 for(int i = IDELEMS(II)-1; i>=0; i--) 8792 if(II->m[i] != NULL) 8793 II->m[i+1] = II->m[i]; 8794 II->m[0] = pOne(); 8795 ideal syz = idSyzygies(II, isNotHomog, NULL); 8796 poly integer = NULL; 8797 for(int i = IDELEMS(syz)-1;i>=0; i--) 8798 { 8799 if(pGetComp(syz->m[i]) == 1) 8800 { 8801 if(pIsConstant(syz->m[i])) 8802 { 8803 integer = pHead(syz->m[i]); 8804 pSetComp(integer, 0); 8805 break; 8806 } 8807 } 8808 } 8809 rChangeCurrRing(origR); 8810 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8811 pmon = prMapR(integer, nMap2, QQ_ring, origR); 8812 idDelete(&F); 8813 idDelete(&monred); 8814 idDelete(&II); 8815 idDelete(&one); 8816 idDelete(&syz); 8817 pDelete(&integer); 8818 rDelete(QQ_ring); 8819 return pmon; 8820 } 8821 else 8822 { 8823 if(idIs0(monred)) 8824 { 8825 poly mindegmon = NULL; 8826 for(int i = 0; i<IDELEMS(one); i++) 8827 { 8828 if(pNext(one->m[i]) == NULL) 8829 { 8830 if(mindegmon == NULL) 8831 mindegmon = one->m[i]; 8832 else 8833 { 8834 if(p_Deg(one->m[i], QQ_ring) < p_Deg(mindegmon, QQ_ring)) 8835 mindegmon = one->m[i]; 8836 } 8837 } 8838 } 8839 if(mindegmon != NULL) 8840 { 8841 for(int i = IDELEMS(II)-1; i>=0; i--) 8842 if(II->m[i] != NULL) 8843 II->m[i+1] = II->m[i]; 8844 II->m[0] = mindegmon; 8845 ideal syz = idSyzygies(II, isNotHomog, NULL); 8846 bool found = FALSE; 8847 for(int i = IDELEMS(syz)-1;i>=0; i--) 8848 { 8849 if(pGetComp(syz->m[i]) == 1) 8850 { 8851 if(pIsConstant(syz->m[i])) 8852 { 8853 pSetCoeff(mindegmon, syz->m[i]->coef); 8854 found = TRUE; 8855 break; 8856 } 8857 } 8858 } 8859 idDelete(&syz); 8860 if (found == FALSE) 8861 { 8862 rChangeCurrRing(origR); 8863 idDelete(&F); 8864 idDelete(&monred); 8865 idDelete(&II); 8866 idDelete(&one); 8867 pDelete(&mindegmon); 8868 pDelete(&pmon); 8869 rDelete(QQ_ring); 8870 return NULL; 8871 } 8872 rChangeCurrRing(origR); 8873 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8874 pmon = prMapR(mindegmon, nMap2, QQ_ring, origR); 8875 idDelete(&F); 8876 idDelete(&monred); 8877 idDelete(&II); 8878 idDelete(&one); 8879 idDelete(&syz); 8880 pDelete(&mindegmon); 8881 rDelete(QQ_ring); 8882 return pmon; 8883 } 8884 else 8885 rChangeCurrRing(origR); 8886 pDelete(&mindegmon); 8809 8887 } 8810 8888 else 8811 { 8812 if(idIs0(monred)) 8813 { 8814 poly mindegmon = NULL; 8815 for(int i = 0; i<IDELEMS(one); i++) 8816 { 8817 if(pNext(one->m[i]) == NULL) 8818 { 8819 if(mindegmon == NULL) 8820 mindegmon = one->m[i]; 8821 else 8822 { 8823 if(p_Deg(one->m[i], QQ_ring) < p_Deg(mindegmon, QQ_ring)) 8824 mindegmon = one->m[i]; 8825 } 8826 } 8827 } 8828 if(mindegmon != NULL) 8829 { 8830 for(int i = IDELEMS(II)-1; i>=0; i--) 8831 if(II->m[i] != NULL) 8832 II->m[i+1] = II->m[i]; 8833 II->m[0] = mindegmon; 8834 ideal syz = idSyzygies(II, isNotHomog, NULL); 8835 bool found = FALSE; 8836 for(int i = IDELEMS(syz)-1;i>=0; i--) 8837 { 8838 if(pGetComp(syz->m[i]) == 1) 8839 { 8840 if(pIsConstant(syz->m[i])) 8841 { 8842 pSetCoeff(mindegmon, syz->m[i]->coef); 8843 found = TRUE; 8844 break; 8845 } 8846 } 8847 } 8848 if (found == FALSE) 8849 { 8850 rChangeCurrRing(origR); 8851 rDelete(QQ_ring); 8852 return NULL; 8853 } 8854 rChangeCurrRing(origR); 8855 nMapFunc nMap2 = n_SetMap(QQ_ring->cf, origR->cf); 8856 pmon = prMapR(mindegmon, nMap2, QQ_ring, origR); 8857 rDelete(QQ_ring); 8858 return pmon; 8859 } 8860 else 8861 rChangeCurrRing(origR); 8862 } 8863 else 8864 rChangeCurrRing(origR); 8865 } 8866 rDelete(QQ_ring); 8867 return NULL; 8868 } 8889 rChangeCurrRing(origR); 8890 } 8891 idDelete(&F); 8892 idDelete(&monred); 8893 idDelete(&II); 8894 idDelete(&one); 8895 pDelete(&pmon); 8896 rDelete(QQ_ring); 8897 return NULL; 8869 8898 } 8870 8899 /*!
Note: See TracChangeset
for help on using the changeset viewer.