Exact expanded first-order arithmetic statement
forall p n. (~((p) = 1) /\ forall pfa_factor_left_trace_exists_domain pfa_factor_right_trace_exists_domain. (p) = pfa_factor_left_trace_exists_domain * pfa_factor_right_trace_exists_domain -> pfa_factor_left_trace_exists_domain = 1 \/ pfa_factor_right_trace_exists_domain = 1) -> exists b c r. (((((exists ff_h_pft_trace_exists_resultstart. ff_h_pft_trace_exists_resultstart + S (0) = S ((S (0)) * c)) /\ exists ff_q_pft_trace_exists_resultstart. b = ff_q_pft_trace_exists_resultstart * S ((S (0)) * c) + (0))) /\ (((((exists ff_h_pft_trace_exists_resultterminal. ff_h_pft_trace_exists_resultterminal + S (r) = S ((S (n)) * c)) /\ exists ff_q_pft_trace_exists_resultterminal. b = ff_q_pft_trace_exists_resultterminal * S ((S (n)) * c) + (r))) /\ ((forall pff_trace_index_trace_exists_resultsteps. (exists pfa_gap_trace_exists_resultstepsindex. pfa_gap_trace_exists_resultstepsindex + S (pff_trace_index_trace_exists_resultsteps) = (n)) -> exists pff_trace_before_trace_exists_resultsteps pff_trace_after_trace_exists_resultsteps. ((((exists ff_h_pft_trace_exists_resultstepsbefore. ff_h_pft_trace_exists_resultstepsbefore + S (pff_trace_before_trace_exists_resultsteps) = S ((S (pff_trace_index_trace_exists_resultsteps)) * c)) /\ exists ff_q_pft_trace_exists_resultstepsbefore. b = ff_q_pft_trace_exists_resultstepsbefore * S ((S (pff_trace_index_trace_exists_resultsteps)) * c) + (pff_trace_before_trace_exists_resultsteps))) /\ (((((exists ff_h_pft_trace_exists_resultstepsafter. ff_h_pft_trace_exists_resultstepsafter + S (pff_trace_after_trace_exists_resultsteps) = S ((S (S (pff_trace_index_trace_exists_resultsteps))) * c)) /\ exists ff_q_pft_trace_exists_resultstepsafter. b = ff_q_pft_trace_exists_resultstepsafter * S ((S (S (pff_trace_index_trace_exists_resultsteps))) * c) + (pff_trace_after_trace_exists_resultsteps))) /\ ((((exists pfa_gap_trace_exists_resultstepsadditionleft. pfa_gap_trace_exists_resultstepsadditionleft + S (pff_trace_before_trace_exists_resultsteps) = (p)) /\ (((exists pfa_gap_trace_exists_resultstepsadditionright. pfa_gap_trace_exists_resultstepsadditionright + S (1) = (p)) /\ ((((exists pfa_gap_trace_exists_resultstepsadditionresultbound. pfa_gap_trace_exists_resultstepsadditionresultbound + S (pff_trace_after_trace_exists_resultsteps) = (p)) /\ ((exists pfa_offset_left_trace_exists_resultstepsadditionresultcongruence pfa_offset_right_trace_exists_resultstepsadditionresultcongruence. ((pff_trace_before_trace_exists_resultsteps) + (1)) + (p) * pfa_offset_left_trace_exists_resultstepsadditionresultcongruence = (pff_trace_after_trace_exists_resultsteps) + (p) * pfa_offset_right_trace_exists_resultstepsadditionresultcongruence)))))))))))))))))))Constructive proof overview
Generated structural guide
Construct an actual history of n additions of one for every natural n, including the empty history.
The unchanged tactic script uses 6 declared prerequisites and contains 71 exact native proof lines.
Public research checkpoint: original HA and independently compiled Lean verified; not Alpha-enrolled, no Alpha checked-use authority; not Stable
Proof neighborhood
Direct dependencies
lt_not_le Alpha theorem; checked-use authorized zero_le Alpha theorem; checked-use authorized FP0050 prime_field_unit_trace_result_bounded FP0008 prime_field_add_exists prime_two_le Alpha theorem; checked-use authorized FP004E prime_field_unit_trace_successorDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. The literal dependency-closed bundle is checked by original HA and the independently compiled Lean verifier. Public delivery grants no Alpha checked-use authority or Stable membership.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (3)
01Fix variables and assumptionsL1–2
02Induction on nL3–4
03Construct an explicit witnessL5–7
04Separate the logical casesL8–9
05Construct an explicit witnessL10–10
Supply the displayed value, then prove that it has the required property.
- L10
exists 0
06Calculate and transport equalitiesL11–11
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L11
norm_num
07Construct an explicit witnessL12–12
Supply the displayed value, then prove that it has the required property.
- L12
exists 0
08Calculate and transport equalitiesL13–13
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L13
norm_num
09Separate the logical casesL14–15
10Construct an explicit witnessL16–16
Supply the displayed value, then prove that it has the required property.
- L16
exists 0
11Calculate and transport equalitiesL17–17
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L17
norm_num
12Construct an explicit witnessL18–18
Supply the displayed value, then prove that it has the required property.
- L18
exists 0
13Calculate and transport equalitiesL19–19
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L19
norm_num
14Fix variables and assumptionsL20–21
15Separate the logical casesL22–22
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L22
exfalso
16Use earlier factsL23–28
17Fix variables and assumptionsL29–29
Work with arbitrary variables or the premises of the current implication.
- L29
intro hp
18Establish htL30–32
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L30
have ht : ∃ b. ∃ c. ∃ r. FpUnitTrace(p,b,c,n,r)Definitions: FpUnitTrace - L31
apply IH - L32
exact hp
19Separate the logical casesL33–35
20Establish hrL36–44
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field unit trace result bounded.
- L36
have hr : exists pfa_gap_trace_exists_rbound. pfa_gap_trace_exists_rbound + S (x2) = (p) - L37
specialize prime_field_unit_trace_result_bounded (p) - L38
specialize prime_field_unit_trace_result_bounded (x) - L39
specialize prime_field_unit_trace_result_bounded (x1) - L40
specialize prime_field_unit_trace_result_bounded (n) - L41
specialize prime_field_unit_trace_result_bounded (x2) - L42
apply prime_field_unit_trace_result_bounded - L43
exact hp - L44
exact ht_witness_witness_witness
21Establish hsL45–54
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field add exists.
- L45
have hs : exists s. (((exists pfa_gap_trace_exists_nextleft. pfa_gap_trace_exists_nextleft + S (x2) = (p)) /\ (((exists pfa_gap_trace_exists_nextright. pfa_gap_trace_exists_nextright + S (1) = (p)) /\ ((((exists pfa_gap_trace_exists_nextresultbound. pfa_gap_trace_exists_nextresultbound + S (s) = (p)) /\ ((exists pfa_offset_left_trace_exists_nextresultcongruence pfa_offset_right_trace_exists_nextresultcongruence. ((x2) + (1)) + (p) * pfa_offset_left_trace_exists_nextresultcongruence = (s) + (p) * pfa_offset_right_trace_exists_nextresultcongruence))))))))) - L46
specialize prime_field_add_exists (p) - L47
specialize prime_field_add_exists (x2) - L48
specialize prime_field_add_exists (1) - L49
apply prime_field_add_exists - L50
exact hp - L51
exact hr - L52
specialize prime_two_le (p) - L53
apply prime_two_le - L54
exact hp
22Separate the logical casesL55–55
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L55
cases hs
23Establish hnewL56–65
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field unit trace successor.
- L56
have hnew : FpUnitMultiple(p,S n,x3)Definitions: FpUnitMultiple - L57
specialize prime_field_unit_trace_successor (p) - L58
specialize prime_field_unit_trace_successor (x) - L59
specialize prime_field_unit_trace_successor (x1) - L60
specialize prime_field_unit_trace_successor (n) - L61
specialize prime_field_unit_trace_successor (x2) - L62
specialize prime_field_unit_trace_successor (x3) - L63
apply prime_field_unit_trace_successor - L64
exact ht_witness_witness_witness - L65
exact hs_witness
24Separate the logical casesL66–67
25Construct an explicit witnessL68–70
26Use earlier factsL71–71
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L71
exact hnew_witness_witness
Original exact command ledger · 71 lines
- 0001
intro p - 0002
intro n - 0003
induction n - 0004
intro hp - 0005
exists 0 - 0006
exists 0 - 0007
exists 0 - 0008
split - 0009
split - 0010
exists 0 - 0011
norm_num - 0012
exists 0 - 0013
norm_num - 0014
split - 0015
split - 0016
exists 0 - 0017
norm_num - 0018
exists 0 - 0019
norm_num - 0020
intro i - 0021
intro hi - 0022
exfalso - 0023
specialize lt_not_le (i) - 0024
specialize lt_not_le (0) - 0025
apply lt_not_le - 0026
exact hi - 0027
specialize zero_le (i) - 0028
apply zero_le - 0029
intro hp - 0030
have ht : exists b c r. (((((exists ff_h_pft_trace_exists_previousstart. ff_h_pft_trace_exists_previousstart + S (0) = S ((S (0)) * c)) /\ exists ff_q_pft_trace_exists_previousstart. b = ff_q_pft_trace_exists_previousstart * S ((S (0)) * c) + (0))) /\ (((((exists ff_h_pft_trace_exists_previousterminal. ff_h_pft_trace_exists_previousterminal + S (r) = S ((S (n)) * c)) /\ exists ff_q_pft_trace_exists_previousterminal. b = ff_q_pft_trace_exists_previousterminal * S ((S (n)) * c) + (r))) /\ ((forall pff_trace_index_trace_exists_previoussteps. (exists pfa_gap_trace_exists_previousstepsindex. pfa_gap_trace_exists_previousstepsindex + S (pff_trace_index_trace_exists_previoussteps) = (n)) -> exists pff_trace_before_trace_exists_previoussteps pff_trace_after_trace_exists_previoussteps. ((((exists ff_h_pft_trace_exists_previousstepsbefore. ff_h_pft_trace_exists_previousstepsbefore + S (pff_trace_before_trace_exists_previoussteps) = S ((S (pff_trace_index_trace_exists_previoussteps)) * c)) /\ exists ff_q_pft_trace_exists_previousstepsbefore. b = ff_q_pft_trace_exists_previousstepsbefore * S ((S (pff_trace_index_trace_exists_previoussteps)) * c) + (pff_trace_before_trace_exists_previoussteps))) /\ (((((exists ff_h_pft_trace_exists_previousstepsafter. ff_h_pft_trace_exists_previousstepsafter + S (pff_trace_after_trace_exists_previoussteps) = S ((S (S (pff_trace_index_trace_exists_previoussteps))) * c)) /\ exists ff_q_pft_trace_exists_previousstepsafter. b = ff_q_pft_trace_exists_previousstepsafter * S ((S (S (pff_trace_index_trace_exists_previoussteps))) * c) + (pff_trace_after_trace_exists_previoussteps))) /\ ((((exists pfa_gap_trace_exists_previousstepsadditionleft. pfa_gap_trace_exists_previousstepsadditionleft + S (pff_trace_before_trace_exists_previoussteps) = (p)) /\ (((exists pfa_gap_trace_exists_previousstepsadditionright. pfa_gap_trace_exists_previousstepsadditionright + S (1) = (p)) /\ ((((exists pfa_gap_trace_exists_previousstepsadditionresultbound. pfa_gap_trace_exists_previousstepsadditionresultbound + S (pff_trace_after_trace_exists_previoussteps) = (p)) /\ ((exists pfa_offset_left_trace_exists_previousstepsadditionresultcongruence pfa_offset_right_trace_exists_previousstepsadditionresultcongruence. ((pff_trace_before_trace_exists_previoussteps) + (1)) + (p) * pfa_offset_left_trace_exists_previousstepsadditionresultcongruence = (pff_trace_after_trace_exists_previoussteps) + (p) * pfa_offset_right_trace_exists_previousstepsadditionresultcongruence))))))))))))))))))) - 0031
apply IH - 0032
exact hp - 0033
cases ht - 0034
cases ht_witness - 0035
cases ht_witness_witness - 0036
have hr : exists pfa_gap_trace_exists_rbound. pfa_gap_trace_exists_rbound + S (x2) = (p) - 0037
specialize prime_field_unit_trace_result_bounded (p) - 0038
specialize prime_field_unit_trace_result_bounded (x) - 0039
specialize prime_field_unit_trace_result_bounded (x1) - 0040
specialize prime_field_unit_trace_result_bounded (n) - 0041
specialize prime_field_unit_trace_result_bounded (x2) - 0042
apply prime_field_unit_trace_result_bounded - 0043
exact hp - 0044
exact ht_witness_witness_witness - 0045
have hs : exists s. (((exists pfa_gap_trace_exists_nextleft. pfa_gap_trace_exists_nextleft + S (x2) = (p)) /\ (((exists pfa_gap_trace_exists_nextright. pfa_gap_trace_exists_nextright + S (1) = (p)) /\ ((((exists pfa_gap_trace_exists_nextresultbound. pfa_gap_trace_exists_nextresultbound + S (s) = (p)) /\ ((exists pfa_offset_left_trace_exists_nextresultcongruence pfa_offset_right_trace_exists_nextresultcongruence. ((x2) + (1)) + (p) * pfa_offset_left_trace_exists_nextresultcongruence = (s) + (p) * pfa_offset_right_trace_exists_nextresultcongruence))))))))) - 0046
specialize prime_field_add_exists (p) - 0047
specialize prime_field_add_exists (x2) - 0048
specialize prime_field_add_exists (1) - 0049
apply prime_field_add_exists - 0050
exact hp - 0051
exact hr - 0052
specialize prime_two_le (p) - 0053
apply prime_two_le - 0054
exact hp - 0055
cases hs - 0056
have hnew : exists B C. (((((exists ff_h_pft_trace_exists_successorstart. ff_h_pft_trace_exists_successorstart + S (0) = S ((S (0)) * C)) /\ exists ff_q_pft_trace_exists_successorstart. B = ff_q_pft_trace_exists_successorstart * S ((S (0)) * C) + (0))) /\ (((((exists ff_h_pft_trace_exists_successorterminal. ff_h_pft_trace_exists_successorterminal + S (x3) = S ((S (S n)) * C)) /\ exists ff_q_pft_trace_exists_successorterminal. B = ff_q_pft_trace_exists_successorterminal * S ((S (S n)) * C) + (x3))) /\ ((forall pff_trace_index_trace_exists_successorsteps. (exists pfa_gap_trace_exists_successorstepsindex. pfa_gap_trace_exists_successorstepsindex + S (pff_trace_index_trace_exists_successorsteps) = (S n)) -> exists pff_trace_before_trace_exists_successorsteps pff_trace_after_trace_exists_successorsteps. ((((exists ff_h_pft_trace_exists_successorstepsbefore. ff_h_pft_trace_exists_successorstepsbefore + S (pff_trace_before_trace_exists_successorsteps) = S ((S (pff_trace_index_trace_exists_successorsteps)) * C)) /\ exists ff_q_pft_trace_exists_successorstepsbefore. B = ff_q_pft_trace_exists_successorstepsbefore * S ((S (pff_trace_index_trace_exists_successorsteps)) * C) + (pff_trace_before_trace_exists_successorsteps))) /\ (((((exists ff_h_pft_trace_exists_successorstepsafter. ff_h_pft_trace_exists_successorstepsafter + S (pff_trace_after_trace_exists_successorsteps) = S ((S (S (pff_trace_index_trace_exists_successorsteps))) * C)) /\ exists ff_q_pft_trace_exists_successorstepsafter. B = ff_q_pft_trace_exists_successorstepsafter * S ((S (S (pff_trace_index_trace_exists_successorsteps))) * C) + (pff_trace_after_trace_exists_successorsteps))) /\ ((((exists pfa_gap_trace_exists_successorstepsadditionleft. pfa_gap_trace_exists_successorstepsadditionleft + S (pff_trace_before_trace_exists_successorsteps) = (p)) /\ (((exists pfa_gap_trace_exists_successorstepsadditionright. pfa_gap_trace_exists_successorstepsadditionright + S (1) = (p)) /\ ((((exists pfa_gap_trace_exists_successorstepsadditionresultbound. pfa_gap_trace_exists_successorstepsadditionresultbound + S (pff_trace_after_trace_exists_successorsteps) = (p)) /\ ((exists pfa_offset_left_trace_exists_successorstepsadditionresultcongruence pfa_offset_right_trace_exists_successorstepsadditionresultcongruence. ((pff_trace_before_trace_exists_successorsteps) + (1)) + (p) * pfa_offset_left_trace_exists_successorstepsadditionresultcongruence = (pff_trace_after_trace_exists_successorsteps) + (p) * pfa_offset_right_trace_exists_successorstepsadditionresultcongruence))))))))))))))))))) - 0057
specialize prime_field_unit_trace_successor (p) - 0058
specialize prime_field_unit_trace_successor (x) - 0059
specialize prime_field_unit_trace_successor (x1) - 0060
specialize prime_field_unit_trace_successor (n) - 0061
specialize prime_field_unit_trace_successor (x2) - 0062
specialize prime_field_unit_trace_successor (x3) - 0063
apply prime_field_unit_trace_successor - 0064
exact ht_witness_witness_witness - 0065
exact hs_witness - 0066
cases hnew - 0067
cases hnew_witness - 0068
exists x4 - 0069
exists x5 - 0070
exists x3 - 0071
exact hnew_witness_witness