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 a b q r Q t. ((a = b * q + r /\ (exists ff_lt_ec_first_division. ff_lt_ec_first_division + S r = b))) -> ((b = r * Q + t /\ (exists ff_lt_ec_second_division. ff_lt_ec_second_division + S t = r))) -> (exists ff_lt_ec_two_step_halving. ff_lt_ec_two_step_halving + S (t + t) = b)Constructive proof overview
Generated structural guide
Any two consecutive genuine bounded Euclidean divisions strictly halve the starting divisor: twice the second remainder is smaller.
The unchanged tactic script uses 6 declared prerequisites and contains 49 exact native proof lines.
Alpha v34 checked-use · first admitted v21 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
EC0005 euclidean_two_step_quotient_nonzero EC0004 euclidean_add_right_preserves_lt one_le_of_ne_zero Stable theorem; checked-use authorized le_mul_of_one_le_right Alpha theorem; checked-use authorized add_le_add_right Stable theorem; checked-use authorized lt_of_lt_of_le Stable theorem; checked-use authorizedDirect 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 (2)
01Fix variables and assumptionsL1–8
02Establish hqL9–18
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply euclidean two step quotient nonzero.
- L9
have hq : ~(Q = 0) - L10
specialize euclidean_two_step_quotient_nonzero a - L11
specialize euclidean_two_step_quotient_nonzero b - L12
specialize euclidean_two_step_quotient_nonzero q - L13
specialize euclidean_two_step_quotient_nonzero r - L14
specialize euclidean_two_step_quotient_nonzero Q - L15
specialize euclidean_two_step_quotient_nonzero t - L16
intro hzero - L17
apply euclidean_two_step_quotient_nonzero - L18
exact hfirst
03Use earlier factsL19–20
04Separate the logical casesL21–21
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L21
cases hsecond
05Establish honeL22–25
06Establish hproductL26–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le mul of one le right.
07Establish hsumL31–36
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply add le add right.
08Establish hstrictL37–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply euclidean add right preserves lt.
- L37
have hstrict : exists gap. gap + S (t + t) = r + t - L38
specialize euclidean_add_right_preserves_lt t - L39
specialize euclidean_add_right_preserves_lt r - L40
specialize euclidean_add_right_preserves_lt t - L41
apply euclidean_add_right_preserves_lt - L42
exact hsecond_right - L43
specialize lt_of_lt_of_le (t + t) - L44
specialize lt_of_lt_of_le (r + t) - L45
specialize lt_of_lt_of_le b - L46
apply lt_of_lt_of_le
09Use earlier factsL47–47
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L47
exact hstrict
10Calculate and transport equalitiesL48–48
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L48
rewrite hsecond_left
11Use earlier factsL49–49
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L49
exact hsum
Original exact command ledger · 49 lines
- 0001
intro a - 0002
intro b - 0003
intro q - 0004
intro r - 0005
intro Q - 0006
intro t - 0007
intro hfirst - 0008
intro hsecond - 0009
have hq : ~(Q = 0) - 0010
specialize euclidean_two_step_quotient_nonzero a - 0011
specialize euclidean_two_step_quotient_nonzero b - 0012
specialize euclidean_two_step_quotient_nonzero q - 0013
specialize euclidean_two_step_quotient_nonzero r - 0014
specialize euclidean_two_step_quotient_nonzero Q - 0015
specialize euclidean_two_step_quotient_nonzero t - 0016
intro hzero - 0017
apply euclidean_two_step_quotient_nonzero - 0018
exact hfirst - 0019
exact hsecond - 0020
exact hzero - 0021
cases hsecond - 0022
have hone : exists gap. gap + 1 = Q - 0023
specialize one_le_of_ne_zero Q - 0024
apply one_le_of_ne_zero - 0025
exact hq - 0026
have hproduct : exists gap. gap + r = r * Q - 0027
specialize le_mul_of_one_le_right r - 0028
specialize le_mul_of_one_le_right Q - 0029
apply le_mul_of_one_le_right - 0030
exact hone - 0031
have hsum : exists gap. gap + (r + t) = r * Q + t - 0032
specialize add_le_add_right r - 0033
specialize add_le_add_right (r * Q) - 0034
specialize add_le_add_right t - 0035
apply add_le_add_right - 0036
exact hproduct - 0037
have hstrict : exists gap. gap + S (t + t) = r + t - 0038
specialize euclidean_add_right_preserves_lt t - 0039
specialize euclidean_add_right_preserves_lt r - 0040
specialize euclidean_add_right_preserves_lt t - 0041
apply euclidean_add_right_preserves_lt - 0042
exact hsecond_right - 0043
specialize lt_of_lt_of_le (t + t) - 0044
specialize lt_of_lt_of_le (r + t) - 0045
specialize lt_of_lt_of_le b - 0046
apply lt_of_lt_of_le - 0047
exact hstrict - 0048
rewrite hsecond_left - 0049
exact hsum