def prove(Eq): p = Symbol.p(complex=True) n = Symbol.n(domain=Interval(1, oo, integer=True)) x = Symbol.x(shape=(n,), given=True, complex=True) y = Symbol.y(shape=(n,), given=True, complex=True) k = Symbol.k(domain=Interval(1, oo, integer=True)) given = Equality(x @ LAMBDA[k:n](p ** k), y @ LAMBDA[k:n](p ** k)) Eq << apply(given) Eq << algebre.vector.cosine_similarity.apply(*given.lhs.args) Eq << algebre.vector.cosine_similarity.apply(*given.rhs.args) Eq << given.subs(Eq[-1], Eq[-2]) Eq << matmul_equality.apply(Eq[-1])
def prove(Eq): p = Symbol.p(complex=True) n = Symbol.n(domain=Interval(1, oo, integer=True)) x = Symbol.x(shape=(n, ), complex=True, given=True) y = Symbol.y(shape=(n, ), complex=True, given=True) k = Symbol.k(domain=Interval(1, oo, integer=True)) assert x.is_given and y.is_given given = Equality(LAMBDA[k:n](p**k) @ x, LAMBDA[k:n](p**k) @ y) Eq << apply(given) i = Symbol.i(domain=Interval(1, n, integer=True)) Eq << given.subs(p, i) Eq << Eq[-1].forall((i, )) Eq << Eq[-1].as_Equal() Eq.statement = Eq[-1].T i, k = Eq.statement.lhs.args[1].variables Eq << vandermonde.basicForm.apply(LAMBDA[i:n](i + 1)) Eq << Unequal(Eq[-1].rhs, 0, plausible=True) Eq << Eq[-1].subs(Eq[-2].reversed) j, i = Eq[-1].lhs.arg.variables Eq << Eq[-1].this.lhs.arg.limits_subs(i, k) Eq << Eq[-1].this.lhs.arg.limits_subs(j, i) Eq << algebre.matrix.inequality.equality.apply(Eq[-1], Eq.statement)