[16f511] | 1 | #ifdef HAVE_CONFIG_H |
---|
[ba5e9e] | 2 | #include "singularconfig.h" |
---|
[16f511] | 3 | #endif /* HAVE_CONFIG_H */ |
---|
[e044528] | 4 | #include "mod2.h" |
---|
| 5 | |
---|
| 6 | #include <omalloc/omalloc.h> |
---|
| 7 | #include <misc/auxiliary.h> |
---|
| 8 | |
---|
| 9 | #include "polys.h" |
---|
| 10 | |
---|
| 11 | |
---|
[a50dd10] | 12 | /* Returns TRUE if |
---|
| 13 | * LM(p) | LM(lcm) |
---|
| 14 | * LC(p) | LC(lcm) only if ring |
---|
| 15 | * Exists i, j: |
---|
| 16 | * LE(p, i) != LE(lcm, i) |
---|
| 17 | * LE(p1, i) != LE(lcm, i) ==> LCM(p1, p) != lcm |
---|
| 18 | * LE(p, j) != LE(lcm, j) |
---|
| 19 | * LE(p2, j) != LE(lcm, j) ==> LCM(p2, p) != lcm |
---|
| 20 | */ |
---|
[e044528] | 21 | BOOLEAN pCompareChain (poly p,poly p1,poly p2,poly lcm, const ring R) |
---|
[a50dd10] | 22 | { |
---|
| 23 | int k, j; |
---|
| 24 | |
---|
| 25 | if (lcm==NULL) return FALSE; |
---|
| 26 | |
---|
[67d4b5] | 27 | for (j=(R->N); j; j--) |
---|
| 28 | if ( p_GetExp(p,j, R) > p_GetExp(lcm,j, R)) return FALSE; |
---|
[a50dd10] | 29 | if ( pGetComp(p) != pGetComp(lcm)) return FALSE; |
---|
[67d4b5] | 30 | for (j=(R->N); j; j--) |
---|
[a50dd10] | 31 | { |
---|
[67d4b5] | 32 | if (p_GetExp(p1,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 33 | { |
---|
[67d4b5] | 34 | if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 35 | { |
---|
[67d4b5] | 36 | for (k=(R->N); k>j; k--) |
---|
[a50dd10] | 37 | { |
---|
[67d4b5] | 38 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 39 | && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 40 | return TRUE; |
---|
| 41 | } |
---|
| 42 | for (k=j-1; k; k--) |
---|
| 43 | { |
---|
[67d4b5] | 44 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 45 | && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 46 | return TRUE; |
---|
| 47 | } |
---|
| 48 | return FALSE; |
---|
| 49 | } |
---|
| 50 | } |
---|
[67d4b5] | 51 | else if (p_GetExp(p2,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 52 | { |
---|
[67d4b5] | 53 | if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 54 | { |
---|
[67d4b5] | 55 | for (k=(R->N); k>j; k--) |
---|
[a50dd10] | 56 | { |
---|
[67d4b5] | 57 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 58 | && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 59 | return TRUE; |
---|
| 60 | } |
---|
| 61 | for (k=j-1; k!=0 ; k--) |
---|
| 62 | { |
---|
[67d4b5] | 63 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 64 | && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 65 | return TRUE; |
---|
| 66 | } |
---|
| 67 | return FALSE; |
---|
| 68 | } |
---|
| 69 | } |
---|
| 70 | } |
---|
| 71 | return FALSE; |
---|
| 72 | } |
---|
| 73 | #ifdef HAVE_RATGRING |
---|
[e044528] | 74 | BOOLEAN pCompareChainPart (poly p,poly p1,poly p2,poly lcm, const ring R) |
---|
[a50dd10] | 75 | { |
---|
| 76 | int k, j; |
---|
| 77 | |
---|
| 78 | if (lcm==NULL) return FALSE; |
---|
| 79 | |
---|
[67d4b5] | 80 | for (j=R->real_var_end; j>=R->real_var_start; j--) |
---|
| 81 | if ( p_GetExp(p,j, R) > p_GetExp(lcm,j, R)) return FALSE; |
---|
[a50dd10] | 82 | if ( pGetComp(p) != pGetComp(lcm)) return FALSE; |
---|
[67d4b5] | 83 | for (j=R->real_var_end; j>=R->real_var_start; j--) |
---|
[a50dd10] | 84 | { |
---|
[67d4b5] | 85 | if (p_GetExp(p1,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 86 | { |
---|
[67d4b5] | 87 | if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 88 | { |
---|
[67d4b5] | 89 | for (k=(R->N); k>j; k--) |
---|
| 90 | for (k=R->real_var_end; k>j; k--) |
---|
[a50dd10] | 91 | { |
---|
[67d4b5] | 92 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 93 | && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 94 | return TRUE; |
---|
| 95 | } |
---|
[67d4b5] | 96 | for (k=j-1; k>=R->real_var_start; k--) |
---|
[a50dd10] | 97 | { |
---|
[67d4b5] | 98 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 99 | && (p_GetExp(p2,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 100 | return TRUE; |
---|
| 101 | } |
---|
| 102 | return FALSE; |
---|
| 103 | } |
---|
| 104 | } |
---|
[67d4b5] | 105 | else if (p_GetExp(p2,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 106 | { |
---|
[67d4b5] | 107 | if (p_GetExp(p,j, R)!=p_GetExp(lcm,j, R)) |
---|
[a50dd10] | 108 | { |
---|
[67d4b5] | 109 | for (k=R->real_var_end; k>j; k--) |
---|
[a50dd10] | 110 | { |
---|
[67d4b5] | 111 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 112 | && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 113 | return TRUE; |
---|
| 114 | } |
---|
[67d4b5] | 115 | for (k=j-1; k>=R->real_var_start; k--) |
---|
[a50dd10] | 116 | { |
---|
[67d4b5] | 117 | if ((p_GetExp(p,k, R)!=p_GetExp(lcm,k, R)) |
---|
| 118 | && (p_GetExp(p1,k, R)!=p_GetExp(lcm,k, R))) |
---|
[a50dd10] | 119 | return TRUE; |
---|
| 120 | } |
---|
| 121 | return FALSE; |
---|
| 122 | } |
---|
| 123 | } |
---|
| 124 | } |
---|
| 125 | return FALSE; |
---|
| 126 | } |
---|
| 127 | #endif |
---|
[359d86d] | 128 | |
---|