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, c, n, x, y
from proveit.logic import (Implies, Forall, Iff, in_bool, InSet,
Equals, NotEquals, NotInSet, Or, Set, ProperSubset)
from proveit.numbers import (num, Add, subtract, greater, greater_eq, Interval,
IntervalCC, IntervalCO, IntervalOC, IntervalOO,
Less, LessEq, Mult, Neg, number_ordering, sqrt)
from proveit.numbers import (
zero, one, two, e, pi, ZeroSet, Complex,
Integer, Natural, NaturalPos, IntegerNeg, IntegerNonPos, IntegerNonZero,
Rational, RationalNonZero, RationalPos, RationalNeg, RationalNonNeg, RationalNonPos,
Real, RealNonNeg, RealPos, RealNeg, RealNonPos, RealNonZero)
%begin theorems
zero_is_real = InSet(zero, Real)
zero_is_nonneg_real = InSet(zero, RealNonNeg)
zero_is_nonpos_real = InSet(zero, RealNonPos)
zero_set_within_real = ProperSubset(ZeroSet, Real)
zero_set_within_real_nonneg = ProperSubset(ZeroSet, RealNonNeg)
zero_set_within_real_nonpos = ProperSubset(ZeroSet, RealNonPos)
int_within_real = ProperSubset(Integer, Real)
nat_within_real = ProperSubset(Natural, Real)
nat_pos_within_real = ProperSubset(NaturalPos, Real)
nat_pos_within_real_pos = ProperSubset(NaturalPos, RealPos)
nat_within_real_nonneg = ProperSubset(Natural, RealNonNeg)
nat_pos_within_real_nonneg = ProperSubset(NaturalPos, RealNonNeg)
nonzero_int_within_real_nonzero = ProperSubset(IntegerNonZero, RealNonZero)
neg_int_within_real_neg = ProperSubset(IntegerNeg, RealNeg)
nonpos_int_within_real_nonpos = ProperSubset(IntegerNonPos, RealNonPos)
rational_within_real = ProperSubset(Rational, Real)
rational_nonzero_within_real_nonzero = ProperSubset(RationalNonZero, RealNonZero)
rational_pos_within_real_pos = ProperSubset(RationalPos, RealPos)
rational_neg_within_real_neg = ProperSubset(RationalNeg, RealNeg)
rational_nonneg_within_real_nonneg = ProperSubset(RationalNonNeg, RealNonNeg)
rational_nonpos_within_real_nonpos = ProperSubset(RationalNonPos, RealNonPos)
real_nonzero_within_real = ProperSubset(RealNonZero, Real)
real_pos_within_real = ProperSubset(RealPos, Real)
real_pos_within_real_nonzero = ProperSubset(RealPos, RealNonZero)
real_pos_within_real_nonneg = ProperSubset(RealPos, RealNonNeg)
real_neg_within_real = ProperSubset(RealNeg, Real)
real_neg_within_real_nonzero = ProperSubset(RealNeg, RealNonZero)
real_neg_within_real_nonpos = ProperSubset(RealNeg, RealNonPos)
real_nonneg_within_real = ProperSubset(RealNonNeg, Real)
real_nonpos_within_real = ProperSubset(RealNonPos, Real)
real_nonzero_within_real = ProperSubset(RealNonZero, Real)
nonzero_if_in_real_nonzero = Forall(x, NotEquals(x, zero), domain=RealNonZero)
positive_if_in_real_pos = Forall(x, greater(x, zero), domain=RealPos)
negative_if_in_real_neg = Forall(x, Less(x, zero), domain=RealNeg)
nonneg_if_in_real_nonneg = Forall(x, greater_eq(x, zero), domain=RealNonNeg)
nonpos_if_in_real_nonpos = Forall(x, LessEq(x, zero), domain=RealNonPos)
nonpos_real_is_real_nonpos = Forall(
a, InSet(a, RealNonPos), condition=LessEq(a, zero),
domain=Real)
pos_real_is_real_pos = Forall(a, InSet(a, RealPos), condition=greater(a, zero), domain=Real)
nonzero_nonneg_real_is_real_pos = Forall(
a, InSet(a, RealPos), condition=NotEquals(a, zero), domain=RealNonNeg)
neg_real_is_real_neg = Forall(a, InSet(a, RealNeg), condition=Less(a, zero), domain=Real)
nonzero_nonpos_real_is_real_neg = Forall(
a, InSet(a, RealNeg), condition=NotEquals(a, zero), domain=RealNonPos)
neg_is_real_neg_if_pos_is_real_pos = Forall(
a,
InSet(Neg(a), RealNeg),
domain=RealPos)
nonneg_real_is_real_nonneg = Forall(
a, InSet(a, RealNonNeg), condition=greater_eq(a, zero),
domain=Real)
nonzero_real_is_real_nonzero = Forall(
a, InSet(a, RealNonZero), condition=NotEquals(a, zero),
domain=Real)
Non-Zero Theorems
positive_implies_not_zero = Forall(
a,
NotEquals(a, zero),
domain=Real,
conditions=[greater(a, zero)])
negative_implies_not_zero = Forall(
a, NotEquals(a, zero),
domain=Real,
conditions=[Less(a, zero)])
Elements of Real Intervals are Real Numbers
all_in_interval_oo__is__real = Forall(
(a, b),
Forall(x,
InSet(x, Real),
domain=IntervalOO(a, b)),
domain=Real)
all_in_interval_co__is__real = Forall(
(a, b),
Forall(x,
InSet(x, Real),
domain=IntervalCO(a, b)),
domain=Real)
all_in_interval_oc__is__real = Forall(
(a, b),
Forall(x,
InSet(x, Real),
domain=IntervalOC(a, b)),
domain=Real)
all_in_interval_cc__is__real = Forall(
(a, b),
Forall(x,
InSet(x, Real),
domain=IntervalCC(a, b)),
domain=Real)
Real Intervals are Subsets of the Real number set
interval_oo_within_Real = Forall(
(a, b),
ProperSubset(IntervalOO(a, b), Real),
domain=Real)
interval_oc_within_Real = Forall(
(a, b),
ProperSubset(IntervalOC(a, b), Real),
domain=Real)
interval_co_within_Real = Forall(
(a, b),
ProperSubset(IntervalCO(a, b), Real),
domain=Real)
interval_cc_within_Real = Forall(
(a, b),
ProperSubset(IntervalCC(a, b), Real),
domain=Real)
Upper and Lower Bounds on Real Intervals
interval_oo_lower_bound = Forall(
(a, b),
Forall(x,
Less(a, x),
domain=IntervalOO(a, b)),
domain=Real)
interval_oo_upper_bound = Forall(
(a, b),
Forall(x,
Less(x, b),
domain=IntervalOO(a, b)),
domain=Real)
interval_co_lower_bound = Forall(
(a, b),
Forall(x,
LessEq(a, x),
domain=IntervalCO(a, b)),
domain=Real)
interval_co_upper_bound = Forall(
(a, b),
Forall(x,
Less(x, b),
domain=IntervalCO(a, b)),
domain=Real)
interval_oc_lower_bound = Forall(
(a, b),
Forall(x,
Less(a, x),
domain=IntervalOC(a, b)),
domain=Real)
interval_oc_upper_bound = Forall(
(a, b),
Forall(x,
LessEq(x, b),
domain=IntervalOC(a, b)),
domain=Real)
interval_cc_lower_bound = Forall(
(a, b),
Forall(x,
LessEq(a, x),
domain=IntervalCC(a, b)),
domain=Real)
interval_cc_upper_bound = Forall(
(a, b),
Forall(x,
LessEq(x, b),
domain=IntervalCC(a, b)),
domain=Real)
Translating Boundedness to Interval Membership
in_IntervalOO = Forall(
(a, b, x),
InSet(x, IntervalOO(a, b)),
domain=Real,
conditions=[number_ordering(Less(a, x), Less(x, b))])
in_IntervalCO = Forall(
(a, b, x),
InSet(x, IntervalCO(a, b)),
domain=Real,
conditions=[number_ordering(LessEq(a, x), Less(x, b))])
in_IntervalOC = Forall(
(a, b, x),
InSet(x, IntervalOC(a, b)),
domain=Real,
conditions=[number_ordering(Less(a, x), LessEq(x, b))])
in_IntervalCC = Forall(
(a, b, x),
InSet(x, IntervalCC(a, b)),
domain=Real,
conditions=[number_ordering(LessEq(a, x), LessEq(x, b))])
Scaling Elements of Intervals To Scaled Intervals
rescale_interval_oo_membership = Forall(
(a, b, c),
Forall(x,
InSet(Mult(c, x), IntervalOO(Mult(c, a), Mult(c, b))),
domain=IntervalOO(a, b)),
domain=Real)
rescale_interval_oc_membership = Forall(
(a, b, c),
Forall(x,
InSet(Mult(c, x),
IntervalOC(Mult(c, a), Mult(c, b))),
domain=IntervalOC(a, b)),
domain=Real)
rescale_interval_co_membership = Forall(
(a, b, c),
Forall(x,
InSet(Mult(c, x), IntervalCO(Mult(c, a), Mult(c, b))),
domain=IntervalCO(a, b)),
domain=Real)
rescale_interval_cc_membership = Forall(
(a, b, c),
Forall(x,
InSet(Mult(c, x), IntervalCC(Mult(c, a), Mult(c, b))),
domain=IntervalCC(a, b)),
domain=Real)
Interval Relaxation Theorems
relax_IntervalCO = Forall(
(a, b),
Forall(x,
InSet(x, IntervalCC(a, b)),
domain=IntervalCO(a, b)),
domain=Real)
relax_IntervalOC = Forall(
(a, b),
Forall(x,
InSet(x, IntervalCC(a, b)),
domain=IntervalOC(a, b)),
domain=Real)
relax_IntervalOO_left = Forall(
(a, b),
Forall(x,
InSet(x, IntervalCO(a, b)),
domain=IntervalOO(a, b)),
domain=Real)
relax_IntervalOO_right = Forall(
(a, b),
Forall(x,
InSet(x, IntervalOC(a, b)),
domain=IntervalOO(a, b)),
domain=Real)
relax_IntervalOO_left_right = Forall(
(a, b),
Forall(x,
InSet(x, IntervalCC(a, b)),
domain=IntervalOO(a, b)),
domain=Real)
Some Analogous Non-IntervalMembership Theorems
not_real_not_in_interval_oo = (
Forall((a, b),
Forall(x, NotInSet(x, IntervalOO(a, b)), domain=Complex, condition=NotInSet(x, Real)),
domain=Real))
not_real_not_in_interval_co = (
Forall((a, b),
Forall(x, NotInSet(x, IntervalCO(a, b)), domain=Complex, condition=NotInSet(x, Real)),
domain=Real))
not_real_not_in_interval_oc = (
Forall((a, b),
Forall(x, NotInSet(x, IntervalOC(a, b)), domain=Complex, condition=NotInSet(x, Real)),
domain=Real))
not_real_not_in_interval_cc = (
Forall((a, b),
Forall(x, NotInSet(x, IntervalCC(a, b)), domain=Complex, condition=NotInSet(x, Real)),
domain=Real))
real_not_in_interval_oo = (
Forall((a, b, x),
NotInSet(x, IntervalOO(a, b)),
domain=Real,
conditions=[Or(LessEq(x, a), LessEq(b, x))]))
real_not_in_interval_co = (
Forall((a, b, x),
NotInSet(x, IntervalCO(a, b)),
domain=Real,
conditions=[Or(Less(x, a), LessEq(b, x))]))
real_not_in_interval_oc = (
Forall((a, b, x),
NotInSet(x, IntervalOC(a, b)),
domain=Real,
conditions=[Or(LessEq(x, a), Less(b, x))]))
real_not_in_interval_cc = (
Forall((a, b, x),
NotInSet(x, IntervalCC(a, b)),
domain=Real,
conditions=[Or(Less(x, a), Less(b, x))]))
bounds_for_real_not_in_interval_oo = (
Forall((a, b, x),
Or(LessEq(x, a), LessEq(b, x)),
domain=Real,
conditions=[NotInSet(x, IntervalOO(a, b))]))
bounds_for_real_not_in_interval_co = (
Forall((a, b, x),
Or(Less(x, a), LessEq(b, x)),
domain=Real,
conditions=[NotInSet(x, IntervalCO(a, b))]))
bounds_for_real_not_in_interval_oc = (
Forall((a, b, x),
Or(LessEq(x, a), Less(b, x)),
domain=Real,
conditions=[NotInSet(x, IntervalOC(a, b))]))
bounds_for_real_not_in_interval_cc = (
Forall((a, b, x),
Or(Less(x, a), Less(b, x)),
domain=Real,
conditions=[NotInSet(x, IntervalCC(a, b))]))
Misc Theorems About the Real number set
not_int_if_between_successive_int = Forall(
n,
Forall(x,
NotInSet(x, Integer),
domain=IntervalOO(n, Add(n, one))),
domain=Integer)
unique_int_in_interval = Forall((a, b, x, y),
Implies(InSet(y, IntervalOO(subtract(x, a), Add(x, b) )),
Equals(y, x)),
domains=[RealPos, RealPos, Integer, Integer],
conditions=[LessEq(a, one), LessEq(b, one)])
not_int_if_not_int_in_interval = Forall(
n,
Forall(x,
NotInSet(x, Integer),
domain=IntervalOO(subtract(n, one), Add(n, one)),
condition=NotEquals(x, n)),
domain=Integer)
not_int_if_not_int_in_interval_gen = Forall(
(a, b),
Forall(x,
NotInSet(x, Integer),
domain=IntervalOO(a, b),
condition=NotInSet(x, Interval(Add(a, one), subtract(b, one)))),
domain=Integer)
from proveit.logic import Intersect, Set
from proveit.numbers import IntervalOO
unique_int_in_radius_one_open_interval = (
Forall((a,b),
Forall(x,
Equals(Intersect(IntervalOO(subtract(x, a), Add(x, b)), Integer), Set(x)),
domain=Integer),
domain=RealPos,
conditions=[LessEq(a, one), LessEq(b, one)])
)
e_is_real_pos = InSet(e, RealPos)
pi_is_real_pos = InSet(pi, RealPos)
A set of membership_is_bool (and nonmembership_is_bool) theorems, which are accessed by the respective NumberSets to implement their deduce_membership_in_bool()
methods, covering the Real
, RealPos
, RealNeg
, RealNonNeg
, RealNonPos
, and RealNonZero
NumberSet classes (defined in proveit.numbers.number_sets.real_numbers/reals.py), as well as the various IntervalXX
intervals:
real_membership_is_bool = Forall(x, in_bool(InSet(x, Real)))
real_pos_membership_is_bool = Forall(x, in_bool(InSet(x, RealPos)))
real_neg_membership_is_bool = Forall(x, in_bool(InSet(x, RealNeg)))
real_nonneg_membership_is_bool = Forall(x, in_bool(InSet(x, RealNonNeg)))
real_nonpos_membership_is_bool = Forall(x, in_bool(InSet(x, RealNonPos)))
real_nonzero_membership_is_bool = Forall(x, in_bool(InSet(x, RealNonZero)))
interval_oo_membership_is_bool = Forall((a, b),
Forall(x,
in_bool(InSet(x, IntervalOO(a, b)))),
domain = Real)
interval_co_membership_is_bool = Forall((a, b),
Forall(x,
in_bool(InSet(x, IntervalCO(a, b)))),
domain = Real)
interval_oc_membership_is_bool = Forall((a, b),
Forall(x,
in_bool(InSet(x, IntervalOC(a, b)))),
domain = Real)
interval_cc_membership_is_bool = Forall((a, b),
Forall(x,
in_bool(InSet(x, IntervalCC(a, b)))),
domain = Real)
interval_oo_nonmembership_is_bool = Forall((a, b),
Forall(x,
in_bool(NotInSet(x, IntervalOO(a, b)))),
domain = Real)
interval_co_nonmembership_is_bool = Forall((a, b),
Forall(x,
in_bool(NotInSet(x, IntervalCO(a, b)))),
domain = Real)
interval_oc_nonmembership_is_bool = Forall((a, b),
Forall(x,
in_bool(NotInSet(x, IntervalOC(a, b)))),
domain = Real)
interval_cc_nonmembership_is_bool = Forall((a, b),
Forall(x,
in_bool(NotInSet(x, IntervalCC(a, b)))),
domain = Real)
pi_between_3_and_4 = number_ordering(Less(num(3), pi), Less(pi, num(4)))
%end theorems