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 n L ga gb g. ~(a = 0) -> ~(n = 0) -> ((((exists hscale_left_factor_gfull_nonzero_L. L = a * hscale_left_factor_gfull_nonzero_L) /\ (exists hscale_right_factor_gfull_nonzero_L. L = b * hscale_right_factor_gfull_nonzero_L)) /\ forall hscale_common_gfull_nonzero_L. (exists hscale_left_common_gfull_nonzero_L. hscale_common_gfull_nonzero_L = a * hscale_left_common_gfull_nonzero_L) -> (exists hscale_right_common_gfull_nonzero_L. hscale_common_gfull_nonzero_L = b * hscale_right_common_gfull_nonzero_L) -> exists hscale_least_factor_gfull_nonzero_L. hscale_common_gfull_nonzero_L = L * hscale_least_factor_gfull_nonzero_L)) -> ((((exists ec_gcd_left_gfull_nonzero_ga. a = ga * ec_gcd_left_gfull_nonzero_ga) /\ (exists ec_gcd_right_gfull_nonzero_ga. n = ga * ec_gcd_right_gfull_nonzero_ga)) /\ forall ec_gcd_common_gfull_nonzero_ga. (exists ec_gcd_common_left_gfull_nonzero_ga. a = ec_gcd_common_gfull_nonzero_ga * ec_gcd_common_left_gfull_nonzero_ga) -> (exists ec_gcd_common_right_gfull_nonzero_ga. n = ec_gcd_common_gfull_nonzero_ga * ec_gcd_common_right_gfull_nonzero_ga) -> exists ec_gcd_greatest_gfull_nonzero_ga. ga = ec_gcd_common_gfull_nonzero_ga * ec_gcd_greatest_gfull_nonzero_ga)) -> ((((exists ec_gcd_left_gfull_nonzero_gb. b = gb * ec_gcd_left_gfull_nonzero_gb) /\ (exists ec_gcd_right_gfull_nonzero_gb. n = gb * ec_gcd_right_gfull_nonzero_gb)) /\ forall ec_gcd_common_gfull_nonzero_gb. (exists ec_gcd_common_left_gfull_nonzero_gb. b = ec_gcd_common_gfull_nonzero_gb * ec_gcd_common_left_gfull_nonzero_gb) -> (exists ec_gcd_common_right_gfull_nonzero_gb. n = ec_gcd_common_gfull_nonzero_gb * ec_gcd_common_right_gfull_nonzero_gb) -> exists ec_gcd_greatest_gfull_nonzero_gb. gb = ec_gcd_common_gfull_nonzero_gb * ec_gcd_greatest_gfull_nonzero_gb)) -> ((((exists ec_gcd_left_gfull_nonzero_g. L = g * ec_gcd_left_gfull_nonzero_g) /\ (exists ec_gcd_right_gfull_nonzero_g. n = g * ec_gcd_right_gfull_nonzero_g)) /\ forall ec_gcd_common_gfull_nonzero_g. (exists ec_gcd_common_left_gfull_nonzero_g. L = ec_gcd_common_gfull_nonzero_g * ec_gcd_common_left_gfull_nonzero_g) -> (exists ec_gcd_common_right_gfull_nonzero_g. n = ec_gcd_common_gfull_nonzero_g * ec_gcd_common_right_gfull_nonzero_g) -> exists ec_gcd_greatest_gfull_nonzero_g. g = ec_gcd_common_gfull_nonzero_g * ec_gcd_greatest_gfull_nonzero_g)) -> ((((exists hscale_left_factor_gfull_nonzero_result. g = ga * hscale_left_factor_gfull_nonzero_result) /\ (exists hscale_right_factor_gfull_nonzero_result. g = gb * hscale_right_factor_gfull_nonzero_result)) /\ forall hscale_common_gfull_nonzero_result. (exists hscale_left_common_gfull_nonzero_result. hscale_common_gfull_nonzero_result = ga * hscale_left_common_gfull_nonzero_result) -> (exists hscale_right_common_gfull_nonzero_result. hscale_common_gfull_nonzero_result = gb * hscale_right_common_gfull_nonzero_result) -> exists hscale_least_factor_gfull_nonzero_result. hscale_common_gfull_nonzero_result = g * hscale_least_factor_gfull_nonzero_result))Constructive proof overview
Generated structural guide
GCD distributes over the actual binary LCM for a nonzero left input and nonzero comparison input; the right input may be zero.
The unchanged tactic script uses 7 declared prerequisites and contains 111 exact native proof lines.
Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
canonical_gcd_exists Alpha theorem; checked-use authorized FC0002 crt_gcd_nonzero_left FC0003 crt_gcd_nonzero_right FC0004 crt_gcd_coprime_cofactors factor_nonzero_right Alpha theorem; checked-use authorized crt_lcm_gcd_cofactor_product Alpha theorem; checked-use authorized FC0005 crt_gcd_lcm_distributes_scaled_coprimeDirect 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 (4)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–13
03Establish hdL14–17
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply canonical gcd exists.
- L14
have hd : exists d. (((exists ec_gcd_left_gfull_nonzero_d. a = d * ec_gcd_left_gfull_nonzero_d) /\ (exists ec_gcd_right_gfull_nonzero_d. b = d * ec_gcd_right_gfull_nonzero_d)) /\ forall ec_gcd_common_gfull_nonzero_d. (exists ec_gcd_common_left_gfull_nonzero_d. a = ec_gcd_common_gfull_nonzero_d * ec_gcd_common_left_gfull_nonzero_d) -> (exists ec_gcd_common_right_gfull_nonzero_d. b = ec_gcd_common_gfull_nonzero_d * ec_gcd_common_right_gfull_nonzero_d) -> exists ec_gcd_greatest_gfull_nonzero_d. d = ec_gcd_common_gfull_nonzero_d * ec_gcd_greatest_gfull_nonzero_d) - L15
specialize canonical_gcd_exists a - L16
specialize canonical_gcd_exists b - L17
apply canonical_gcd_exists
04Separate the logical casesL18–18
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L18
cases hd
05Establish hdnonzeroL19–27
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt gcd nonzero left.
06Establish habL28–34
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt gcd coprime cofactors.
- L28
have hab : exists A B. (a = x * A /\ (b = x * B /\ (forall frp_divisor_gfull_nonzero_AB. (exists frp_left_factor_gfull_nonzero_AB. A = frp_divisor_gfull_nonzero_AB * frp_left_factor_gfull_nonzero_AB) -> (exists frp_right_factor_gfull_nonzero_AB. B = frp_divisor_gfull_nonzero_AB * frp_right_factor_gfull_nonzero_AB) -> frp_divisor_gfull_nonzero_AB = 1))) - L29
specialize crt_gcd_coprime_cofactors a - L30
specialize crt_gcd_coprime_cofactors b - L31
specialize crt_gcd_coprime_cofactors x - L32
apply crt_gcd_coprime_cofactors - L33
exact hdnonzero - L34
exact hd_witness
07Separate the logical casesL35–38
08Establish heL39–42
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply canonical gcd exists.
- L39
have he : exists e. (((exists ec_gcd_left_gfull_nonzero_e. x = e * ec_gcd_left_gfull_nonzero_e) /\ (exists ec_gcd_right_gfull_nonzero_e. n = e * ec_gcd_right_gfull_nonzero_e)) /\ forall ec_gcd_common_gfull_nonzero_e. (exists ec_gcd_common_left_gfull_nonzero_e. x = ec_gcd_common_gfull_nonzero_e * ec_gcd_common_left_gfull_nonzero_e) -> (exists ec_gcd_common_right_gfull_nonzero_e. n = ec_gcd_common_gfull_nonzero_e * ec_gcd_common_right_gfull_nonzero_e) -> exists ec_gcd_greatest_gfull_nonzero_e. e = ec_gcd_common_gfull_nonzero_e * ec_gcd_greatest_gfull_nonzero_e) - L40
specialize canonical_gcd_exists x - L41
specialize canonical_gcd_exists n - L42
apply canonical_gcd_exists
09Separate the logical casesL43–43
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L43
cases he
10Establish henonzeroL44–52
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt gcd nonzero right.
11Establish hdnL53–59
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt gcd coprime cofactors.
- L53
have hdn : exists D N. (x = x3 * D /\ (n = x3 * N /\ (forall frp_divisor_gfull_nonzero_DN. (exists frp_left_factor_gfull_nonzero_DN. D = frp_divisor_gfull_nonzero_DN * frp_left_factor_gfull_nonzero_DN) -> (exists frp_right_factor_gfull_nonzero_DN. N = frp_divisor_gfull_nonzero_DN * frp_right_factor_gfull_nonzero_DN) -> frp_divisor_gfull_nonzero_DN = 1))) - L54
specialize crt_gcd_coprime_cofactors x - L55
specialize crt_gcd_coprime_cofactors n - L56
specialize crt_gcd_coprime_cofactors x3 - L57
apply crt_gcd_coprime_cofactors - L58
exact henonzero - L59
exact he_witness
12Separate the logical casesL60–63
13Establish hNL64–72
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor nonzero right.
14Establish hLeqL73–82
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt lcm gcd cofactor product.
- L73
have hLeq : L = x * (x1 * x2) - L74
specialize crt_lcm_gcd_cofactor_product a - L75
specialize crt_lcm_gcd_cofactor_product b - L76
specialize crt_lcm_gcd_cofactor_product x - L77
specialize crt_lcm_gcd_cofactor_product x1 - L78
specialize crt_lcm_gcd_cofactor_product x2 - L79
specialize crt_lcm_gcd_cofactor_product L - L80
apply crt_lcm_gcd_cofactor_product - L81
exact hdnonzero - L82
exact hab_witness_witness_left
15Use earlier factsL83–92
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L83
exact hab_witness_witness_right_left - L84
exact hd_witness - L85
exact hL - L86
specialize crt_gcd_lcm_distributes_scaled_coprime x - L87
specialize crt_gcd_lcm_distributes_scaled_coprime n - L88
specialize crt_gcd_lcm_distributes_scaled_coprime x3 - L89
specialize crt_gcd_lcm_distributes_scaled_coprime x4 - L90
specialize crt_gcd_lcm_distributes_scaled_coprime x5 - L91
specialize crt_gcd_lcm_distributes_scaled_coprime x1 - L92
specialize crt_gcd_lcm_distributes_scaled_coprime x2
16Use earlier factsL93–102
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L93
specialize crt_gcd_lcm_distributes_scaled_coprime L - L94
specialize crt_gcd_lcm_distributes_scaled_coprime ga - L95
specialize crt_gcd_lcm_distributes_scaled_coprime gb - L96
specialize crt_gcd_lcm_distributes_scaled_coprime g - L97
apply crt_gcd_lcm_distributes_scaled_coprime - L98
exact hdn_witness_witness_left - L99
exact hdn_witness_witness_right_left - L100
exact henonzero - L101
exact hN - L102
exact hdn_witness_witness_right_right
17Use earlier factsL103–104
18Calculate and transport equalitiesL105–106
19Use earlier factsL107–107
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L107
exact hga
20Calculate and transport equalitiesL108–109
Original exact command ledger · 111 lines
- 0001
intro a - 0002
intro b - 0003
intro n - 0004
intro L - 0005
intro ga - 0006
intro gb - 0007
intro g - 0008
intro ha - 0009
intro hn - 0010
intro hL - 0011
intro hga - 0012
intro hgb - 0013
intro hg - 0014
have hd : exists d. (((exists ec_gcd_left_gfull_nonzero_d. a = d * ec_gcd_left_gfull_nonzero_d) /\ (exists ec_gcd_right_gfull_nonzero_d. b = d * ec_gcd_right_gfull_nonzero_d)) /\ forall ec_gcd_common_gfull_nonzero_d. (exists ec_gcd_common_left_gfull_nonzero_d. a = ec_gcd_common_gfull_nonzero_d * ec_gcd_common_left_gfull_nonzero_d) -> (exists ec_gcd_common_right_gfull_nonzero_d. b = ec_gcd_common_gfull_nonzero_d * ec_gcd_common_right_gfull_nonzero_d) -> exists ec_gcd_greatest_gfull_nonzero_d. d = ec_gcd_common_gfull_nonzero_d * ec_gcd_greatest_gfull_nonzero_d) - 0015
specialize canonical_gcd_exists a - 0016
specialize canonical_gcd_exists b - 0017
apply canonical_gcd_exists - 0018
cases hd - 0019
have hdnonzero : ~(x = 0) - 0020
intro hz - 0021
specialize crt_gcd_nonzero_left a - 0022
specialize crt_gcd_nonzero_left b - 0023
specialize crt_gcd_nonzero_left x - 0024
apply crt_gcd_nonzero_left - 0025
exact ha - 0026
exact hd_witness - 0027
exact hz - 0028
have hab : exists A B. (a = x * A /\ (b = x * B /\ (forall frp_divisor_gfull_nonzero_AB. (exists frp_left_factor_gfull_nonzero_AB. A = frp_divisor_gfull_nonzero_AB * frp_left_factor_gfull_nonzero_AB) -> (exists frp_right_factor_gfull_nonzero_AB. B = frp_divisor_gfull_nonzero_AB * frp_right_factor_gfull_nonzero_AB) -> frp_divisor_gfull_nonzero_AB = 1))) - 0029
specialize crt_gcd_coprime_cofactors a - 0030
specialize crt_gcd_coprime_cofactors b - 0031
specialize crt_gcd_coprime_cofactors x - 0032
apply crt_gcd_coprime_cofactors - 0033
exact hdnonzero - 0034
exact hd_witness - 0035
cases hab - 0036
cases hab_witness - 0037
cases hab_witness_witness - 0038
cases hab_witness_witness_right - 0039
have he : exists e. (((exists ec_gcd_left_gfull_nonzero_e. x = e * ec_gcd_left_gfull_nonzero_e) /\ (exists ec_gcd_right_gfull_nonzero_e. n = e * ec_gcd_right_gfull_nonzero_e)) /\ forall ec_gcd_common_gfull_nonzero_e. (exists ec_gcd_common_left_gfull_nonzero_e. x = ec_gcd_common_gfull_nonzero_e * ec_gcd_common_left_gfull_nonzero_e) -> (exists ec_gcd_common_right_gfull_nonzero_e. n = ec_gcd_common_gfull_nonzero_e * ec_gcd_common_right_gfull_nonzero_e) -> exists ec_gcd_greatest_gfull_nonzero_e. e = ec_gcd_common_gfull_nonzero_e * ec_gcd_greatest_gfull_nonzero_e) - 0040
specialize canonical_gcd_exists x - 0041
specialize canonical_gcd_exists n - 0042
apply canonical_gcd_exists - 0043
cases he - 0044
have henonzero : ~(x3 = 0) - 0045
intro hz - 0046
specialize crt_gcd_nonzero_right x - 0047
specialize crt_gcd_nonzero_right n - 0048
specialize crt_gcd_nonzero_right x3 - 0049
apply crt_gcd_nonzero_right - 0050
exact hn - 0051
exact he_witness - 0052
exact hz - 0053
have hdn : exists D N. (x = x3 * D /\ (n = x3 * N /\ (forall frp_divisor_gfull_nonzero_DN. (exists frp_left_factor_gfull_nonzero_DN. D = frp_divisor_gfull_nonzero_DN * frp_left_factor_gfull_nonzero_DN) -> (exists frp_right_factor_gfull_nonzero_DN. N = frp_divisor_gfull_nonzero_DN * frp_right_factor_gfull_nonzero_DN) -> frp_divisor_gfull_nonzero_DN = 1))) - 0054
specialize crt_gcd_coprime_cofactors x - 0055
specialize crt_gcd_coprime_cofactors n - 0056
specialize crt_gcd_coprime_cofactors x3 - 0057
apply crt_gcd_coprime_cofactors - 0058
exact henonzero - 0059
exact he_witness - 0060
cases hdn - 0061
cases hdn_witness - 0062
cases hdn_witness_witness - 0063
cases hdn_witness_witness_right - 0064
have hN : ~(x5 = 0) - 0065
intro hz - 0066
specialize factor_nonzero_right n - 0067
specialize factor_nonzero_right x3 - 0068
specialize factor_nonzero_right x5 - 0069
apply factor_nonzero_right - 0070
exact hn - 0071
exact hdn_witness_witness_right_left - 0072
exact hz - 0073
have hLeq : L = x * (x1 * x2) - 0074
specialize crt_lcm_gcd_cofactor_product a - 0075
specialize crt_lcm_gcd_cofactor_product b - 0076
specialize crt_lcm_gcd_cofactor_product x - 0077
specialize crt_lcm_gcd_cofactor_product x1 - 0078
specialize crt_lcm_gcd_cofactor_product x2 - 0079
specialize crt_lcm_gcd_cofactor_product L - 0080
apply crt_lcm_gcd_cofactor_product - 0081
exact hdnonzero - 0082
exact hab_witness_witness_left - 0083
exact hab_witness_witness_right_left - 0084
exact hd_witness - 0085
exact hL - 0086
specialize crt_gcd_lcm_distributes_scaled_coprime x - 0087
specialize crt_gcd_lcm_distributes_scaled_coprime n - 0088
specialize crt_gcd_lcm_distributes_scaled_coprime x3 - 0089
specialize crt_gcd_lcm_distributes_scaled_coprime x4 - 0090
specialize crt_gcd_lcm_distributes_scaled_coprime x5 - 0091
specialize crt_gcd_lcm_distributes_scaled_coprime x1 - 0092
specialize crt_gcd_lcm_distributes_scaled_coprime x2 - 0093
specialize crt_gcd_lcm_distributes_scaled_coprime L - 0094
specialize crt_gcd_lcm_distributes_scaled_coprime ga - 0095
specialize crt_gcd_lcm_distributes_scaled_coprime gb - 0096
specialize crt_gcd_lcm_distributes_scaled_coprime g - 0097
apply crt_gcd_lcm_distributes_scaled_coprime - 0098
exact hdn_witness_witness_left - 0099
exact hdn_witness_witness_right_left - 0100
exact henonzero - 0101
exact hN - 0102
exact hdn_witness_witness_right_right - 0103
exact hab_witness_witness_right_right - 0104
exact hLeq - 0105
rewrite <- hab_witness_witness_left - 0106
rewrite <- hab_witness_witness_left - 0107
exact hga - 0108
rewrite <- hab_witness_witness_right_left - 0109
rewrite <- hab_witness_witness_right_left - 0110
exact hgb - 0111
exact hg