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. ∀ mb. ∀ mc. ∀ sb. ∀ sc. p = 2 · h + 1 → Prime(p) → ¬Dvd(p,a) → Range(b,c,1,h) → (∀ x. Lt(x,h) → ∃ y. ∃ z. ∃ n. BetaAt(b,c,x,y) ∧ (BetaAt(mb,mc,x,z) ∧ (BetaAt(sb,sc,x,n) ∧ (Lt(0,z) ∧ (Le(z,h) ∧ ((n = 0 ∨ n = 1) ∧ (n = 0 ∧ ModEq(p,a · y,z) ∨ n = 1 ∧ ModEq(p,a · y,2 · h · z)))))))) → InjectivePrefix(mb,mc,h)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 PD0013 BetaAt PD0018 Range PD0025 InjectivePrefix12 occurrences
In local proof propositions
28 occurrences
Exact expanded native-PA statement
forall p h a b c mb mc sb sc. p = 2 * h + 1 -> ((~(p = 1) /\ forall gsp_prime_left_collision_prime gsp_prime_right_collision_prime. p = gsp_prime_left_collision_prime * gsp_prime_right_collision_prime -> gsp_prime_left_collision_prime = 1 \/ gsp_prime_right_collision_prime = 1)) -> (~(exists gsp_divisor_factor_collision_multiplier. a = p * gsp_divisor_factor_collision_multiplier)) -> (forall gsp_range_index_injective_source. (exists gsp_lt_gap_injective_source_range_bound. gsp_lt_gap_injective_source_range_bound + S gsp_range_index_injective_source = h) -> (((exists gsp_beta_height_injective_source_range_entry. gsp_beta_height_injective_source_range_entry + S (1 + gsp_range_index_injective_source) = S ((S (gsp_range_index_injective_source)) * c)) /\ exists gsp_beta_quotient_injective_source_range_entry. b = gsp_beta_quotient_injective_source_range_entry * S ((S (gsp_range_index_injective_source)) * c) + (1 + gsp_range_index_injective_source)))) -> (forall gsp_index_injective_signed_source. (exists gsp_lt_gap_injective_signed_source_index_bound. gsp_lt_gap_injective_signed_source_index_bound + S gsp_index_injective_signed_source = h) -> (exists gsp_value_injective_signed_source_entry gsp_magnitude_injective_signed_source_entry gsp_sign_injective_signed_source_entry. (((exists ff_h_gsp_injective_signed_source_entry_source. ff_h_gsp_injective_signed_source_entry_source + S (gsp_value_injective_signed_source_entry) = S ((S (gsp_index_injective_signed_source)) * c)) /\ exists ff_q_gsp_injective_signed_source_entry_source. b = ff_q_gsp_injective_signed_source_entry_source * S ((S (gsp_index_injective_signed_source)) * c) + (gsp_value_injective_signed_source_entry))) /\ ((((exists ff_h_gsp_injective_signed_source_entry_magnitude. ff_h_gsp_injective_signed_source_entry_magnitude + S (gsp_magnitude_injective_signed_source_entry) = S ((S (gsp_index_injective_signed_source)) * mc)) /\ exists ff_q_gsp_injective_signed_source_entry_magnitude. mb = ff_q_gsp_injective_signed_source_entry_magnitude * S ((S (gsp_index_injective_signed_source)) * mc) + (gsp_magnitude_injective_signed_source_entry))) /\ ((((exists ff_h_gsp_injective_signed_source_entry_sign. ff_h_gsp_injective_signed_source_entry_sign + S (gsp_sign_injective_signed_source_entry) = S ((S (gsp_index_injective_signed_source)) * sc)) /\ exists ff_q_gsp_injective_signed_source_entry_sign. sb = ff_q_gsp_injective_signed_source_entry_sign * S ((S (gsp_index_injective_signed_source)) * sc) + (gsp_sign_injective_signed_source_entry))) /\ ((exists gsp_lt_gap_injective_signed_source_entry_positive. gsp_lt_gap_injective_signed_source_entry_positive + S 0 = gsp_magnitude_injective_signed_source_entry) /\ ((exists gsp_le_gap_injective_signed_source_entry_bounded. gsp_le_gap_injective_signed_source_entry_bounded + gsp_magnitude_injective_signed_source_entry = h) /\ ((gsp_sign_injective_signed_source_entry = 0 \/ gsp_sign_injective_signed_source_entry = 1) /\ (((gsp_sign_injective_signed_source_entry = 0 /\ (exists gsp_mod_left_injective_signed_source_entry_lower gsp_mod_right_injective_signed_source_entry_lower. (a * gsp_value_injective_signed_source_entry) + p * gsp_mod_left_injective_signed_source_entry_lower = (gsp_magnitude_injective_signed_source_entry) + p * gsp_mod_right_injective_signed_source_entry_lower)) \/ (gsp_sign_injective_signed_source_entry = 1 /\ (exists gsp_mod_left_injective_signed_source_entry_reflected gsp_mod_right_injective_signed_source_entry_reflected. (a * gsp_value_injective_signed_source_entry) + p * gsp_mod_left_injective_signed_source_entry_reflected = ((2 * h) * gsp_magnitude_injective_signed_source_entry) + p * gsp_mod_right_injective_signed_source_entry_reflected))))))))))) -> (forall fp_i_signed_magnitude_injective fp_j_signed_magnitude_injective fp_value_signed_magnitude_injective. (exists fp_gap_signed_magnitude_injective_i. fp_gap_signed_magnitude_injective_i + S fp_i_signed_magnitude_injective = h) -> (exists fp_gap_signed_magnitude_injective_j. fp_gap_signed_magnitude_injective_j + S fp_j_signed_magnitude_injective = h) -> (((exists ff_h_signed_magnitude_injective_left. ff_h_signed_magnitude_injective_left + S (fp_value_signed_magnitude_injective) = S ((S (fp_i_signed_magnitude_injective)) * mc)) /\ exists ff_q_signed_magnitude_injective_left. mb = ff_q_signed_magnitude_injective_left * S ((S (fp_i_signed_magnitude_injective)) * mc) + (fp_value_signed_magnitude_injective))) -> (((exists ff_h_signed_magnitude_injective_right. ff_h_signed_magnitude_injective_right + S (fp_value_signed_magnitude_injective) = S ((S (fp_j_signed_magnitude_injective)) * mc)) /\ exists ff_q_signed_magnitude_injective_right. mb = ff_q_signed_magnitude_injective_right * S ((S (fp_j_signed_magnitude_injective)) * mc) + (fp_value_signed_magnitude_injective))) -> fp_i_signed_magnitude_injective = fp_j_signed_magnitude_injective)Proof neighborhood
Direct theorem prerequisites
PA002F beta_at_unique PA0034 beta_half_range_entry_bounds PA0032 beta_range_entry_eq PA000E add_succ_left PA0001 zero_add PA003J add_le_add_right PA003K add_le_add_left PA000R le_trans PA000G mul_succ_left PA000D mul_zero_left PA0033 lt_of_le_of_lt PA000J add_eq_zero_left PA000F add_comm PA007A gauss_same_sign_scaled_source_unique PA007B gauss_mixed_sign_scaled_source_impossible PA003T beta_range_injectiveDirect 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 (14)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–20
03Fix variables and assumptionsL21–21
Work with arbitrary variables or the premises of the current implication.
- L21
intro hmj
04Establish hentryiL22–25
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hprefix.
- L22Definitions: BetaAt(b,c,i,gsp_value_injective_entry_i)BetaAt(mb,mc,i,gsp_magnitude_injective_entry_i)BetaAt(sb,sc,i,gsp_sign_injective_entry_i)Lt(0,gsp_magnitude_injective_entry_i)Le(gsp_magnitude_injective_entry_i,h)ModEq(p,a · gsp_value_injective_entry_i,gsp_magnitude_injective_entry_i)ModEq(p,a · gsp_value_injective_entry_i,2 · h · gsp_magnitude_injective_entry_i)Original native command in the exact edition
have hentryi · expand full local formula (631 characters)
have hentryi : ∃ gsp_value_injective_entry_i. ∃ gsp_magnitude_injective_entry_i. ∃ gsp_sign_injective_entry_i. BetaAt(b,c,i,gsp_value_injective_entry_i) ∧ (BetaAt(mb,mc,i,gsp_magnitude_injective_entry_i) ∧ (BetaAt(sb,sc,i,gsp_sign_injective_entry_i) ∧ (Lt(0,gsp_magnitude_injective_entry_i) ∧ (Le(gsp_magnitude_injective_entry_i,h) ∧ ((gsp_sign_injective_entry_i = 0 ∨ gsp_sign_injective_entry_i = 1) ∧ (gsp_sign_injective_entry_i = 0 ∧ ModEq(p,a · gsp_value_injective_entry_i,gsp_magnitude_injective_entry_i) ∨ gsp_sign_injective_entry_i = 1 ∧ ModEq(p,a · gsp_value_injective_entry_i,2 · h · gsp_magnitude_injective_entry_i))))))) - L23
specialize hprefix i - L24
apply hprefix - L25
exact hi
05Separate the logical casesL26–34
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L26
cases hentryi - L27
cases hentryi_witness - L28
cases hentryi_witness_witness - L29
cases hentryi_witness_witness_witness - L30
cases hentryi_witness_witness_witness_right - L31
cases hentryi_witness_witness_witness_right_right - L32
cases hentryi_witness_witness_witness_right_right_right - L33
cases hentryi_witness_witness_witness_right_right_right_right - L34
cases hentryi_witness_witness_witness_right_right_right_right_right
06Establish hentryjL35–38
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hprefix.
- L35Definitions: BetaAt(b,c,j,gsp_value_injective_entry_j)BetaAt(mb,mc,j,gsp_magnitude_injective_entry_j)BetaAt(sb,sc,j,gsp_sign_injective_entry_j)Lt(0,gsp_magnitude_injective_entry_j)Le(gsp_magnitude_injective_entry_j,h)ModEq(p,a · gsp_value_injective_entry_j,gsp_magnitude_injective_entry_j)ModEq(p,a · gsp_value_injective_entry_j,2 · h · gsp_magnitude_injective_entry_j)Original native command in the exact edition
have hentryj · expand full local formula (631 characters)
have hentryj : ∃ gsp_value_injective_entry_j. ∃ gsp_magnitude_injective_entry_j. ∃ gsp_sign_injective_entry_j. BetaAt(b,c,j,gsp_value_injective_entry_j) ∧ (BetaAt(mb,mc,j,gsp_magnitude_injective_entry_j) ∧ (BetaAt(sb,sc,j,gsp_sign_injective_entry_j) ∧ (Lt(0,gsp_magnitude_injective_entry_j) ∧ (Le(gsp_magnitude_injective_entry_j,h) ∧ ((gsp_sign_injective_entry_j = 0 ∨ gsp_sign_injective_entry_j = 1) ∧ (gsp_sign_injective_entry_j = 0 ∧ ModEq(p,a · gsp_value_injective_entry_j,gsp_magnitude_injective_entry_j) ∨ gsp_sign_injective_entry_j = 1 ∧ ModEq(p,a · gsp_value_injective_entry_j,2 · h · gsp_magnitude_injective_entry_j))))))) - L36
specialize hprefix j - L37
apply hprefix - L38
exact hj
07Separate the logical casesL39–47
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L39
cases hentryj - L40
cases hentryj_witness - L41
cases hentryj_witness_witness - L42
cases hentryj_witness_witness_witness - L43
cases hentryj_witness_witness_witness_right - L44
cases hentryj_witness_witness_witness_right_right - L45
cases hentryj_witness_witness_witness_right_right_right - L46
cases hentryj_witness_witness_witness_right_right_right_right - L47
cases hentryj_witness_witness_witness_right_right_right_right_right
08Establish hmagiL48–56
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
09Establish hmagjL57–66
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
- L57
have hmagj : m = x4 - L58
specialize beta_at_unique mb - L59
specialize beta_at_unique mc - L60
specialize beta_at_unique j - L61
specialize beta_at_unique m - L62
specialize beta_at_unique x4 - L63
apply beta_at_unique - L64
exact hmj - L65
exact hentryj_witness_witness_witness_right_left - L66
rewrite <- hmagi at hentryi_witness_witness_witness_right_right_right_right_right_right
10Calculate and transport equalitiesL67–69
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
11Establish hisignedL70–71
Establish this local claim before using it. It is not an additional assumption.
- L70
have hisigned : x2 = 0 ∧ ModEq(p,a · x,m) ∨ x2 = 1 ∧ ModEq(p,a · x,2 · h · m)Definitions: ModEq(p,a · x,m)ModEq(p,a · x,2 · h · m)Original native command in the exact edition - L71
exact hentryi_witness_witness_witness_right_right_right_right_right_right
12Establish hjsignedL72–73
Establish this local claim before using it. It is not an additional assumption.
- L72
have hjsigned : x5 = 0 ∧ ModEq(p,a · x3,m) ∨ x5 = 1 ∧ ModEq(p,a · x3,2 · h · m)Definitions: ModEq(p,a · x3,m)ModEq(p,a · x3,2 · h · m)Original native command in the exact edition - L73
exact hentryj_witness_witness_witness_right_right_right_right_right_right
13Establish hxboundsL74–83
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta half range entry bounds.
- L74
have hxbounds : UnitResidue(p,x)Definitions: UnitResidue(p,x)Original native command in the exact edition - L75
specialize beta_half_range_entry_bounds p - L76
specialize beta_half_range_entry_bounds h - L77
specialize beta_half_range_entry_bounds b - L78
specialize beta_half_range_entry_bounds c - L79
specialize beta_half_range_entry_bounds i - L80
specialize beta_half_range_entry_bounds x - L81
apply beta_half_range_entry_bounds - L82
exact hpodd - L83
exact hrange
14Use earlier factsL84–85
15Establish hyboundsL86–95
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta half range entry bounds.
- L86
have hybounds : UnitResidue(p,x3)Definitions: UnitResidue(p,x3)Original native command in the exact edition - L87
specialize beta_half_range_entry_bounds p - L88
specialize beta_half_range_entry_bounds h - L89
specialize beta_half_range_entry_bounds b - L90
specialize beta_half_range_entry_bounds c - L91
specialize beta_half_range_entry_bounds j - L92
specialize beta_half_range_entry_bounds x3 - L93
apply beta_half_range_entry_bounds - L94
exact hpodd - L95
exact hrange
16Use earlier factsL96–97
17Separate the logical casesL98–99
18Establish hxvalueL100–109
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta range entry eq.
- L100
have hxvalue : x = 1 + i - L101
specialize beta_range_entry_eq b - L102
specialize beta_range_entry_eq c - L103
specialize beta_range_entry_eq 1 - L104
specialize beta_range_entry_eq h - L105
specialize beta_range_entry_eq i - L106
specialize beta_range_entry_eq x - L107
apply beta_range_entry_eq - L108
exact hrange - L109
exact hi
19Use earlier factsL110–110
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L110
exact hentryi_witness_witness_witness_left
20Establish hyvalueL111–120
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta range entry eq.
- L111
have hyvalue : x3 = 1 + j - L112
specialize beta_range_entry_eq b - L113
specialize beta_range_entry_eq c - L114
specialize beta_range_entry_eq 1 - L115
specialize beta_range_entry_eq h - L116
specialize beta_range_entry_eq j - L117
specialize beta_range_entry_eq x3 - L118
apply beta_range_entry_eq - L119
exact hrange - L120
exact hj
21Use earlier factsL121–121
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L121
exact hentryj_witness_witness_witness_left
22Establish honeiL122–129
23Establish honejL130–137
24Establish hxleL138–141
25Establish hyleL142–145
26Establish hsum_firstL146–151
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add le add right.
- L146
have hsum_first : Le(x + x3,h + x3)Definitions: Le(x + x3,h + x3)Original native command in the exact edition - L147
specialize add_le_add_right x - L148
specialize add_le_add_right h - L149
specialize add_le_add_right x3 - L150
apply add_le_add_right - L151
exact hxle
27Establish hsum_secondL152–157
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add le add left.
- L152
have hsum_second : Le(h + x3,h + h)Definitions: Le(h + x3,h + h)Original native command in the exact edition - L153
specialize add_le_add_left x3 - L154
specialize add_le_add_left h - L155
specialize add_le_add_left h - L156
apply add_le_add_left - L157
exact hyle
28Establish hsum_le_doubleL158–164
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le trans.
- L158
have hsum_le_double : Le(x + x3,h + h)Definitions: Le(x + x3,h + h)Original native command in the exact edition - L159
specialize le_trans (x + x3) - L160
specialize le_trans (h + x3) - L161
specialize le_trans (h + h) - L162
apply le_trans - L163
exact hsum_first - L164
exact hsum_second
29Establish hdouble_belowL165–165
Establish this local claim before using it. It is not an additional assumption.
- L165
have hdouble_below : Lt(h + h,p)Definitions: Lt(h + h,p)Original native command in the exact edition
30Construct an explicit witnessL166–166
Supply the displayed value, then prove that it has the required property.
- L166
exists 0
31Calculate and transport equalitiesL167–168
32Establish hsum_boundL169–175
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply lt of le of lt.
33Establish hsum_nonzeroL176–182
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hxbounds left.
34Establish hsumcommL183–186
35Establish hreverse_sum_boundL187–189
Establish this local claim before using it. It is not an additional assumption.
- L187
have hreverse_sum_bound : Lt(x3 + x,p)Definitions: Lt(x3 + x,p)Original native command in the exact edition - L188
rewrite hsumcomm - L189
exact hsum_bound
36Establish hreverse_sum_nonzeroL190–196
37Establish hsourceeqL197–197
Establish this local claim before using it. It is not an additional assumption.
- L197
have hsourceeq : x = x3
38Separate the logical casesL198–201
39Use earlier factsL202–211
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L202
specialize gauss_same_sign_scaled_source_unique p - L203
specialize gauss_same_sign_scaled_source_unique h - L204
specialize gauss_same_sign_scaled_source_unique a - L205
specialize gauss_same_sign_scaled_source_unique x - L206
specialize gauss_same_sign_scaled_source_unique x3 - L207
specialize gauss_same_sign_scaled_source_unique m - L208
apply gauss_same_sign_scaled_source_unique - L209
exact hp - L210
exact hnotdiv - L211
exact hxbounds_right
40Use earlier factsL212–212
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L212
exact hybounds_right
41Separate the logical casesL213–214
42Use earlier factsL215–216
43Separate the logical casesL217–218
44Use earlier factsL219–228
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L219
specialize gauss_mixed_sign_scaled_source_impossible p - L220
specialize gauss_mixed_sign_scaled_source_impossible h - L221
specialize gauss_mixed_sign_scaled_source_impossible a - L222
specialize gauss_mixed_sign_scaled_source_impossible x - L223
specialize gauss_mixed_sign_scaled_source_impossible x3 - L224
specialize gauss_mixed_sign_scaled_source_impossible m - L225
apply gauss_mixed_sign_scaled_source_impossible - L226
exact hpodd - L227
exact hp - L228
exact hnotdiv
45Use earlier factsL229–232
46Separate the logical casesL233–236
47Use earlier factsL237–246
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L237
specialize gauss_mixed_sign_scaled_source_impossible p - L238
specialize gauss_mixed_sign_scaled_source_impossible h - L239
specialize gauss_mixed_sign_scaled_source_impossible a - L240
specialize gauss_mixed_sign_scaled_source_impossible x3 - L241
specialize gauss_mixed_sign_scaled_source_impossible x - L242
specialize gauss_mixed_sign_scaled_source_impossible m - L243
apply gauss_mixed_sign_scaled_source_impossible - L244
exact hpodd - L245
exact hp - L246
exact hnotdiv
48Use earlier factsL247–250
49Separate the logical casesL251–251
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L251
cases hjsigned_right
50Use earlier factsL252–261
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L252
specialize gauss_same_sign_scaled_source_unique p - L253
specialize gauss_same_sign_scaled_source_unique h - L254
specialize gauss_same_sign_scaled_source_unique a - L255
specialize gauss_same_sign_scaled_source_unique x - L256
specialize gauss_same_sign_scaled_source_unique x3 - L257
specialize gauss_same_sign_scaled_source_unique m - L258
apply gauss_same_sign_scaled_source_unique - L259
exact hp - L260
exact hnotdiv - L261
exact hxbounds_right
51Use earlier factsL262–262
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L262
exact hybounds_right
52Separate the logical casesL263–264
53Use earlier factsL265–274
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L265
exact hisigned_right_right - L266
exact hjsigned_right_right - L267
specialize beta_range_injective b - L268
specialize beta_range_injective c - L269
specialize beta_range_injective 1 - L270
specialize beta_range_injective h - L271
specialize beta_range_injective i - L272
specialize beta_range_injective j - L273
specialize beta_range_injective x - L274
specialize beta_range_injective x3
Original defined command ledger · 281 lines
- 0001
intro p - 0002
intro h - 0003
intro a - 0004
intro b - 0005
intro c - 0006
intro mb - 0007
intro mc - 0008
intro sb - 0009
intro sc - 0010
intro hpodd - 0011
intro hp - 0012
intro hnotdiv - 0013
intro hrange - 0014
intro hprefix - 0015
intro i - 0016
intro j - 0017
intro m - 0018
intro hi - 0019
intro hj - 0020
intro hmi - 0021
intro hmj - 0022
have hentryi : ∃ gsp_value_injective_entry_i. ∃ gsp_magnitude_injective_entry_i. ∃ gsp_sign_injective_entry_i. BetaAt(b,c,i,gsp_value_injective_entry_i) ∧ (BetaAt(mb,mc,i,gsp_magnitude_injective_entry_i) ∧ (BetaAt(sb,sc,i,gsp_sign_injective_entry_i) ∧ (Lt(0,gsp_magnitude_injective_entry_i) ∧ (Le(gsp_magnitude_injective_entry_i,h) ∧ ((gsp_sign_injective_entry_i = 0 ∨ gsp_sign_injective_entry_i = 1) ∧ (gsp_sign_injective_entry_i = 0 ∧ ModEq(p,a · gsp_value_injective_entry_i,gsp_magnitude_injective_entry_i) ∨ gsp_sign_injective_entry_i = 1 ∧ ModEq(p,a · gsp_value_injective_entry_i,2 · h · gsp_magnitude_injective_entry_i)))))))Exact native replay line
have hentryi : exists gsp_value_injective_entry_i gsp_magnitude_injective_entry_i gsp_sign_injective_entry_i. (((exists ff_h_gsp_injective_entry_i_source. ff_h_gsp_injective_entry_i_source + S (gsp_value_injective_entry_i) = S ((S (i)) * c)) /\ exists ff_q_gsp_injective_entry_i_source. b = ff_q_gsp_injective_entry_i_source * S ((S (i)) * c) + (gsp_value_injective_entry_i))) /\ ((((exists ff_h_gsp_injective_entry_i_magnitude. ff_h_gsp_injective_entry_i_magnitude + S (gsp_magnitude_injective_entry_i) = S ((S (i)) * mc)) /\ exists ff_q_gsp_injective_entry_i_magnitude. mb = ff_q_gsp_injective_entry_i_magnitude * S ((S (i)) * mc) + (gsp_magnitude_injective_entry_i))) /\ ((((exists ff_h_gsp_injective_entry_i_sign. ff_h_gsp_injective_entry_i_sign + S (gsp_sign_injective_entry_i) = S ((S (i)) * sc)) /\ exists ff_q_gsp_injective_entry_i_sign. sb = ff_q_gsp_injective_entry_i_sign * S ((S (i)) * sc) + (gsp_sign_injective_entry_i))) /\ ((exists gsp_lt_gap_injective_entry_i_positive. gsp_lt_gap_injective_entry_i_positive + S 0 = gsp_magnitude_injective_entry_i) /\ ((exists gsp_le_gap_injective_entry_i_bounded. gsp_le_gap_injective_entry_i_bounded + gsp_magnitude_injective_entry_i = h) /\ ((gsp_sign_injective_entry_i = 0 \/ gsp_sign_injective_entry_i = 1) /\ (((gsp_sign_injective_entry_i = 0 /\ (exists gsp_mod_left_injective_entry_i_lower gsp_mod_right_injective_entry_i_lower. (a * gsp_value_injective_entry_i) + p * gsp_mod_left_injective_entry_i_lower = (gsp_magnitude_injective_entry_i) + p * gsp_mod_right_injective_entry_i_lower)) \/ (gsp_sign_injective_entry_i = 1 /\ (exists gsp_mod_left_injective_entry_i_reflected gsp_mod_right_injective_entry_i_reflected. (a * gsp_value_injective_entry_i) + p * gsp_mod_left_injective_entry_i_reflected = ((2 * h) * gsp_magnitude_injective_entry_i) + p * gsp_mod_right_injective_entry_i_reflected))))))))) - 0023
specialize hprefix i - 0024
apply hprefix - 0025
exact hi - 0026
cases hentryi - 0027
cases hentryi_witness - 0028
cases hentryi_witness_witness - 0029
cases hentryi_witness_witness_witness - 0030
cases hentryi_witness_witness_witness_right - 0031
cases hentryi_witness_witness_witness_right_right - 0032
cases hentryi_witness_witness_witness_right_right_right - 0033
cases hentryi_witness_witness_witness_right_right_right_right - 0034
cases hentryi_witness_witness_witness_right_right_right_right_right - 0035
have hentryj : ∃ gsp_value_injective_entry_j. ∃ gsp_magnitude_injective_entry_j. ∃ gsp_sign_injective_entry_j. BetaAt(b,c,j,gsp_value_injective_entry_j) ∧ (BetaAt(mb,mc,j,gsp_magnitude_injective_entry_j) ∧ (BetaAt(sb,sc,j,gsp_sign_injective_entry_j) ∧ (Lt(0,gsp_magnitude_injective_entry_j) ∧ (Le(gsp_magnitude_injective_entry_j,h) ∧ ((gsp_sign_injective_entry_j = 0 ∨ gsp_sign_injective_entry_j = 1) ∧ (gsp_sign_injective_entry_j = 0 ∧ ModEq(p,a · gsp_value_injective_entry_j,gsp_magnitude_injective_entry_j) ∨ gsp_sign_injective_entry_j = 1 ∧ ModEq(p,a · gsp_value_injective_entry_j,2 · h · gsp_magnitude_injective_entry_j)))))))Exact native replay line
have hentryj : exists gsp_value_injective_entry_j gsp_magnitude_injective_entry_j gsp_sign_injective_entry_j. (((exists ff_h_gsp_injective_entry_j_source. ff_h_gsp_injective_entry_j_source + S (gsp_value_injective_entry_j) = S ((S (j)) * c)) /\ exists ff_q_gsp_injective_entry_j_source. b = ff_q_gsp_injective_entry_j_source * S ((S (j)) * c) + (gsp_value_injective_entry_j))) /\ ((((exists ff_h_gsp_injective_entry_j_magnitude. ff_h_gsp_injective_entry_j_magnitude + S (gsp_magnitude_injective_entry_j) = S ((S (j)) * mc)) /\ exists ff_q_gsp_injective_entry_j_magnitude. mb = ff_q_gsp_injective_entry_j_magnitude * S ((S (j)) * mc) + (gsp_magnitude_injective_entry_j))) /\ ((((exists ff_h_gsp_injective_entry_j_sign. ff_h_gsp_injective_entry_j_sign + S (gsp_sign_injective_entry_j) = S ((S (j)) * sc)) /\ exists ff_q_gsp_injective_entry_j_sign. sb = ff_q_gsp_injective_entry_j_sign * S ((S (j)) * sc) + (gsp_sign_injective_entry_j))) /\ ((exists gsp_lt_gap_injective_entry_j_positive. gsp_lt_gap_injective_entry_j_positive + S 0 = gsp_magnitude_injective_entry_j) /\ ((exists gsp_le_gap_injective_entry_j_bounded. gsp_le_gap_injective_entry_j_bounded + gsp_magnitude_injective_entry_j = h) /\ ((gsp_sign_injective_entry_j = 0 \/ gsp_sign_injective_entry_j = 1) /\ (((gsp_sign_injective_entry_j = 0 /\ (exists gsp_mod_left_injective_entry_j_lower gsp_mod_right_injective_entry_j_lower. (a * gsp_value_injective_entry_j) + p * gsp_mod_left_injective_entry_j_lower = (gsp_magnitude_injective_entry_j) + p * gsp_mod_right_injective_entry_j_lower)) \/ (gsp_sign_injective_entry_j = 1 /\ (exists gsp_mod_left_injective_entry_j_reflected gsp_mod_right_injective_entry_j_reflected. (a * gsp_value_injective_entry_j) + p * gsp_mod_left_injective_entry_j_reflected = ((2 * h) * gsp_magnitude_injective_entry_j) + p * gsp_mod_right_injective_entry_j_reflected))))))))) - 0036
specialize hprefix j - 0037
apply hprefix - 0038
exact hj - 0039
cases hentryj - 0040
cases hentryj_witness - 0041
cases hentryj_witness_witness - 0042
cases hentryj_witness_witness_witness - 0043
cases hentryj_witness_witness_witness_right - 0044
cases hentryj_witness_witness_witness_right_right - 0045
cases hentryj_witness_witness_witness_right_right_right - 0046
cases hentryj_witness_witness_witness_right_right_right_right - 0047
cases hentryj_witness_witness_witness_right_right_right_right_right - 0048
have hmagi : m = x1 - 0049
specialize beta_at_unique mb - 0050
specialize beta_at_unique mc - 0051
specialize beta_at_unique i - 0052
specialize beta_at_unique m - 0053
specialize beta_at_unique x1 - 0054
apply beta_at_unique - 0055
exact hmi - 0056
exact hentryi_witness_witness_witness_right_left - 0057
have hmagj : m = x4 - 0058
specialize beta_at_unique mb - 0059
specialize beta_at_unique mc - 0060
specialize beta_at_unique j - 0061
specialize beta_at_unique m - 0062
specialize beta_at_unique x4 - 0063
apply beta_at_unique - 0064
exact hmj - 0065
exact hentryj_witness_witness_witness_right_left - 0066
rewrite <- hmagi at hentryi_witness_witness_witness_right_right_right_right_right_right - 0067
rewrite <- hmagi at hentryi_witness_witness_witness_right_right_right_right_right_right - 0068
rewrite <- hmagj at hentryj_witness_witness_witness_right_right_right_right_right_right - 0069
rewrite <- hmagj at hentryj_witness_witness_witness_right_right_right_right_right_right - 0070
have hisigned : x2 = 0 ∧ ModEq(p,a · x,m) ∨ x2 = 1 ∧ ModEq(p,a · x,2 · h · m)Exact native replay line
have hisigned : ((x2 = 0 /\ (exists gmp_mod_left_injective_i_lower gmp_mod_right_injective_i_lower. (a * x) + p * gmp_mod_left_injective_i_lower = (m) + p * gmp_mod_right_injective_i_lower)) \/ (x2 = 1 /\ (exists gmp_mod_left_injective_i_reflected gmp_mod_right_injective_i_reflected. (a * x) + p * gmp_mod_left_injective_i_reflected = ((2 * h) * m) + p * gmp_mod_right_injective_i_reflected))) - 0071
exact hentryi_witness_witness_witness_right_right_right_right_right_right - 0072
have hjsigned : x5 = 0 ∧ ModEq(p,a · x3,m) ∨ x5 = 1 ∧ ModEq(p,a · x3,2 · h · m)Exact native replay line
have hjsigned : ((x5 = 0 /\ (exists gmp_mod_left_injective_j_lower gmp_mod_right_injective_j_lower. (a * x3) + p * gmp_mod_left_injective_j_lower = (m) + p * gmp_mod_right_injective_j_lower)) \/ (x5 = 1 /\ (exists gmp_mod_left_injective_j_reflected gmp_mod_right_injective_j_reflected. (a * x3) + p * gmp_mod_left_injective_j_reflected = ((2 * h) * m) + p * gmp_mod_right_injective_j_reflected))) - 0073
exact hentryj_witness_witness_witness_right_right_right_right_right_right - 0074
have hxbounds : UnitResidue(p,x)Exact native replay line
have hxbounds : (~(x = 0) /\ (exists gsp_lt_gap_injective_x_bound. gsp_lt_gap_injective_x_bound + S x = p)) - 0075
specialize beta_half_range_entry_bounds p - 0076
specialize beta_half_range_entry_bounds h - 0077
specialize beta_half_range_entry_bounds b - 0078
specialize beta_half_range_entry_bounds c - 0079
specialize beta_half_range_entry_bounds i - 0080
specialize beta_half_range_entry_bounds x - 0081
apply beta_half_range_entry_bounds - 0082
exact hpodd - 0083
exact hrange - 0084
exact hi - 0085
exact hentryi_witness_witness_witness_left - 0086
have hybounds : UnitResidue(p,x3)Exact native replay line
have hybounds : (~(x3 = 0) /\ (exists gsp_lt_gap_injective_y_bound. gsp_lt_gap_injective_y_bound + S x3 = p)) - 0087
specialize beta_half_range_entry_bounds p - 0088
specialize beta_half_range_entry_bounds h - 0089
specialize beta_half_range_entry_bounds b - 0090
specialize beta_half_range_entry_bounds c - 0091
specialize beta_half_range_entry_bounds j - 0092
specialize beta_half_range_entry_bounds x3 - 0093
apply beta_half_range_entry_bounds - 0094
exact hpodd - 0095
exact hrange - 0096
exact hj - 0097
exact hentryj_witness_witness_witness_left - 0098
cases hxbounds - 0099
cases hybounds - 0100
have hxvalue : x = 1 + i - 0101
specialize beta_range_entry_eq b - 0102
specialize beta_range_entry_eq c - 0103
specialize beta_range_entry_eq 1 - 0104
specialize beta_range_entry_eq h - 0105
specialize beta_range_entry_eq i - 0106
specialize beta_range_entry_eq x - 0107
apply beta_range_entry_eq - 0108
exact hrange - 0109
exact hi - 0110
exact hentryi_witness_witness_witness_left - 0111
have hyvalue : x3 = 1 + j - 0112
specialize beta_range_entry_eq b - 0113
specialize beta_range_entry_eq c - 0114
specialize beta_range_entry_eq 1 - 0115
specialize beta_range_entry_eq h - 0116
specialize beta_range_entry_eq j - 0117
specialize beta_range_entry_eq x3 - 0118
apply beta_range_entry_eq - 0119
exact hrange - 0120
exact hj - 0121
exact hentryj_witness_witness_witness_left - 0122
have honei : 1 + i = S i - 0123
trans S (0 + i) - 0124
specialize add_succ_left 0 - 0125
specialize add_succ_left i - 0126
exact add_succ_left - 0127
congr - 0128
specialize zero_add i - 0129
exact zero_add - 0130
have honej : 1 + j = S j - 0131
trans S (0 + j) - 0132
specialize add_succ_left 0 - 0133
specialize add_succ_left j - 0134
exact add_succ_left - 0135
congr - 0136
specialize zero_add j - 0137
exact zero_add - 0138
have hxle : Le(x,h)Exact native replay line
have hxle : exists gsp_le_gap_injective_x_le_half. gsp_le_gap_injective_x_le_half + x = h - 0139
rewrite hxvalue - 0140
rewrite honei - 0141
exact hi - 0142
have hyle : Le(x3,h)Exact native replay line
have hyle : exists gsp_le_gap_injective_y_le_half. gsp_le_gap_injective_y_le_half + x3 = h - 0143
rewrite hyvalue - 0144
rewrite honej - 0145
exact hj - 0146
have hsum_first : Le(x + x3,h + x3)Exact native replay line
have hsum_first : exists gmp_sum_first_gap. gmp_sum_first_gap + (x + x3) = h + x3 - 0147
specialize add_le_add_right x - 0148
specialize add_le_add_right h - 0149
specialize add_le_add_right x3 - 0150
apply add_le_add_right - 0151
exact hxle - 0152
have hsum_second : Le(h + x3,h + h)Exact native replay line
have hsum_second : exists gmp_sum_second_gap. gmp_sum_second_gap + (h + x3) = h + h - 0153
specialize add_le_add_left x3 - 0154
specialize add_le_add_left h - 0155
specialize add_le_add_left h - 0156
apply add_le_add_left - 0157
exact hyle - 0158
have hsum_le_double : Le(x + x3,h + h)Exact native replay line
have hsum_le_double : exists gmp_sum_double_gap. gmp_sum_double_gap + (x + x3) = h + h - 0159
specialize le_trans (x + x3) - 0160
specialize le_trans (h + x3) - 0161
specialize le_trans (h + h) - 0162
apply le_trans - 0163
exact hsum_first - 0164
exact hsum_second - 0165
have hdouble_below : Lt(h + h,p)Exact native replay line
have hdouble_below : exists gmp_double_below_gap. gmp_double_below_gap + S (h + h) = p - 0166
exists 0 - 0167
rewrite hpodd - 0168
simp [mul_succ_left, mul_zero_left, zero_add, add_succ_left] - 0169
have hsum_bound : Lt(x + x3,p)Exact native replay line
have hsum_bound : exists gsp_lt_gap_injective_sum_bound. gsp_lt_gap_injective_sum_bound + S (x + x3) = p - 0170
specialize lt_of_le_of_lt (x + x3) - 0171
specialize lt_of_le_of_lt (h + h) - 0172
specialize lt_of_le_of_lt p - 0173
apply lt_of_le_of_lt - 0174
exact hsum_le_double - 0175
exact hdouble_below - 0176
have hsum_nonzero : ~(x + x3 = 0) - 0177
intro hsumzero - 0178
apply hxbounds_left - 0179
specialize add_eq_zero_left x - 0180
specialize add_eq_zero_left x3 - 0181
apply add_eq_zero_left - 0182
exact hsumzero - 0183
have hsumcomm : x3 + x = x + x3 - 0184
specialize add_comm x3 - 0185
specialize add_comm x - 0186
exact add_comm - 0187
have hreverse_sum_bound : Lt(x3 + x,p)Exact native replay line
have hreverse_sum_bound : exists gsp_lt_gap_injective_reverse_sum_bound. gsp_lt_gap_injective_reverse_sum_bound + S (x3 + x) = p - 0188
rewrite hsumcomm - 0189
exact hsum_bound - 0190
have hreverse_sum_nonzero : ~(x3 + x = 0) - 0191
intro hreversezero - 0192
apply hsum_nonzero - 0193
trans x3 + x - 0194
symm - 0195
exact hsumcomm - 0196
exact hreversezero - 0197
have hsourceeq : x = x3 - 0198
cases hisigned - 0199
cases hisigned_left - 0200
cases hjsigned - 0201
cases hjsigned_left - 0202
specialize gauss_same_sign_scaled_source_unique p - 0203
specialize gauss_same_sign_scaled_source_unique h - 0204
specialize gauss_same_sign_scaled_source_unique a - 0205
specialize gauss_same_sign_scaled_source_unique x - 0206
specialize gauss_same_sign_scaled_source_unique x3 - 0207
specialize gauss_same_sign_scaled_source_unique m - 0208
apply gauss_same_sign_scaled_source_unique - 0209
exact hp - 0210
exact hnotdiv - 0211
exact hxbounds_right - 0212
exact hybounds_right - 0213
left - 0214
split - 0215
exact hisigned_left_right - 0216
exact hjsigned_left_right - 0217
cases hjsigned_right - 0218
exfalso - 0219
specialize gauss_mixed_sign_scaled_source_impossible p - 0220
specialize gauss_mixed_sign_scaled_source_impossible h - 0221
specialize gauss_mixed_sign_scaled_source_impossible a - 0222
specialize gauss_mixed_sign_scaled_source_impossible x - 0223
specialize gauss_mixed_sign_scaled_source_impossible x3 - 0224
specialize gauss_mixed_sign_scaled_source_impossible m - 0225
apply gauss_mixed_sign_scaled_source_impossible - 0226
exact hpodd - 0227
exact hp - 0228
exact hnotdiv - 0229
exact hsum_bound - 0230
exact hsum_nonzero - 0231
exact hisigned_left_right - 0232
exact hjsigned_right_right - 0233
cases hisigned_right - 0234
cases hjsigned - 0235
cases hjsigned_left - 0236
exfalso - 0237
specialize gauss_mixed_sign_scaled_source_impossible p - 0238
specialize gauss_mixed_sign_scaled_source_impossible h - 0239
specialize gauss_mixed_sign_scaled_source_impossible a - 0240
specialize gauss_mixed_sign_scaled_source_impossible x3 - 0241
specialize gauss_mixed_sign_scaled_source_impossible x - 0242
specialize gauss_mixed_sign_scaled_source_impossible m - 0243
apply gauss_mixed_sign_scaled_source_impossible - 0244
exact hpodd - 0245
exact hp - 0246
exact hnotdiv - 0247
exact hreverse_sum_bound - 0248
exact hreverse_sum_nonzero - 0249
exact hjsigned_left_right - 0250
exact hisigned_right_right - 0251
cases hjsigned_right - 0252
specialize gauss_same_sign_scaled_source_unique p - 0253
specialize gauss_same_sign_scaled_source_unique h - 0254
specialize gauss_same_sign_scaled_source_unique a - 0255
specialize gauss_same_sign_scaled_source_unique x - 0256
specialize gauss_same_sign_scaled_source_unique x3 - 0257
specialize gauss_same_sign_scaled_source_unique m - 0258
apply gauss_same_sign_scaled_source_unique - 0259
exact hp - 0260
exact hnotdiv - 0261
exact hxbounds_right - 0262
exact hybounds_right - 0263
right - 0264
split - 0265
exact hisigned_right_right - 0266
exact hjsigned_right_right - 0267
specialize beta_range_injective b - 0268
specialize beta_range_injective c - 0269
specialize beta_range_injective 1 - 0270
specialize beta_range_injective h - 0271
specialize beta_range_injective i - 0272
specialize beta_range_injective j - 0273
specialize beta_range_injective x - 0274
specialize beta_range_injective x3 - 0275
apply beta_range_injective - 0276
exact hrange - 0277
exact hi - 0278
exact hj - 0279
exact hentryi_witness_witness_witness_left - 0280
exact hentryj_witness_witness_witness_left - 0281
exact hsourceeq