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 PA statement
forall p h a A. p = 2 * h + 1 -> ((~(p = 1) /\ forall frm_prime_left_euler_residue_prime frm_prime_right_euler_residue_prime. p = frm_prime_left_euler_residue_prime * frm_prime_right_euler_residue_prime -> frm_prime_left_euler_residue_prime = 1 \/ frm_prime_right_euler_residue_prime = 1)) -> (~(exists frm_factor_euler_residue_value. a = p * frm_factor_euler_residue_value)) -> (exists qr_x_euler_residue. exists qr_u_euler_residue qr_v_euler_residue. qr_x_euler_residue * qr_x_euler_residue + p * qr_u_euler_residue = a + p * qr_v_euler_residue) -> (exists ff_b_euler_residue_half ff_c_euler_residue_half. ((forall ff_i_euler_residue_half_repeat. (exists ff_lt_euler_residue_half_repeat_bound. ff_lt_euler_residue_half_repeat_bound + S ff_i_euler_residue_half_repeat = h) -> (((exists ff_h_euler_residue_half_repeat_decoded. ff_h_euler_residue_half_repeat_decoded + S (a) = S ((S (ff_i_euler_residue_half_repeat)) * ff_c_euler_residue_half)) /\ exists ff_q_euler_residue_half_repeat_decoded. ff_b_euler_residue_half = ff_q_euler_residue_half_repeat_decoded * S ((S (ff_i_euler_residue_half_repeat)) * ff_c_euler_residue_half) + (a)))) /\ (exists ff_u_euler_residue_half_product ff_v_euler_residue_half_product. ((((exists ff_h_euler_residue_half_product_start. ff_h_euler_residue_half_product_start + S (1) = S ((S (0)) * ff_v_euler_residue_half_product)) /\ exists ff_q_euler_residue_half_product_start. ff_u_euler_residue_half_product = ff_q_euler_residue_half_product_start * S ((S (0)) * ff_v_euler_residue_half_product) + (1))) /\ ((((exists ff_h_euler_residue_half_product_terminal. ff_h_euler_residue_half_product_terminal + S (A) = S ((S (h)) * ff_v_euler_residue_half_product)) /\ exists ff_q_euler_residue_half_product_terminal. ff_u_euler_residue_half_product = ff_q_euler_residue_half_product_terminal * S ((S (h)) * ff_v_euler_residue_half_product) + (A))) /\ forall ff_i_euler_residue_half_product. (exists ff_lt_euler_residue_half_product_bound. ff_lt_euler_residue_half_product_bound + S ff_i_euler_residue_half_product = h) -> exists ff_p_euler_residue_half_product ff_r_euler_residue_half_product ff_s_euler_residue_half_product. ((((exists ff_h_euler_residue_half_product_factor. ff_h_euler_residue_half_product_factor + S (ff_p_euler_residue_half_product) = S ((S (ff_i_euler_residue_half_product)) * ff_c_euler_residue_half)) /\ exists ff_q_euler_residue_half_product_factor. ff_b_euler_residue_half = ff_q_euler_residue_half_product_factor * S ((S (ff_i_euler_residue_half_product)) * ff_c_euler_residue_half) + (ff_p_euler_residue_half_product))) /\ ((((exists ff_h_euler_residue_half_product_partial. ff_h_euler_residue_half_product_partial + S (ff_r_euler_residue_half_product) = S ((S (ff_i_euler_residue_half_product)) * ff_v_euler_residue_half_product)) /\ exists ff_q_euler_residue_half_product_partial. ff_u_euler_residue_half_product = ff_q_euler_residue_half_product_partial * S ((S (ff_i_euler_residue_half_product)) * ff_v_euler_residue_half_product) + (ff_r_euler_residue_half_product))) /\ ((((exists ff_h_euler_residue_half_product_successor. ff_h_euler_residue_half_product_successor + S (ff_s_euler_residue_half_product) = S ((S (S ff_i_euler_residue_half_product)) * ff_v_euler_residue_half_product)) /\ exists ff_q_euler_residue_half_product_successor. ff_u_euler_residue_half_product = ff_q_euler_residue_half_product_successor * S ((S (S ff_i_euler_residue_half_product)) * ff_v_euler_residue_half_product) + (ff_s_euler_residue_half_product))) /\ ff_s_euler_residue_half_product = ff_r_euler_residue_half_product * ff_p_euler_residue_half_product)))))))) -> (exists wpp_mod_left_euler_residue_result wpp_mod_right_euler_residue_result. (A) + p * wpp_mod_left_euler_residue_result = (1) + p * wpp_mod_right_euler_residue_result)Structural proof guide
Generated structural guide
A nonzero quadratic residue has half power one modulo an odd prime.
Use the direct prerequisites mod_eq_zero_to_dvd_nonzero, prime_nonzero, multiple_mul_right, dvd_to_mod_zero, mod_eq_symm, mod_eq_trans, pow_exists, pow_two, pow_mul_exp, fermat_predecessor_exponent_mod_one, pow_mod_congruent as previously established PA formulas.
The proof proceeds by case analysis (4), intermediate claims (21), equality transport (2), certified simplification (1).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA008A mod_eq_zero_to_dvd_nonzero PA0031 prime_nonzero PA000C multiple_mul_right PA0021 dvd_to_mod_zero PA003L mod_eq_symm PA0024 mod_eq_trans PA0046 pow_exists PA005W pow_two PA005Y pow_mul_exp PA008L fermat_predecessor_exponent_mod_one PA005I pow_mod_congruentDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Alpha-v25 checked-use theorem is independently kernel-checked when replayed; it is not a Stable theorem.
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 (11)
01Fix variables and assumptionsL1–9
02Separate the logical casesL10–10
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L10
cases hresidue
03Establish hp0L11–16
04Establish hroot_nonzeroL17–18
05Establish hsquare_dividesL19–24
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply multiple mul right.
06Establish hsquare_zeroL25–29
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply dvd to mod zero.
- L25
have hsquare_zero : exists wpp_mod_left_euler_root_square_zero wpp_mod_right_euler_root_square_zero. (x * x) + p * wpp_mod_left_euler_root_square_zero = (0) + p * wpp_mod_right_euler_root_square_zero - L26
specialize dvd_to_mod_zero p - L27
specialize dvd_to_mod_zero (x * x) - L28
apply dvd_to_mod_zero - L29
exact hsquare_divides
07Establish hvalue_squareL30–35
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq symm.
- L30
have hvalue_square : exists wpp_mod_left_euler_value_square wpp_mod_right_euler_value_square. (a) + p * wpp_mod_left_euler_value_square = (x * x) + p * wpp_mod_right_euler_value_square - L31
specialize mod_eq_symm p - L32
specialize mod_eq_symm (x * x) - L33
specialize mod_eq_symm a - L34
apply mod_eq_symm - L35
exact hresidue_witness
08Establish hvalue_zeroL36–43
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L36
have hvalue_zero : exists wpp_mod_left_euler_value_zero wpp_mod_right_euler_value_zero. (a) + p * wpp_mod_left_euler_value_zero = (0) + p * wpp_mod_right_euler_value_zero - L37
specialize mod_eq_trans p - L38
specialize mod_eq_trans a - L39
specialize mod_eq_trans (x * x) - L40
specialize mod_eq_trans 0 - L41
apply mod_eq_trans - L42
exact hvalue_square - L43
exact hsquare_zero
09Establish hvalue_dividesL44–51
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq zero to dvd nonzero.
10Establish hroot_two_existsL52–55
11Separate the logical casesL56–56
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L56
cases hroot_two_exists
12Establish hroot_twoL57–58
13Establish hroot_two_eqL59–65
14Establish hsquare_half_existsL66–69
15Separate the logical casesL70–70
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L70
cases hsquare_half_exists
16Establish hsquare_halfL71–72
17Establish hroot_total_existsL73–76
18Separate the logical casesL77–77
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L77
cases hroot_total_exists
19Establish hroot_totalL78–79
20Establish hiteratedL80–89
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow mul exp.
21Use earlier factsL90–92
22Establish hpredecessorL93–96
23Establish hfermatL97–106
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply fermat predecessor exponent mod one.
- L97
have hfermat : exists wpp_mod_left_euler_root_fermat wpp_mod_right_euler_root_fermat. (x3) + p * wpp_mod_left_euler_root_fermat = (1) + p * wpp_mod_right_euler_root_fermat - L98
specialize fermat_predecessor_exponent_mod_one p - L99
specialize fermat_predecessor_exponent_mod_one (2 * h) - L100
specialize fermat_predecessor_exponent_mod_one x - L101
specialize fermat_predecessor_exponent_mod_one x3 - L102
apply fermat_predecessor_exponent_mod_one - L103
exact hpredecessor - L104
exact hp - L105
exact hroot_nonzero - L106
exact hroot_total
24Establish hsquare_valueL107–109
Establish this local claim before using it. It is not an additional assumption.
25Establish hpowersL110–119
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow mod congruent.
- L110
have hpowers : exists wpp_mod_left_euler_powers_congruent wpp_mod_right_euler_powers_congruent. (x2) + p * wpp_mod_left_euler_powers_congruent = (A) + p * wpp_mod_right_euler_powers_congruent - L111
specialize pow_mod_congruent p - L112
specialize pow_mod_congruent x1 - L113
specialize pow_mod_congruent a - L114
specialize pow_mod_congruent h - L115
specialize pow_mod_congruent x2 - L116
specialize pow_mod_congruent A - L117
apply pow_mod_congruent - L118
exact hsquare_value - L119
exact hsquare_half
26Use earlier factsL120–120
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L120
exact hA
27Establish hbackL121–126
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq symm.
- L121
have hback : exists wpp_mod_left_euler_value_power_back wpp_mod_right_euler_value_power_back. (A) + p * wpp_mod_left_euler_value_power_back = (x2) + p * wpp_mod_right_euler_value_power_back - L122
specialize mod_eq_symm p - L123
specialize mod_eq_symm x2 - L124
specialize mod_eq_symm A - L125
apply mod_eq_symm - L126
exact hpowers
28Establish hhalf_oneL127–136
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L127
have hhalf_one : exists wpp_mod_left_euler_root_half_one wpp_mod_right_euler_root_half_one. (x2) + p * wpp_mod_left_euler_root_half_one = (1) + p * wpp_mod_right_euler_root_half_one - L128
rewrite hiterated - L129
exact hfermat - L130
specialize mod_eq_trans p - L131
specialize mod_eq_trans A - L132
specialize mod_eq_trans x2 - L133
specialize mod_eq_trans 1 - L134
apply mod_eq_trans - L135
exact hback - L136
exact hhalf_one
Original exact command ledger · 136 lines
- 0001
intro p - 0002
intro h - 0003
intro a - 0004
intro A - 0005
intro hshape - 0006
intro hp - 0007
intro hnonzero - 0008
intro hresidue - 0009
intro hA - 0010
cases hresidue - 0011
have hp0 : ~(p = 0) - 0012
intro hpzero - 0013
specialize prime_nonzero p - 0014
apply prime_nonzero - 0015
exact hp - 0016
exact hpzero - 0017
have hroot_nonzero : ~(exists k. x = p * k) - 0018
intro hroot_divides - 0019
have hsquare_divides : exists k. x * x = p * k - 0020
specialize multiple_mul_right p - 0021
specialize multiple_mul_right x - 0022
specialize multiple_mul_right x - 0023
apply multiple_mul_right - 0024
exact hroot_divides - 0025
have hsquare_zero : exists wpp_mod_left_euler_root_square_zero wpp_mod_right_euler_root_square_zero. (x * x) + p * wpp_mod_left_euler_root_square_zero = (0) + p * wpp_mod_right_euler_root_square_zero - 0026
specialize dvd_to_mod_zero p - 0027
specialize dvd_to_mod_zero (x * x) - 0028
apply dvd_to_mod_zero - 0029
exact hsquare_divides - 0030
have hvalue_square : exists wpp_mod_left_euler_value_square wpp_mod_right_euler_value_square. (a) + p * wpp_mod_left_euler_value_square = (x * x) + p * wpp_mod_right_euler_value_square - 0031
specialize mod_eq_symm p - 0032
specialize mod_eq_symm (x * x) - 0033
specialize mod_eq_symm a - 0034
apply mod_eq_symm - 0035
exact hresidue_witness - 0036
have hvalue_zero : exists wpp_mod_left_euler_value_zero wpp_mod_right_euler_value_zero. (a) + p * wpp_mod_left_euler_value_zero = (0) + p * wpp_mod_right_euler_value_zero - 0037
specialize mod_eq_trans p - 0038
specialize mod_eq_trans a - 0039
specialize mod_eq_trans (x * x) - 0040
specialize mod_eq_trans 0 - 0041
apply mod_eq_trans - 0042
exact hvalue_square - 0043
exact hsquare_zero - 0044
have hvalue_divides : exists k. a = p * k - 0045
specialize mod_eq_zero_to_dvd_nonzero p - 0046
specialize mod_eq_zero_to_dvd_nonzero a - 0047
apply mod_eq_zero_to_dvd_nonzero - 0048
exact hp0 - 0049
exact hvalue_zero - 0050
apply hnonzero - 0051
exact hvalue_divides - 0052
have hroot_two_exists : exists R. (exists pa_b_euler_root_two_exists pa_c_euler_root_two_exists. ((forall pa_i_euler_root_two_exists_repeat. (exists pa_lt_euler_root_two_exists_repeat_bound. pa_lt_euler_root_two_exists_repeat_bound + S pa_i_euler_root_two_exists_repeat = 2) -> (((exists pa_h_euler_root_two_exists_repeat_decoded. pa_h_euler_root_two_exists_repeat_decoded + S (x) = S ((S (pa_i_euler_root_two_exists_repeat)) * pa_c_euler_root_two_exists)) /\ exists pa_q_euler_root_two_exists_repeat_decoded. pa_b_euler_root_two_exists = pa_q_euler_root_two_exists_repeat_decoded * S ((S (pa_i_euler_root_two_exists_repeat)) * pa_c_euler_root_two_exists) + (x)))) /\ (exists pa_u_euler_root_two_exists_product pa_v_euler_root_two_exists_product. ((((exists pa_h_euler_root_two_exists_product_start. pa_h_euler_root_two_exists_product_start + S (1) = S ((S (0)) * pa_v_euler_root_two_exists_product)) /\ exists pa_q_euler_root_two_exists_product_start. pa_u_euler_root_two_exists_product = pa_q_euler_root_two_exists_product_start * S ((S (0)) * pa_v_euler_root_two_exists_product) + (1))) /\ ((((exists pa_h_euler_root_two_exists_product_terminal. pa_h_euler_root_two_exists_product_terminal + S (R) = S ((S (2)) * pa_v_euler_root_two_exists_product)) /\ exists pa_q_euler_root_two_exists_product_terminal. pa_u_euler_root_two_exists_product = pa_q_euler_root_two_exists_product_terminal * S ((S (2)) * pa_v_euler_root_two_exists_product) + (R))) /\ forall pa_i_euler_root_two_exists_product. (exists pa_lt_euler_root_two_exists_product_bound. pa_lt_euler_root_two_exists_product_bound + S pa_i_euler_root_two_exists_product = 2) -> exists pa_p_euler_root_two_exists_product pa_r_euler_root_two_exists_product pa_s_euler_root_two_exists_product. ((((exists pa_h_euler_root_two_exists_product_factor. pa_h_euler_root_two_exists_product_factor + S (pa_p_euler_root_two_exists_product) = S ((S (pa_i_euler_root_two_exists_product)) * pa_c_euler_root_two_exists)) /\ exists pa_q_euler_root_two_exists_product_factor. pa_b_euler_root_two_exists = pa_q_euler_root_two_exists_product_factor * S ((S (pa_i_euler_root_two_exists_product)) * pa_c_euler_root_two_exists) + (pa_p_euler_root_two_exists_product))) /\ ((((exists pa_h_euler_root_two_exists_product_partial. pa_h_euler_root_two_exists_product_partial + S (pa_r_euler_root_two_exists_product) = S ((S (pa_i_euler_root_two_exists_product)) * pa_v_euler_root_two_exists_product)) /\ exists pa_q_euler_root_two_exists_product_partial. pa_u_euler_root_two_exists_product = pa_q_euler_root_two_exists_product_partial * S ((S (pa_i_euler_root_two_exists_product)) * pa_v_euler_root_two_exists_product) + (pa_r_euler_root_two_exists_product))) /\ ((((exists pa_h_euler_root_two_exists_product_successor. pa_h_euler_root_two_exists_product_successor + S (pa_s_euler_root_two_exists_product) = S ((S (S pa_i_euler_root_two_exists_product)) * pa_v_euler_root_two_exists_product)) /\ exists pa_q_euler_root_two_exists_product_successor. pa_u_euler_root_two_exists_product = pa_q_euler_root_two_exists_product_successor * S ((S (S pa_i_euler_root_two_exists_product)) * pa_v_euler_root_two_exists_product) + (pa_s_euler_root_two_exists_product))) /\ pa_s_euler_root_two_exists_product = pa_r_euler_root_two_exists_product * pa_p_euler_root_two_exists_product)))))))) - 0053
specialize pow_exists x - 0054
specialize pow_exists 2 - 0055
exact pow_exists - 0056
cases hroot_two_exists - 0057
have hroot_two : exists pa_b_euler_root_two pa_c_euler_root_two. ((forall pa_i_euler_root_two_repeat. (exists pa_lt_euler_root_two_repeat_bound. pa_lt_euler_root_two_repeat_bound + S pa_i_euler_root_two_repeat = 2) -> (((exists pa_h_euler_root_two_repeat_decoded. pa_h_euler_root_two_repeat_decoded + S (x) = S ((S (pa_i_euler_root_two_repeat)) * pa_c_euler_root_two)) /\ exists pa_q_euler_root_two_repeat_decoded. pa_b_euler_root_two = pa_q_euler_root_two_repeat_decoded * S ((S (pa_i_euler_root_two_repeat)) * pa_c_euler_root_two) + (x)))) /\ (exists pa_u_euler_root_two_product pa_v_euler_root_two_product. ((((exists pa_h_euler_root_two_product_start. pa_h_euler_root_two_product_start + S (1) = S ((S (0)) * pa_v_euler_root_two_product)) /\ exists pa_q_euler_root_two_product_start. pa_u_euler_root_two_product = pa_q_euler_root_two_product_start * S ((S (0)) * pa_v_euler_root_two_product) + (1))) /\ ((((exists pa_h_euler_root_two_product_terminal. pa_h_euler_root_two_product_terminal + S (x1) = S ((S (2)) * pa_v_euler_root_two_product)) /\ exists pa_q_euler_root_two_product_terminal. pa_u_euler_root_two_product = pa_q_euler_root_two_product_terminal * S ((S (2)) * pa_v_euler_root_two_product) + (x1))) /\ forall pa_i_euler_root_two_product. (exists pa_lt_euler_root_two_product_bound. pa_lt_euler_root_two_product_bound + S pa_i_euler_root_two_product = 2) -> exists pa_p_euler_root_two_product pa_r_euler_root_two_product pa_s_euler_root_two_product. ((((exists pa_h_euler_root_two_product_factor. pa_h_euler_root_two_product_factor + S (pa_p_euler_root_two_product) = S ((S (pa_i_euler_root_two_product)) * pa_c_euler_root_two)) /\ exists pa_q_euler_root_two_product_factor. pa_b_euler_root_two = pa_q_euler_root_two_product_factor * S ((S (pa_i_euler_root_two_product)) * pa_c_euler_root_two) + (pa_p_euler_root_two_product))) /\ ((((exists pa_h_euler_root_two_product_partial. pa_h_euler_root_two_product_partial + S (pa_r_euler_root_two_product) = S ((S (pa_i_euler_root_two_product)) * pa_v_euler_root_two_product)) /\ exists pa_q_euler_root_two_product_partial. pa_u_euler_root_two_product = pa_q_euler_root_two_product_partial * S ((S (pa_i_euler_root_two_product)) * pa_v_euler_root_two_product) + (pa_r_euler_root_two_product))) /\ ((((exists pa_h_euler_root_two_product_successor. pa_h_euler_root_two_product_successor + S (pa_s_euler_root_two_product) = S ((S (S pa_i_euler_root_two_product)) * pa_v_euler_root_two_product)) /\ exists pa_q_euler_root_two_product_successor. pa_u_euler_root_two_product = pa_q_euler_root_two_product_successor * S ((S (S pa_i_euler_root_two_product)) * pa_v_euler_root_two_product) + (pa_s_euler_root_two_product))) /\ pa_s_euler_root_two_product = pa_r_euler_root_two_product * pa_p_euler_root_two_product))))))) - 0058
exact hroot_two_exists_witness - 0059
have hroot_two_eq : x1 = x * x - 0060
specialize pow_two x - 0061
specialize pow_two 2 - 0062
specialize pow_two x1 - 0063
apply pow_two - 0064
refl - 0065
exact hroot_two - 0066
have hsquare_half_exists : exists R. (exists ff_b_euler_square_half_exists ff_c_euler_square_half_exists. ((forall ff_i_euler_square_half_exists_repeat. (exists ff_lt_euler_square_half_exists_repeat_bound. ff_lt_euler_square_half_exists_repeat_bound + S ff_i_euler_square_half_exists_repeat = h) -> (((exists ff_h_euler_square_half_exists_repeat_decoded. ff_h_euler_square_half_exists_repeat_decoded + S (x1) = S ((S (ff_i_euler_square_half_exists_repeat)) * ff_c_euler_square_half_exists)) /\ exists ff_q_euler_square_half_exists_repeat_decoded. ff_b_euler_square_half_exists = ff_q_euler_square_half_exists_repeat_decoded * S ((S (ff_i_euler_square_half_exists_repeat)) * ff_c_euler_square_half_exists) + (x1)))) /\ (exists ff_u_euler_square_half_exists_product ff_v_euler_square_half_exists_product. ((((exists ff_h_euler_square_half_exists_product_start. ff_h_euler_square_half_exists_product_start + S (1) = S ((S (0)) * ff_v_euler_square_half_exists_product)) /\ exists ff_q_euler_square_half_exists_product_start. ff_u_euler_square_half_exists_product = ff_q_euler_square_half_exists_product_start * S ((S (0)) * ff_v_euler_square_half_exists_product) + (1))) /\ ((((exists ff_h_euler_square_half_exists_product_terminal. ff_h_euler_square_half_exists_product_terminal + S (R) = S ((S (h)) * ff_v_euler_square_half_exists_product)) /\ exists ff_q_euler_square_half_exists_product_terminal. ff_u_euler_square_half_exists_product = ff_q_euler_square_half_exists_product_terminal * S ((S (h)) * ff_v_euler_square_half_exists_product) + (R))) /\ forall ff_i_euler_square_half_exists_product. (exists ff_lt_euler_square_half_exists_product_bound. ff_lt_euler_square_half_exists_product_bound + S ff_i_euler_square_half_exists_product = h) -> exists ff_p_euler_square_half_exists_product ff_r_euler_square_half_exists_product ff_s_euler_square_half_exists_product. ((((exists ff_h_euler_square_half_exists_product_factor. ff_h_euler_square_half_exists_product_factor + S (ff_p_euler_square_half_exists_product) = S ((S (ff_i_euler_square_half_exists_product)) * ff_c_euler_square_half_exists)) /\ exists ff_q_euler_square_half_exists_product_factor. ff_b_euler_square_half_exists = ff_q_euler_square_half_exists_product_factor * S ((S (ff_i_euler_square_half_exists_product)) * ff_c_euler_square_half_exists) + (ff_p_euler_square_half_exists_product))) /\ ((((exists ff_h_euler_square_half_exists_product_partial. ff_h_euler_square_half_exists_product_partial + S (ff_r_euler_square_half_exists_product) = S ((S (ff_i_euler_square_half_exists_product)) * ff_v_euler_square_half_exists_product)) /\ exists ff_q_euler_square_half_exists_product_partial. ff_u_euler_square_half_exists_product = ff_q_euler_square_half_exists_product_partial * S ((S (ff_i_euler_square_half_exists_product)) * ff_v_euler_square_half_exists_product) + (ff_r_euler_square_half_exists_product))) /\ ((((exists ff_h_euler_square_half_exists_product_successor. ff_h_euler_square_half_exists_product_successor + S (ff_s_euler_square_half_exists_product) = S ((S (S ff_i_euler_square_half_exists_product)) * ff_v_euler_square_half_exists_product)) /\ exists ff_q_euler_square_half_exists_product_successor. ff_u_euler_square_half_exists_product = ff_q_euler_square_half_exists_product_successor * S ((S (S ff_i_euler_square_half_exists_product)) * ff_v_euler_square_half_exists_product) + (ff_s_euler_square_half_exists_product))) /\ ff_s_euler_square_half_exists_product = ff_r_euler_square_half_exists_product * ff_p_euler_square_half_exists_product)))))))) - 0067
specialize pow_exists x1 - 0068
specialize pow_exists h - 0069
exact pow_exists - 0070
cases hsquare_half_exists - 0071
have hsquare_half : exists ff_b_euler_square_half ff_c_euler_square_half. ((forall ff_i_euler_square_half_repeat. (exists ff_lt_euler_square_half_repeat_bound. ff_lt_euler_square_half_repeat_bound + S ff_i_euler_square_half_repeat = h) -> (((exists ff_h_euler_square_half_repeat_decoded. ff_h_euler_square_half_repeat_decoded + S (x1) = S ((S (ff_i_euler_square_half_repeat)) * ff_c_euler_square_half)) /\ exists ff_q_euler_square_half_repeat_decoded. ff_b_euler_square_half = ff_q_euler_square_half_repeat_decoded * S ((S (ff_i_euler_square_half_repeat)) * ff_c_euler_square_half) + (x1)))) /\ (exists ff_u_euler_square_half_product ff_v_euler_square_half_product. ((((exists ff_h_euler_square_half_product_start. ff_h_euler_square_half_product_start + S (1) = S ((S (0)) * ff_v_euler_square_half_product)) /\ exists ff_q_euler_square_half_product_start. ff_u_euler_square_half_product = ff_q_euler_square_half_product_start * S ((S (0)) * ff_v_euler_square_half_product) + (1))) /\ ((((exists ff_h_euler_square_half_product_terminal. ff_h_euler_square_half_product_terminal + S (x2) = S ((S (h)) * ff_v_euler_square_half_product)) /\ exists ff_q_euler_square_half_product_terminal. ff_u_euler_square_half_product = ff_q_euler_square_half_product_terminal * S ((S (h)) * ff_v_euler_square_half_product) + (x2))) /\ forall ff_i_euler_square_half_product. (exists ff_lt_euler_square_half_product_bound. ff_lt_euler_square_half_product_bound + S ff_i_euler_square_half_product = h) -> exists ff_p_euler_square_half_product ff_r_euler_square_half_product ff_s_euler_square_half_product. ((((exists ff_h_euler_square_half_product_factor. ff_h_euler_square_half_product_factor + S (ff_p_euler_square_half_product) = S ((S (ff_i_euler_square_half_product)) * ff_c_euler_square_half)) /\ exists ff_q_euler_square_half_product_factor. ff_b_euler_square_half = ff_q_euler_square_half_product_factor * S ((S (ff_i_euler_square_half_product)) * ff_c_euler_square_half) + (ff_p_euler_square_half_product))) /\ ((((exists ff_h_euler_square_half_product_partial. ff_h_euler_square_half_product_partial + S (ff_r_euler_square_half_product) = S ((S (ff_i_euler_square_half_product)) * ff_v_euler_square_half_product)) /\ exists ff_q_euler_square_half_product_partial. ff_u_euler_square_half_product = ff_q_euler_square_half_product_partial * S ((S (ff_i_euler_square_half_product)) * ff_v_euler_square_half_product) + (ff_r_euler_square_half_product))) /\ ((((exists ff_h_euler_square_half_product_successor. ff_h_euler_square_half_product_successor + S (ff_s_euler_square_half_product) = S ((S (S ff_i_euler_square_half_product)) * ff_v_euler_square_half_product)) /\ exists ff_q_euler_square_half_product_successor. ff_u_euler_square_half_product = ff_q_euler_square_half_product_successor * S ((S (S ff_i_euler_square_half_product)) * ff_v_euler_square_half_product) + (ff_s_euler_square_half_product))) /\ ff_s_euler_square_half_product = ff_r_euler_square_half_product * ff_p_euler_square_half_product))))))) - 0072
exact hsquare_half_exists_witness - 0073
have hroot_total_exists : exists R. (exists pa_b_euler_root_total_exists pa_c_euler_root_total_exists. ((forall pa_i_euler_root_total_exists_repeat. (exists pa_lt_euler_root_total_exists_repeat_bound. pa_lt_euler_root_total_exists_repeat_bound + S pa_i_euler_root_total_exists_repeat = 2 * h) -> (((exists pa_h_euler_root_total_exists_repeat_decoded. pa_h_euler_root_total_exists_repeat_decoded + S (x) = S ((S (pa_i_euler_root_total_exists_repeat)) * pa_c_euler_root_total_exists)) /\ exists pa_q_euler_root_total_exists_repeat_decoded. pa_b_euler_root_total_exists = pa_q_euler_root_total_exists_repeat_decoded * S ((S (pa_i_euler_root_total_exists_repeat)) * pa_c_euler_root_total_exists) + (x)))) /\ (exists pa_u_euler_root_total_exists_product pa_v_euler_root_total_exists_product. ((((exists pa_h_euler_root_total_exists_product_start. pa_h_euler_root_total_exists_product_start + S (1) = S ((S (0)) * pa_v_euler_root_total_exists_product)) /\ exists pa_q_euler_root_total_exists_product_start. pa_u_euler_root_total_exists_product = pa_q_euler_root_total_exists_product_start * S ((S (0)) * pa_v_euler_root_total_exists_product) + (1))) /\ ((((exists pa_h_euler_root_total_exists_product_terminal. pa_h_euler_root_total_exists_product_terminal + S (R) = S ((S (2 * h)) * pa_v_euler_root_total_exists_product)) /\ exists pa_q_euler_root_total_exists_product_terminal. pa_u_euler_root_total_exists_product = pa_q_euler_root_total_exists_product_terminal * S ((S (2 * h)) * pa_v_euler_root_total_exists_product) + (R))) /\ forall pa_i_euler_root_total_exists_product. (exists pa_lt_euler_root_total_exists_product_bound. pa_lt_euler_root_total_exists_product_bound + S pa_i_euler_root_total_exists_product = 2 * h) -> exists pa_p_euler_root_total_exists_product pa_r_euler_root_total_exists_product pa_s_euler_root_total_exists_product. ((((exists pa_h_euler_root_total_exists_product_factor. pa_h_euler_root_total_exists_product_factor + S (pa_p_euler_root_total_exists_product) = S ((S (pa_i_euler_root_total_exists_product)) * pa_c_euler_root_total_exists)) /\ exists pa_q_euler_root_total_exists_product_factor. pa_b_euler_root_total_exists = pa_q_euler_root_total_exists_product_factor * S ((S (pa_i_euler_root_total_exists_product)) * pa_c_euler_root_total_exists) + (pa_p_euler_root_total_exists_product))) /\ ((((exists pa_h_euler_root_total_exists_product_partial. pa_h_euler_root_total_exists_product_partial + S (pa_r_euler_root_total_exists_product) = S ((S (pa_i_euler_root_total_exists_product)) * pa_v_euler_root_total_exists_product)) /\ exists pa_q_euler_root_total_exists_product_partial. pa_u_euler_root_total_exists_product = pa_q_euler_root_total_exists_product_partial * S ((S (pa_i_euler_root_total_exists_product)) * pa_v_euler_root_total_exists_product) + (pa_r_euler_root_total_exists_product))) /\ ((((exists pa_h_euler_root_total_exists_product_successor. pa_h_euler_root_total_exists_product_successor + S (pa_s_euler_root_total_exists_product) = S ((S (S pa_i_euler_root_total_exists_product)) * pa_v_euler_root_total_exists_product)) /\ exists pa_q_euler_root_total_exists_product_successor. pa_u_euler_root_total_exists_product = pa_q_euler_root_total_exists_product_successor * S ((S (S pa_i_euler_root_total_exists_product)) * pa_v_euler_root_total_exists_product) + (pa_s_euler_root_total_exists_product))) /\ pa_s_euler_root_total_exists_product = pa_r_euler_root_total_exists_product * pa_p_euler_root_total_exists_product)))))))) - 0074
specialize pow_exists x - 0075
specialize pow_exists (2 * h) - 0076
exact pow_exists - 0077
cases hroot_total_exists - 0078
have hroot_total : exists pa_b_euler_root_double_half pa_c_euler_root_double_half. ((forall pa_i_euler_root_double_half_repeat. (exists pa_lt_euler_root_double_half_repeat_bound. pa_lt_euler_root_double_half_repeat_bound + S pa_i_euler_root_double_half_repeat = 2 * h) -> (((exists pa_h_euler_root_double_half_repeat_decoded. pa_h_euler_root_double_half_repeat_decoded + S (x) = S ((S (pa_i_euler_root_double_half_repeat)) * pa_c_euler_root_double_half)) /\ exists pa_q_euler_root_double_half_repeat_decoded. pa_b_euler_root_double_half = pa_q_euler_root_double_half_repeat_decoded * S ((S (pa_i_euler_root_double_half_repeat)) * pa_c_euler_root_double_half) + (x)))) /\ (exists pa_u_euler_root_double_half_product pa_v_euler_root_double_half_product. ((((exists pa_h_euler_root_double_half_product_start. pa_h_euler_root_double_half_product_start + S (1) = S ((S (0)) * pa_v_euler_root_double_half_product)) /\ exists pa_q_euler_root_double_half_product_start. pa_u_euler_root_double_half_product = pa_q_euler_root_double_half_product_start * S ((S (0)) * pa_v_euler_root_double_half_product) + (1))) /\ ((((exists pa_h_euler_root_double_half_product_terminal. pa_h_euler_root_double_half_product_terminal + S (x3) = S ((S (2 * h)) * pa_v_euler_root_double_half_product)) /\ exists pa_q_euler_root_double_half_product_terminal. pa_u_euler_root_double_half_product = pa_q_euler_root_double_half_product_terminal * S ((S (2 * h)) * pa_v_euler_root_double_half_product) + (x3))) /\ forall pa_i_euler_root_double_half_product. (exists pa_lt_euler_root_double_half_product_bound. pa_lt_euler_root_double_half_product_bound + S pa_i_euler_root_double_half_product = 2 * h) -> exists pa_p_euler_root_double_half_product pa_r_euler_root_double_half_product pa_s_euler_root_double_half_product. ((((exists pa_h_euler_root_double_half_product_factor. pa_h_euler_root_double_half_product_factor + S (pa_p_euler_root_double_half_product) = S ((S (pa_i_euler_root_double_half_product)) * pa_c_euler_root_double_half)) /\ exists pa_q_euler_root_double_half_product_factor. pa_b_euler_root_double_half = pa_q_euler_root_double_half_product_factor * S ((S (pa_i_euler_root_double_half_product)) * pa_c_euler_root_double_half) + (pa_p_euler_root_double_half_product))) /\ ((((exists pa_h_euler_root_double_half_product_partial. pa_h_euler_root_double_half_product_partial + S (pa_r_euler_root_double_half_product) = S ((S (pa_i_euler_root_double_half_product)) * pa_v_euler_root_double_half_product)) /\ exists pa_q_euler_root_double_half_product_partial. pa_u_euler_root_double_half_product = pa_q_euler_root_double_half_product_partial * S ((S (pa_i_euler_root_double_half_product)) * pa_v_euler_root_double_half_product) + (pa_r_euler_root_double_half_product))) /\ ((((exists pa_h_euler_root_double_half_product_successor. pa_h_euler_root_double_half_product_successor + S (pa_s_euler_root_double_half_product) = S ((S (S pa_i_euler_root_double_half_product)) * pa_v_euler_root_double_half_product)) /\ exists pa_q_euler_root_double_half_product_successor. pa_u_euler_root_double_half_product = pa_q_euler_root_double_half_product_successor * S ((S (S pa_i_euler_root_double_half_product)) * pa_v_euler_root_double_half_product) + (pa_s_euler_root_double_half_product))) /\ pa_s_euler_root_double_half_product = pa_r_euler_root_double_half_product * pa_p_euler_root_double_half_product))))))) - 0079
exact hroot_total_exists_witness - 0080
have hiterated : x2 = x3 - 0081
specialize pow_mul_exp x - 0082
specialize pow_mul_exp 2 - 0083
specialize pow_mul_exp h - 0084
specialize pow_mul_exp (2 * h) - 0085
specialize pow_mul_exp x1 - 0086
specialize pow_mul_exp x2 - 0087
specialize pow_mul_exp x3 - 0088
apply pow_mul_exp - 0089
refl - 0090
exact hroot_two - 0091
exact hsquare_half - 0092
exact hroot_total - 0093
have hpredecessor : p = S (2 * h) - 0094
trans 2 * h + 1 - 0095
exact hshape - 0096
simp - 0097
have hfermat : exists wpp_mod_left_euler_root_fermat wpp_mod_right_euler_root_fermat. (x3) + p * wpp_mod_left_euler_root_fermat = (1) + p * wpp_mod_right_euler_root_fermat - 0098
specialize fermat_predecessor_exponent_mod_one p - 0099
specialize fermat_predecessor_exponent_mod_one (2 * h) - 0100
specialize fermat_predecessor_exponent_mod_one x - 0101
specialize fermat_predecessor_exponent_mod_one x3 - 0102
apply fermat_predecessor_exponent_mod_one - 0103
exact hpredecessor - 0104
exact hp - 0105
exact hroot_nonzero - 0106
exact hroot_total - 0107
have hsquare_value : exists wpp_mod_left_euler_square_value wpp_mod_right_euler_square_value. (x1) + p * wpp_mod_left_euler_square_value = (a) + p * wpp_mod_right_euler_square_value - 0108
rewrite hroot_two_eq - 0109
exact hresidue_witness - 0110
have hpowers : exists wpp_mod_left_euler_powers_congruent wpp_mod_right_euler_powers_congruent. (x2) + p * wpp_mod_left_euler_powers_congruent = (A) + p * wpp_mod_right_euler_powers_congruent - 0111
specialize pow_mod_congruent p - 0112
specialize pow_mod_congruent x1 - 0113
specialize pow_mod_congruent a - 0114
specialize pow_mod_congruent h - 0115
specialize pow_mod_congruent x2 - 0116
specialize pow_mod_congruent A - 0117
apply pow_mod_congruent - 0118
exact hsquare_value - 0119
exact hsquare_half - 0120
exact hA - 0121
have hback : exists wpp_mod_left_euler_value_power_back wpp_mod_right_euler_value_power_back. (A) + p * wpp_mod_left_euler_value_power_back = (x2) + p * wpp_mod_right_euler_value_power_back - 0122
specialize mod_eq_symm p - 0123
specialize mod_eq_symm x2 - 0124
specialize mod_eq_symm A - 0125
apply mod_eq_symm - 0126
exact hpowers - 0127
have hhalf_one : exists wpp_mod_left_euler_root_half_one wpp_mod_right_euler_root_half_one. (x2) + p * wpp_mod_left_euler_root_half_one = (1) + p * wpp_mod_right_euler_root_half_one - 0128
rewrite hiterated - 0129
exact hfermat - 0130
specialize mod_eq_trans p - 0131
specialize mod_eq_trans A - 0132
specialize mod_eq_trans x2 - 0133
specialize mod_eq_trans 1 - 0134
apply mod_eq_trans - 0135
exact hback - 0136
exact hhalf_one