Given an object, for instance an ideal IP, over a local ring (RP, P), this method returns the preimage of that object under the cannonical map R -> RP after clearing denominators of IP.
For matrices (hence most other objects as well), clearing denominators is performed columnwise.
In conjunction with pruneComplex, liftUp is used to implement many of the elementary operations over local rings such as syz.
Here is an example of computing the syzygy over a local ring using liftUp and pruneComplex:
i1 : R = ZZ/32003[vars(0..5)]; |
i2 : I = ideal"abc-def,ab2-cd2-c,-b3+acd"; o2 : Ideal of R |
i3 : C = res I; |
i4 : M = ideal gens R; o4 : Ideal of R |
i5 : RM = localRing(R, M); |
i6 : F = C.dd_2; 4 6 o6 : Matrix R <--- R |
i7 : FM = F ** RM o7 = {3} | 0 0 -b3+acd -abc+def 0 a2c2-b2ef | {3} | cef ac2 ab2-cd2-c 0 abc-def -ac2d+abef | {3} | -ac2 -b2c 0 ab2-cd2-c -b3+acd -a2bc+b2cd | {5} | b d 0 0 0 1 | 4 6 o7 : Matrix RM <--- RM |
This is the process for finding the syzygy of FM:
i8 : f = liftUp FM; 4 6 o8 : Matrix R <--- R |
i9 : g = syz f; 6 5 o9 : Matrix R <--- R |
i10 : h = syz g; 5 2 o10 : Matrix R <--- R |
i11 : C = {g ** RM, h ** RM}; |
Now we prune the map h, which is the first map from the right:
i12 : C = first pruneComplex(C, 1, Direction => "right"); |
i13 : g' = C#0; |
Scale each row with the common denominator of the corresponding column in FM:
i14 : N = transpose entries FM; |
i15 : for i from 0 to numcols FM - 1 do rowMult(g', i, N_i/denominator//lcm); |
The syzygy of FM is:
i16 : GM = map(source FM, , matrix g') o16 = {6} | -d d2+1 0 | {6} | b -bd -1 | {6} | 0 ef -ac | {6} | 0 -ac b2 | {6} | -c 0 ab | {7} | 0 -b d | 6 3 o16 : Matrix RM <--- RM |
i17 : kernel FM == image GM o17 = true |
This is NOT the same as lift. Not tested with quotients properly.
The object liftUp is a method function.