from sage.all import *
-def drop_dependent(vs):
- r"""
- Return the largest linearly-independent subset of ``vs``.
- """
- if len(vs) == 0:
- # ...for lazy enough definitions of linearly-independent
- return vs
-
- result = []
- old_V = VectorSpace(vs[0].parent().base_field(), 0)
-
- for v in vs:
- new_V = span(result + [v])
- if new_V.dimension() > old_V.dimension():
- result.append(v)
- old_V = new_V
-
- return result
-
-
def iso_space(K):
r"""
Construct the space `W \times W^{\perp}` isomorphic to the ambient space
V = K.lattice().vector_space()
# Create the space W \times W^{\perp} isomorphic to V.
- W_basis = drop_dependent(K.rays())
+ # First we get an orthogonal (but not normal) basis...
+ M = matrix(V.base_field(), K.rays())
+ W_basis,_ = M.gram_schmidt()
+
W = V.subspace_with_basis(W_basis)
W_perp = W.complement()