logo
In [1]:
import proveit
from proveit import defaults, Function
from proveit.logic import Implies, Equals, InSet
from proveit.numbers import Add, frac, Mult, subtract, Sum
# from proveit.numbers import Natural
from proveit.numbers import zero, one, two
from proveit import m, n, x, P
# from proveit.numbers.summation  import sum_single
from proveit.numbers.number_sets.natural_numbers import fold_forall_natural_pos
# from proveit.numbers.numerals.decimals import pos_nat1
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving sum_first_n_int
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
sum_first_n_int:
(see dependencies)

Instantiate the Induction Theorem for an induction proof

In [3]:
sum_first_n_int.instance_expr
In [4]:
fold_forall_natural_pos
In [5]:
induction_inst = fold_forall_natural_pos.instantiate(
        {Function(P, n):sum_first_n_int.instance_expr})
induction_inst:  ⊢  

Note that the base case was proven automatically via auto-simplification.

Inductive Step

In [6]:
inductive_step = induction_inst.antecedent.operands[1]
inductive_step:
In [7]:
# this looks like a tuple, but is actually a set with no
# predictable order for the elements
inductive_step.conditions
In [8]:
defaults.assumptions = inductive_step.conditions
defaults.assumptions:
In [9]:
sum_one_to_m_plus_one = induction_inst.antecedent.operands[1].instance_expr.lhs
sum_one_to_m_plus_one:
In [10]:
sum_one_to_m_plus_one_split = sum_one_to_m_plus_one.partition(
    split_index=Add(m, one), side='before').inner_expr().rhs.associate(1, 2)
sum_one_to_m_plus_one_split:  ⊢  
In [11]:
sum_one_to_m_plus_one_split.rhs.operands[0].domain.simplification()
In [12]:
inductive_hypothesis = defaults.assumptions[1]
inductive_hypothesis:
In [13]:
inductive_hypothesis_judgment = inductive_hypothesis.prove()
inductive_hypothesis_judgment:  ⊢  
In [14]:
sum_one_to_m_plus_one_simplified_01 = inductive_hypothesis.sub_right_side_into(
    sum_one_to_m_plus_one_split, auto_simplify=False)
sum_one_to_m_plus_one_simplified_01: ,  ⊢  
In [15]:
alg_manip_01 = Equals(Add(m, one), frac(Mult(two, Add(m, one)), two)).prove()
alg_manip_01:  ⊢  
In [16]:
sum_one_to_m_plus_one_simplified_02 = alg_manip_01.sub_right_side_into(sum_one_to_m_plus_one_simplified_01.inner_expr().rhs.operands[1])
sum_one_to_m_plus_one_simplified_02: ,  ⊢  
In [17]:
sum_one_to_m_plus_one_simplified_03 = sum_one_to_m_plus_one_simplified_02.inner_expr().rhs.factor(
    frac(Add(m, one), two))
sum_one_to_m_plus_one_simplified_03: ,  ⊢  
In [18]:
alg_manip_02 = frac(Mult(Add(m, one), Add(m, two)), two).factorization(
    frac(Add(m, one), two))
alg_manip_02:  ⊢  
In [19]:
alg_manip_02.sub_left_side_into(sum_one_to_m_plus_one_simplified_03.inner_expr().rhs)
In [20]:
inductive_step.prove()
In [21]:
induction_inst.derive_consequent()
sum_first_n_int has been proven.  Now simply execute "%qed".
In [22]:
%qed
proveit.numbers.summation.sum_first_n_int has been proven.
Out[22]:
 step typerequirementsstatement
0modus ponens1, 2  ⊢  
1instantiation3, 4*, 5*  ⊢  
  :
2instantiation6, 7, 8  ⊢  
  : , :
3conjecture  ⊢  
 proveit.numbers.number_sets.natural_numbers.fold_forall_natural_pos
4instantiation173, 9, 10  ⊢  
  : , : , :
5instantiation173, 11, 12  ⊢  
  : , : , :
6theorem  ⊢  
 proveit.logic.booleans.conjunction.and_if_both
7axiom  ⊢  
 proveit.logic.booleans.true_axiom
8generalization13  ⊢  
9instantiation14, 218, 15, 19, 16, 17  ⊢  
  : , : , : , :
10instantiation18, 183  ⊢  
  :
11instantiation176, 177, 218, 215, 178, 179, 182, 193  ⊢  
  : , : , : , : , : , :
12instantiation59, 215, 218, 177, 19, 178, 182, 193, 44*  ⊢  
  : , : , : , : , : , :
13instantiation141, 20, 21,  ⊢  
  : , : , :
14axiom  ⊢  
 proveit.core_expr_types.operations.operands_substitution
15instantiation191  ⊢  
  : , :
16instantiation22, 212  ⊢  
  : , :
17instantiation173, 23, 24  ⊢  
  : , : , :
18axiom  ⊢  
 proveit.logic.booleans.eq_true_intro
19instantiation191  ⊢  
  : , :
20instantiation141, 25, 26,  ⊢  
  : , : , :
21instantiation76, 77, 27, 200, 138  ⊢  
  : , : , :
22axiom  ⊢  
 proveit.numbers.summation.sum_single
23instantiation188, 28  ⊢  
  : , : , :
24instantiation29, 200, 138  ⊢  
  :
25instantiation30, 31, 32,  ⊢  
  : , : , :
26instantiation144, 33, 34, 35  ⊢  
  : , : , : , :
27instantiation103, 182, 200  ⊢  
  : , :
28instantiation173, 36, 172  ⊢  
  : , : , :
29conjecture  ⊢  
 proveit.numbers.division.frac_cancel_complete
30theorem  ⊢  
 proveit.logic.equality.sub_left_side_into
31instantiation141, 37, 38,  ⊢  
  : , : , :
32instantiation173, 39, 40  ⊢  
  : , : , :
33instantiation188, 41  ⊢  
  : , : , :
34instantiation188, 42  ⊢  
  : , : , :
35instantiation65, 43  ⊢  
  : , :
36instantiation188, 44  ⊢  
  : , : , :
37instantiation141, 45, 46  ⊢  
  : , : , :
38assumption  ⊢  
39instantiation188, 47  ⊢  
  : , : , :
40instantiation48, 86, 200, 138, 49*  ⊢  
  : , :
41instantiation173, 50, 51  ⊢  
  : , : , :
42instantiation173, 52, 53  ⊢  
  : , : , :
43instantiation87, 215, 218, 177, 54, 178, 55, 182, 200  ⊢  
  : , : , : , : , : , :
44conjecture  ⊢  
 proveit.numbers.numerals.decimals.add_1_1
45instantiation56, 212, 122, 57, 58*  ⊢  
  : , : , : , :
46instantiation59, 215, 218, 177, 179, 178, 82, 182, 193  ⊢  
  : , : , : , : , : , :
47instantiation87, 215, 218, 177, 179, 178, 200, 182, 193  ⊢  
  : , : , : , : , : , :
48conjecture  ⊢  
 proveit.numbers.division.div_as_mult
49instantiation173, 60, 61  ⊢  
  : , : , :
50instantiation188, 62  ⊢  
  : , : , :
51instantiation65, 63  ⊢  
  : , :
52instantiation188, 64  ⊢  
  : , : , :
53instantiation65, 66  ⊢  
  : , :
54instantiation191  ⊢  
  : , :
55instantiation137, 77, 200, 138  ⊢  
  : , :
56axiom  ⊢  
 proveit.numbers.summation.sum_split_last
57instantiation67, 201, 68, 194, 69, 70*  ⊢  
  : , : , :
58instantiation173, 71, 72  ⊢  
  : , : , :
59conjecture  ⊢  
 proveit.numbers.addition.association
60instantiation188, 73  ⊢  
  : , : , :
61instantiation173, 74, 75  ⊢  
  : , : , :
62instantiation85, 182, 77  ⊢  
  : , :
63instantiation76, 77, 182, 200, 138  ⊢  
  : , : , :
64instantiation85, 200, 77  ⊢  
  : , :
65theorem  ⊢  
 proveit.logic.equality.equals_reversal
66instantiation76, 77, 200, 138  ⊢  
  : , : , :
67conjecture  ⊢  
 proveit.numbers.addition.strong_bound_via_left_term_bound
68conjecture  ⊢  
 proveit.numbers.number_sets.real_numbers.zero_is_real
69instantiation78, 204  ⊢  
  :
70instantiation141, 79, 80  ⊢  
  : , : , :
71instantiation188, 81  ⊢  
  : , : , :
72instantiation176, 215, 218, 177, 179, 178, 82, 182, 193  ⊢  
  : , : , : , : , : , :
73instantiation83, 154, 196, 84*  ⊢  
  : , :
74instantiation85, 86, 130  ⊢  
  : , :
75instantiation87, 215, 218, 177, 88, 178, 130, 104, 105, 89*, 90*  ⊢  
  : , : , : , : , : , :
76conjecture  ⊢  
 proveit.numbers.division.mult_frac_left
77instantiation216, 205, 91  ⊢  
  : , : , :
78conjecture  ⊢  
 proveit.numbers.number_sets.natural_numbers.natural_pos_is_pos
79instantiation92, 193  ⊢  
  :
80instantiation93, 193, 94  ⊢  
  : , :
81instantiation95, 198, 96, 97, 98, 99  ⊢  
  : , : , :
82modus ponens100, 101  ⊢  
83conjecture  ⊢  
 proveit.numbers.exponentiation.neg_power_as_div
84instantiation102, 200  ⊢  
  :
85conjecture  ⊢  
 proveit.numbers.multiplication.commutation
86instantiation103, 104, 105  ⊢  
  : , :
87conjecture  ⊢  
 proveit.numbers.multiplication.distribute_through_sum
88instantiation191  ⊢  
  : , :
89instantiation144, 106, 107, 108  ⊢  
  : , : , : , :
90instantiation173, 109, 110  ⊢  
  : , : , :
91instantiation216, 210, 111  ⊢  
  : , : , :
92conjecture  ⊢  
 proveit.numbers.addition.elim_zero_right
93conjecture  ⊢  
 proveit.numbers.addition.commutation
94conjecture  ⊢  
 proveit.numbers.number_sets.complex_numbers.zero_is_complex
95conjecture  ⊢  
 proveit.core_expr_types.tuples.tuple_eq_via_elem_eq
96instantiation191  ⊢  
  : , :
97instantiation191  ⊢  
  : , :
98instantiation188, 112  ⊢  
  : , : , :
99instantiation195  ⊢  
  :
100instantiation113  ⊢  
  : , : , :
101generalization114  ⊢  
102conjecture  ⊢  
 proveit.numbers.exponentiation.complex_x_to_first_power_is_x
103conjecture  ⊢  
 proveit.numbers.addition.add_complex_closure_bin
104instantiation115, 200, 182  ⊢  
  : , :
105instantiation115, 200, 193  ⊢  
  : , :
106instantiation119, 215, 218, 177, 116, 178, 130, 200, 182  ⊢  
  : , : , : , : , : , :
107instantiation173, 117, 118  ⊢  
  : , : , :
108instantiation187, 182  ⊢  
  :
109instantiation119, 215, 218, 177, 120, 178, 130, 200, 193  ⊢  
  : , : , : , : , : , :
110instantiation173, 121, 127  ⊢  
  : , : , :
111instantiation216, 213, 122  ⊢  
  : , : , :
112modus ponens123, 124  ⊢  
113conjecture  ⊢  
 proveit.numbers.summation.summation_complex_closure
114instantiation216, 205, 125,  ⊢  
  : , : , :
115conjecture  ⊢  
 proveit.numbers.multiplication.mult_complex_closure_bin
116instantiation191  ⊢  
  : , :
117instantiation126, 177, 218, 215, 178, 129, 130, 200, 182  ⊢  
  : , : , : , : , : , :
118instantiation188, 127  ⊢  
  : , : , :
119conjecture  ⊢  
 proveit.numbers.multiplication.disassociation
120instantiation191  ⊢  
  : , :
121instantiation128, 218, 177, 129, 178, 130, 200  ⊢  
  : , : , : , :
122instantiation131, 160, 212  ⊢  
  : , :
123instantiation132, 196  ⊢  
  : , : , : , : , : , :
124generalization133  ⊢  
125instantiation216, 210, 134,  ⊢  
  : , : , :
126conjecture  ⊢  
 proveit.numbers.multiplication.association
127instantiation141, 135, 136  ⊢  
  : , : , :
128conjecture  ⊢  
 proveit.numbers.multiplication.elim_one_any
129instantiation191  ⊢  
  : , :
130instantiation137, 193, 200, 138  ⊢  
  : , :
131conjecture  ⊢  
 proveit.numbers.addition.add_int_closure_bin
132axiom  ⊢  
 proveit.core_expr_types.lambda_maps.lambda_substitution
133instantiation188, 139  ⊢  
  : , : , :
134instantiation216, 213, 140,  ⊢  
  : , : , :
135instantiation141, 142, 143  ⊢  
  : , : , :
136instantiation144, 145, 146, 147  ⊢  
  : , : , : , :
137conjecture  ⊢  
 proveit.numbers.division.div_complex_closure
138instantiation148, 198  ⊢  
  :
139instantiation188, 149  ⊢  
  : , : , :
140instantiation216, 150, 151,  ⊢  
  : , : , :
141theorem  ⊢  
 proveit.logic.equality.sub_right_side_into
142instantiation152, 193, 153, 154  ⊢  
  : , : , : , : , :
143instantiation173, 155, 156  ⊢  
  : , : , :
144conjecture  ⊢  
 proveit.logic.equality.four_chain_transitivity
145instantiation188, 157  ⊢  
  : , : , :
146instantiation188, 157  ⊢  
  : , : , :
147instantiation199, 193  ⊢  
  :
148conjecture  ⊢  
 proveit.numbers.number_sets.natural_numbers.nonzero_if_is_nat_pos
149instantiation188, 158  ⊢  
  : , : , :
150instantiation159, 212, 160  ⊢  
  : , :
151assumption  ⊢  
152conjecture  ⊢  
 proveit.numbers.division.mult_frac_cancel_denom_left
153instantiation216, 162, 161  ⊢  
  : , : , :
154instantiation216, 162, 163  ⊢  
  : , : , :
155instantiation188, 164  ⊢  
  : , : , :
156instantiation188, 165  ⊢  
  : , : , :
157instantiation190, 193  ⊢  
  :
158instantiation173, 166, 167  ⊢  
  : , : , :
159conjecture  ⊢  
 proveit.numbers.number_sets.integers.int_interval_within_int
160instantiation216, 168, 204  ⊢  
  : , : , :
161instantiation216, 170, 169  ⊢  
  : , : , :
162conjecture  ⊢  
 proveit.numbers.number_sets.complex_numbers.real_nonzero_within_complex_nonzero
163instantiation216, 170, 171  ⊢  
  : , : , :
164instantiation188, 172  ⊢  
  : , : , :
165instantiation173, 174, 175  ⊢  
  : , : , :
166instantiation176, 177, 218, 215, 178, 179, 182, 193, 180  ⊢  
  : , : , : , : , : , :
167instantiation181, 193, 182, 183  ⊢  
  : , : , :
168conjecture  ⊢  
 proveit.numbers.number_sets.integers.nat_pos_within_int
169instantiation216, 185, 184  ⊢  
  : , : , :
170conjecture  ⊢  
 proveit.numbers.number_sets.real_numbers.rational_nonzero_within_real_nonzero
171instantiation216, 185, 186  ⊢  
  : , : , :
172instantiation187, 200  ⊢  
  :
173axiom  ⊢  
 proveit.logic.equality.equals_transitivity
174instantiation188, 189  ⊢  
  : , : , :
175instantiation190, 200  ⊢  
  :
176conjecture  ⊢  
 proveit.numbers.addition.disassociation
177axiom  ⊢  
 proveit.numbers.number_sets.natural_numbers.zero_in_nats
178conjecture  ⊢  
 proveit.core_expr_types.tuples.tuple_len_0_typical_eq
179instantiation191  ⊢  
  : , :
180instantiation192, 193  ⊢  
  :
181conjecture  ⊢  
 proveit.numbers.addition.subtraction.add_cancel_triple_23
182instantiation216, 205, 194  ⊢  
  : , : , :
183instantiation195  ⊢  
  :
184instantiation216, 197, 196  ⊢  
  : , : , :
185conjecture  ⊢  
 proveit.numbers.number_sets.rational_numbers.nonzero_int_within_rational_nonzero
186instantiation216, 197, 198  ⊢  
  : , : , :
187conjecture  ⊢  
 proveit.numbers.multiplication.elim_one_left
188axiom  ⊢  
 proveit.logic.equality.substitution
189instantiation199, 200  ⊢  
  :
190conjecture  ⊢  
 proveit.numbers.division.frac_one_denom
191conjecture  ⊢  
 proveit.numbers.numerals.decimals.tuple_len_2_typical_eq
192conjecture  ⊢  
 proveit.numbers.negation.complex_closure
193instantiation216, 205, 201  ⊢  
  : , : , :
194instantiation202, 203, 204  ⊢  
  : , : , :
195axiom  ⊢  
 proveit.logic.equality.equals_reflexivity
196conjecture  ⊢  
 proveit.numbers.numerals.decimals.posnat1
197conjecture  ⊢  
 proveit.numbers.number_sets.integers.nat_pos_within_nonzero_int
198conjecture  ⊢  
 proveit.numbers.numerals.decimals.posnat2
199conjecture  ⊢  
 proveit.numbers.multiplication.elim_one_right
200instantiation216, 205, 206  ⊢  
  : , : , :
201instantiation216, 210, 207  ⊢  
  : , : , :
202theorem  ⊢  
 proveit.logic.sets.inclusion.unfold_subset_eq
203instantiation208, 209  ⊢  
  : , :
204assumption  ⊢  
205conjecture  ⊢  
 proveit.numbers.number_sets.complex_numbers.real_within_complex
206instantiation216, 210, 211  ⊢  
  : , : , :
207instantiation216, 213, 212  ⊢  
  : , : , :
208theorem  ⊢  
 proveit.logic.sets.inclusion.relax_proper_subset
209conjecture  ⊢  
 proveit.numbers.number_sets.real_numbers.nat_pos_within_real
210conjecture  ⊢  
 proveit.numbers.number_sets.real_numbers.rational_within_real
211instantiation216, 213, 214  ⊢  
  : , : , :
212instantiation216, 217, 215  ⊢  
  : , : , :
213conjecture  ⊢  
 proveit.numbers.number_sets.rational_numbers.int_within_rational
214instantiation216, 217, 218  ⊢  
  : , : , :
215theorem  ⊢  
 proveit.numbers.numerals.decimals.nat1
216theorem  ⊢  
 proveit.logic.sets.inclusion.superset_membership_from_proper_subset
217conjecture  ⊢  
 proveit.numbers.number_sets.integers.nat_within_int
218conjecture  ⊢  
 proveit.numbers.numerals.decimals.nat2
*equality replacement requirements