def prove(Eq): n = Symbol.n(domain=[2, oo], integer=True) Eq << apply(n) _, i, j = Eq[0].rhs.args _i = i.copy(domain=[0, n - 1]) _j = j.copy(domain=[0, n - 1]) W = Symbol.W(definition=Eq[0].lhs._subs(i, _i)._subs(j, _j)) V = Symbol.V(definition=Eq[0].rhs._subs(i, _i)._subs(j, _j)) Eq << W.this.definition Eq << V.this.definition h = Symbol.h(integer=True, domain=[0, n]) k = Symbol.k(integer=True, domain=[0, n]) Eq << (V[h, k].this.definition, W[h, k].this.definition) Eq << (Eq[-1].this.rhs.as_KroneckerDelta(), Eq[-2].this.rhs.as_KroneckerDelta()) Eq << Eq[-2] - Eq[-1] Eq << Eq[-1].reference((k, ), (h, )) Eq << Eq[-1].subs(Eq[1]).subs(Eq[2]) Eq << Eq[-1].forall((_i, ), (_j, ))
def prove(Eq): n = Symbol.n(integer=True) x = Symbol.x(shape=(n, ), real=True) y = Symbol.y(shape=(n, ), real=True) W = Symbol.W(shape=(n, n), real=True) Eq << apply(x, y, W) i = Symbol.i(domain=Interval(0, n - 1, integer=True)) j = Symbol.j(domain=Interval(0, n - 1, integer=True)) Eq << (x @ W).this.expand(free_symbol={i, j}) Eq << Eq[-1] @ y Eq << Eq[-1].this.rhs.expand() Eq.expansion = Eq[-1].this.rhs.function.distribute() Eq << Eq.expansion.subs(W, W.T) Eq << Eq[-1].swap(x, y) Eq << Eq[-1].this.rhs.limits_subs(i, j) Eq << Eq[-1].this.rhs.limits_swap() Eq << Eq.expansion.subs(Eq[-1].reversed)
def prove(Eq): n = Symbol.n(domain=[2, oo], integer=True) W = Symbol.W(shape=(n, n), complex=True) Eq << apply(W) U = Symbol.U(definition=Eq[0].lhs) V = Symbol.V(definition=Eq[0].rhs) Eq << U.this.definition Eq << V.this.definition i = Symbol.i(integer=True, domain=[0, n]) j = Symbol.j(integer=True, domain=[0, n]) Eq << (V[i, j].this.definition, U[i, j].this.definition) Eq << (Eq[-1].this.rhs.as_KroneckerDelta(), Eq[-2].this.rhs.as_KroneckerDelta()) Eq << Eq[-2] - Eq[-1] Eq << Eq[-1].reference((j, ), (i, )) Eq << Eq[-1].subs(Eq[1]).subs(Eq[2]) Eq << Eq[-1].forall((j, ), (i, ))
def prove(Eq): n = Symbol.n(integer=True) x = Symbol.x(shape=(n, ), real=True) y = Symbol.y(shape=(n, ), real=True) W = Symbol.W(shape=(n, n), real=True) Eq << apply(x, y, Equality(W.T, W)) Eq << bilinear.transpose.apply(x, y, W) Eq << Eq[-1].subs(Eq[0])