is an ideal or ring, it is regarded as a module in the evident way.
i1 : R = ZZ/32003[a..d];
|
i2 : I = monomialCurveIdeal(R,{1,3,4})
3 2 2 2 3 2
o2 = ideal (b*c - a*d, c - b*d , a*c - b d, b - a c)
o2 : Ideal of R
|
i3 : M = R^1/I
o3 = cokernel | bc-ad c3-bd2 ac2-b2d b3-a2c |
1
o3 : R-module, quotient of R
|
i4 : Ext^1(M,R)
-- ker (10) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (10) returned CacheFunction: -*a cache function*-
-- ker (10) called with Matrix: 0
-- 4
-- ker (10) returned Module: R
assert( ker(map(R^0,R^{{4}, {4}, {4}, {4}},0)) === (R^{{4}, {4}, {4}, {4}}))
-- ker (11) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (11) returned CacheFunction: -*a cache function*-
-- ker (11) called with Matrix: 0
-- 4
-- ker (11) returned Module: R
assert( ker(map(R^0,R^{{2}, {3}, {3}, {3}},0)) === (R^{{2}, {3}, {3}, {3}}))
-- ker (12) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (12) returned CacheFunction: -*a cache function*-
-- ker (12) called with Matrix: 0
-- 1
-- ker (12) returned Module: R
assert( ker(map(R^0,R^1,0)) === (R^1))
o4 = 0
o4 : R-module
|
i5 : Ext^2(M,R)
-- ker (13) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (13) returned CacheFunction: -*a cache function*-
-- ker (13) called with Matrix: 0
-- 1
-- ker (13) returned Module: R
assert( ker(map(R^0,R^{{5}},0)) === (R^{{5}}))
-- ker (14) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (14) returned CacheFunction: -*a cache function*-
-- ker (14) called with Matrix: 0
-- 4
-- ker (14) returned Module: R
assert( ker(map(R^0,R^{{4}, {4}, {4}, {4}},0)) === (R^{{4}, {4}, {4}, {4}}))
-- ker (15) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (15) returned CacheFunction: -*a cache function*-
-- ker (15) called with Matrix: 0
-- 4
-- ker (15) returned Module: R
assert( ker(map(R^0,R^{{2}, {3}, {3}, {3}},0)) === (R^{{2}, {3}, {3}, {3}}))
o5 = cokernel {-3} | c a 0 b 0 |
{-3} | -d -b c 0 a |
{-3} | 0 0 d c b |
3
o5 : R-module, quotient of R
|
i6 : Ext^3(M,R)
-- ker (16) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (16) returned CacheFunction: -*a cache function*-
-- ker (16) called with Matrix: 0
-- 1
-- ker (16) returned Module: R
assert( ker(map(R^0,R^{{5}},0)) === (R^{{5}}))
-- ker (17) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (17) returned CacheFunction: -*a cache function*-
-- ker (17) called with Matrix: 0
-- 4
-- ker (17) returned Module: R
assert( ker(map(R^0,R^{{4}, {4}, {4}, {4}},0)) === (R^{{4}, {4}, {4}, {4}}))
o6 = cokernel {-5} | d c b a |
1
o6 : R-module, quotient of R
|
i7 : Ext^1(I,R)
-- ker (18) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (18) returned CacheFunction: -*a cache function*-
-- ker (18) called with Matrix: 0
-- 1
-- ker (18) returned Module: R
assert( ker(map(R^0,R^{{5}},0)) === (R^{{5}}))
-- ker (19) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (19) returned CacheFunction: -*a cache function*-
-- ker (19) called with Matrix: 0
-- 4
-- ker (19) returned Module: R
assert( ker(map(R^0,R^{{4}, {4}, {4}, {4}},0)) === (R^{{4}, {4}, {4}, {4}}))
-- ker (20) called with OptionTable: OptionTable{SubringLimit => infinity}
-- ker (20) returned CacheFunction: -*a cache function*-
-- ker (20) called with Matrix: 0
-- 4
-- ker (20) returned Module: R
assert( ker(map(R^0,R^{{2}, {3}, {3}, {3}},0)) === (R^{{2}, {3}, {3}, {3}}))
o7 = cokernel {-3} | c 0 -d 0 -b |
{-3} | b c 0 a 0 |
{-3} | 0 d c b a |
3
o7 : R-module, quotient of R
|
As an efficiency consideration, it is generally much more efficient to compute Ext^i(R^1/I,N) rather than Ext^(i-1)(I,N). The latter first computes a presentation of the ideal I, and then a free resolution of that. For many examples, the difference in time and space required can be very large.