Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Exact expanded first-order arithmetic statement
forall b c a m l. (exists ff_modulus_gap_binary_execution_guard. ff_modulus_gap_binary_execution_guard + S 1 = m) -> (forall ff_index_be_prefix ff_digit_be_prefix. (exists ff_lt_be_prefix_bound. ff_lt_be_prefix_bound + S ff_index_be_prefix = l) -> (((exists ff_h_be_prefix_digit. ff_h_be_prefix_digit + S (ff_digit_be_prefix) = S ((S (ff_index_be_prefix)) * c)) /\ exists ff_q_be_prefix_digit. b = ff_q_be_prefix_digit * S ((S (ff_index_be_prefix)) * c) + (ff_digit_be_prefix))) -> (ff_digit_be_prefix = 0 \/ ff_digit_be_prefix = 1)) -> exists u v. (((((exists ff_h_be_trace_start. ff_h_be_trace_start + S (1) = S ((S (0)) * v)) /\ exists ff_q_be_trace_start. u = ff_q_be_trace_start * S ((S (0)) * v) + (1))) /\ forall ff_index_be_trace. (exists ff_lt_be_trace_bound. ff_lt_be_trace_bound + S ff_index_be_trace = l) -> exists ff_digit_be_trace ff_previous_be_trace ff_current_be_trace. ((((exists ff_h_be_trace_source. ff_h_be_trace_source + S (ff_digit_be_trace) = S ((S (ff_index_be_trace)) * c)) /\ exists ff_q_be_trace_source. b = ff_q_be_trace_source * S ((S (ff_index_be_trace)) * c) + (ff_digit_be_trace))) /\ ((((exists ff_h_be_trace_before. ff_h_be_trace_before + S (ff_previous_be_trace) = S ((S (ff_index_be_trace)) * v)) /\ exists ff_q_be_trace_before. u = ff_q_be_trace_before * S ((S (ff_index_be_trace)) * v) + (ff_previous_be_trace))) /\ ((((exists ff_h_be_trace_after. ff_h_be_trace_after + S (ff_current_be_trace) = S ((S (S ff_index_be_trace)) * v)) /\ exists ff_q_be_trace_after. u = ff_q_be_trace_after * S ((S (S ff_index_be_trace)) * v) + (ff_current_be_trace))) /\ ((((ff_digit_be_trace = 0) /\ (((exists ff_gap_binary_be_trace_transition_square. ff_gap_binary_be_trace_transition_square + S (ff_current_be_trace) = m) /\ (exists ff_left_binary_be_trace_transition_square_congruence ff_right_binary_be_trace_transition_square_congruence. (ff_previous_be_trace * ff_previous_be_trace) + m * ff_left_binary_be_trace_transition_square_congruence = (ff_current_be_trace) + m * ff_right_binary_be_trace_transition_square_congruence)))) \/ ((ff_digit_be_trace = 1) /\ (((exists ff_gap_binary_be_trace_transition_multiply. ff_gap_binary_be_trace_transition_multiply + S (ff_current_be_trace) = m) /\ (exists ff_left_binary_be_trace_transition_multiply_congruence ff_right_binary_be_trace_transition_multiply_congruence. ((ff_previous_be_trace * ff_previous_be_trace) * a) + m * ff_left_binary_be_trace_transition_multiply_congruence = (ff_current_be_trace) + m * ff_right_binary_be_trace_transition_multiply_congruence)))))))))))Constructive proof overview
Generated structural guide
Natural induction constructs a complete genuine beta-coded square-and-multiply trace for every supplied valid finite binary digit prefix.
The unchanged tactic script uses 6 declared prerequisites and contains 60 exact native proof lines.
Alpha v34 checked-use · first admitted v22 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
BE0004 binary_execution_initial_state add_eq_zero_right Stable theorem; checked-use authorized succ_ne_zero Stable theorem; checked-use authorized BE0002 binary_digit_prefix_restrict BE0003 binary_digit_prefix_terminal_bit BE000A binary_execution_prefix_extendDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply Stable membership.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (3)
01Fix variables and assumptionsL1–4
02Induction on lL5–7
03Separate the logical casesL8–9
04Construct an explicit witnessL10–11
05Separate the logical casesL12–12
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L12
split
06Use earlier factsL13–13
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L13
exact binary_execution_initial_state_witness_witness
07Fix variables and assumptionsL14–15
08Separate the logical casesL16–17
09Establish hzeroL18–27
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add eq zero right.
10Establish hprefixL28–33
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply binary digit prefix restrict.
- L28
have hprefix : (forall ff_index_be_prefix ff_digit_be_prefix. (exists ff_lt_be_prefix_bound. ff_lt_be_prefix_bound + S ff_index_be_prefix = l) -> (((exists ff_h_be_prefix_digit. ff_h_be_prefix_digit + S (ff_digit_be_prefix) = S ((S (ff_index_be_prefix)) * c)) /\ exists ff_q_be_prefix_digit. b = ff_q_be_prefix_digit * S ((S (ff_index_be_prefix)) * c) + (ff_digit_be_prefix))) -> (ff_digit_be_prefix = 0 \/ ff_digit_be_prefix = 1)) - L29
specialize binary_digit_prefix_restrict b - L30
specialize binary_digit_prefix_restrict c - L31
specialize binary_digit_prefix_restrict l - L32
apply binary_digit_prefix_restrict - L33
exact hdigits
11Establish htraceL34–37
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L34
have htrace : ∃ u. ∃ v. BinaryExecutionTrace(b,c,a,m,l,u,v)Definitions: BinaryExecutionTrace - L35
apply IH - L36
exact hmodulus - L37
exact hprefix
12Separate the logical casesL38–39
13Establish hlastL40–45
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply binary digit prefix terminal bit.
- L40
have hlast : exists x. ((((exists ff_h_be_terminal_digit. ff_h_be_terminal_digit + S (x) = S ((S (l)) * c)) /\ exists ff_q_be_terminal_digit. b = ff_q_be_terminal_digit * S ((S (l)) * c) + (x))) /\ (x = 0 \/ x = 1)) - L41
specialize binary_digit_prefix_terminal_bit b - L42
specialize binary_digit_prefix_terminal_bit c - L43
specialize binary_digit_prefix_terminal_bit l - L44
apply binary_digit_prefix_terminal_bit - L45
exact hdigits
14Separate the logical casesL46–47
15Use earlier factsL48–57
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L48
specialize binary_execution_prefix_extend b - L49
specialize binary_execution_prefix_extend c - L50
specialize binary_execution_prefix_extend a - L51
specialize binary_execution_prefix_extend m - L52
specialize binary_execution_prefix_extend l - L53
specialize binary_execution_prefix_extend x - L54
specialize binary_execution_prefix_extend x1 - L55
specialize binary_execution_prefix_extend x2 - L56
apply binary_execution_prefix_extend - L57
exact hmodulus
Original exact command ledger · 60 lines
- 0001
intro b - 0002
intro c - 0003
intro a - 0004
intro m - 0005
induction l - 0006
intro hmodulus - 0007
intro hdigits - 0008
cases binary_execution_initial_state - 0009
cases binary_execution_initial_state_witness - 0010
exists x - 0011
exists x1 - 0012
split - 0013
exact binary_execution_initial_state_witness_witness - 0014
intro i - 0015
intro hi - 0016
exfalso - 0017
cases hi - 0018
have hzero : S i = 0 - 0019
specialize add_eq_zero_right x2 - 0020
specialize add_eq_zero_right (S i) - 0021
apply add_eq_zero_right - 0022
exact hi_witness - 0023
specialize succ_ne_zero i - 0024
apply succ_ne_zero - 0025
exact hzero - 0026
intro hmodulus - 0027
intro hdigits - 0028
have hprefix : (forall ff_index_be_prefix ff_digit_be_prefix. (exists ff_lt_be_prefix_bound. ff_lt_be_prefix_bound + S ff_index_be_prefix = l) -> (((exists ff_h_be_prefix_digit. ff_h_be_prefix_digit + S (ff_digit_be_prefix) = S ((S (ff_index_be_prefix)) * c)) /\ exists ff_q_be_prefix_digit. b = ff_q_be_prefix_digit * S ((S (ff_index_be_prefix)) * c) + (ff_digit_be_prefix))) -> (ff_digit_be_prefix = 0 \/ ff_digit_be_prefix = 1)) - 0029
specialize binary_digit_prefix_restrict b - 0030
specialize binary_digit_prefix_restrict c - 0031
specialize binary_digit_prefix_restrict l - 0032
apply binary_digit_prefix_restrict - 0033
exact hdigits - 0034
have htrace : exists u v. (((((exists ff_h_be_trace_start. ff_h_be_trace_start + S (1) = S ((S (0)) * v)) /\ exists ff_q_be_trace_start. u = ff_q_be_trace_start * S ((S (0)) * v) + (1))) /\ forall ff_index_be_trace. (exists ff_lt_be_trace_bound. ff_lt_be_trace_bound + S ff_index_be_trace = l) -> exists ff_digit_be_trace ff_previous_be_trace ff_current_be_trace. ((((exists ff_h_be_trace_source. ff_h_be_trace_source + S (ff_digit_be_trace) = S ((S (ff_index_be_trace)) * c)) /\ exists ff_q_be_trace_source. b = ff_q_be_trace_source * S ((S (ff_index_be_trace)) * c) + (ff_digit_be_trace))) /\ ((((exists ff_h_be_trace_before. ff_h_be_trace_before + S (ff_previous_be_trace) = S ((S (ff_index_be_trace)) * v)) /\ exists ff_q_be_trace_before. u = ff_q_be_trace_before * S ((S (ff_index_be_trace)) * v) + (ff_previous_be_trace))) /\ ((((exists ff_h_be_trace_after. ff_h_be_trace_after + S (ff_current_be_trace) = S ((S (S ff_index_be_trace)) * v)) /\ exists ff_q_be_trace_after. u = ff_q_be_trace_after * S ((S (S ff_index_be_trace)) * v) + (ff_current_be_trace))) /\ ((((ff_digit_be_trace = 0) /\ (((exists ff_gap_binary_be_trace_transition_square. ff_gap_binary_be_trace_transition_square + S (ff_current_be_trace) = m) /\ (exists ff_left_binary_be_trace_transition_square_congruence ff_right_binary_be_trace_transition_square_congruence. (ff_previous_be_trace * ff_previous_be_trace) + m * ff_left_binary_be_trace_transition_square_congruence = (ff_current_be_trace) + m * ff_right_binary_be_trace_transition_square_congruence)))) \/ ((ff_digit_be_trace = 1) /\ (((exists ff_gap_binary_be_trace_transition_multiply. ff_gap_binary_be_trace_transition_multiply + S (ff_current_be_trace) = m) /\ (exists ff_left_binary_be_trace_transition_multiply_congruence ff_right_binary_be_trace_transition_multiply_congruence. ((ff_previous_be_trace * ff_previous_be_trace) * a) + m * ff_left_binary_be_trace_transition_multiply_congruence = (ff_current_be_trace) + m * ff_right_binary_be_trace_transition_multiply_congruence))))))))))) - 0035
apply IH - 0036
exact hmodulus - 0037
exact hprefix - 0038
cases htrace - 0039
cases htrace_witness - 0040
have hlast : exists x. ((((exists ff_h_be_terminal_digit. ff_h_be_terminal_digit + S (x) = S ((S (l)) * c)) /\ exists ff_q_be_terminal_digit. b = ff_q_be_terminal_digit * S ((S (l)) * c) + (x))) /\ (x = 0 \/ x = 1)) - 0041
specialize binary_digit_prefix_terminal_bit b - 0042
specialize binary_digit_prefix_terminal_bit c - 0043
specialize binary_digit_prefix_terminal_bit l - 0044
apply binary_digit_prefix_terminal_bit - 0045
exact hdigits - 0046
cases hlast - 0047
cases hlast_witness - 0048
specialize binary_execution_prefix_extend b - 0049
specialize binary_execution_prefix_extend c - 0050
specialize binary_execution_prefix_extend a - 0051
specialize binary_execution_prefix_extend m - 0052
specialize binary_execution_prefix_extend l - 0053
specialize binary_execution_prefix_extend x - 0054
specialize binary_execution_prefix_extend x1 - 0055
specialize binary_execution_prefix_extend x2 - 0056
apply binary_execution_prefix_extend - 0057
exact hmodulus - 0058
exact hlast_witness_right - 0059
exact hlast_witness_left - 0060
exact htrace_witness_witness