> with(linalg):
Sample Computation of Hermite Normal Form
> m:=matrix(3,3,[[1,3,4],[-1,2,4],[5,2,1]]);
> det(m);
> m:=addcol(m,1,3,-4);
> m:=addcol(m,1,2,-3);
> m:=addcol(m,2,3,-1);
> m:=addcol(m,3,2,-1);
> m:=addcol(m,2,3,-1);
> m:=addcol(m,3,2,-2);
> m:=swapcol(m,2,3);
> m:=mulrow(m,3,-1)
> ;
> m:=addcol(m,2,1,1);
> m:=addcol(m,3,1,1);
> m:=addcol(m,3,2,1);
This is Hermite Normal Form: Lower triangular, with off diagonal entries reduced modulo diagonal ones.