Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Exact expanded first-order arithmetic statement
forall a b d k. a = b + d -> exists A B R T Q C H. (((exists pa_b_olte_resultA pa_c_olte_resultA. ((forall pa_i_olte_resultA_repeat. (exists pa_lt_olte_resultA_repeat_bound. pa_lt_olte_resultA_repeat_bound + S pa_i_olte_resultA_repeat = S (S (k))) -> (((exists pa_h_olte_resultA_repeat_decoded. pa_h_olte_resultA_repeat_decoded + S (a) = S ((S (pa_i_olte_resultA_repeat)) * pa_c_olte_resultA)) /\ exists pa_q_olte_resultA_repeat_decoded. pa_b_olte_resultA = pa_q_olte_resultA_repeat_decoded * S ((S (pa_i_olte_resultA_repeat)) * pa_c_olte_resultA) + (a)))) /\ (exists pa_u_olte_resultA_product pa_v_olte_resultA_product. ((((exists pa_h_olte_resultA_product_start. pa_h_olte_resultA_product_start + S (1) = S ((S (0)) * pa_v_olte_resultA_product)) /\ exists pa_q_olte_resultA_product_start. pa_u_olte_resultA_product = pa_q_olte_resultA_product_start * S ((S (0)) * pa_v_olte_resultA_product) + (1))) /\ ((((exists pa_h_olte_resultA_product_terminal. pa_h_olte_resultA_product_terminal + S (A) = S ((S (S (S (k)))) * pa_v_olte_resultA_product)) /\ exists pa_q_olte_resultA_product_terminal. pa_u_olte_resultA_product = pa_q_olte_resultA_product_terminal * S ((S (S (S (k)))) * pa_v_olte_resultA_product) + (A))) /\ forall pa_i_olte_resultA_product. (exists pa_lt_olte_resultA_product_bound. pa_lt_olte_resultA_product_bound + S pa_i_olte_resultA_product = S (S (k))) -> exists pa_p_olte_resultA_product pa_r_olte_resultA_product pa_s_olte_resultA_product. ((((exists pa_h_olte_resultA_product_factor. pa_h_olte_resultA_product_factor + S (pa_p_olte_resultA_product) = S ((S (pa_i_olte_resultA_product)) * pa_c_olte_resultA)) /\ exists pa_q_olte_resultA_product_factor. pa_b_olte_resultA = pa_q_olte_resultA_product_factor * S ((S (pa_i_olte_resultA_product)) * pa_c_olte_resultA) + (pa_p_olte_resultA_product))) /\ ((((exists pa_h_olte_resultA_product_partial. pa_h_olte_resultA_product_partial + S (pa_r_olte_resultA_product) = S ((S (pa_i_olte_resultA_product)) * pa_v_olte_resultA_product)) /\ exists pa_q_olte_resultA_product_partial. pa_u_olte_resultA_product = pa_q_olte_resultA_product_partial * S ((S (pa_i_olte_resultA_product)) * pa_v_olte_resultA_product) + (pa_r_olte_resultA_product))) /\ ((((exists pa_h_olte_resultA_product_successor. pa_h_olte_resultA_product_successor + S (pa_s_olte_resultA_product) = S ((S (S pa_i_olte_resultA_product)) * pa_v_olte_resultA_product)) /\ exists pa_q_olte_resultA_product_successor. pa_u_olte_resultA_product = pa_q_olte_resultA_product_successor * S ((S (S pa_i_olte_resultA_product)) * pa_v_olte_resultA_product) + (pa_s_olte_resultA_product))) /\ pa_s_olte_resultA_product = pa_r_olte_resultA_product * pa_p_olte_resultA_product)))))))) /\ (((exists pa_b_olte_resultB pa_c_olte_resultB. ((forall pa_i_olte_resultB_repeat. (exists pa_lt_olte_resultB_repeat_bound. pa_lt_olte_resultB_repeat_bound + S pa_i_olte_resultB_repeat = S (S (k))) -> (((exists pa_h_olte_resultB_repeat_decoded. pa_h_olte_resultB_repeat_decoded + S (b) = S ((S (pa_i_olte_resultB_repeat)) * pa_c_olte_resultB)) /\ exists pa_q_olte_resultB_repeat_decoded. pa_b_olte_resultB = pa_q_olte_resultB_repeat_decoded * S ((S (pa_i_olte_resultB_repeat)) * pa_c_olte_resultB) + (b)))) /\ (exists pa_u_olte_resultB_product pa_v_olte_resultB_product. ((((exists pa_h_olte_resultB_product_start. pa_h_olte_resultB_product_start + S (1) = S ((S (0)) * pa_v_olte_resultB_product)) /\ exists pa_q_olte_resultB_product_start. pa_u_olte_resultB_product = pa_q_olte_resultB_product_start * S ((S (0)) * pa_v_olte_resultB_product) + (1))) /\ ((((exists pa_h_olte_resultB_product_terminal. pa_h_olte_resultB_product_terminal + S (B) = S ((S (S (S (k)))) * pa_v_olte_resultB_product)) /\ exists pa_q_olte_resultB_product_terminal. pa_u_olte_resultB_product = pa_q_olte_resultB_product_terminal * S ((S (S (S (k)))) * pa_v_olte_resultB_product) + (B))) /\ forall pa_i_olte_resultB_product. (exists pa_lt_olte_resultB_product_bound. pa_lt_olte_resultB_product_bound + S pa_i_olte_resultB_product = S (S (k))) -> exists pa_p_olte_resultB_product pa_r_olte_resultB_product pa_s_olte_resultB_product. ((((exists pa_h_olte_resultB_product_factor. pa_h_olte_resultB_product_factor + S (pa_p_olte_resultB_product) = S ((S (pa_i_olte_resultB_product)) * pa_c_olte_resultB)) /\ exists pa_q_olte_resultB_product_factor. pa_b_olte_resultB = pa_q_olte_resultB_product_factor * S ((S (pa_i_olte_resultB_product)) * pa_c_olte_resultB) + (pa_p_olte_resultB_product))) /\ ((((exists pa_h_olte_resultB_product_partial. pa_h_olte_resultB_product_partial + S (pa_r_olte_resultB_product) = S ((S (pa_i_olte_resultB_product)) * pa_v_olte_resultB_product)) /\ exists pa_q_olte_resultB_product_partial. pa_u_olte_resultB_product = pa_q_olte_resultB_product_partial * S ((S (pa_i_olte_resultB_product)) * pa_v_olte_resultB_product) + (pa_r_olte_resultB_product))) /\ ((((exists pa_h_olte_resultB_product_successor. pa_h_olte_resultB_product_successor + S (pa_s_olte_resultB_product) = S ((S (S pa_i_olte_resultB_product)) * pa_v_olte_resultB_product)) /\ exists pa_q_olte_resultB_product_successor. pa_u_olte_resultB_product = pa_q_olte_resultB_product_successor * S ((S (S pa_i_olte_resultB_product)) * pa_v_olte_resultB_product) + (pa_s_olte_resultB_product))) /\ pa_s_olte_resultB_product = pa_r_olte_resultB_product * pa_p_olte_resultB_product)))))))) /\ (((exists pa_b_olte_resultR pa_c_olte_resultR. ((forall pa_i_olte_resultR_repeat. (exists pa_lt_olte_resultR_repeat_bound. pa_lt_olte_resultR_repeat_bound + S pa_i_olte_resultR_repeat = S (k)) -> (((exists pa_h_olte_resultR_repeat_decoded. pa_h_olte_resultR_repeat_decoded + S (b) = S ((S (pa_i_olte_resultR_repeat)) * pa_c_olte_resultR)) /\ exists pa_q_olte_resultR_repeat_decoded. pa_b_olte_resultR = pa_q_olte_resultR_repeat_decoded * S ((S (pa_i_olte_resultR_repeat)) * pa_c_olte_resultR) + (b)))) /\ (exists pa_u_olte_resultR_product pa_v_olte_resultR_product. ((((exists pa_h_olte_resultR_product_start. pa_h_olte_resultR_product_start + S (1) = S ((S (0)) * pa_v_olte_resultR_product)) /\ exists pa_q_olte_resultR_product_start. pa_u_olte_resultR_product = pa_q_olte_resultR_product_start * S ((S (0)) * pa_v_olte_resultR_product) + (1))) /\ ((((exists pa_h_olte_resultR_product_terminal. pa_h_olte_resultR_product_terminal + S (R) = S ((S (S (k))) * pa_v_olte_resultR_product)) /\ exists pa_q_olte_resultR_product_terminal. pa_u_olte_resultR_product = pa_q_olte_resultR_product_terminal * S ((S (S (k))) * pa_v_olte_resultR_product) + (R))) /\ forall pa_i_olte_resultR_product. (exists pa_lt_olte_resultR_product_bound. pa_lt_olte_resultR_product_bound + S pa_i_olte_resultR_product = S (k)) -> exists pa_p_olte_resultR_product pa_r_olte_resultR_product pa_s_olte_resultR_product. ((((exists pa_h_olte_resultR_product_factor. pa_h_olte_resultR_product_factor + S (pa_p_olte_resultR_product) = S ((S (pa_i_olte_resultR_product)) * pa_c_olte_resultR)) /\ exists pa_q_olte_resultR_product_factor. pa_b_olte_resultR = pa_q_olte_resultR_product_factor * S ((S (pa_i_olte_resultR_product)) * pa_c_olte_resultR) + (pa_p_olte_resultR_product))) /\ ((((exists pa_h_olte_resultR_product_partial. pa_h_olte_resultR_product_partial + S (pa_r_olte_resultR_product) = S ((S (pa_i_olte_resultR_product)) * pa_v_olte_resultR_product)) /\ exists pa_q_olte_resultR_product_partial. pa_u_olte_resultR_product = pa_q_olte_resultR_product_partial * S ((S (pa_i_olte_resultR_product)) * pa_v_olte_resultR_product) + (pa_r_olte_resultR_product))) /\ ((((exists pa_h_olte_resultR_product_successor. pa_h_olte_resultR_product_successor + S (pa_s_olte_resultR_product) = S ((S (S pa_i_olte_resultR_product)) * pa_v_olte_resultR_product)) /\ exists pa_q_olte_resultR_product_successor. pa_u_olte_resultR_product = pa_q_olte_resultR_product_successor * S ((S (S pa_i_olte_resultR_product)) * pa_v_olte_resultR_product) + (pa_s_olte_resultR_product))) /\ pa_s_olte_resultR_product = pa_r_olte_resultR_product * pa_p_olte_resultR_product)))))))) /\ (((exists pa_b_olte_resultT pa_c_olte_resultT. ((forall pa_i_olte_resultT_repeat. (exists pa_lt_olte_resultT_repeat_bound. pa_lt_olte_resultT_repeat_bound + S pa_i_olte_resultT_repeat = k) -> (((exists pa_h_olte_resultT_repeat_decoded. pa_h_olte_resultT_repeat_decoded + S (b) = S ((S (pa_i_olte_resultT_repeat)) * pa_c_olte_resultT)) /\ exists pa_q_olte_resultT_repeat_decoded. pa_b_olte_resultT = pa_q_olte_resultT_repeat_decoded * S ((S (pa_i_olte_resultT_repeat)) * pa_c_olte_resultT) + (b)))) /\ (exists pa_u_olte_resultT_product pa_v_olte_resultT_product. ((((exists pa_h_olte_resultT_product_start. pa_h_olte_resultT_product_start + S (1) = S ((S (0)) * pa_v_olte_resultT_product)) /\ exists pa_q_olte_resultT_product_start. pa_u_olte_resultT_product = pa_q_olte_resultT_product_start * S ((S (0)) * pa_v_olte_resultT_product) + (1))) /\ ((((exists pa_h_olte_resultT_product_terminal. pa_h_olte_resultT_product_terminal + S (T) = S ((S (k)) * pa_v_olte_resultT_product)) /\ exists pa_q_olte_resultT_product_terminal. pa_u_olte_resultT_product = pa_q_olte_resultT_product_terminal * S ((S (k)) * pa_v_olte_resultT_product) + (T))) /\ forall pa_i_olte_resultT_product. (exists pa_lt_olte_resultT_product_bound. pa_lt_olte_resultT_product_bound + S pa_i_olte_resultT_product = k) -> exists pa_p_olte_resultT_product pa_r_olte_resultT_product pa_s_olte_resultT_product. ((((exists pa_h_olte_resultT_product_factor. pa_h_olte_resultT_product_factor + S (pa_p_olte_resultT_product) = S ((S (pa_i_olte_resultT_product)) * pa_c_olte_resultT)) /\ exists pa_q_olte_resultT_product_factor. pa_b_olte_resultT = pa_q_olte_resultT_product_factor * S ((S (pa_i_olte_resultT_product)) * pa_c_olte_resultT) + (pa_p_olte_resultT_product))) /\ ((((exists pa_h_olte_resultT_product_partial. pa_h_olte_resultT_product_partial + S (pa_r_olte_resultT_product) = S ((S (pa_i_olte_resultT_product)) * pa_v_olte_resultT_product)) /\ exists pa_q_olte_resultT_product_partial. pa_u_olte_resultT_product = pa_q_olte_resultT_product_partial * S ((S (pa_i_olte_resultT_product)) * pa_v_olte_resultT_product) + (pa_r_olte_resultT_product))) /\ ((((exists pa_h_olte_resultT_product_successor. pa_h_olte_resultT_product_successor + S (pa_s_olte_resultT_product) = S ((S (S pa_i_olte_resultT_product)) * pa_v_olte_resultT_product)) /\ exists pa_q_olte_resultT_product_successor. pa_u_olte_resultT_product = pa_q_olte_resultT_product_successor * S ((S (S pa_i_olte_resultT_product)) * pa_v_olte_resultT_product) + (pa_s_olte_resultT_product))) /\ pa_s_olte_resultT_product = pa_r_olte_resultT_product * pa_p_olte_resultT_product)))))))) /\ ((((A) = (B) + (d) * (Q)) /\ ((((Q) = S (S (k)) * (R) + (d) * (C)) /\ (2 * (C) = (S (S (k)) * S (k)) * (T) + (d) * (H))))))))))))))Constructive proof overview
Generated structural guide
Construct the real powers, difference quotient, first correction, and doubled triangular correction at every exponent at least two.
The unchanged tactic script uses 20 declared prerequisites and contains 164 exact native proof lines.
Alpha v34 checked-use · first admitted v29 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
EL0007 lte_power_zero_exact EL0008 lte_power_one_exact EL0009 lte_power_two_exact EL0001 lte_natural_difference_square EL0002 lte_natural_difference_successor EL0003 lte_first_correction_successor EL0006 lte_twice_correction_successor pow_successor_pair_mul Stable theorem; checked-use authorized pow_successor_compose Alpha theorem; checked-use authorized mul_comm Stable theorem; checked-use authorized mul_one Stable theorem; checked-use authorized add_mul Stable theorem; checked-use authorized mul_add Stable theorem; checked-use authorized mul_assoc Stable theorem; checked-use authorized add_assoc Stable theorem; checked-use authorized add_comm Stable theorem; checked-use authorized mul_succ_left Stable theorem; checked-use authorized mul_zero_left Stable theorem; checked-use authorized zero_add Stable theorem; checked-use authorized one_mul Stable theorem; checked-use authorizedDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply Stable membership.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (7)
01Fix variables and assumptionsL1–3
02Induction on kL4–5
03Construct an explicit witnessL6–12
04Separate the logical casesL13–13
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L13
split
05Use earlier factsL14–15
06Separate the logical casesL16–16
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L16
split
07Use earlier factsL17–18
08Separate the logical casesL19–19
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L19
split
09Use earlier factsL20–21
10Separate the logical casesL22–22
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L22
split
11Use earlier factsL23–24
12Separate the logical casesL25–25
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L25
split
13Use earlier factsL26–30
14Separate the logical casesL31–31
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L31
split
15Calculate and transport equalitiesL32–41
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
16Calculate and transport equalitiesL42–44
17Use earlier factsL45–45
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L45
apply add_comm
18Calculate and transport equalitiesL46–55
19Calculate and transport equalitiesL56–58
20Fix variables and assumptionsL59–59
Work with arbitrary variables or the premises of the current implication.
- L59
intro ha
21Establish hprefixL60–62
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L60
have hprefix : ∃ A. ∃ B. ∃ R. ∃ T. ∃ Q. ∃ C. ∃ H. PowerDifferenceSecondOrder(a,b,d,k,A,B,R,T,Q,C,H)Definitions: PowerDifferenceSecondOrder - L61
apply IH - L62
exact ha
22Separate the logical casesL63–72
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L63
cases hprefix - L64
cases hprefix_witness - L65
cases hprefix_witness_witness - L66
cases hprefix_witness_witness_witness - L67
cases hprefix_witness_witness_witness_witness - L68
cases hprefix_witness_witness_witness_witness_witness - L69
cases hprefix_witness_witness_witness_witness_witness_witness - L70
cases hprefix_witness_witness_witness_witness_witness_witness_witness - L71
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right - L72
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right_right
23Separate the logical casesL73–75
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
24Establish hBL76–85
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor pair mul.
- L76
have hB : x1 = b * x2 - L77
trans x2 * b - L78
specialize pow_successor_pair_mul (b) - L79
specialize pow_successor_pair_mul (S k) - L80
specialize pow_successor_pair_mul (S (S k)) - L81
specialize pow_successor_pair_mul (x2) - L82
specialize pow_successor_pair_mul (x1) - L83
apply pow_successor_pair_mul - L84
refl - L85
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_left
25Use earlier factsL86–87
26Establish hRL88–97
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor pair mul.
- L88
have hR : x2 = b * x3 - L89
trans x3 * b - L90
specialize pow_successor_pair_mul (b) - L91
specialize pow_successor_pair_mul (k) - L92
specialize pow_successor_pair_mul (S k) - L93
specialize pow_successor_pair_mul (x3) - L94
specialize pow_successor_pair_mul (x2) - L95
apply pow_successor_pair_mul - L96
refl - L97
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_left
27Use earlier factsL98–99
28Construct an explicit witnessL100–106
29Separate the logical casesL107–107
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L107
split
30Use earlier factsL108–114
Instantiate or apply named facts and discharge the corresponding proof obligations.
31Separate the logical casesL115–115
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L115
split
32Use earlier factsL116–122
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L116
specialize pow_successor_compose (b) - L117
specialize pow_successor_compose (S (S k)) - L118
specialize pow_successor_compose (x1) - L119
specialize pow_successor_compose (b * x1) - L120
apply pow_successor_compose - L121
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_left - L122
apply mul_comm
33Separate the logical casesL123–123
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L123
split
34Use earlier factsL124–124
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L124
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_left
35Separate the logical casesL125–125
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L125
split
36Use earlier factsL126–126
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L126
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_left
37Separate the logical casesL127–127
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L127
split
38Calculate and transport equalitiesL128–128
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L128
rewrite hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_left
39Use earlier factsL129–135
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L129
specialize lte_natural_difference_successor (a) - L130
specialize lte_natural_difference_successor (b) - L131
specialize lte_natural_difference_successor (d) - L132
specialize lte_natural_difference_successor (x1) - L133
specialize lte_natural_difference_successor (x4) - L134
apply lte_natural_difference_successor - L135
exact ha
40Separate the logical casesL136–136
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L136
split
41Calculate and transport equalitiesL137–138
42Use earlier factsL139–148
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L139
specialize lte_first_correction_successor (a) - L140
specialize lte_first_correction_successor (b) - L141
specialize lte_first_correction_successor (d) - L142
specialize lte_first_correction_successor (S (S k)) - L143
specialize lte_first_correction_successor (x2) - L144
specialize lte_first_correction_successor (x4) - L145
specialize lte_first_correction_successor (x5) - L146
apply lte_first_correction_successor - L147
exact ha - L148
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right_left
43Calculate and transport equalitiesL149–149
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L149
rewrite hR
44Establish hfirstL150–159
Establish this local claim before using it. It is not an additional assumption.
- L150
have hfirst : x4 = S (S k) * (b * x3) + d * x5 - L151
trans S (S k) * x2 + d * x5 - L152
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right_left - L153
rewrite hR - L154
refl - L155
specialize lte_twice_correction_successor (b) - L156
specialize lte_twice_correction_successor (d) - L157
specialize lte_twice_correction_successor (S k) - L158
specialize lte_twice_correction_successor (x3) - L159
specialize lte_twice_correction_successor (x5)
45Use earlier factsL160–164
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original exact command ledger · 164 lines
- 0001
intro a - 0002
intro b - 0003
intro d - 0004
induction k - 0005
intro ha - 0006
exists a * a - 0007
exists b * b - 0008
exists b - 0009
exists 1 - 0010
exists a + b - 0011
exists 1 - 0012
exists 0 - 0013
split - 0014
specialize lte_power_two_exact (a) - 0015
apply lte_power_two_exact - 0016
split - 0017
specialize lte_power_two_exact (b) - 0018
apply lte_power_two_exact - 0019
split - 0020
specialize lte_power_one_exact (b) - 0021
apply lte_power_one_exact - 0022
split - 0023
specialize lte_power_zero_exact (b) - 0024
apply lte_power_zero_exact - 0025
split - 0026
specialize lte_natural_difference_square (a) - 0027
specialize lte_natural_difference_square (b) - 0028
specialize lte_natural_difference_square (d) - 0029
apply lte_natural_difference_square - 0030
exact ha - 0031
split - 0032
rewrite ha - 0033
trans ((b) + ((d) + (b))) - 0034
simp [add_mul, mul_add, mul_assoc, add_assoc, mul_succ_left, mul_zero_left, zero_add, one_mul, mul_one] - 0035
trans ((b) + ((d) + (b))) - 0036
congr - 0037
refl - 0038
congr - 0039
refl - 0040
refl - 0041
trans ((b) + ((b) + (d))) - 0042
congr - 0043
refl - 0044
trans ((b) + (d)) - 0045
apply add_comm - 0046
congr - 0047
refl - 0048
refl - 0049
trans ((b) + ((b) + (d))) - 0050
symm - 0051
congr - 0052
refl - 0053
congr - 0054
refl - 0055
refl - 0056
symm - 0057
simp [add_mul, mul_add, mul_assoc, add_assoc, mul_succ_left, mul_zero_left, zero_add, one_mul, mul_one] - 0058
simp [mul_one] - 0059
intro ha - 0060
have hprefix : exists A B R T Q C H. (((exists pa_b_olte_prefixA pa_c_olte_prefixA. ((forall pa_i_olte_prefixA_repeat. (exists pa_lt_olte_prefixA_repeat_bound. pa_lt_olte_prefixA_repeat_bound + S pa_i_olte_prefixA_repeat = S (S (k))) -> (((exists pa_h_olte_prefixA_repeat_decoded. pa_h_olte_prefixA_repeat_decoded + S (a) = S ((S (pa_i_olte_prefixA_repeat)) * pa_c_olte_prefixA)) /\ exists pa_q_olte_prefixA_repeat_decoded. pa_b_olte_prefixA = pa_q_olte_prefixA_repeat_decoded * S ((S (pa_i_olte_prefixA_repeat)) * pa_c_olte_prefixA) + (a)))) /\ (exists pa_u_olte_prefixA_product pa_v_olte_prefixA_product. ((((exists pa_h_olte_prefixA_product_start. pa_h_olte_prefixA_product_start + S (1) = S ((S (0)) * pa_v_olte_prefixA_product)) /\ exists pa_q_olte_prefixA_product_start. pa_u_olte_prefixA_product = pa_q_olte_prefixA_product_start * S ((S (0)) * pa_v_olte_prefixA_product) + (1))) /\ ((((exists pa_h_olte_prefixA_product_terminal. pa_h_olte_prefixA_product_terminal + S (A) = S ((S (S (S (k)))) * pa_v_olte_prefixA_product)) /\ exists pa_q_olte_prefixA_product_terminal. pa_u_olte_prefixA_product = pa_q_olte_prefixA_product_terminal * S ((S (S (S (k)))) * pa_v_olte_prefixA_product) + (A))) /\ forall pa_i_olte_prefixA_product. (exists pa_lt_olte_prefixA_product_bound. pa_lt_olte_prefixA_product_bound + S pa_i_olte_prefixA_product = S (S (k))) -> exists pa_p_olte_prefixA_product pa_r_olte_prefixA_product pa_s_olte_prefixA_product. ((((exists pa_h_olte_prefixA_product_factor. pa_h_olte_prefixA_product_factor + S (pa_p_olte_prefixA_product) = S ((S (pa_i_olte_prefixA_product)) * pa_c_olte_prefixA)) /\ exists pa_q_olte_prefixA_product_factor. pa_b_olte_prefixA = pa_q_olte_prefixA_product_factor * S ((S (pa_i_olte_prefixA_product)) * pa_c_olte_prefixA) + (pa_p_olte_prefixA_product))) /\ ((((exists pa_h_olte_prefixA_product_partial. pa_h_olte_prefixA_product_partial + S (pa_r_olte_prefixA_product) = S ((S (pa_i_olte_prefixA_product)) * pa_v_olte_prefixA_product)) /\ exists pa_q_olte_prefixA_product_partial. pa_u_olte_prefixA_product = pa_q_olte_prefixA_product_partial * S ((S (pa_i_olte_prefixA_product)) * pa_v_olte_prefixA_product) + (pa_r_olte_prefixA_product))) /\ ((((exists pa_h_olte_prefixA_product_successor. pa_h_olte_prefixA_product_successor + S (pa_s_olte_prefixA_product) = S ((S (S pa_i_olte_prefixA_product)) * pa_v_olte_prefixA_product)) /\ exists pa_q_olte_prefixA_product_successor. pa_u_olte_prefixA_product = pa_q_olte_prefixA_product_successor * S ((S (S pa_i_olte_prefixA_product)) * pa_v_olte_prefixA_product) + (pa_s_olte_prefixA_product))) /\ pa_s_olte_prefixA_product = pa_r_olte_prefixA_product * pa_p_olte_prefixA_product)))))))) /\ (((exists pa_b_olte_prefixB pa_c_olte_prefixB. ((forall pa_i_olte_prefixB_repeat. (exists pa_lt_olte_prefixB_repeat_bound. pa_lt_olte_prefixB_repeat_bound + S pa_i_olte_prefixB_repeat = S (S (k))) -> (((exists pa_h_olte_prefixB_repeat_decoded. pa_h_olte_prefixB_repeat_decoded + S (b) = S ((S (pa_i_olte_prefixB_repeat)) * pa_c_olte_prefixB)) /\ exists pa_q_olte_prefixB_repeat_decoded. pa_b_olte_prefixB = pa_q_olte_prefixB_repeat_decoded * S ((S (pa_i_olte_prefixB_repeat)) * pa_c_olte_prefixB) + (b)))) /\ (exists pa_u_olte_prefixB_product pa_v_olte_prefixB_product. ((((exists pa_h_olte_prefixB_product_start. pa_h_olte_prefixB_product_start + S (1) = S ((S (0)) * pa_v_olte_prefixB_product)) /\ exists pa_q_olte_prefixB_product_start. pa_u_olte_prefixB_product = pa_q_olte_prefixB_product_start * S ((S (0)) * pa_v_olte_prefixB_product) + (1))) /\ ((((exists pa_h_olte_prefixB_product_terminal. pa_h_olte_prefixB_product_terminal + S (B) = S ((S (S (S (k)))) * pa_v_olte_prefixB_product)) /\ exists pa_q_olte_prefixB_product_terminal. pa_u_olte_prefixB_product = pa_q_olte_prefixB_product_terminal * S ((S (S (S (k)))) * pa_v_olte_prefixB_product) + (B))) /\ forall pa_i_olte_prefixB_product. (exists pa_lt_olte_prefixB_product_bound. pa_lt_olte_prefixB_product_bound + S pa_i_olte_prefixB_product = S (S (k))) -> exists pa_p_olte_prefixB_product pa_r_olte_prefixB_product pa_s_olte_prefixB_product. ((((exists pa_h_olte_prefixB_product_factor. pa_h_olte_prefixB_product_factor + S (pa_p_olte_prefixB_product) = S ((S (pa_i_olte_prefixB_product)) * pa_c_olte_prefixB)) /\ exists pa_q_olte_prefixB_product_factor. pa_b_olte_prefixB = pa_q_olte_prefixB_product_factor * S ((S (pa_i_olte_prefixB_product)) * pa_c_olte_prefixB) + (pa_p_olte_prefixB_product))) /\ ((((exists pa_h_olte_prefixB_product_partial. pa_h_olte_prefixB_product_partial + S (pa_r_olte_prefixB_product) = S ((S (pa_i_olte_prefixB_product)) * pa_v_olte_prefixB_product)) /\ exists pa_q_olte_prefixB_product_partial. pa_u_olte_prefixB_product = pa_q_olte_prefixB_product_partial * S ((S (pa_i_olte_prefixB_product)) * pa_v_olte_prefixB_product) + (pa_r_olte_prefixB_product))) /\ ((((exists pa_h_olte_prefixB_product_successor. pa_h_olte_prefixB_product_successor + S (pa_s_olte_prefixB_product) = S ((S (S pa_i_olte_prefixB_product)) * pa_v_olte_prefixB_product)) /\ exists pa_q_olte_prefixB_product_successor. pa_u_olte_prefixB_product = pa_q_olte_prefixB_product_successor * S ((S (S pa_i_olte_prefixB_product)) * pa_v_olte_prefixB_product) + (pa_s_olte_prefixB_product))) /\ pa_s_olte_prefixB_product = pa_r_olte_prefixB_product * pa_p_olte_prefixB_product)))))))) /\ (((exists pa_b_olte_prefixR pa_c_olte_prefixR. ((forall pa_i_olte_prefixR_repeat. (exists pa_lt_olte_prefixR_repeat_bound. pa_lt_olte_prefixR_repeat_bound + S pa_i_olte_prefixR_repeat = S (k)) -> (((exists pa_h_olte_prefixR_repeat_decoded. pa_h_olte_prefixR_repeat_decoded + S (b) = S ((S (pa_i_olte_prefixR_repeat)) * pa_c_olte_prefixR)) /\ exists pa_q_olte_prefixR_repeat_decoded. pa_b_olte_prefixR = pa_q_olte_prefixR_repeat_decoded * S ((S (pa_i_olte_prefixR_repeat)) * pa_c_olte_prefixR) + (b)))) /\ (exists pa_u_olte_prefixR_product pa_v_olte_prefixR_product. ((((exists pa_h_olte_prefixR_product_start. pa_h_olte_prefixR_product_start + S (1) = S ((S (0)) * pa_v_olte_prefixR_product)) /\ exists pa_q_olte_prefixR_product_start. pa_u_olte_prefixR_product = pa_q_olte_prefixR_product_start * S ((S (0)) * pa_v_olte_prefixR_product) + (1))) /\ ((((exists pa_h_olte_prefixR_product_terminal. pa_h_olte_prefixR_product_terminal + S (R) = S ((S (S (k))) * pa_v_olte_prefixR_product)) /\ exists pa_q_olte_prefixR_product_terminal. pa_u_olte_prefixR_product = pa_q_olte_prefixR_product_terminal * S ((S (S (k))) * pa_v_olte_prefixR_product) + (R))) /\ forall pa_i_olte_prefixR_product. (exists pa_lt_olte_prefixR_product_bound. pa_lt_olte_prefixR_product_bound + S pa_i_olte_prefixR_product = S (k)) -> exists pa_p_olte_prefixR_product pa_r_olte_prefixR_product pa_s_olte_prefixR_product. ((((exists pa_h_olte_prefixR_product_factor. pa_h_olte_prefixR_product_factor + S (pa_p_olte_prefixR_product) = S ((S (pa_i_olte_prefixR_product)) * pa_c_olte_prefixR)) /\ exists pa_q_olte_prefixR_product_factor. pa_b_olte_prefixR = pa_q_olte_prefixR_product_factor * S ((S (pa_i_olte_prefixR_product)) * pa_c_olte_prefixR) + (pa_p_olte_prefixR_product))) /\ ((((exists pa_h_olte_prefixR_product_partial. pa_h_olte_prefixR_product_partial + S (pa_r_olte_prefixR_product) = S ((S (pa_i_olte_prefixR_product)) * pa_v_olte_prefixR_product)) /\ exists pa_q_olte_prefixR_product_partial. pa_u_olte_prefixR_product = pa_q_olte_prefixR_product_partial * S ((S (pa_i_olte_prefixR_product)) * pa_v_olte_prefixR_product) + (pa_r_olte_prefixR_product))) /\ ((((exists pa_h_olte_prefixR_product_successor. pa_h_olte_prefixR_product_successor + S (pa_s_olte_prefixR_product) = S ((S (S pa_i_olte_prefixR_product)) * pa_v_olte_prefixR_product)) /\ exists pa_q_olte_prefixR_product_successor. pa_u_olte_prefixR_product = pa_q_olte_prefixR_product_successor * S ((S (S pa_i_olte_prefixR_product)) * pa_v_olte_prefixR_product) + (pa_s_olte_prefixR_product))) /\ pa_s_olte_prefixR_product = pa_r_olte_prefixR_product * pa_p_olte_prefixR_product)))))))) /\ (((exists pa_b_olte_prefixT pa_c_olte_prefixT. ((forall pa_i_olte_prefixT_repeat. (exists pa_lt_olte_prefixT_repeat_bound. pa_lt_olte_prefixT_repeat_bound + S pa_i_olte_prefixT_repeat = k) -> (((exists pa_h_olte_prefixT_repeat_decoded. pa_h_olte_prefixT_repeat_decoded + S (b) = S ((S (pa_i_olte_prefixT_repeat)) * pa_c_olte_prefixT)) /\ exists pa_q_olte_prefixT_repeat_decoded. pa_b_olte_prefixT = pa_q_olte_prefixT_repeat_decoded * S ((S (pa_i_olte_prefixT_repeat)) * pa_c_olte_prefixT) + (b)))) /\ (exists pa_u_olte_prefixT_product pa_v_olte_prefixT_product. ((((exists pa_h_olte_prefixT_product_start. pa_h_olte_prefixT_product_start + S (1) = S ((S (0)) * pa_v_olte_prefixT_product)) /\ exists pa_q_olte_prefixT_product_start. pa_u_olte_prefixT_product = pa_q_olte_prefixT_product_start * S ((S (0)) * pa_v_olte_prefixT_product) + (1))) /\ ((((exists pa_h_olte_prefixT_product_terminal. pa_h_olte_prefixT_product_terminal + S (T) = S ((S (k)) * pa_v_olte_prefixT_product)) /\ exists pa_q_olte_prefixT_product_terminal. pa_u_olte_prefixT_product = pa_q_olte_prefixT_product_terminal * S ((S (k)) * pa_v_olte_prefixT_product) + (T))) /\ forall pa_i_olte_prefixT_product. (exists pa_lt_olte_prefixT_product_bound. pa_lt_olte_prefixT_product_bound + S pa_i_olte_prefixT_product = k) -> exists pa_p_olte_prefixT_product pa_r_olte_prefixT_product pa_s_olte_prefixT_product. ((((exists pa_h_olte_prefixT_product_factor. pa_h_olte_prefixT_product_factor + S (pa_p_olte_prefixT_product) = S ((S (pa_i_olte_prefixT_product)) * pa_c_olte_prefixT)) /\ exists pa_q_olte_prefixT_product_factor. pa_b_olte_prefixT = pa_q_olte_prefixT_product_factor * S ((S (pa_i_olte_prefixT_product)) * pa_c_olte_prefixT) + (pa_p_olte_prefixT_product))) /\ ((((exists pa_h_olte_prefixT_product_partial. pa_h_olte_prefixT_product_partial + S (pa_r_olte_prefixT_product) = S ((S (pa_i_olte_prefixT_product)) * pa_v_olte_prefixT_product)) /\ exists pa_q_olte_prefixT_product_partial. pa_u_olte_prefixT_product = pa_q_olte_prefixT_product_partial * S ((S (pa_i_olte_prefixT_product)) * pa_v_olte_prefixT_product) + (pa_r_olte_prefixT_product))) /\ ((((exists pa_h_olte_prefixT_product_successor. pa_h_olte_prefixT_product_successor + S (pa_s_olte_prefixT_product) = S ((S (S pa_i_olte_prefixT_product)) * pa_v_olte_prefixT_product)) /\ exists pa_q_olte_prefixT_product_successor. pa_u_olte_prefixT_product = pa_q_olte_prefixT_product_successor * S ((S (S pa_i_olte_prefixT_product)) * pa_v_olte_prefixT_product) + (pa_s_olte_prefixT_product))) /\ pa_s_olte_prefixT_product = pa_r_olte_prefixT_product * pa_p_olte_prefixT_product)))))))) /\ ((((A) = (B) + (d) * (Q)) /\ ((((Q) = S (S (k)) * (R) + (d) * (C)) /\ (2 * (C) = (S (S (k)) * S (k)) * (T) + (d) * (H)))))))))))))) - 0061
apply IH - 0062
exact ha - 0063
cases hprefix - 0064
cases hprefix_witness - 0065
cases hprefix_witness_witness - 0066
cases hprefix_witness_witness_witness - 0067
cases hprefix_witness_witness_witness_witness - 0068
cases hprefix_witness_witness_witness_witness_witness - 0069
cases hprefix_witness_witness_witness_witness_witness_witness - 0070
cases hprefix_witness_witness_witness_witness_witness_witness_witness - 0071
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right - 0072
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right_right - 0073
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right - 0074
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right - 0075
cases hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right - 0076
have hB : x1 = b * x2 - 0077
trans x2 * b - 0078
specialize pow_successor_pair_mul (b) - 0079
specialize pow_successor_pair_mul (S k) - 0080
specialize pow_successor_pair_mul (S (S k)) - 0081
specialize pow_successor_pair_mul (x2) - 0082
specialize pow_successor_pair_mul (x1) - 0083
apply pow_successor_pair_mul - 0084
refl - 0085
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_left - 0086
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_left - 0087
apply mul_comm - 0088
have hR : x2 = b * x3 - 0089
trans x3 * b - 0090
specialize pow_successor_pair_mul (b) - 0091
specialize pow_successor_pair_mul (k) - 0092
specialize pow_successor_pair_mul (S k) - 0093
specialize pow_successor_pair_mul (x3) - 0094
specialize pow_successor_pair_mul (x2) - 0095
apply pow_successor_pair_mul - 0096
refl - 0097
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_left - 0098
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_left - 0099
apply mul_comm - 0100
exists a * x - 0101
exists b * x1 - 0102
exists x1 - 0103
exists x2 - 0104
exists a * x4 + x1 - 0105
exists b * x5 + x4 - 0106
exists b * x6 + 2 * x5 - 0107
split - 0108
specialize pow_successor_compose (a) - 0109
specialize pow_successor_compose (S (S k)) - 0110
specialize pow_successor_compose (x) - 0111
specialize pow_successor_compose (a * x) - 0112
apply pow_successor_compose - 0113
exact hprefix_witness_witness_witness_witness_witness_witness_witness_left - 0114
apply mul_comm - 0115
split - 0116
specialize pow_successor_compose (b) - 0117
specialize pow_successor_compose (S (S k)) - 0118
specialize pow_successor_compose (x1) - 0119
specialize pow_successor_compose (b * x1) - 0120
apply pow_successor_compose - 0121
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_left - 0122
apply mul_comm - 0123
split - 0124
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_left - 0125
split - 0126
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_left - 0127
split - 0128
rewrite hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_left - 0129
specialize lte_natural_difference_successor (a) - 0130
specialize lte_natural_difference_successor (b) - 0131
specialize lte_natural_difference_successor (d) - 0132
specialize lte_natural_difference_successor (x1) - 0133
specialize lte_natural_difference_successor (x4) - 0134
apply lte_natural_difference_successor - 0135
exact ha - 0136
split - 0137
rewrite hB - 0138
rewrite hB - 0139
specialize lte_first_correction_successor (a) - 0140
specialize lte_first_correction_successor (b) - 0141
specialize lte_first_correction_successor (d) - 0142
specialize lte_first_correction_successor (S (S k)) - 0143
specialize lte_first_correction_successor (x2) - 0144
specialize lte_first_correction_successor (x4) - 0145
specialize lte_first_correction_successor (x5) - 0146
apply lte_first_correction_successor - 0147
exact ha - 0148
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right_left - 0149
rewrite hR - 0150
have hfirst : x4 = S (S k) * (b * x3) + d * x5 - 0151
trans S (S k) * x2 + d * x5 - 0152
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right_left - 0153
rewrite hR - 0154
refl - 0155
specialize lte_twice_correction_successor (b) - 0156
specialize lte_twice_correction_successor (d) - 0157
specialize lte_twice_correction_successor (S k) - 0158
specialize lte_twice_correction_successor (x3) - 0159
specialize lte_twice_correction_successor (x5) - 0160
specialize lte_twice_correction_successor (x4) - 0161
specialize lte_twice_correction_successor (x6) - 0162
apply lte_twice_correction_successor - 0163
exact hfirst - 0164
exact hprefix_witness_witness_witness_witness_witness_witness_witness_right_right_right_right_right_right