1% Test file for XIDEAL package (Groebner bases for exterior algebra) 2 3% Declare EXCALC variables 4 5pform {x,y,z,t}=0,f(i)=1,{u,u(i),u(i,j)}=0; 6 7 8 9 10% Reductions with xmodideal (all should be zero) 11 12d x^d y xmodideal {d x - d y}; 13 14 150 16 17d x^d y^d z xmodideal {d x^d y - d z^d t}; 18 19 200 21 22d x^d z^d t xmodideal {d x^d y - d z^d t}; 23 24 250 26 27f(2)^d x^d y xmodideal {d t^f(1) - f(2)^f(3), 28 f(3)^f(1) - d x^d y}; 29 30 310 32 33d t^f(1)^d z xmodideal {d t^f(1) - f(2)^f(3), 34 f(1)^d z - d x^d y, 35 d t^d y - d x^f(2)}; 36 37 380 39 40f(3)^f(4)^f(5)^f(6) 41 xmodideal {f(1)^f(2) + f(3)^f(4) + f(5)^f(6)}; 42 43 440 45 46f(1)^f(4)^f(5)^f(6) 47 xmodideal {f(1)^f(2) + f(2)^f(3) + f(3)^f(4) 48 + f(4)^f(5) + f(5)^f(6)}; 49 50 510 52 53d x^d y^d z xmodideal {x**2+y**2+z**2-1,x*d x+y*d y+z*d z}; 54 55 560 57 58 59 60% Changing the division between exterior variables and parameters 61 62xideal {a*d x+y*d y}; 63 64 65 d x*a + d y*y 66{---------------} 67 a 68 69xvars {a}; 70 71 72xideal {a*d x+y*d y}; 73 74 75{d x*a + d y*y,d x^d y} 76 77xideal({a*d x+y*d y},{a,y}); 78 79 80{d x*a + d y*y, 81 82 d x^d y*y} 83 84xvars {}; 85 86 % all 0-forms are coefficients 87excoeffs(d u - (a*p - q)*d y); 88 89 90{1, - a*p + q} 91 92exvars(d u - (a*p - q)*d y); 93 94 95{d u,d y} 96 97xvars {p,q}; 98 99 % p,q are no longer coefficients 100excoeffs(d u - (a*p - q)*d y); 101 102 103{ - a,1,1} 104 105exvars(d u - (a*p - q)*d y); 106 107 108{d y*p,d y*q,d u} 109 110xvars nil; 111 112 113 114 115% Exterior system for heat equation on 1st jet bundle 116 117S := {d u - u(-t)*d t - u(-x)*d x, 118 d u(-t)^d t + d u(-x)^d x, 119 d u(-x)^d t - u(-t)*d x^d t}; 120 121 122s := { - d t*u + d u - d x*u , 123 t x 124 125 - (d t^d u + d x^d u ), 126 t x 127 128 u *d t^d x - d t^d u } 129 t x 130 131 132% Check that it's closed. 133 134dS := d S xmodideal S; 135 136 137ds := {} 138 139 140 141% Exterior system for a Monge-Ampere equation 142 143korder d u(-y,-y),d u(-x,-y),d u(-x,-x),d u(-y),d u(-x),d u; 144 145 146M := {u(-x,-x)*u(-y,-y) - u(-x,-y)**2, 147 d u - u(-x)*d x - u(-y)*d y, 148 d u(-x) - u(-x,-x)*d x - u(-x,-y)*d y, 149 d u(-y) - u(-x,-y)*d x - u(-y,-y)*d y}$ 150 151 152 153% Get the full Groebner basis 154 155gbdeg := xideal M; 156 157 158 2 159gbdeg := {u *u - (u ) , 160 x x y y x y 161 162 d u - d x*u - d y*u , 163 x y 164 165 d u - d x*u - d y*u , 166 x x x x y 167 168 d u - d x*u - d y*u } 169 y x y y y 170 171 172% Changing the term ordering can be dramatic 173 174xorder gradlex; 175 176 177gradlex 178 179gbgrad := xideal M; 180 181 182 2 183gbgrad := {u *u - (u ) , 184 x x y y x y 185 186 - d u + d x*u + d y*u , 187 x y 188 189 - d u + d x*u + d y*u , 190 y x y y y 191 192 - d u + d x*u + d y*u , 193 x x x x y 194 195 d u ^d x + d u ^d y, 196 x y 197 198 - d u *u + d u *u , 199 x y y y x y 200 201 - d u *u + d u *u , 202 x x y y x x 203 204 d u ^d u , 205 y x 206 207 d u *u - d u*u + d y*u *u - d y*u *u , 208 y x x y x y y x y y 209 210 d u *u - d u*u + d y*u *u - d y*u *u , 211 x x x x x x y x y x 212 213 u *d x^d y + d u^d x, 214 y 215 216 u *d x^d y + d u ^d x, 217 y y y 218 219 d u^d x^d y, 220 221 - u *d u^d y + u *d u ^d y - d u ^d u, 222 x y y x x 223 224 - u *d u^d y + u *d u ^d y, 225 x x x x 226 227 u *d u^d y + u *d u ^d x + d u ^d u, 228 y y y x y 229 230 d u ^d x^d y, 231 x 232 233 d u ^d u^d y, 234 x 235 236 d u ^d u^d x, 237 x 238 239 - u *d u^d x + u *d u ^d x, 240 y y y y 241 242 d u ^d u^d x} 243 y 244 245 246% But the bases are equivalent 247 248gbdeg xmod gbgrad; 249 250 251{} 252 253xorder deglex; 254 255 256deglex 257 258gbgrad xmod gbdeg; 259 260 261{} 262 263 264 265% Some Groebner bases 266 267gb := xideal {f(1)^f(2) + f(3)^f(4)}; 268 269 270 1 2 3 4 271gb := {f ^f + f ^f , 272 273 2 3 4 274 f ^f ^f , 275 276 1 3 4 277 f ^f ^f } 278 279gb := xideal {f(1)^f(2), f(1)^f(3)+f(2)^f(4)+f(5)^f(6)}; 280 281 282 1 3 2 4 5 6 283gb := {f ^f + f ^f + f ^f , 284 285 1 2 286 f ^f , 287 288 2 5 6 289 f ^f ^f , 290 291 2 3 4 3 5 6 292 f ^f ^f - f ^f ^f , 293 294 1 5 6 295 f ^f ^f , 296 297 3 4 5 6 298 f ^f ^f ^f } 299 300 301 302% Non-graded ideals 303 304% Left and right ideals are not the same 305 306d t^(d z+d x^d y) xmodideal {d z+d x^d y}; 307 308 3090 310 311(d z+d x^d y)^d t xmodideal {d z+d x^d y}; 312 313 314 - 2*d t^d z 315 316 317% Higher order forms can now reduce lower order ones 318 319d x xmodideal {d y^d z + d x,d x^d y + d z}; 320 321 3220 323 324 325% Anything whose even part is a parameter generates the trivial ideal!! 326 327gb := xideal({x + d y},{}); 328 329 330gb := {1} 331 332gb := xideal {1 + f(1) + f(1)^f(2) + f(2)^f(3)^f(4) + f(3)^f(4)^f(5)^f(6)}; 333 334 335gb := {1} 336 337xvars nil; 338 339 340 341 342% Tracing Groebner basis calculations 343 344on trxideal; 345 346 347gb := xideal {x-y+y*d x-x*d y}; 348 349 350Input Basis 351 352xpoly(1)= - x^d y + d x^y + x - y 353 354 355New Basis 356 357xpoly(1)=x^d y - d x^y - x + y 358 359 360wedge_pair{d y,1} -> xpoly(2)=d x^y^d y - x^d y + y^d y 361 362spoly_pair{2,1} -> xpoly(3)=x^x - 2*x^y + y^y 363 364spoly_pair{1,3} -> xpoly(4)=x^d x^y - 2*x^y^d y + y^y^d y + x^x - x^y 365 366spoly_pair{4,3} -> 0 367 368spoly_pair{4,1} -> 0 369 370spoly_pair{2,4} -> criterion 1 hit 371 372wedge_pair{d x,4} -> 0 373 374wedge_pair{d x,2} -> xpoly(5)=x^d x - x^d y - d x^y + y^d y 375 376New Basis 377 378xpoly(1)=x^d y - d x^y - x + y 379 380 381xpoly(2)=d x^y^d y - x^d y + y^d y 382 383 384xpoly(3)=x^x - 2*x^y + y^y 385 386 387xpoly(4)=x^d x - x^d y - d x^y + y^d y 388 389 390spoly_pair{4,3} -> 0 391 392spoly_pair{4,1} -> 0 393 394spoly_pair{2,4} -> criterion 1 hit 395 396wedge_pair{d x,4} -> 0 397 398 2 2 399gb := {x - 2*x*y + y , 400 401 - d x*y + d y*x - x + y, 402 403 d x*x - 2*d x*y + d y*y - x + y, 404 405 - d x*y + d y*y + d x^d y*y - x + y} 406 407off trxideal; 408 409 410 411 412% Same thing in lexicographic order, without full reduction 413 414xorder lex; 415 416 417lex 418 419off xfullreduce; 420 421 422gblex := xideal {x-y+y*d x-x*d y}; 423 424 425gblex := {d x*y - d y*y - d x^d y*y + x - y, 426 427 d x*y - d y*x + x - y} 428 429 430% Manual autoreduction 431 432gblex := xauto gblex; 433 434 435gblex := {d x*y - d y*y - d x^d y*y + x - y} 436 437 438 439% Tracing reduction 440 441on trxmod; 442 443 444first gb xmod gblex; 445 446x^x - 2*x^y + y^y = 447 448 x^(x - d x^y^d y + d x^y - y^d y - y) + 449 450 (d x^y^d y)^(x - d x^y^d y + d x^y - y^d y - y) + 451 452 ( - d x^y)^(x - d x^y^d y + d x^y - y^d y - y) + 453 454 (y^d y)^(x - d x^y^d y + d x^y - y^d y - y) + 455 456 ( - y)^(x - d x^y^d y + d x^y - y^d y - y) + 457 458 0 459 4600 461 462 463 464% Restore defaults 465 466on xfullreduce; 467 468 469off trxideal,trxmod; 470 471 472xvars nil; 473 474 475xorder deglex; 476 477 478deglex 479 480 481 482end; 483 484Tested on x86_64-pc-windows CSL 485Time (counter 1): 16 ms 486 487End of Lisp run after 0.01+0.06 seconds 488real 0.21 489user 0.01 490sys 0.04 491