[back] [prev] [next] [index] [root]

 


ModuleDual

Computes the dual module of the given module.

Syntax:

M2 := ModuleDual( M1 );

modules
  M1, M2  

See also:  ModuleIntersection

Description:

The dual module is defined as M|2 = {x\in Q(O)M|1 ; Tr(x M|1) \subseteq O }. The module M|1 must be of full rank. For details see Hop1.


Example:


kash> O:=OrderMaximal(Poly(Zx,[1, 5, -6, -53, 3, 206, 244]));;
kash> IL:=List(Factor(2*O),f->f[1]);;
kash> List(IL,IdealGenerators);;
kash> EL1:=List(Factor(5*O),f->IdealGen(f[1],2));;
kash> EL2:=List(Factor(13*O),f->IdealGen(f[1],2));;
kash> EL2[3]:=IdealGen(Factor(7*O)[1][1],2);;
kash> EL3:=List(Factor(3*O),f->IdealGen(f[1],2));;
kash> EL3[3]:=IdealGen(Factor(7*O)[2][1],2);;
kash> M:=Module(IL,Mat(O,[EL1,EL2,EL3]));
{<2, [0, 2, 0, 3, 0, 2]><2, [0, 0, 3, 0, 1, 2]><2, [3, 3, 1, 2, 0, 0]>
[[12, 17, 15, 7, 9, 5] [19, 18, 15, 1, 10, 24] [4, 22, 4, 10, 23, 4]]
[[10, 8, 0, 1, 0, 0] [1, 12, 5, 1, 0, 0] [1, 1, 0, 0, 0, 0]]
[[1, 1, 0, 0, 0, 0] [1, 0, 1, 0, 0, 0] [3, 1, 0, 0, 0, 0]]
}

kash> ModuleDual(M);
> {<1, [688333593256040823590763075194430223058992998640350230425, 4157727723404\
9412961809251677, 688333593256040823590763075213190812482229202013839062953, 4\
005210759058806859873928718, 88005633548175729093569707143, 3] / 2623611238838\
6371287536615054><1 / 2><1, [0, 3, 3, 3, 0, 2] / 2>
[1 0 0]
[[10218246369603710638941628710, 0, -1, 0, 0, -1] / 2 1 0]
[[-35538667259348990574164865443, 10218246369603710638941616121, 1021824636960\
3710638941640551, -10218246369603710638941625039, -204364927392074212778832286\
83, -66089] / 4 [-2, 1, 1, -1, -2, 0] / 2 1]
}



<- back[back] [prev] [next] [index] [root]