Exemplo n.º 1
0
def prove(Eq):
    i = Symbol.i(integer=True, nonnegative=True)
    X = Symbol.X(shape=(oo, ), distribution=NormalDistribution(0, 1))
    assert X[i].is_extended_real
    assert X.is_random

    k = Symbol.k(integer=True, positive=True)
    Y = Symbol.Y(distribution=ChiSquaredDistribution(k))
    assert Y.is_extended_real
    assert Y.is_random

    Eq << apply(X, Y)

    Y = Symbol.Y(shape=(oo, ), definition=LAMBDA[k](Sum[i:k](X[i] * X[i])))
    assert Y.is_nonnegative
    assert Y.is_finite

    Eq << Y.equality_defined()  # 1
    Eq << Eq[0].subs(Eq[-1].reversed)  # 2

    Eq << Eq[-1].subs(k, k + 1)  # 3

    Eq << Eq[1].subs(k, k + 1) - Eq[1] + Y[k]  # 4

    Eq.x_squared_y = Eq[-2].subs(Eq[-1])  # 5
    Eq << Eq.x_squared_y.lhs.this.doit(evaluate=False)

    Eq << Eq[-1].this.rhs.args[3].function.args[-1].doit(deep=False)

    (_y, *_), *_ = Eq[-1].rhs.args[-1].limits
    y = Eq[0].lhs.symbol
    assert y.is_nonnegative
    Eq << Eq[0].subs(y, _y)

    Eq << Eq[-2].subs(Eq[-1])
    Eq << Eq[-1].subs(Eq.x_squared_y)

    Eq << Eq[-1].this.lhs.expand()

    from sympy import sin
    t = Symbol.t(domain=Interval(0, pi / 2))
    assert t.is_zero is None

    Eq << Eq[-1].this.rhs.args[-1].limits_subs(_y, y * sin(t)**2)

    Eq << Eq[-1].this.rhs.args[-1].function.powsimp()

    Eq << Eq[-1].solve(Eq[-1].rhs.args[-1])

    Eq << wallis.apply(1, k)
    (x, *_), *_ = Eq[-1].lhs.limits
    (t, *_), *_ = Eq[-2].lhs.limits
    Eq << Eq[-1].this.lhs.limits_subs(x, t)

    # expand the BETA function into gamma function
    Eq << Eq[-1].this.rhs.expand(func=True)

    Eq << Eq[2].subs(k, 1)
    Eq << Eq[1].subs(k, 1).doit(deep=False)

    Eq << Eq[-2].subs(Eq[-1])

    Eq << Eq[-1].lhs.this.doit(evaluate=False)