+ sage: K = random_cone(max_ambient_dim=5)
+ sage: all([ is_lyapunov_like_on(L,K) # long time
+ ....: for L in K.lyapunov_like_basis() ]) # long time
+ True
+ sage: all([ is_lyapunov_like_on(L.change_ring(SR),K) # long time
+ ....: for L in K.lyapunov_like_basis() ]) # long time
+ True
+
+ Technically we could test this, but for now only closed convex cones
+ are supported as our ``K`` argument::
+
+ sage: L = identity_matrix(3)
+ sage: K = [ vector([2,2,-1]), vector([5,4,-3]) ]
+ sage: is_lyapunov_like_on(L,K)
+ Traceback (most recent call last):
+ ...
+ TypeError: K must be a Cone.
+
+ We can't give reliable answers over inexact rings::
+
+ sage: K = Cone([(1,2,3), (4,5,6)])
+ sage: L = identity_matrix(RR,3)
+ sage: is_lyapunov_like_on(L,K)
+ Traceback (most recent call last):
+ ...
+ 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