Ask Your Question

Revision history [back]

Building on @FrédéricC's comment.

If a is an element in GF(2), a.lift() is the corresponding element in ZZ. Using .lift() makes it so that 1 + 1 will be computed in ZZ and give 2 instead of being computed in GF(2) and give 0.

If a is a matrix over GF(2), a.lift() is the corresponding matrix over ZZ.

The rows of a can be summed using sum(a).

Define the matrix space:

sage: M = MatrixSpace(GF(2), 2, 2)

List its elements:

sage: M.list()
[
[0 0]  [1 0]  [0 1]  [0 0]  [0 0]  [1 1]  [1 0]  [1 0]
[0 0], [0 0], [0 0], [1 0], [0 1], [0 0], [1 0], [0 1],

[0 1]  [0 1]  [0 0]  [1 1]  [1 1]  [1 0]  [0 1]  [1 1]
[1 0], [0 1], [1 1], [1 0], [0 1], [1 1], [1 1], [1 1]
]

How many 1's in each column of each matrix in M:

sage: [sum(a.lift()) for a in M]
[(0, 0),
 (1, 0),
 (0, 1),
 (1, 0),
 (0, 1),
 (1, 1),
 (2, 0),
 (1, 1),
 (1, 1),
 (0, 2),
 (1, 1),
 (2, 1),
 (1, 2),
 (2, 1),
 (1, 2),
 (2, 2)]

Sum over all matrices in M:

sage: sum(sum(a.lift()) for a in M)
(16, 16)