Elements of finitely generated modules over a PID.

AUTHOR:
  • William Stein, 2009
class sage.modules.fg_pid.fgp_element.FGP_Element(parent, x, check=True)

An element of a finitely generated module over a PID.

INPUT:

  • parent – parent module M
  • x – element of M.V()
  • check – (default: True) if True, verify that x in M.V()

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W
sage: x = Q(V.0-V.1); x
(0, 3)
sage: type(x)
<class 'sage.modules.fg_pid.fgp_element.FGP_Element'>
sage: x is Q(x)
True
sage: x.parent() is Q
True

TESTS:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2]); Q = V/W
sage: loads(dumps(Q.0)) == Q.0
True
__cmp__(right)

Compare self and right.

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0; x
(1, 0)
sage: y = Q.1; y
(0, 1)
sage: x == y
False
sage: x == x
True
sage: x + x == 2*x
True
__getitem__(*args)

EXAMPLES:

sage: V = span([[1/2,0,0],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0 + 3*Q.1; x
(1, 3)
sage: x[0]
1
sage: x[1]
3
sage: x[-1]
3
__init__(parent, x, check=True)

INPUT:

  • parent – parent module M
  • x – element of M.V()
  • check – (default: True) if True, verify that x in M.V()

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W
sage: x = Q(V.0-V.1); type(x)
<class 'sage.modules.fg_pid.fgp_element.FGP_Element'>

For full documentation, see FGP_Element.

__neg__()

EXAMPLES:

sage: V1 = ZZ^2; W1 = V1.span([[1,2],[3,4]]); A1 = V1/W1; A1
Finitely generated module V/W over Integer Ring with invariants (2)
sage: -A1.0
(1)
sage: -A1.0 == A1.0           # order 2
True
__weakref__
list of weak references to the object (if defined)
_add_(other)

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0; x
(1, 0)
sage: y = Q.1; y
(0, 1)
sage: x + y                        # indirect doctest
(1, 1)
sage: x + x + x + x
(0, 0)
sage: x + 0
(1, 0)
sage: 0 + x
(1, 0)

We test canonical coercion from V and W.

sage: Q.0 + V.0 (1, 4) sage: V.0 + Q.0 (1, 4) sage: W.0 + Q.0 (1, 0) sage: W.0 + Q.0 == Q.0 True
_l_action(s)

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0; x
(1, 0)
sage: x*2                          # indirect doctest
(2, 0)
sage: x*4
(0, 0)
_r_action(s)

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0; x
(1, 0)
sage: 2*x                            # indirect doctest
(2, 0)
sage: 4*x
(0, 0)
_repr_()

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W
sage: Q(V.1)._repr_()
'(0, 1)'
_sub_(other)

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0; x
(1, 0)
sage: y = Q.1; y
(0, 1)
sage: x - y                                # indirect doctest
(1, 11)
sage: x - x
(0, 0)
additive_order()

Return the additive order of this element.

EXAMPLES:

sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: Q.0.additive_order()
4
sage: Q.1.additive_order()
12
sage: (Q.0+Q.1).additive_order()
12
sage: V = span([[1/2,1,1],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (12, 0)
sage: Q.0.additive_order()
12
sage: type(Q.0.additive_order())
<type 'sage.rings.integer.Integer'>
sage: Q.1.additive_order()
+Infinity
lift()

Lift self to an element of V, where the parent of self is the quotient module V/W.

EXAMPLES:

sage: V = span([[1/2,0,0],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: Q.0
(1, 0)
sage: Q.1
(0, 1)
sage: Q.0.lift()
(0, 0, 1)
sage: Q.1.lift()
(0, 2, 0)
sage: x = Q(V.0); x
(0, 4)
sage: x.lift()
(1/2, 0, 0)
sage: x == 4*Q.1
True
sage: x.lift().parent() == V
True

A silly version of the integers modulo 100:

sage: A = (ZZ^1)/span([[100]], ZZ); A
Finitely generated module V/W over Integer Ring with invariants (100)
sage: x = A([5]); x
(5)
sage: v = x.lift(); v
(5)
sage: v.parent()
Ambient free module of rank 1 over the principal ideal domain Integer Ring
vector()

EXAMPLES:

sage: V = span([[1/2,0,0],[3/2,2,1],[0,0,1]],ZZ); W = V.span([2*V.0+4*V.1, 9*V.0+12*V.1, 4*V.2])
sage: Q = V/W; Q
Finitely generated module V/W over Integer Ring with invariants (4, 12)
sage: x = Q.0 + 3*Q.1; x
(1, 3)
sage: x.vector()
(1, 3)
sage: tuple(x)
(1, 3)
sage: list(x)
[1, 3]
sage: x.vector().parent()
Ambient free module of rank 2 over the principal ideal domain Integer Ring

Previous topic

Finitely generated modules over a PID.

Next topic

Morphisms between finitely generated modules over a PID.

This Page