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 basically_the_same(K1,K2):
r"""
``True`` if ``K1`` and ``K2`` are basically the same, and ``False``
# Create the space W \times W^{\perp} isomorphic to V.
# First we get an orthogonal (but not normal) basis...
M = matrix(V.base_field(), K.rays())
- W_basis,_ = M.gram_schmidt()
+ W_basis = drop_dependent(K.rays())
W = V.subspace_with_basis(W_basis)
W_perp = W.complement()