incr-set prlevel 1
if #0=2 START
incr-set prlevel -1
;;; Usage:
;;;     <l_from_dual I' I
;;;
;;; Compute the ideal I which is dual to the inverse system I'.
;;; I' is generated by the dual polynomials of the 1xn matrix I'.
incr-set prlevel 1
jump END
;;; Parameters:
;;;    I' = 1xn matrix, over a base ring S.
;;;
;;; Output values:
;;;    I  = 1xm matrix, over the same base ring S.
;;;
;;; Let R be the localization of S at the homogeneous maximal ideal.
;;; Let E be the R-module generated by {1/x^A}, for all monomials x^A, with
;;; R action defined by x^A.(1/x^B) = 0 (if A-B has a positive component)
;;;                                   1/x^(B-A) otherwise.
;;; E is the injective envelope of the base field k in R.  It is not
;;; finitely generated.
;;;
;;; Given an ideal I of R, its inverse system I' is defined to be
;;;    Hom_R(R/I, E)
;;; which is naturally identified as a submodule of E.
;;; If R/I is Artinian, then I' is finitely generated.  If
;;; I' is finitely generated, then R/I is Artinian.
;;;
;;; Similarly, given a submodule I' of E, define an ideal I of R by
;;;    I = {g in R : g.h = 0, for all h in I'} = Ann I'
;;;
;;; Caveats:  The base ring S should not be a quotient ring.
;;;
; last modified 5/23/89 MES
START:
     
col-degs #1 @degs
max @degs @d
int @d @d+1
     
setring #1
<l_dual0 @d @J @dual
contract #1 @dual @I''
     
qring @J @s
fetch @I'' @I''
     
; at this point @I'' should be a column vector.
; so now we homogenize, and compute the annihilator of this column.
     
<l_homog0 @I'' t[-100] @J
res @J @ann 2
     
stdpart @ann.2 @q ! t[-100]
present-ring @J @Rt
setring @Rt
fetch @q @q
concat @q @Rt
setdegs @q  ; clean up the degrees of q.
    ;
    ;
     
; the following computes a minimal set of generators for the desired ideal.
; this could be omitted if desired.
     
<l_minimal0 @q @qmin
imap @f @q #1
    t[-100] 1
    ;
ev @f @qmin #2
     
kill @degs @d @J @dual @I'' @s @ann @Rt @q @qmin @f
     
END:
incr-set prlevel -1
     
$;;;;;;;; EXAMPLE SECTION ;;;;;;;;;;;;;;;;;;;;;;;;;
     
<l_from_dual
<ring 3 xyz r
ideal j
    2
    x3-y2z-x
    xz2-y2-x
<l_from_dual j j'
listvars
