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 expanded first-order arithmetic statement
forall a m g A M x y. (~(m=0)) -> ((((exists hag_left_factor_lcc_cancel. a = g * hag_left_factor_lcc_cancel) /\ (exists hag_right_factor_lcc_cancel. m = g * hag_right_factor_lcc_cancel)) /\ forall hag_divisor_lcc_cancel. (exists hag_common_left_lcc_cancel. a = hag_divisor_lcc_cancel * hag_common_left_lcc_cancel) -> (exists hag_common_right_lcc_cancel. m = hag_divisor_lcc_cancel * hag_common_right_lcc_cancel) -> exists hag_greatest_factor_lcc_cancel. g = hag_divisor_lcc_cancel * hag_greatest_factor_lcc_cancel)) -> (a=g*A) -> (m=g*M) -> ((((exists hgcrt_mod_left_lcc_cancel_left hgcrt_mod_right_lcc_cancel_left. (a * x) + m * hgcrt_mod_left_lcc_cancel_left = (a * y) + m * hgcrt_mod_right_lcc_cancel_left) -> (exists hgcrt_mod_left_lcc_cancel_right hgcrt_mod_right_lcc_cancel_right. x + M * hgcrt_mod_left_lcc_cancel_right = y + M * hgcrt_mod_right_lcc_cancel_right)) /\ (((exists hgcrt_mod_left_lcc_cancel_right hgcrt_mod_right_lcc_cancel_right. x + M * hgcrt_mod_left_lcc_cancel_right = y + M * hgcrt_mod_right_lcc_cancel_right) -> (exists hgcrt_mod_left_lcc_cancel_left hgcrt_mod_right_lcc_cancel_left. (a * x) + m * hgcrt_mod_left_lcc_cancel_left = (a * y) + m * hgcrt_mod_right_lcc_cancel_left)))))Constructive proof overview
Generated structural guide
The actual quotient modulus m/g exactly classifies cancellation of a common coefficient at nonzero m.
The unchanged tactic script uses 7 declared prerequisites and contains 78 exact native proof lines.
Alpha v34 checked-use · first admitted v34 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
mul_zero_left Alpha theorem; checked-use authorized is_gcd_quotients_coprime_nonzero Alpha theorem; checked-use authorized mul_assoc Alpha theorem; checked-use authorized mod_eq_cancel_coprime Alpha theorem; checked-use authorized mod_eq_unscale_nonzero Alpha theorem; checked-use authorized mod_eq_scale Alpha theorem; checked-use authorized mod_eq_mul_left Alpha 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.
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–11
Work with arbitrary variables or the premises of the current implication.
- L11
intro hm
03Establish hg0L12–18
04Establish hM0L19–25
05Establish hcL26–35
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply is gcd quotients coprime nonzero.
- L26
have hc : forall hmi_divisor_lcc_cancel_coprime. (exists hmi_left_factor_lcc_cancel_coprime. A = hmi_divisor_lcc_cancel_coprime * hmi_left_factor_lcc_cancel_coprime) -> (exists hmi_right_factor_lcc_cancel_coprime. M = hmi_divisor_lcc_cancel_coprime * hmi_right_factor_lcc_cancel_coprime) -> hmi_divisor_lcc_cancel_coprime = 1 - L27
specialize is_gcd_quotients_coprime_nonzero (g) - L28
specialize is_gcd_quotients_coprime_nonzero (a) - L29
specialize is_gcd_quotients_coprime_nonzero (m) - L30
specialize is_gcd_quotients_coprime_nonzero (A) - L31
specialize is_gcd_quotients_coprime_nonzero (M) - L32
apply is_gcd_quotients_coprime_nonzero - L33
exact hg - L34
exact hg0 - L35
exact ha
06Use earlier factsL36–36
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L36
exact hm
07Establish hxL37–39
08Establish hyL40–42
09Separate the logical casesL43–43
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L43
split
10Fix variables and assumptionsL44–44
Work with arbitrary variables or the premises of the current implication.
- L44
intro h
11Use earlier factsL45–54
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L45
specialize mod_eq_cancel_coprime (M) - L46
specialize mod_eq_cancel_coprime (A) - L47
specialize mod_eq_cancel_coprime (x) - L48
specialize mod_eq_cancel_coprime (y) - L49
apply mod_eq_cancel_coprime - L50
exact hM0 - L51
exact hc - L52
specialize mod_eq_unscale_nonzero (g) - L53
specialize mod_eq_unscale_nonzero (M) - L54
specialize mod_eq_unscale_nonzero (A*x)
12Use earlier factsL55–57
13Calculate and transport equalitiesL58–61
14Use earlier factsL62–62
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L62
exact h
15Fix variables and assumptionsL63–63
Work with arbitrary variables or the premises of the current implication.
- L63
intro h
16Calculate and transport equalitiesL64–67
17Use earlier factsL68–77
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L68
specialize mod_eq_scale (g) - L69
specialize mod_eq_scale (M) - L70
specialize mod_eq_scale (A*x) - L71
specialize mod_eq_scale (A*y) - L72
apply mod_eq_scale - L73
specialize mod_eq_mul_left (M) - L74
specialize mod_eq_mul_left (x) - L75
specialize mod_eq_mul_left (y) - L76
specialize mod_eq_mul_left (A) - L77
apply mod_eq_mul_left
18Use earlier factsL78–78
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L78
exact h
Original exact command ledger · 78 lines
- 0001
intro a - 0002
intro m - 0003
intro g - 0004
intro A - 0005
intro M - 0006
intro x - 0007
intro y - 0008
intro hm0 - 0009
intro hg - 0010
intro ha - 0011
intro hm - 0012
have hg0 : ~(g=0) - 0013
intro hz - 0014
apply hm0 - 0015
trans g*M - 0016
exact hm - 0017
rewrite hz - 0018
apply mul_zero_left - 0019
have hM0 : ~(M=0) - 0020
intro hz - 0021
apply hm0 - 0022
trans g*M - 0023
exact hm - 0024
rewrite hz - 0025
simp - 0026
have hc : forall hmi_divisor_lcc_cancel_coprime. (exists hmi_left_factor_lcc_cancel_coprime. A = hmi_divisor_lcc_cancel_coprime * hmi_left_factor_lcc_cancel_coprime) -> (exists hmi_right_factor_lcc_cancel_coprime. M = hmi_divisor_lcc_cancel_coprime * hmi_right_factor_lcc_cancel_coprime) -> hmi_divisor_lcc_cancel_coprime = 1 - 0027
specialize is_gcd_quotients_coprime_nonzero (g) - 0028
specialize is_gcd_quotients_coprime_nonzero (a) - 0029
specialize is_gcd_quotients_coprime_nonzero (m) - 0030
specialize is_gcd_quotients_coprime_nonzero (A) - 0031
specialize is_gcd_quotients_coprime_nonzero (M) - 0032
apply is_gcd_quotients_coprime_nonzero - 0033
exact hg - 0034
exact hg0 - 0035
exact ha - 0036
exact hm - 0037
have hx : a*x=g*(A*x) - 0038
rewrite ha - 0039
apply mul_assoc - 0040
have hy : a*y=g*(A*y) - 0041
rewrite ha - 0042
apply mul_assoc - 0043
split - 0044
intro h - 0045
specialize mod_eq_cancel_coprime (M) - 0046
specialize mod_eq_cancel_coprime (A) - 0047
specialize mod_eq_cancel_coprime (x) - 0048
specialize mod_eq_cancel_coprime (y) - 0049
apply mod_eq_cancel_coprime - 0050
exact hM0 - 0051
exact hc - 0052
specialize mod_eq_unscale_nonzero (g) - 0053
specialize mod_eq_unscale_nonzero (M) - 0054
specialize mod_eq_unscale_nonzero (A*x) - 0055
specialize mod_eq_unscale_nonzero (A*y) - 0056
apply mod_eq_unscale_nonzero - 0057
exact hg0 - 0058
rewrite <- hm - 0059
rewrite <- hm - 0060
rewrite <- hx - 0061
rewrite <- hy - 0062
exact h - 0063
intro h - 0064
rewrite hm - 0065
rewrite hm - 0066
rewrite hx - 0067
rewrite hy - 0068
specialize mod_eq_scale (g) - 0069
specialize mod_eq_scale (M) - 0070
specialize mod_eq_scale (A*x) - 0071
specialize mod_eq_scale (A*y) - 0072
apply mod_eq_scale - 0073
specialize mod_eq_mul_left (M) - 0074
specialize mod_eq_mul_left (x) - 0075
specialize mod_eq_mul_left (y) - 0076
specialize mod_eq_mul_left (A) - 0077
apply mod_eq_mul_left - 0078
exact h