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.
Statement with defined notation
∀ p. ∀ h. ∀ a. ∀ b. ∀ c. p = 2 · h + 1 → Prime(p) → ¬Dvd(p,a) → Range(b,c,1,h) → ∃ x. (∃ y. ∃ z. ∃ n. ∃ m. (∀ k. Lt(k,h) → ∃ i. ∃ j. ∃ u. BetaAt(b,c,k,i) ∧ (BetaAt(y,z,k,j) ∧ (BetaAt(n,m,k,u) ∧ (Lt(0,j) ∧ (Le(j,h) ∧ ((u = 0 ∨ u = 1) ∧ (u = 0 ∧ ModEq(p,a · i,j) ∨ u = 1 ∧ ModEq(p,a · i,2 · h · j)))))))) ∧ BitCount(n,m,h,x)) ∧ ((QRes(p,a) → Even(x)) ∧ (Even(x) → QRes(p,a)) ∧ ((¬QRes(p,a) → Odd(x)) ∧ (Odd(x) → ¬QRes(p,a))))Every purple notation token opens its conservative definition. This is a reading surface; the compiler expands the statement before the unchanged kernel checks it.
Definitions used by this theorem
In the theorem statement
PD0001 Le PD0002 Lt PD0003 Dvd PD0004 Prime PD0008 ModEq PD0009 Even PD0010 Odd PD0013 BetaAt PD0017 BitCount PD0018 Range PD0021 QRes20 occurrences
In local proof propositions
PD0001 Le PD0002 Lt PD0008 ModEq PD0009 Even PD0010 Odd PD0013 BetaAt PD0017 BitCount PD0020 Pow PD0021 QRes45 occurrences
Exact expanded native-PA statement
forall p h a b c. p = 2 * h + 1 -> ((~(p = 1) /\ forall esi_prime_left_gla_prime esi_prime_right_gla_prime. p = esi_prime_left_gla_prime * esi_prime_right_gla_prime -> esi_prime_left_gla_prime = 1 \/ esi_prime_right_gla_prime = 1)) -> (~(exists frm_factor_gla_nondivisor. a = p * frm_factor_gla_nondivisor)) -> (forall gsp_range_index_gla_half_range. (exists gsp_lt_gap_gla_half_range_range_bound. gsp_lt_gap_gla_half_range_range_bound + S gsp_range_index_gla_half_range = h) -> (((exists gsp_beta_height_gla_half_range_range_entry. gsp_beta_height_gla_half_range_range_entry + S (1 + gsp_range_index_gla_half_range) = S ((S (gsp_range_index_gla_half_range)) * c)) /\ exists gsp_beta_quotient_gla_half_range_range_entry. b = gsp_beta_quotient_gla_half_range_range_entry * S ((S (gsp_range_index_gla_half_range)) * c) + (1 + gsp_range_index_gla_half_range)))) -> (exists e. ((exists mb mc sb sc. ((forall gsp_index_gla_signed_prefix. (exists gsp_lt_gap_gla_signed_prefix_index_bound. gsp_lt_gap_gla_signed_prefix_index_bound + S gsp_index_gla_signed_prefix = h) -> (exists gsp_value_gla_signed_prefix_entry gsp_magnitude_gla_signed_prefix_entry gsp_sign_gla_signed_prefix_entry. (((exists ff_h_gsp_gla_signed_prefix_entry_source. ff_h_gsp_gla_signed_prefix_entry_source + S (gsp_value_gla_signed_prefix_entry) = S ((S (gsp_index_gla_signed_prefix)) * c)) /\ exists ff_q_gsp_gla_signed_prefix_entry_source. b = ff_q_gsp_gla_signed_prefix_entry_source * S ((S (gsp_index_gla_signed_prefix)) * c) + (gsp_value_gla_signed_prefix_entry))) /\ ((((exists ff_h_gsp_gla_signed_prefix_entry_magnitude. ff_h_gsp_gla_signed_prefix_entry_magnitude + S (gsp_magnitude_gla_signed_prefix_entry) = S ((S (gsp_index_gla_signed_prefix)) * mc)) /\ exists ff_q_gsp_gla_signed_prefix_entry_magnitude. mb = ff_q_gsp_gla_signed_prefix_entry_magnitude * S ((S (gsp_index_gla_signed_prefix)) * mc) + (gsp_magnitude_gla_signed_prefix_entry))) /\ ((((exists ff_h_gsp_gla_signed_prefix_entry_sign. ff_h_gsp_gla_signed_prefix_entry_sign + S (gsp_sign_gla_signed_prefix_entry) = S ((S (gsp_index_gla_signed_prefix)) * sc)) /\ exists ff_q_gsp_gla_signed_prefix_entry_sign. sb = ff_q_gsp_gla_signed_prefix_entry_sign * S ((S (gsp_index_gla_signed_prefix)) * sc) + (gsp_sign_gla_signed_prefix_entry))) /\ ((exists gsp_lt_gap_gla_signed_prefix_entry_positive. gsp_lt_gap_gla_signed_prefix_entry_positive + S 0 = gsp_magnitude_gla_signed_prefix_entry) /\ ((exists gsp_le_gap_gla_signed_prefix_entry_bounded. gsp_le_gap_gla_signed_prefix_entry_bounded + gsp_magnitude_gla_signed_prefix_entry = h) /\ ((gsp_sign_gla_signed_prefix_entry = 0 \/ gsp_sign_gla_signed_prefix_entry = 1) /\ (((gsp_sign_gla_signed_prefix_entry = 0 /\ (exists gsp_mod_left_gla_signed_prefix_entry_lower gsp_mod_right_gla_signed_prefix_entry_lower. (a * gsp_value_gla_signed_prefix_entry) + p * gsp_mod_left_gla_signed_prefix_entry_lower = (gsp_magnitude_gla_signed_prefix_entry) + p * gsp_mod_right_gla_signed_prefix_entry_lower)) \/ (gsp_sign_gla_signed_prefix_entry = 1 /\ (exists gsp_mod_left_gla_signed_prefix_entry_reflected gsp_mod_right_gla_signed_prefix_entry_reflected. (a * gsp_value_gla_signed_prefix_entry) + p * gsp_mod_left_gla_signed_prefix_entry_reflected = ((2 * h) * gsp_magnitude_gla_signed_prefix_entry) + p * gsp_mod_right_gla_signed_prefix_entry_reflected))))))))))) /\ (((exists ff_u_gla_count_sum ff_v_gla_count_sum. ((((exists ff_h_gla_count_sum_start. ff_h_gla_count_sum_start + S (0) = S ((S (0)) * ff_v_gla_count_sum)) /\ exists ff_q_gla_count_sum_start. ff_u_gla_count_sum = ff_q_gla_count_sum_start * S ((S (0)) * ff_v_gla_count_sum) + (0))) /\ ((((exists ff_h_gla_count_sum_terminal. ff_h_gla_count_sum_terminal + S (e) = S ((S (h)) * ff_v_gla_count_sum)) /\ exists ff_q_gla_count_sum_terminal. ff_u_gla_count_sum = ff_q_gla_count_sum_terminal * S ((S (h)) * ff_v_gla_count_sum) + (e))) /\ forall ff_i_gla_count_sum. (exists ff_lt_gla_count_sum_bound. ff_lt_gla_count_sum_bound + S ff_i_gla_count_sum = h) -> exists ff_a_gla_count_sum ff_r_gla_count_sum ff_s_gla_count_sum. ((((exists ff_h_gla_count_sum_summand. ff_h_gla_count_sum_summand + S (ff_a_gla_count_sum) = S ((S (ff_i_gla_count_sum)) * sc)) /\ exists ff_q_gla_count_sum_summand. sb = ff_q_gla_count_sum_summand * S ((S (ff_i_gla_count_sum)) * sc) + (ff_a_gla_count_sum))) /\ ((((exists ff_h_gla_count_sum_partial. ff_h_gla_count_sum_partial + S (ff_r_gla_count_sum) = S ((S (ff_i_gla_count_sum)) * ff_v_gla_count_sum)) /\ exists ff_q_gla_count_sum_partial. ff_u_gla_count_sum = ff_q_gla_count_sum_partial * S ((S (ff_i_gla_count_sum)) * ff_v_gla_count_sum) + (ff_r_gla_count_sum))) /\ ((((exists ff_h_gla_count_sum_successor. ff_h_gla_count_sum_successor + S (ff_s_gla_count_sum) = S ((S (S ff_i_gla_count_sum)) * ff_v_gla_count_sum)) /\ exists ff_q_gla_count_sum_successor. ff_u_gla_count_sum = ff_q_gla_count_sum_successor * S ((S (S ff_i_gla_count_sum)) * ff_v_gla_count_sum) + (ff_s_gla_count_sum))) /\ ff_s_gla_count_sum = ff_r_gla_count_sum + ff_a_gla_count_sum)))))) /\ (forall ff_i_gla_count_bits. (exists ff_lt_gla_count_bits_bound. ff_lt_gla_count_bits_bound + S ff_i_gla_count_bits = h) -> exists ff_bit_gla_count_bits. ((((exists ff_h_gla_count_bits_decoded. ff_h_gla_count_bits_decoded + S (ff_bit_gla_count_bits) = S ((S (ff_i_gla_count_bits)) * sc)) /\ exists ff_q_gla_count_bits_decoded. sb = ff_q_gla_count_bits_decoded * S ((S (ff_i_gla_count_bits)) * sc) + (ff_bit_gla_count_bits))) /\ (ff_bit_gla_count_bits = 0 \/ ff_bit_gla_count_bits = 1))))))) /\ (((((exists qr_x_gla_qres. exists qr_u_gla_qres qr_v_gla_qres. qr_x_gla_qres * qr_x_gla_qres + p * qr_u_gla_qres = a + p * qr_v_gla_qres) -> (exists gs_even_gla_even. e = 2 * gs_even_gla_even)) /\ ((exists gs_even_gla_even. e = 2 * gs_even_gla_even) -> (exists qr_x_gla_qres. exists qr_u_gla_qres qr_v_gla_qres. qr_x_gla_qres * qr_x_gla_qres + p * qr_u_gla_qres = a + p * qr_v_gla_qres)))) /\ (((~(exists qr_x_gla_qres. exists qr_u_gla_qres qr_v_gla_qres. qr_x_gla_qres * qr_x_gla_qres + p * qr_u_gla_qres = a + p * qr_v_gla_qres) -> (exists gs_odd_gla_odd. e = 2 * gs_odd_gla_odd + 1)) /\ ((exists gs_odd_gla_odd. e = 2 * gs_odd_gla_odd + 1) -> ~(exists qr_x_gla_qres. exists qr_u_gla_qres qr_v_gla_qres. qr_x_gla_qres * qr_x_gla_qres + p * qr_u_gla_qres = a + p * qr_v_gla_qres)))))))Proof neighborhood
Direct theorem prerequisites
PA0085 gauss_lemma_power_congruence_exists PA005E pow_predecessor_parity_mod PA00BU arbitrary_euler_criterion_complete PA0057 parity_cases PA00BP odd_prime_one_not_mod_predecessor PA003L mod_eq_symm PA0024 mod_eq_trans PA000H mul_comm PA0001 zero_addDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. The untrusted compiler re-expands each one before the original tactic script is replayed; defined notation is never accepted by the kernel. Open the exact replay line beneath every changed command.
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 (8)
01Fix variables and assumptionsL1–9
02Establish hpsuccL10–13
03Establish hdoubleL14–19
04Establish hgaussL20–29
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply gauss lemma power congruence exists.
- L20
have hgauss : ∃ e. ∃ A. ∃ R. Pow(a,h,A) ∧ (Pow(2 · h,e,R) ∧ ((∃ x. ∃ y. ∃ z. ∃ n. (∀ m. Lt(m,h) → ∃ k. ∃ i. ∃ j. BetaAt(b,c,m,k) ∧ (BetaAt(x,y,m,i) ∧ (BetaAt(z,n,m,j) ∧ (Lt(0,i) ∧ (Le(i,h) ∧ ((j = 0 ∨ j = 1) ∧ (j = 0 ∧ ModEq(p,a · k,i) ∨ j = 1 ∧ ModEq(p,a · k,2 · h · i)))))))) ∧ BitCount(z,n,h,e)) ∧ ModEq(p,A,R)))Definitions: Pow(a,h,A)Pow(2 · h,e,R)Lt(m,h)BetaAt(b,c,m,k)BetaAt(x,y,m,i)BetaAt(z,n,m,j)Lt(0,i)Le(i,h)ModEq(p,a · k,i)ModEq(p,a · k,2 · h · i)BitCount(z,n,h,e)ModEq(p,A,R)Original native command in the exact edition - L21
specialize gauss_lemma_power_congruence_exists p - L22
specialize gauss_lemma_power_congruence_exists h - L23
specialize gauss_lemma_power_congruence_exists a - L24
specialize gauss_lemma_power_congruence_exists b - L25
specialize gauss_lemma_power_congruence_exists c - L26
apply gauss_lemma_power_congruence_exists - L27
exact hpodd - L28
exact hprime - L29
exact hnotdiv
05Use earlier factsL30–30
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L30
exact hhalf
06Separate the logical casesL31–36
07Establish heulerL37–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply arbitrary euler criterion complete.
- L37
have heuler : (QRes(p,a) → ModEq(p,x1,1)) ∧ (ModEq(p,x1,1) → QRes(p,a)) ∧ ((¬QRes(p,a) → ModEq(p,x1,2 · h)) ∧ (ModEq(p,x1,2 · h) → ¬QRes(p,a)))Definitions: QRes(p,a)ModEq(p,x1,1)ModEq(p,x1,2 · h)Original native command in the exact edition - L38
specialize arbitrary_euler_criterion_complete p - L39
specialize arbitrary_euler_criterion_complete a - L40
specialize arbitrary_euler_criterion_complete (2 * h) - L41
specialize arbitrary_euler_criterion_complete h - L42
specialize arbitrary_euler_criterion_complete x1 - L43
apply arbitrary_euler_criterion_complete - L44
exact hpsucc - L45
exact hprime - L46
exact hnotdiv
08Calculate and transport equalitiesL47–47
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L47
symm
09Use earlier factsL48–49
10Separate the logical casesL50–52
11Establish hbridgeL53–60
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow predecessor parity mod.
- L53
have hbridge : (Even(x) → ModEq(p,x2,1)) ∧ (Odd(x) → ModEq(p,x2,2 · h))Definitions: Even(x)ModEq(p,x2,1)Odd(x)ModEq(p,x2,2 · h)Original native command in the exact edition - L54
specialize pow_predecessor_parity_mod p - L55
specialize pow_predecessor_parity_mod (2 * h) - L56
specialize pow_predecessor_parity_mod x - L57
specialize pow_predecessor_parity_mod x2 - L58
apply pow_predecessor_parity_mod - L59
exact hpsucc - L60
exact hgauss_witness_witness_witness_right_left
12Separate the logical casesL61–61
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L61
cases hbridge
13Establish hseparationL62–71
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply odd prime one not mod predecessor.
- L62
have hseparation : ¬ModEq(p,1,2 · h)Definitions: ModEq(p,1,2 · h)Original native command in the exact edition - L63
intro hcollision - L64
specialize odd_prime_one_not_mod_predecessor p - L65
specialize odd_prime_one_not_mod_predecessor (2 * h) - L66
specialize odd_prime_one_not_mod_predecessor h - L67
apply odd_prime_one_not_mod_predecessor - L68
exact hpsucc - L69
exact hprime - L70
symm - L71
exact hdouble
14Use earlier factsL72–72
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L72
exact hcollision
15Establish hqres_evenL73–75
16Separate the logical casesL76–77
17Construct an explicit witnessL78–78
Supply the displayed value, then prove that it has the required property.
- L78
exists x3
18Use earlier factsL79–79
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L79
exact parity_cases_witness_left
19Separate the logical casesL80–80
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L80
exfalso
20Use earlier factsL81–81
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L81
apply hseparation
21Establish hAoneL82–84
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply heuler left left.
22Establish honeAL85–90
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq symm.
23Establish honeRL91–98
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
24Establish hRpredL99–100
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hbridge right.
- L99
have hRpred : ModEq(p,x2,2 · h)Definitions: ModEq(p,x2,2 · h)Original native command in the exact edition - L100
apply hbridge_right
25Construct an explicit witnessL101–101
Supply the displayed value, then prove that it has the required property.
- L101
exists x3
26Use earlier factsL102–109
27Establish heven_qresL110–111
Establish this local claim before using it. It is not an additional assumption.
- L110
have heven_qres : Even(x) → QRes(p,a)Definitions: Even(x)QRes(p,a)Original native command in the exact edition - L111
intro heven
28Establish hRoneL112–114
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hbridge left.
29Establish hAoneL115–124
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
30Establish hnonres_oddL125–127
31Separate the logical casesL128–130
32Use earlier factsL131–131
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L131
apply hseparation
33Establish hRoneL132–133
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hbridge left.
34Construct an explicit witnessL134–134
Supply the displayed value, then prove that it has the required property.
- L134
exists x3
35Use earlier factsL135–135
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L135
exact parity_cases_witness_left
36Establish hAoneL136–143
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
37Establish honeAL144–149
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq symm.
38Establish hApredL150–159
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply heuler right left.
- L150
have hApred : ModEq(p,x1,2 · h)Definitions: ModEq(p,x1,2 · h)Original native command in the exact edition - L151
apply heuler_right_left - L152
exact hnonres - L153
specialize mod_eq_trans p - L154
specialize mod_eq_trans 1 - L155
specialize mod_eq_trans x1 - L156
specialize mod_eq_trans (2 * h) - L157
apply mod_eq_trans - L158
exact honeA - L159
exact hApred
39Construct an explicit witnessL160–160
Supply the displayed value, then prove that it has the required property.
- L160
exists x3
40Use earlier factsL161–161
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L161
exact parity_cases_witness_right
41Establish hodd_nonresL162–163
Establish this local claim before using it. It is not an additional assumption.
- L162
have hodd_nonres : Odd(x) → ¬QRes(p,a)Definitions: Odd(x)QRes(p,a)Original native command in the exact edition - L163
intro hodd
42Establish hRpredL164–166
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hbridge right.
- L164
have hRpred : ModEq(p,x2,2 · h)Definitions: ModEq(p,x2,2 · h)Original native command in the exact edition - L165
apply hbridge_right - L166
exact hodd
43Establish hApredL167–176
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L167
have hApred : ModEq(p,x1,2 · h)Definitions: ModEq(p,x1,2 · h)Original native command in the exact edition - L168
specialize mod_eq_trans p - L169
specialize mod_eq_trans x1 - L170
specialize mod_eq_trans x2 - L171
specialize mod_eq_trans (2 * h) - L172
apply mod_eq_trans - L173
exact hgauss_witness_witness_witness_right_right_right - L174
exact hRpred - L175
intro hqres - L176
apply heuler_right_right
44Use earlier factsL177–178
45Construct an explicit witnessL179–179
Supply the displayed value, then prove that it has the required property.
- L179
exists x
46Separate the logical casesL180–180
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L180
split
47Use earlier factsL181–181
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L181
exact hgauss_witness_witness_witness_right_right_left
48Separate the logical casesL182–183
49Use earlier factsL184–185
50Separate the logical casesL186–186
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L186
split
Original defined command ledger · 188 lines
- 0001
intro p - 0002
intro h - 0003
intro a - 0004
intro b - 0005
intro c - 0006
intro hpodd - 0007
intro hprime - 0008
intro hnotdiv - 0009
intro hhalf - 0010
have hpsucc : p = S (2 * h) - 0011
trans 2 * h + 1 - 0012
exact hpodd - 0013
simp - 0014
have hdouble : h + h = 2 * h - 0015
trans h * 2 - 0016
simp [zero_add] - 0017
specialize mul_comm h - 0018
specialize mul_comm 2 - 0019
apply mul_comm - 0020
have hgauss : ∃ e. ∃ A. ∃ R. Pow(a,h,A) ∧ (Pow(2 · h,e,R) ∧ ((∃ x. ∃ y. ∃ z. ∃ n. (∀ m. Lt(m,h) → ∃ k. ∃ i. ∃ j. BetaAt(b,c,m,k) ∧ (BetaAt(x,y,m,i) ∧ (BetaAt(z,n,m,j) ∧ (Lt(0,i) ∧ (Le(i,h) ∧ ((j = 0 ∨ j = 1) ∧ (j = 0 ∧ ModEq(p,a · k,i) ∨ j = 1 ∧ ModEq(p,a · k,2 · h · i)))))))) ∧ BitCount(z,n,h,e)) ∧ ModEq(p,A,R)))Exact native replay line
have hgauss : exists e A R. ((exists ff_b_glb_multiplier_power ff_c_glb_multiplier_power. ((forall ff_i_glb_multiplier_power_repeat. (exists ff_lt_glb_multiplier_power_repeat_bound. ff_lt_glb_multiplier_power_repeat_bound + S ff_i_glb_multiplier_power_repeat = h) -> (((exists ff_h_glb_multiplier_power_repeat_decoded. ff_h_glb_multiplier_power_repeat_decoded + S (a) = S ((S (ff_i_glb_multiplier_power_repeat)) * ff_c_glb_multiplier_power)) /\ exists ff_q_glb_multiplier_power_repeat_decoded. ff_b_glb_multiplier_power = ff_q_glb_multiplier_power_repeat_decoded * S ((S (ff_i_glb_multiplier_power_repeat)) * ff_c_glb_multiplier_power) + (a)))) /\ (exists ff_u_glb_multiplier_power_product ff_v_glb_multiplier_power_product. ((((exists ff_h_glb_multiplier_power_product_start. ff_h_glb_multiplier_power_product_start + S (1) = S ((S (0)) * ff_v_glb_multiplier_power_product)) /\ exists ff_q_glb_multiplier_power_product_start. ff_u_glb_multiplier_power_product = ff_q_glb_multiplier_power_product_start * S ((S (0)) * ff_v_glb_multiplier_power_product) + (1))) /\ ((((exists ff_h_glb_multiplier_power_product_terminal. ff_h_glb_multiplier_power_product_terminal + S (A) = S ((S (h)) * ff_v_glb_multiplier_power_product)) /\ exists ff_q_glb_multiplier_power_product_terminal. ff_u_glb_multiplier_power_product = ff_q_glb_multiplier_power_product_terminal * S ((S (h)) * ff_v_glb_multiplier_power_product) + (A))) /\ forall ff_i_glb_multiplier_power_product. (exists ff_lt_glb_multiplier_power_product_bound. ff_lt_glb_multiplier_power_product_bound + S ff_i_glb_multiplier_power_product = h) -> exists ff_p_glb_multiplier_power_product ff_r_glb_multiplier_power_product ff_s_glb_multiplier_power_product. ((((exists ff_h_glb_multiplier_power_product_factor. ff_h_glb_multiplier_power_product_factor + S (ff_p_glb_multiplier_power_product) = S ((S (ff_i_glb_multiplier_power_product)) * ff_c_glb_multiplier_power)) /\ exists ff_q_glb_multiplier_power_product_factor. ff_b_glb_multiplier_power = ff_q_glb_multiplier_power_product_factor * S ((S (ff_i_glb_multiplier_power_product)) * ff_c_glb_multiplier_power) + (ff_p_glb_multiplier_power_product))) /\ ((((exists ff_h_glb_multiplier_power_product_partial. ff_h_glb_multiplier_power_product_partial + S (ff_r_glb_multiplier_power_product) = S ((S (ff_i_glb_multiplier_power_product)) * ff_v_glb_multiplier_power_product)) /\ exists ff_q_glb_multiplier_power_product_partial. ff_u_glb_multiplier_power_product = ff_q_glb_multiplier_power_product_partial * S ((S (ff_i_glb_multiplier_power_product)) * ff_v_glb_multiplier_power_product) + (ff_r_glb_multiplier_power_product))) /\ ((((exists ff_h_glb_multiplier_power_product_successor. ff_h_glb_multiplier_power_product_successor + S (ff_s_glb_multiplier_power_product) = S ((S (S ff_i_glb_multiplier_power_product)) * ff_v_glb_multiplier_power_product)) /\ exists ff_q_glb_multiplier_power_product_successor. ff_u_glb_multiplier_power_product = ff_q_glb_multiplier_power_product_successor * S ((S (S ff_i_glb_multiplier_power_product)) * ff_v_glb_multiplier_power_product) + (ff_s_glb_multiplier_power_product))) /\ ff_s_glb_multiplier_power_product = ff_r_glb_multiplier_power_product * ff_p_glb_multiplier_power_product)))))))) /\ ((exists ff_b_glb_sign_power_expanded ff_c_glb_sign_power_expanded. ((forall ff_i_glb_sign_power_expanded_repeat. (exists ff_lt_glb_sign_power_expanded_repeat_bound. ff_lt_glb_sign_power_expanded_repeat_bound + S ff_i_glb_sign_power_expanded_repeat = e) -> (((exists ff_h_glb_sign_power_expanded_repeat_decoded. ff_h_glb_sign_power_expanded_repeat_decoded + S ((2 * h)) = S ((S (ff_i_glb_sign_power_expanded_repeat)) * ff_c_glb_sign_power_expanded)) /\ exists ff_q_glb_sign_power_expanded_repeat_decoded. ff_b_glb_sign_power_expanded = ff_q_glb_sign_power_expanded_repeat_decoded * S ((S (ff_i_glb_sign_power_expanded_repeat)) * ff_c_glb_sign_power_expanded) + ((2 * h))))) /\ (exists ff_u_glb_sign_power_expanded_product ff_v_glb_sign_power_expanded_product. ((((exists ff_h_glb_sign_power_expanded_product_start. ff_h_glb_sign_power_expanded_product_start + S (1) = S ((S (0)) * ff_v_glb_sign_power_expanded_product)) /\ exists ff_q_glb_sign_power_expanded_product_start. ff_u_glb_sign_power_expanded_product = ff_q_glb_sign_power_expanded_product_start * S ((S (0)) * ff_v_glb_sign_power_expanded_product) + (1))) /\ ((((exists ff_h_glb_sign_power_expanded_product_terminal. ff_h_glb_sign_power_expanded_product_terminal + S (R) = S ((S (e)) * ff_v_glb_sign_power_expanded_product)) /\ exists ff_q_glb_sign_power_expanded_product_terminal. ff_u_glb_sign_power_expanded_product = ff_q_glb_sign_power_expanded_product_terminal * S ((S (e)) * ff_v_glb_sign_power_expanded_product) + (R))) /\ forall ff_i_glb_sign_power_expanded_product. (exists ff_lt_glb_sign_power_expanded_product_bound. ff_lt_glb_sign_power_expanded_product_bound + S ff_i_glb_sign_power_expanded_product = e) -> exists ff_p_glb_sign_power_expanded_product ff_r_glb_sign_power_expanded_product ff_s_glb_sign_power_expanded_product. ((((exists ff_h_glb_sign_power_expanded_product_factor. ff_h_glb_sign_power_expanded_product_factor + S (ff_p_glb_sign_power_expanded_product) = S ((S (ff_i_glb_sign_power_expanded_product)) * ff_c_glb_sign_power_expanded)) /\ exists ff_q_glb_sign_power_expanded_product_factor. ff_b_glb_sign_power_expanded = ff_q_glb_sign_power_expanded_product_factor * S ((S (ff_i_glb_sign_power_expanded_product)) * ff_c_glb_sign_power_expanded) + (ff_p_glb_sign_power_expanded_product))) /\ ((((exists ff_h_glb_sign_power_expanded_product_partial. ff_h_glb_sign_power_expanded_product_partial + S (ff_r_glb_sign_power_expanded_product) = S ((S (ff_i_glb_sign_power_expanded_product)) * ff_v_glb_sign_power_expanded_product)) /\ exists ff_q_glb_sign_power_expanded_product_partial. ff_u_glb_sign_power_expanded_product = ff_q_glb_sign_power_expanded_product_partial * S ((S (ff_i_glb_sign_power_expanded_product)) * ff_v_glb_sign_power_expanded_product) + (ff_r_glb_sign_power_expanded_product))) /\ ((((exists ff_h_glb_sign_power_expanded_product_successor. ff_h_glb_sign_power_expanded_product_successor + S (ff_s_glb_sign_power_expanded_product) = S ((S (S ff_i_glb_sign_power_expanded_product)) * ff_v_glb_sign_power_expanded_product)) /\ exists ff_q_glb_sign_power_expanded_product_successor. ff_u_glb_sign_power_expanded_product = ff_q_glb_sign_power_expanded_product_successor * S ((S (S ff_i_glb_sign_power_expanded_product)) * ff_v_glb_sign_power_expanded_product) + (ff_s_glb_sign_power_expanded_product))) /\ ff_s_glb_sign_power_expanded_product = ff_r_glb_sign_power_expanded_product * ff_p_glb_sign_power_expanded_product)))))))) /\ ((exists mb mc sb sc. ((forall gsp_index_glb_signed_prefix. (exists gsp_lt_gap_glb_signed_prefix_index_bound. gsp_lt_gap_glb_signed_prefix_index_bound + S gsp_index_glb_signed_prefix = h) -> (exists gsp_value_glb_signed_prefix_entry gsp_magnitude_glb_signed_prefix_entry gsp_sign_glb_signed_prefix_entry. (((exists ff_h_gsp_glb_signed_prefix_entry_source. ff_h_gsp_glb_signed_prefix_entry_source + S (gsp_value_glb_signed_prefix_entry) = S ((S (gsp_index_glb_signed_prefix)) * c)) /\ exists ff_q_gsp_glb_signed_prefix_entry_source. b = ff_q_gsp_glb_signed_prefix_entry_source * S ((S (gsp_index_glb_signed_prefix)) * c) + (gsp_value_glb_signed_prefix_entry))) /\ ((((exists ff_h_gsp_glb_signed_prefix_entry_magnitude. ff_h_gsp_glb_signed_prefix_entry_magnitude + S (gsp_magnitude_glb_signed_prefix_entry) = S ((S (gsp_index_glb_signed_prefix)) * mc)) /\ exists ff_q_gsp_glb_signed_prefix_entry_magnitude. mb = ff_q_gsp_glb_signed_prefix_entry_magnitude * S ((S (gsp_index_glb_signed_prefix)) * mc) + (gsp_magnitude_glb_signed_prefix_entry))) /\ ((((exists ff_h_gsp_glb_signed_prefix_entry_sign. ff_h_gsp_glb_signed_prefix_entry_sign + S (gsp_sign_glb_signed_prefix_entry) = S ((S (gsp_index_glb_signed_prefix)) * sc)) /\ exists ff_q_gsp_glb_signed_prefix_entry_sign. sb = ff_q_gsp_glb_signed_prefix_entry_sign * S ((S (gsp_index_glb_signed_prefix)) * sc) + (gsp_sign_glb_signed_prefix_entry))) /\ ((exists gsp_lt_gap_glb_signed_prefix_entry_positive. gsp_lt_gap_glb_signed_prefix_entry_positive + S 0 = gsp_magnitude_glb_signed_prefix_entry) /\ ((exists gsp_le_gap_glb_signed_prefix_entry_bounded. gsp_le_gap_glb_signed_prefix_entry_bounded + gsp_magnitude_glb_signed_prefix_entry = h) /\ ((gsp_sign_glb_signed_prefix_entry = 0 \/ gsp_sign_glb_signed_prefix_entry = 1) /\ (((gsp_sign_glb_signed_prefix_entry = 0 /\ (exists gsp_mod_left_glb_signed_prefix_entry_lower gsp_mod_right_glb_signed_prefix_entry_lower. (a * gsp_value_glb_signed_prefix_entry) + p * gsp_mod_left_glb_signed_prefix_entry_lower = (gsp_magnitude_glb_signed_prefix_entry) + p * gsp_mod_right_glb_signed_prefix_entry_lower)) \/ (gsp_sign_glb_signed_prefix_entry = 1 /\ (exists gsp_mod_left_glb_signed_prefix_entry_reflected gsp_mod_right_glb_signed_prefix_entry_reflected. (a * gsp_value_glb_signed_prefix_entry) + p * gsp_mod_left_glb_signed_prefix_entry_reflected = ((2 * h) * gsp_magnitude_glb_signed_prefix_entry) + p * gsp_mod_right_glb_signed_prefix_entry_reflected))))))))))) /\ (((exists ff_u_glb_count_sum ff_v_glb_count_sum. ((((exists ff_h_glb_count_sum_start. ff_h_glb_count_sum_start + S (0) = S ((S (0)) * ff_v_glb_count_sum)) /\ exists ff_q_glb_count_sum_start. ff_u_glb_count_sum = ff_q_glb_count_sum_start * S ((S (0)) * ff_v_glb_count_sum) + (0))) /\ ((((exists ff_h_glb_count_sum_terminal. ff_h_glb_count_sum_terminal + S (e) = S ((S (h)) * ff_v_glb_count_sum)) /\ exists ff_q_glb_count_sum_terminal. ff_u_glb_count_sum = ff_q_glb_count_sum_terminal * S ((S (h)) * ff_v_glb_count_sum) + (e))) /\ forall ff_i_glb_count_sum. (exists ff_lt_glb_count_sum_bound. ff_lt_glb_count_sum_bound + S ff_i_glb_count_sum = h) -> exists ff_a_glb_count_sum ff_r_glb_count_sum ff_s_glb_count_sum. ((((exists ff_h_glb_count_sum_summand. ff_h_glb_count_sum_summand + S (ff_a_glb_count_sum) = S ((S (ff_i_glb_count_sum)) * sc)) /\ exists ff_q_glb_count_sum_summand. sb = ff_q_glb_count_sum_summand * S ((S (ff_i_glb_count_sum)) * sc) + (ff_a_glb_count_sum))) /\ ((((exists ff_h_glb_count_sum_partial. ff_h_glb_count_sum_partial + S (ff_r_glb_count_sum) = S ((S (ff_i_glb_count_sum)) * ff_v_glb_count_sum)) /\ exists ff_q_glb_count_sum_partial. ff_u_glb_count_sum = ff_q_glb_count_sum_partial * S ((S (ff_i_glb_count_sum)) * ff_v_glb_count_sum) + (ff_r_glb_count_sum))) /\ ((((exists ff_h_glb_count_sum_successor. ff_h_glb_count_sum_successor + S (ff_s_glb_count_sum) = S ((S (S ff_i_glb_count_sum)) * ff_v_glb_count_sum)) /\ exists ff_q_glb_count_sum_successor. ff_u_glb_count_sum = ff_q_glb_count_sum_successor * S ((S (S ff_i_glb_count_sum)) * ff_v_glb_count_sum) + (ff_s_glb_count_sum))) /\ ff_s_glb_count_sum = ff_r_glb_count_sum + ff_a_glb_count_sum)))))) /\ (forall ff_i_glb_count_bits. (exists ff_lt_glb_count_bits_bound. ff_lt_glb_count_bits_bound + S ff_i_glb_count_bits = h) -> exists ff_bit_glb_count_bits. ((((exists ff_h_glb_count_bits_decoded. ff_h_glb_count_bits_decoded + S (ff_bit_glb_count_bits) = S ((S (ff_i_glb_count_bits)) * sc)) /\ exists ff_q_glb_count_bits_decoded. sb = ff_q_glb_count_bits_decoded * S ((S (ff_i_glb_count_bits)) * sc) + (ff_bit_glb_count_bits))) /\ (ff_bit_glb_count_bits = 0 \/ ff_bit_glb_count_bits = 1))))))) /\ (exists wpp_mod_left_glb_a_mod_r wpp_mod_right_glb_a_mod_r. (A) + p * wpp_mod_left_glb_a_mod_r = (R) + p * wpp_mod_right_glb_a_mod_r)))) - 0021
specialize gauss_lemma_power_congruence_exists p - 0022
specialize gauss_lemma_power_congruence_exists h - 0023
specialize gauss_lemma_power_congruence_exists a - 0024
specialize gauss_lemma_power_congruence_exists b - 0025
specialize gauss_lemma_power_congruence_exists c - 0026
apply gauss_lemma_power_congruence_exists - 0027
exact hpodd - 0028
exact hprime - 0029
exact hnotdiv - 0030
exact hhalf - 0031
cases hgauss - 0032
cases hgauss_witness - 0033
cases hgauss_witness_witness - 0034
cases hgauss_witness_witness_witness - 0035
cases hgauss_witness_witness_witness_right - 0036
cases hgauss_witness_witness_witness_right_right - 0037
have heuler : (QRes(p,a) → ModEq(p,x1,1)) ∧ (ModEq(p,x1,1) → QRes(p,a)) ∧ ((¬QRes(p,a) → ModEq(p,x1,2 · h)) ∧ (ModEq(p,x1,2 · h) → ¬QRes(p,a)))Exact native replay line
have heuler : (((((exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) -> (exists wpp_mod_left_glb_local_a_mod_one wpp_mod_right_glb_local_a_mod_one. (x1) + p * wpp_mod_left_glb_local_a_mod_one = (1) + p * wpp_mod_right_glb_local_a_mod_one)) /\ ((exists wpp_mod_left_glb_local_a_mod_one wpp_mod_right_glb_local_a_mod_one. (x1) + p * wpp_mod_left_glb_local_a_mod_one = (1) + p * wpp_mod_right_glb_local_a_mod_one) -> (exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres)))) /\ ((~(exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) -> (exists wpp_mod_left_glb_local_a_mod_predecessor wpp_mod_right_glb_local_a_mod_predecessor. (x1) + p * wpp_mod_left_glb_local_a_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_a_mod_predecessor)) /\ ((exists wpp_mod_left_glb_local_a_mod_predecessor wpp_mod_right_glb_local_a_mod_predecessor. (x1) + p * wpp_mod_left_glb_local_a_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_a_mod_predecessor) -> ~(exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres)))) - 0038
specialize arbitrary_euler_criterion_complete p - 0039
specialize arbitrary_euler_criterion_complete a - 0040
specialize arbitrary_euler_criterion_complete (2 * h) - 0041
specialize arbitrary_euler_criterion_complete h - 0042
specialize arbitrary_euler_criterion_complete x1 - 0043
apply arbitrary_euler_criterion_complete - 0044
exact hpsucc - 0045
exact hprime - 0046
exact hnotdiv - 0047
symm - 0048
exact hdouble - 0049
exact hgauss_witness_witness_witness_left - 0050
cases heuler - 0051
cases heuler_left - 0052
cases heuler_right - 0053
have hbridge : (Even(x) → ModEq(p,x2,1)) ∧ (Odd(x) → ModEq(p,x2,2 · h))Exact native replay line
have hbridge : (((exists gs_even_glb_local_even. x = 2 * gs_even_glb_local_even) -> (exists wpp_mod_left_glb_local_r_mod_one wpp_mod_right_glb_local_r_mod_one. (x2) + p * wpp_mod_left_glb_local_r_mod_one = (1) + p * wpp_mod_right_glb_local_r_mod_one)) /\ ((exists gs_odd_glb_local_odd. x = 2 * gs_odd_glb_local_odd + 1) -> (exists wpp_mod_left_glb_local_r_mod_predecessor wpp_mod_right_glb_local_r_mod_predecessor. (x2) + p * wpp_mod_left_glb_local_r_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_r_mod_predecessor))) - 0054
specialize pow_predecessor_parity_mod p - 0055
specialize pow_predecessor_parity_mod (2 * h) - 0056
specialize pow_predecessor_parity_mod x - 0057
specialize pow_predecessor_parity_mod x2 - 0058
apply pow_predecessor_parity_mod - 0059
exact hpsucc - 0060
exact hgauss_witness_witness_witness_right_left - 0061
cases hbridge - 0062
have hseparation : ¬ModEq(p,1,2 · h)Exact native replay line
have hseparation : ~(exists wpp_mod_left_glb_one_mod_predecessor wpp_mod_right_glb_one_mod_predecessor. (1) + p * wpp_mod_left_glb_one_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_one_mod_predecessor) - 0063
intro hcollision - 0064
specialize odd_prime_one_not_mod_predecessor p - 0065
specialize odd_prime_one_not_mod_predecessor (2 * h) - 0066
specialize odd_prime_one_not_mod_predecessor h - 0067
apply odd_prime_one_not_mod_predecessor - 0068
exact hpsucc - 0069
exact hprime - 0070
symm - 0071
exact hdouble - 0072
exact hcollision - 0073
have hqres_even : QRes(p,a) → Even(x)Exact native replay line
have hqres_even : (exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) -> (exists gs_even_glb_local_even. x = 2 * gs_even_glb_local_even) - 0074
intro hqres - 0075
specialize parity_cases x - 0076
cases parity_cases - 0077
cases parity_cases_witness - 0078
exists x3 - 0079
exact parity_cases_witness_left - 0080
exfalso - 0081
apply hseparation - 0082
have hAone : ModEq(p,x1,1)Exact native replay line
have hAone : exists wpp_mod_left_glb_local_a_mod_one wpp_mod_right_glb_local_a_mod_one. (x1) + p * wpp_mod_left_glb_local_a_mod_one = (1) + p * wpp_mod_right_glb_local_a_mod_one - 0083
apply heuler_left_left - 0084
exact hqres - 0085
have honeA : ModEq(p,1,x1)Exact native replay line
have honeA : exists wpp_mod_left_glb_local_one_mod_a wpp_mod_right_glb_local_one_mod_a. (1) + p * wpp_mod_left_glb_local_one_mod_a = (x1) + p * wpp_mod_right_glb_local_one_mod_a - 0086
specialize mod_eq_symm p - 0087
specialize mod_eq_symm x1 - 0088
specialize mod_eq_symm 1 - 0089
apply mod_eq_symm - 0090
exact hAone - 0091
have honeR : ModEq(p,1,x2)Exact native replay line
have honeR : exists wpp_mod_left_glb_local_one_mod_r wpp_mod_right_glb_local_one_mod_r. (1) + p * wpp_mod_left_glb_local_one_mod_r = (x2) + p * wpp_mod_right_glb_local_one_mod_r - 0092
specialize mod_eq_trans p - 0093
specialize mod_eq_trans 1 - 0094
specialize mod_eq_trans x1 - 0095
specialize mod_eq_trans x2 - 0096
apply mod_eq_trans - 0097
exact honeA - 0098
exact hgauss_witness_witness_witness_right_right_right - 0099
have hRpred : ModEq(p,x2,2 · h)Exact native replay line
have hRpred : exists wpp_mod_left_glb_local_r_mod_predecessor wpp_mod_right_glb_local_r_mod_predecessor. (x2) + p * wpp_mod_left_glb_local_r_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_r_mod_predecessor - 0100
apply hbridge_right - 0101
exists x3 - 0102
exact parity_cases_witness_right - 0103
specialize mod_eq_trans p - 0104
specialize mod_eq_trans 1 - 0105
specialize mod_eq_trans x2 - 0106
specialize mod_eq_trans (2 * h) - 0107
apply mod_eq_trans - 0108
exact honeR - 0109
exact hRpred - 0110
have heven_qres : Even(x) → QRes(p,a)Exact native replay line
have heven_qres : (exists gs_even_glb_local_even. x = 2 * gs_even_glb_local_even) -> (exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) - 0111
intro heven - 0112
have hRone : ModEq(p,x2,1)Exact native replay line
have hRone : exists wpp_mod_left_glb_local_r_mod_one wpp_mod_right_glb_local_r_mod_one. (x2) + p * wpp_mod_left_glb_local_r_mod_one = (1) + p * wpp_mod_right_glb_local_r_mod_one - 0113
apply hbridge_left - 0114
exact heven - 0115
have hAone : ModEq(p,x1,1)Exact native replay line
have hAone : exists wpp_mod_left_glb_local_a_mod_one wpp_mod_right_glb_local_a_mod_one. (x1) + p * wpp_mod_left_glb_local_a_mod_one = (1) + p * wpp_mod_right_glb_local_a_mod_one - 0116
specialize mod_eq_trans p - 0117
specialize mod_eq_trans x1 - 0118
specialize mod_eq_trans x2 - 0119
specialize mod_eq_trans 1 - 0120
apply mod_eq_trans - 0121
exact hgauss_witness_witness_witness_right_right_right - 0122
exact hRone - 0123
apply heuler_left_right - 0124
exact hAone - 0125
have hnonres_odd : ¬QRes(p,a) → Odd(x)Exact native replay line
have hnonres_odd : ~(exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) -> (exists gs_odd_glb_local_odd. x = 2 * gs_odd_glb_local_odd + 1) - 0126
intro hnonres - 0127
specialize parity_cases x - 0128
cases parity_cases - 0129
cases parity_cases_witness - 0130
exfalso - 0131
apply hseparation - 0132
have hRone : ModEq(p,x2,1)Exact native replay line
have hRone : exists wpp_mod_left_glb_local_r_mod_one wpp_mod_right_glb_local_r_mod_one. (x2) + p * wpp_mod_left_glb_local_r_mod_one = (1) + p * wpp_mod_right_glb_local_r_mod_one - 0133
apply hbridge_left - 0134
exists x3 - 0135
exact parity_cases_witness_left - 0136
have hAone : ModEq(p,x1,1)Exact native replay line
have hAone : exists wpp_mod_left_glb_local_a_mod_one wpp_mod_right_glb_local_a_mod_one. (x1) + p * wpp_mod_left_glb_local_a_mod_one = (1) + p * wpp_mod_right_glb_local_a_mod_one - 0137
specialize mod_eq_trans p - 0138
specialize mod_eq_trans x1 - 0139
specialize mod_eq_trans x2 - 0140
specialize mod_eq_trans 1 - 0141
apply mod_eq_trans - 0142
exact hgauss_witness_witness_witness_right_right_right - 0143
exact hRone - 0144
have honeA : ModEq(p,1,x1)Exact native replay line
have honeA : exists wpp_mod_left_glb_local_one_mod_a wpp_mod_right_glb_local_one_mod_a. (1) + p * wpp_mod_left_glb_local_one_mod_a = (x1) + p * wpp_mod_right_glb_local_one_mod_a - 0145
specialize mod_eq_symm p - 0146
specialize mod_eq_symm x1 - 0147
specialize mod_eq_symm 1 - 0148
apply mod_eq_symm - 0149
exact hAone - 0150
have hApred : ModEq(p,x1,2 · h)Exact native replay line
have hApred : exists wpp_mod_left_glb_local_a_mod_predecessor wpp_mod_right_glb_local_a_mod_predecessor. (x1) + p * wpp_mod_left_glb_local_a_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_a_mod_predecessor - 0151
apply heuler_right_left - 0152
exact hnonres - 0153
specialize mod_eq_trans p - 0154
specialize mod_eq_trans 1 - 0155
specialize mod_eq_trans x1 - 0156
specialize mod_eq_trans (2 * h) - 0157
apply mod_eq_trans - 0158
exact honeA - 0159
exact hApred - 0160
exists x3 - 0161
exact parity_cases_witness_right - 0162
have hodd_nonres : Odd(x) → ¬QRes(p,a)Exact native replay line
have hodd_nonres : (exists gs_odd_glb_local_odd. x = 2 * gs_odd_glb_local_odd + 1) -> ~(exists qr_x_glb_qres. exists qr_u_glb_qres qr_v_glb_qres. qr_x_glb_qres * qr_x_glb_qres + p * qr_u_glb_qres = a + p * qr_v_glb_qres) - 0163
intro hodd - 0164
have hRpred : ModEq(p,x2,2 · h)Exact native replay line
have hRpred : exists wpp_mod_left_glb_local_r_mod_predecessor wpp_mod_right_glb_local_r_mod_predecessor. (x2) + p * wpp_mod_left_glb_local_r_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_r_mod_predecessor - 0165
apply hbridge_right - 0166
exact hodd - 0167
have hApred : ModEq(p,x1,2 · h)Exact native replay line
have hApred : exists wpp_mod_left_glb_local_a_mod_predecessor wpp_mod_right_glb_local_a_mod_predecessor. (x1) + p * wpp_mod_left_glb_local_a_mod_predecessor = (2 * h) + p * wpp_mod_right_glb_local_a_mod_predecessor - 0168
specialize mod_eq_trans p - 0169
specialize mod_eq_trans x1 - 0170
specialize mod_eq_trans x2 - 0171
specialize mod_eq_trans (2 * h) - 0172
apply mod_eq_trans - 0173
exact hgauss_witness_witness_witness_right_right_right - 0174
exact hRpred - 0175
intro hqres - 0176
apply heuler_right_right - 0177
exact hApred - 0178
exact hqres - 0179
exists x - 0180
split - 0181
exact hgauss_witness_witness_witness_right_right_left - 0182
split - 0183
split - 0184
exact hqres_even - 0185
exact heven_qres - 0186
split - 0187
exact hnonres_odd - 0188
exact hodd_nonres