import proveit
# Prepare this notebook for defining the theorems of a theory:
%theorems_notebook # Keep this at the top following 'import proveit'.
from proveit import a, b, q, x
from proveit.logic import And, Equals, NotEquals, Exists, Forall, Iff, in_bool, InSet, Set, ProperSubset
from proveit.numbers import frac, GCD, Less, LessEq, greater, greater_eq
from proveit.numbers import one, zero
from proveit.numbers import (ZeroSet, Natural, NaturalPos, Integer, IntegerNonZero, IntegerNeg, IntegerNonPos,
Rational, RationalPos, RationalNeg,
RationalNonNeg, RationalNonPos, RationalNonZero, NaturalPos)
%begin theorems
zero_is_rational = InSet(zero, Rational)
zero_is_nonneg_rational = InSet(zero, RationalNonNeg)
zero_is_nonpos_rational = InSet(zero, RationalNonPos)
zero_set_within_rational = ProperSubset(ZeroSet, Rational)
zero_set_within_rational_nonneg = ProperSubset(ZeroSet, RationalNonNeg)
zero_set_within_rational_nonpos = ProperSubset(ZeroSet, RationalNonPos)
nat_within_rational = ProperSubset(Natural, Rational)
nat_within_rational_nonneg = ProperSubset(Natural, RationalNonNeg)
nat_pos_within_rational_pos = ProperSubset(NaturalPos, RationalPos)
nat_within_rational_nonneg = ProperSubset(Natural, RationalNonNeg)
int_within_rational = ProperSubset(Integer, Rational)
nonzero_int_within_rational_nonzero = ProperSubset(IntegerNonZero, RationalNonZero)
neg_int_within_rational_neg = ProperSubset(IntegerNeg, RationalNeg)
nonpos_int_within_rational_nonpos = ProperSubset(IntegerNonPos, RationalNonPos)
rational_nonzero_within_rational = ProperSubset(RationalNonZero, Rational)
rational_pos_within_rational = ProperSubset(RationalPos, Rational)
rational_pos_within_rational_nonzero = ProperSubset(RationalPos, RationalNonZero)
rational_neg_within_rational_nonzero = ProperSubset(RationalNeg, RationalNonZero)
rational_pos_within_rational_nonneg = ProperSubset(RationalPos, RationalNonNeg)
rational_neg_within_rational_nonpos = ProperSubset(RationalNeg, RationalNonPos)
rational_neg_within_rational = ProperSubset(RationalNeg, Rational)
rational_nonneg_within_rational = ProperSubset(RationalNonNeg, Rational)
rational_nonpos_within_rational = ProperSubset(RationalNonPos, Rational)
nonzero_if_in_rational_nonzero = Forall(
q,
NotEquals(q, zero),
domain=RationalNonZero)
positive_if_in_rational_pos = Forall(
q,
greater(q, zero),
domain=RationalPos)
negative_if_in_rational_neg = Forall(
q,
Less(q, zero),
domain=RationalNeg)
nonneg_if_in_rational_nonneg = Forall(
q,
greater_eq(q, zero),
domain=RationalNonNeg)
nonpos_if_in_rational_nonpos = Forall(
q,
LessEq(q, zero),
domain=RationalNonPos)
nonzero_rational_is_rational_nonzero = Forall(
q,
InSet(q, RationalNonZero),
domain=Rational,
conditions=[NotEquals(q, zero)])
pos_rational_is_rational_pos = Forall(
q, InSet(q, RationalPos), condition=greater(q, zero),
domain=Rational)
nonzero_nonneg_rational_is_rational_pos = Forall(
q, InSet(q, RationalPos), condition=NotEquals(q, zero),
domain=RationalNonNeg)
neg_rational_is_rational_neg = Forall(
q,
InSet(q, RationalNeg),
domain=Rational,
conditions=[Less(q, zero)])
nonzero_nonpos_rational_is_rational_neg = Forall(
q, InSet(q, RationalNeg),
domain=RationalNonPos, condition=NotEquals(q, zero))
nonneg_rational_is_rational_nonneg = Forall(
q,
InSet(q, RationalNonNeg),
domain=Rational,
conditions=[greater_eq(q, zero)])
nonpos_rational_is_rational_nonpos = Forall(
q,
InSet(q, RationalNonPos),
domain=Rational,
conditions=[LessEq(q, zero)])
nat_ratio = Forall(
q,
Exists([a,b],
Equals(q, frac(a,b)),
domains=[Natural, NaturalPos]),
domain=RationalNonNeg)
reduced_nat_pos_ratio = Forall(
q,
Exists([a,b],
And(Equals(q, frac(a,b)), Equals(GCD(a, b), one)),
domains=[NaturalPos, NaturalPos]),
domain=RationalPos)
ratio_of_pos_int_is_rational_pos = Forall(
[a,b],
InSet(frac(a,b), RationalPos),
domain=NaturalPos)
A set of in_bool theorems, which are accessed by the respective NumberSets to implement their deduce_membership_in_bool()
methods, covering the RationalSet
and RationalPosSet
NumberSet classes (defined in proveit.numbers.number_sets.rational_numbers/rationals.py):
rational_membership_is_bool = Forall(x, in_bool(InSet(x, Rational)))
rational_nonzero_membership_is_bool = Forall(x, in_bool(InSet(x, RationalNonZero)))
rational_pos_membership_is_bool = Forall(x, in_bool(InSet(x, RationalPos)))
rational_neg_membership_is_bool = Forall(x, in_bool(InSet(x, RationalNeg)))
rational_nonneg_membership_is_bool = Forall(x, in_bool(InSet(x, RationalNonNeg)))
rational_nonpos_membership_is_bool = Forall(x, in_bool(InSet(x, RationalNonPos)))
%end theorems