...
ValueError: The base ring of L is neither SR nor exact.
+ An operator is Lyapunov-like on a cone if and only if both the
+ operator and its negation are cross-positive on the cone::
+
+ sage: K = random_cone(max_ambient_dim=5)
+ sage: R = K.lattice().vector_space().base_ring()
+ sage: L = random_matrix(R, K.lattice_dim())
+ sage: actual = is_lyapunov_like_on(L,K) # long time
+ sage: expected = (is_cross_positive_on(L,K) and # long time
+ ....: is_cross_positive_on(-L,K)) # long time
+ sage: actual == expected # long time
+ True
+
"""
if not is_Cone(K):
raise TypeError('K must be a Cone.')
if not L.base_ring().is_exact() and not L.base_ring() is SR:
raise ValueError('The base ring of L is neither SR nor exact.')
+ # Even though ``discrete_complementarity_set`` is a cached method
+ # of cones, this is faster than calling ``is_cross_positive_on``
+ # twice: doing so checks twice as many inequalities as the number
+ # of equalities that we're about to check.
return all([ s*(L*x) == 0
for (x,s) in K.discrete_complementarity_set() ])