Let $(A,\mathfrak{m})$ be a local Artinian ring with
finite residue field, which I'm happy to assume is $\mathbf{F}\_3$.
(In particular, $A$ has finitely many elements.)


I would like to do some computations of the following kind, as $I$ ranges over
all of the ideals of $A$.


(0) A way to enumerate all the ideals of $A$.


(1) For an ideal $I$ of $A$, compute the length of $I/I^2$.


(2) For an ideal $I$ of $A$, compute the ideal $J = \mathrm{Ann}(I)$.


(3) For an ideal $I$ of $A$, decide if $I$ is principal. (By computing the length of
$I/\mathfrak{m} I$ or otherwise.)


The ring $A$ itself will be given explicitly as a quotient of a power series
ring over $W(\mathbf{F}\_3) = \mathbf{Z}\_3$. For example, $A$ might be
given as $\mathbf{Z}\_3[[x]]/(27,9x,x^3)$ or $\mathbf{Z}\_3[[x]]/(9,x^2)$.


My question: What is the computer algebra package that is best suited to carry
out these computations? (I would like something that can be semi-automated for various possible $A$.) I would be interested in even a very simple one like $\mathbf{Z}\_3[[x]]/(9,x^2)$


EDIT 2: There seems to be a consensus in the comments that this problem is significantly more manageable if $A$ is actually an algebra over its residue field. For example, in MAGMA, it is only possible to create ideals and quotient rings in univariate polynomial rings over fields. Other computer algebra packages have similar issues when the coefficient ring is not a field, although SINGULAR (for example) has some functionality with polynomials in several variables. As it happens, the problem I was interested in studying is still of interest for such fields.



Computational Question about finite local rings: 
This is fleshed out from comments of Sam Lichtenstein; Some (or all) of what I have written is surely not the most elegant programming (at best), feel free to improve. One can do the following with MACAULAY2 (if you copy and paste this into the MACAULAY2 prompt it should work:) 


`R = GF(2)[x,y]/(x^3,y^3);  

m = ideal(x,y);  

ModSquare = ideal -> length(ideal/(ideal*ideal));  

Generators = ideal -> length(ideal/(ideal*m));  

I := ideal(x^2 + y^2);  

J := ann(I);  

[Generators(I),Generators(J),ModSquare(I),ModSquare(J)]` 


The function ModSquare applied to an ideal $I$ computes the length of $I/I^2$, and
the function Generators computes the minimal number of generators of $I$. Similarly, ann computes the annihilator of $I$. From this we may compute that $I$ is principal, $J$ has two generators, and both $I/I^2$ and $J/J^2$ have length $4$. These functions only work for homogenous ideals. Following James Parson's suggestion, I also considered MAGMA (again with the restriction to affine algebras), and the following works for arbitrary ideals:


`A:=AffineAlgebra`<`GF(2),x,y|x^3,y^3`>`; x:=A.1; y:=A.2; AssignNames(~A,["x","y"]);  

m:=ideal`<`A|x,y`>`;  

Minus := func`<`ideal | Dimension(quo`<`A|ideal`>`)`>`;  

Generators := func`<`ideal | Minus(ideal*m) - Minus(ideal)`>`;  

ModSquare := func`<`ideal | Minus(ideal*ideal) - Minus(ideal)`>`;  

ann := func`<`ideal | Annihilator(ideal)`>`;  

I:=ideal<A|x^2+y^2>;  

J:=ann(I);  

[Generators(I),Generators(J),ModSquare(I),ModSquare(J)];`


