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 ga gb P T. ~(n = 0) -> T = a * b -> P = ga * gb -> (forall frp_divisor_gcomp_product_coprime. (exists frp_left_factor_gcomp_product_coprime. a = frp_divisor_gcomp_product_coprime * frp_left_factor_gcomp_product_coprime) -> (exists frp_right_factor_gcomp_product_coprime. b = frp_divisor_gcomp_product_coprime * frp_right_factor_gcomp_product_coprime) -> frp_divisor_gcomp_product_coprime = 1) -> ((((exists hag_left_factor_gcomp_product_left. a = ga * hag_left_factor_gcomp_product_left) /\ (exists hag_right_factor_gcomp_product_left. n = ga * hag_right_factor_gcomp_product_left)) /\ forall hag_divisor_gcomp_product_left. (exists hag_common_left_gcomp_product_left. a = hag_divisor_gcomp_product_left * hag_common_left_gcomp_product_left) -> (exists hag_common_right_gcomp_product_left. n = hag_divisor_gcomp_product_left * hag_common_right_gcomp_product_left) -> exists hag_greatest_factor_gcomp_product_left. ga = hag_divisor_gcomp_product_left * hag_greatest_factor_gcomp_product_left)) -> ((((exists hag_left_factor_gcomp_product_right. b = gb * hag_left_factor_gcomp_product_right) /\ (exists hag_right_factor_gcomp_product_right. n = gb * hag_right_factor_gcomp_product_right)) /\ forall hag_divisor_gcomp_product_right. (exists hag_common_left_gcomp_product_right. b = hag_divisor_gcomp_product_right * hag_common_left_gcomp_product_right) -> (exists hag_common_right_gcomp_product_right. n = hag_divisor_gcomp_product_right * hag_common_right_gcomp_product_right) -> exists hag_greatest_factor_gcomp_product_right. gb = hag_divisor_gcomp_product_right * hag_greatest_factor_gcomp_product_right)) -> ((((exists hag_left_factor_gcomp_product_result. T = P * hag_left_factor_gcomp_product_result) /\ (exists hag_right_factor_gcomp_product_result. n = P * hag_right_factor_gcomp_product_result)) /\ forall hag_divisor_gcomp_product_result. (exists hag_common_left_gcomp_product_result. T = hag_divisor_gcomp_product_result * hag_common_left_gcomp_product_result) -> (exists hag_common_right_gcomp_product_result. n = hag_divisor_gcomp_product_result * hag_common_right_gcomp_product_result) -> exists hag_greatest_factor_gcomp_product_result. P = hag_divisor_gcomp_product_result * hag_greatest_factor_gcomp_product_result))Constructive proof overview
Generated structural guide
For coprime natural factors and any nonzero comparison input, the gcd of their product is exactly the product of their individual relational gcd values.
The unchanged tactic script uses 13 declared prerequisites and contains 123 exact native proof lines.
Alpha v34 checked-use · first admitted v25 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
is_gcd_dvd_left Stable theorem; checked-use authorized is_gcd_dvd_right Stable theorem; checked-use authorized factor_nonzero_left Stable theorem; checked-use authorized is_gcd_quotients_coprime_nonzero Stable theorem; checked-use authorized multiple_refl Stable theorem; checked-use authorized GC0002 crt_coprime_divisor_pair canonical_gcd_exists Alpha theorem; checked-use authorized is_gcd_symm Stable theorem; checked-use authorized GC000F crt_is_gcd_coprime_factor_remove is_gcd_unique Stable theorem; checked-use authorized GC0010 crt_product_witness mul_assoc Stable theorem; checked-use authorized GC000E crt_is_gcd_scaleDirect 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 haquotL14–19
04Separate the logical casesL20–20
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L20
cases haquot
05Establish hnquotL21–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply is gcd dvd right.
06Separate the logical casesL27–27
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L27
cases hnquot
07Establish hganzeroL28–36
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor nonzero left.
08Establish hquotcopL37–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply is gcd quotients coprime nonzero.
- L37
have hquotcop : forall frp_divisor_gcomp_product_quotients. (exists frp_left_factor_gcomp_product_quotients. x = frp_divisor_gcomp_product_quotients * frp_left_factor_gcomp_product_quotients) -> (exists frp_right_factor_gcomp_product_quotients. x1 = frp_divisor_gcomp_product_quotients * frp_right_factor_gcomp_product_quotients) -> frp_divisor_gcomp_product_quotients = 1 - L38
specialize is_gcd_quotients_coprime_nonzero ga - L39
specialize is_gcd_quotients_coprime_nonzero a - L40
specialize is_gcd_quotients_coprime_nonzero n - L41
specialize is_gcd_quotients_coprime_nonzero x - L42
specialize is_gcd_quotients_coprime_nonzero x1 - L43
apply is_gcd_quotients_coprime_nonzero - L44
exact hga - L45
exact hganzero - L46
exact haquot_witness
09Use earlier factsL47–47
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L47
exact hnquot_witness
10Establish hgbcopL48–54
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt coprime divisor pair.
- L48
have hgbcop : forall frp_divisor_gcomp_product_scale_coprime. (exists frp_left_factor_gcomp_product_scale_coprime. ga = frp_divisor_gcomp_product_scale_coprime * frp_left_factor_gcomp_product_scale_coprime) -> (exists frp_right_factor_gcomp_product_scale_coprime. b = frp_divisor_gcomp_product_scale_coprime * frp_right_factor_gcomp_product_scale_coprime) -> frp_divisor_gcomp_product_scale_coprime = 1 - L49
specialize crt_coprime_divisor_pair a - L50
specialize crt_coprime_divisor_pair b - L51
specialize crt_coprime_divisor_pair ga - L52
specialize crt_coprime_divisor_pair b - L53
apply crt_coprime_divisor_pair - L54
exact hab
11Construct an explicit witnessL55–55
Supply the displayed value, then prove that it has the required property.
- L55
exists x
12Use earlier factsL56–60
13Separate the logical casesL61–61
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L61
cases canonical_gcd_exists
14Establish hswapL62–67
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply is gcd symm.
15Establish hrestoreL68–77
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt is gcd coprime factor remove.
- L68
have hrestore : IsGCD(x2,n,b)Definitions: IsGCD - L69
specialize crt_is_gcd_coprime_factor_remove ga - L70
specialize crt_is_gcd_coprime_factor_remove x1 - L71
specialize crt_is_gcd_coprime_factor_remove b - L72
specialize crt_is_gcd_coprime_factor_remove x2 - L73
specialize crt_is_gcd_coprime_factor_remove n - L74
apply crt_is_gcd_coprime_factor_remove - L75
exact hnquot_witness - L76
exact hgbcop - L77
exact hswap
16Establish hbackL78–83
17Establish heqL84–93
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply is gcd unique.
18Separate the logical casesL94–94
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L94
cases crt_product_witness
19Establish hbaseL95–104
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply crt is gcd coprime factor remove.
- L95
have hbase : IsGCD(x2,x3,x1)Definitions: IsGCD - L96
specialize crt_is_gcd_coprime_factor_remove x - L97
specialize crt_is_gcd_coprime_factor_remove b - L98
specialize crt_is_gcd_coprime_factor_remove x1 - L99
specialize crt_is_gcd_coprime_factor_remove x2 - L100
specialize crt_is_gcd_coprime_factor_remove x3 - L101
apply crt_is_gcd_coprime_factor_remove - L102
exact crt_product_witness_witness - L103
exact hquotcop - L104
exact canonical_gcd_exists_witness
20Use earlier factsL105–112
Instantiate or apply named facts and discharge the corresponding proof obligations.
21Calculate and transport equalitiesL113–113
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L113
trans a * b
22Use earlier factsL114–114
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L114
exact hT
23Calculate and transport equalitiesL115–116
24Use earlier factsL117–117
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L117
apply mul_assoc
25Calculate and transport equalitiesL118–119
26Use earlier factsL120–120
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L120
exact hnquot_witness
27Calculate and transport equalitiesL121–121
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L121
rewrite heq
Original exact command ledger · 123 lines
- 0001
intro a - 0002
intro b - 0003
intro n - 0004
intro ga - 0005
intro gb - 0006
intro P - 0007
intro T - 0008
intro hnzero - 0009
intro hT - 0010
intro hP - 0011
intro hab - 0012
intro hga - 0013
intro hgb - 0014
have haquot : exists q. a = ga * q - 0015
specialize is_gcd_dvd_left ga - 0016
specialize is_gcd_dvd_left a - 0017
specialize is_gcd_dvd_left n - 0018
apply is_gcd_dvd_left - 0019
exact hga - 0020
cases haquot - 0021
have hnquot : exists q. n = ga * q - 0022
specialize is_gcd_dvd_right ga - 0023
specialize is_gcd_dvd_right a - 0024
specialize is_gcd_dvd_right n - 0025
apply is_gcd_dvd_right - 0026
exact hga - 0027
cases hnquot - 0028
have hganzero : ~(ga = 0) - 0029
specialize factor_nonzero_left n - 0030
specialize factor_nonzero_left ga - 0031
specialize factor_nonzero_left x1 - 0032
intro hzero - 0033
apply factor_nonzero_left - 0034
exact hnzero - 0035
exact hnquot_witness - 0036
exact hzero - 0037
have hquotcop : forall frp_divisor_gcomp_product_quotients. (exists frp_left_factor_gcomp_product_quotients. x = frp_divisor_gcomp_product_quotients * frp_left_factor_gcomp_product_quotients) -> (exists frp_right_factor_gcomp_product_quotients. x1 = frp_divisor_gcomp_product_quotients * frp_right_factor_gcomp_product_quotients) -> frp_divisor_gcomp_product_quotients = 1 - 0038
specialize is_gcd_quotients_coprime_nonzero ga - 0039
specialize is_gcd_quotients_coprime_nonzero a - 0040
specialize is_gcd_quotients_coprime_nonzero n - 0041
specialize is_gcd_quotients_coprime_nonzero x - 0042
specialize is_gcd_quotients_coprime_nonzero x1 - 0043
apply is_gcd_quotients_coprime_nonzero - 0044
exact hga - 0045
exact hganzero - 0046
exact haquot_witness - 0047
exact hnquot_witness - 0048
have hgbcop : forall frp_divisor_gcomp_product_scale_coprime. (exists frp_left_factor_gcomp_product_scale_coprime. ga = frp_divisor_gcomp_product_scale_coprime * frp_left_factor_gcomp_product_scale_coprime) -> (exists frp_right_factor_gcomp_product_scale_coprime. b = frp_divisor_gcomp_product_scale_coprime * frp_right_factor_gcomp_product_scale_coprime) -> frp_divisor_gcomp_product_scale_coprime = 1 - 0049
specialize crt_coprime_divisor_pair a - 0050
specialize crt_coprime_divisor_pair b - 0051
specialize crt_coprime_divisor_pair ga - 0052
specialize crt_coprime_divisor_pair b - 0053
apply crt_coprime_divisor_pair - 0054
exact hab - 0055
exists x - 0056
exact haquot_witness - 0057
specialize multiple_refl b - 0058
exact multiple_refl - 0059
specialize canonical_gcd_exists b - 0060
specialize canonical_gcd_exists x1 - 0061
cases canonical_gcd_exists - 0062
have hswap : (((exists hag_left_factor_gcomp_product_intermediate_swap. x1 = x2 * hag_left_factor_gcomp_product_intermediate_swap) /\ (exists hag_right_factor_gcomp_product_intermediate_swap. b = x2 * hag_right_factor_gcomp_product_intermediate_swap)) /\ forall hag_divisor_gcomp_product_intermediate_swap. (exists hag_common_left_gcomp_product_intermediate_swap. x1 = hag_divisor_gcomp_product_intermediate_swap * hag_common_left_gcomp_product_intermediate_swap) -> (exists hag_common_right_gcomp_product_intermediate_swap. b = hag_divisor_gcomp_product_intermediate_swap * hag_common_right_gcomp_product_intermediate_swap) -> exists hag_greatest_factor_gcomp_product_intermediate_swap. x2 = hag_divisor_gcomp_product_intermediate_swap * hag_greatest_factor_gcomp_product_intermediate_swap) - 0063
specialize is_gcd_symm x2 - 0064
specialize is_gcd_symm b - 0065
specialize is_gcd_symm x1 - 0066
apply is_gcd_symm - 0067
exact canonical_gcd_exists_witness - 0068
have hrestore : (((exists hag_left_factor_gcomp_product_restore_scaled. n = x2 * hag_left_factor_gcomp_product_restore_scaled) /\ (exists hag_right_factor_gcomp_product_restore_scaled. b = x2 * hag_right_factor_gcomp_product_restore_scaled)) /\ forall hag_divisor_gcomp_product_restore_scaled. (exists hag_common_left_gcomp_product_restore_scaled. n = hag_divisor_gcomp_product_restore_scaled * hag_common_left_gcomp_product_restore_scaled) -> (exists hag_common_right_gcomp_product_restore_scaled. b = hag_divisor_gcomp_product_restore_scaled * hag_common_right_gcomp_product_restore_scaled) -> exists hag_greatest_factor_gcomp_product_restore_scaled. x2 = hag_divisor_gcomp_product_restore_scaled * hag_greatest_factor_gcomp_product_restore_scaled) - 0069
specialize crt_is_gcd_coprime_factor_remove ga - 0070
specialize crt_is_gcd_coprime_factor_remove x1 - 0071
specialize crt_is_gcd_coprime_factor_remove b - 0072
specialize crt_is_gcd_coprime_factor_remove x2 - 0073
specialize crt_is_gcd_coprime_factor_remove n - 0074
apply crt_is_gcd_coprime_factor_remove - 0075
exact hnquot_witness - 0076
exact hgbcop - 0077
exact hswap - 0078
have hback : (((exists hag_left_factor_gcomp_product_restore_back. b = x2 * hag_left_factor_gcomp_product_restore_back) /\ (exists hag_right_factor_gcomp_product_restore_back. n = x2 * hag_right_factor_gcomp_product_restore_back)) /\ forall hag_divisor_gcomp_product_restore_back. (exists hag_common_left_gcomp_product_restore_back. b = hag_divisor_gcomp_product_restore_back * hag_common_left_gcomp_product_restore_back) -> (exists hag_common_right_gcomp_product_restore_back. n = hag_divisor_gcomp_product_restore_back * hag_common_right_gcomp_product_restore_back) -> exists hag_greatest_factor_gcomp_product_restore_back. x2 = hag_divisor_gcomp_product_restore_back * hag_greatest_factor_gcomp_product_restore_back) - 0079
specialize is_gcd_symm x2 - 0080
specialize is_gcd_symm n - 0081
specialize is_gcd_symm b - 0082
apply is_gcd_symm - 0083
exact hrestore - 0084
have heq : x2 = gb - 0085
specialize is_gcd_unique x2 - 0086
specialize is_gcd_unique gb - 0087
specialize is_gcd_unique b - 0088
specialize is_gcd_unique n - 0089
apply is_gcd_unique - 0090
exact hback - 0091
exact hgb - 0092
specialize crt_product_witness x - 0093
specialize crt_product_witness b - 0094
cases crt_product_witness - 0095
have hbase : (((exists hag_left_factor_gcomp_product_base_temporary. x3 = x2 * hag_left_factor_gcomp_product_base_temporary) /\ (exists hag_right_factor_gcomp_product_base_temporary. x1 = x2 * hag_right_factor_gcomp_product_base_temporary)) /\ forall hag_divisor_gcomp_product_base_temporary. (exists hag_common_left_gcomp_product_base_temporary. x3 = hag_divisor_gcomp_product_base_temporary * hag_common_left_gcomp_product_base_temporary) -> (exists hag_common_right_gcomp_product_base_temporary. x1 = hag_divisor_gcomp_product_base_temporary * hag_common_right_gcomp_product_base_temporary) -> exists hag_greatest_factor_gcomp_product_base_temporary. x2 = hag_divisor_gcomp_product_base_temporary * hag_greatest_factor_gcomp_product_base_temporary) - 0096
specialize crt_is_gcd_coprime_factor_remove x - 0097
specialize crt_is_gcd_coprime_factor_remove b - 0098
specialize crt_is_gcd_coprime_factor_remove x1 - 0099
specialize crt_is_gcd_coprime_factor_remove x2 - 0100
specialize crt_is_gcd_coprime_factor_remove x3 - 0101
apply crt_is_gcd_coprime_factor_remove - 0102
exact crt_product_witness_witness - 0103
exact hquotcop - 0104
exact canonical_gcd_exists_witness - 0105
specialize crt_is_gcd_scale ga - 0106
specialize crt_is_gcd_scale x3 - 0107
specialize crt_is_gcd_scale x1 - 0108
specialize crt_is_gcd_scale x2 - 0109
specialize crt_is_gcd_scale T - 0110
specialize crt_is_gcd_scale n - 0111
specialize crt_is_gcd_scale P - 0112
apply crt_is_gcd_scale - 0113
trans a * b - 0114
exact hT - 0115
rewrite haquot_witness - 0116
trans ga * (x * b) - 0117
apply mul_assoc - 0118
rewrite crt_product_witness_witness - 0119
refl - 0120
exact hnquot_witness - 0121
rewrite heq - 0122
exact hP - 0123
exact hbase
Separate complete second-wave branches: Full G011 proof · Alpha v27.