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 PA statement
forall a b. (exists x. b = a * x) -> (exists y. a = b * y) -> a = bStructural proof guide
Mutual divisibility is antisymmetric over natural numbers.
Direct prerequisites: zero_or_succ, mul_zero_left, mul_assoc, mul_one, mul_left_cancel_nonzero, mul_eq_one_components. The authored body proceeds by case analysis (5), intermediate claims (4), equality transport (5).
Proof neighborhood
Direct dependencies
BT000Q zero_or_succ BT0004 mul_zero_left BT0008 mul_assoc BT000A mul_one BT0022 mul_left_cancel_nonzero BT0020 mul_eq_one_componentsDirect dependents
Formal native tactic body
Dependencies are hypotheses of the historical Alpha-v12 body receipt. The complete historical Alpha-v18 proof bundle independently checks every dependency; current Alpha v25 preserves that checked theorem use without changing 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 (6)
01Fix variables and assumptionsL1–4
02Separate the logical casesL5–6
03Use earlier factsL7–7
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L7
specialize zero_or_succ a
04Separate the logical casesL8–8
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L8
cases zero_or_succ
05Calculate and transport equalitiesL9–10
06Use earlier factsL11–11
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L11
specialize mul_zero_left x
07Calculate and transport equalitiesL12–13
08Use earlier factsL14–14
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L14
exact hab_witness
09Separate the logical casesL15–15
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L15
cases zero_or_succ_right
10Establish haL16–20
11Establish hcycleL21–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul assoc.
12Use earlier factsL31–31
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L31
specialize mul_left_cancel_nonzero (x * x1)
13Establish hunitL32–40
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul left cancel nonzero.
14Establish hpartsL41–44
15Separate the logical casesL45–45
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L45
cases hparts
16Calculate and transport equalitiesL46–47
17Use earlier factsL48–48
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L48
exact hab_witness
18Calculate and transport equalitiesL49–49
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L49
rewrite hparts_left
19Use earlier factsL50–50
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L50
apply mul_one
Original exact command ledger · 50 lines
- 0001
intro a - 0002
intro b - 0003
intro hab - 0004
intro hba - 0005
cases hab - 0006
cases hba - 0007
specialize zero_or_succ a - 0008
cases zero_or_succ - 0009
rewrite zero_or_succ_left - 0010
rewrite zero_or_succ_left at hab_witness - 0011
specialize mul_zero_left x - 0012
rewrite mul_zero_left at hab_witness - 0013
symm - 0014
exact hab_witness - 0015
cases zero_or_succ_right - 0016
have ha : ~(a = 0) - 0017
intro ha0 - 0018
rewrite zero_or_succ_right_witness at ha0 - 0019
apply PA1 - 0020
exact ha0 - 0021
have hcycle : a = a * (x * x1) - 0022
trans b * x1 - 0023
exact hba_witness - 0024
trans (a * x) * x1 - 0025
congr - 0026
exact hab_witness - 0027
refl - 0028
apply mul_assoc - 0029
specialize mul_left_cancel_nonzero a - 0030
specialize mul_left_cancel_nonzero 1 - 0031
specialize mul_left_cancel_nonzero (x * x1) - 0032
have hunit : 1 = x * x1 - 0033
apply mul_left_cancel_nonzero - 0034
exact ha - 0035
specialize mul_one a - 0036
trans a - 0037
apply mul_one - 0038
exact hcycle - 0039
specialize mul_eq_one_components x - 0040
specialize mul_eq_one_components x1 - 0041
have hparts : x = 1 /\ x1 = 1 - 0042
apply mul_eq_one_components - 0043
symm - 0044
exact hunit - 0045
cases hparts - 0046
symm - 0047
trans a * x - 0048
exact hab_witness - 0049
rewrite hparts_left - 0050
apply mul_one