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 m n a b. ~(m = 0) -> ~(n = 0) -> (forall d. (exists u. m = d * u) -> (exists v. n = d * v) -> d = 1) -> exists x. (exists u v. x + m * u = a + m * v) /\ (exists r s. x + n * r = b + n * s)Structural proof guide
Constructive binary CRT for positive coprime natural moduli using balanced congruence.
Direct prerequisites: nonzero_is_succ, coprime_balanced_bezout, bezout_mod_left, bezout_mod_right, mod_eq_mul_left, mul_add, mul_one, dvd_to_mod_zero, mul_assoc, mul_comm, mod_eq_add, mod_eq_refl, mod_eq_trans, mod_eq_predecessor_cancel, zero_add. The authored body proceeds by case analysis (6), intermediate claims (35), equality transport (11).
Proof neighborhood
Direct dependencies
BT000R nonzero_is_succ BT0038 coprime_balanced_bezout BT004C bezout_mod_left BT004D bezout_mod_right BT003T mod_eq_mul_left BT0007 mul_add BT000A mul_one BT0046 dvd_to_mod_zero BT0008 mul_assoc BT0006 mul_comm BT003R mod_eq_add BT003O mod_eq_refl BT003Q mod_eq_trans BT004E mod_eq_predecessor_cancel BT0000 zero_addDirect 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 (15)
01Fix variables and assumptionsL1–7
02Establish hmsL8–11
03Establish hnsL12–15
04Establish hbezL16–20
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply coprime balanced bezout.
05Separate the logical casesL21–26
06Establish hblL27–35
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bezout mod left.
- L27
have hbl : exists u v. n * x3 + m * u = (1 + n * x5) + m * v - L28
specialize bezout_mod_left m - L29
specialize bezout_mod_left n - L30
specialize bezout_mod_left x2 - L31
specialize bezout_mod_left x3 - L32
specialize bezout_mod_left x4 - L33
specialize bezout_mod_left x5 - L34
apply bezout_mod_left - L35
exact hbez_witness_witness_witness_witness
07Establish hbrL36–44
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bezout mod right.
- L36
have hbr : exists u v. m * x2 + n * u = (1 + m * x4) + n * v - L37
specialize bezout_mod_right m - L38
specialize bezout_mod_right n - L39
specialize bezout_mod_right x2 - L40
specialize bezout_mod_right x3 - L41
specialize bezout_mod_right x4 - L42
specialize bezout_mod_right x5 - L43
apply bezout_mod_right - L44
exact hbez_witness_witness_witness_witness
08Establish hal0L45–51
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq mul left.
09Establish halL52–52
Establish this local claim before using it. It is not an additional assumption.
- L52
have hal : exists u v. (a * (n * x3)) + m * u = (a + a * (n * x5)) + m * v
10Establish haexpandL53–60
11Establish hbmL61–62
12Construct an explicit witnessL63–63
Supply the displayed value, then prove that it has the required property.
- L63
exists b * x2
13Calculate and transport equalitiesL64–65
14Use earlier factsL66–66
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L66
apply mul_assoc
15Calculate and transport equalitiesL67–68
16Use earlier factsL69–69
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L69
apply mul_comm
17Calculate and transport equalitiesL70–70
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L70
refl
18Use earlier factsL71–71
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L71
apply mul_assoc
19Establish hymL72–80
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L72
have hym : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = ((a + a * (n * x5)) + 0) + m * v - L73
specialize mod_eq_add m - L74
specialize mod_eq_add (a * (n * x3)) - L75
specialize mod_eq_add (a + a * (n * x5)) - L76
specialize mod_eq_add (b * (m * x2)) - L77
specialize mod_eq_add 0 - L78
apply mod_eq_add - L79
exact hal - L80
exact hbm
20Establish hym_normL81–81
Establish this local claim before using it. It is not an additional assumption.
- L81
have hym_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = (a + a * (n * x5)) + m * v
21Establish hym_zeroL82–86
22Establish hkmL87–90
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq refl.
23Establish hymkL91–99
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L91
have hymk : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = ((a + a * (n * x5)) + (x * (a * (n * x5)))) + m * v - L92
specialize mod_eq_add m - L93
specialize mod_eq_add ((a * (n * x3)) + (b * (m * x2))) - L94
specialize mod_eq_add (a + a * (n * x5)) - L95
specialize mod_eq_add (x * (a * (n * x5))) - L96
specialize mod_eq_add (x * (a * (n * x5))) - L97
apply mod_eq_add - L98
exact hym_norm - L99
exact hkm
24Establish hcancelmL100–106
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq predecessor cancel.
- L100
have hcancelm : exists u v. ((a + a * (n * x5)) + x * (a * (n * x5))) + S x * u = a + S x * v - L101
specialize mod_eq_predecessor_cancel x - L102
specialize mod_eq_predecessor_cancel a - L103
specialize mod_eq_predecessor_cancel (a * (n * x5)) - L104
apply mod_eq_predecessor_cancel - L105
rewrite <- hms_witness at hcancelm - L106
rewrite <- hms_witness at hcancelm
25Establish hbasemL107–114
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L107
have hbasem : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = a + m * v - L108
specialize mod_eq_trans m - L109
specialize mod_eq_trans (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - L110
specialize mod_eq_trans ((a + a * (n * x5)) + (x * (a * (n * x5)))) - L111
specialize mod_eq_trans a - L112
apply mod_eq_trans - L113
exact hymk - L114
exact hcancelm
26Establish hknznmL115–116
27Construct an explicit witnessL117–117
Supply the displayed value, then prove that it has the required property.
- L117
exists x1 * (b * x4)
28Calculate and transport equalitiesL118–121
29Use earlier factsL122–122
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L122
apply mul_assoc
30Calculate and transport equalitiesL123–126
31Use earlier factsL127–127
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L127
apply mul_comm
32Calculate and transport equalitiesL128–131
33Use earlier factsL132–132
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L132
apply mul_assoc
34Calculate and transport equalitiesL133–134
35Use earlier factsL135–135
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L135
apply mul_assoc
36Calculate and transport equalitiesL136–137
37Use earlier factsL138–138
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L138
apply mul_comm
38Calculate and transport equalitiesL139–139
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L139
refl
39Use earlier factsL140–140
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L140
apply mul_assoc
40Establish hfinalm0L141–149
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L141
have hfinalm0 : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = (a + 0) + m * v - L142
specialize mod_eq_add m - L143
specialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - L144
specialize mod_eq_add a - L145
specialize mod_eq_add (x1 * (b * (m * x4))) - L146
specialize mod_eq_add 0 - L147
apply mod_eq_add - L148
exact hbasem - L149
exact hknznm
41Establish hazeromL150–150
Establish this local claim before using it. It is not an additional assumption.
- L150
have hazerom : exists u v. (a + 0) + m * u = a + m * v
42Construct an explicit witnessL151–152
43Calculate and transport equalitiesL153–153
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L153
simp
44Establish hfinalmL154–161
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L154
have hfinalm : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = a + m * v - L155
specialize mod_eq_trans m - L156
specialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) - L157
specialize mod_eq_trans (a + 0) - L158
specialize mod_eq_trans a - L159
apply mod_eq_trans - L160
exact hfinalm0 - L161
exact hazerom
45Establish hbn0L162–168
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq mul left.
46Establish hbnL169–169
Establish this local claim before using it. It is not an additional assumption.
- L169
have hbn : exists u v. (b * (m * x2)) + n * u = (b + b * (m * x4)) + n * v
47Establish hbexpandL170–177
48Establish hanL178–179
49Construct an explicit witnessL180–180
Supply the displayed value, then prove that it has the required property.
- L180
exists a * x3
50Calculate and transport equalitiesL181–182
51Use earlier factsL183–183
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L183
apply mul_assoc
52Calculate and transport equalitiesL184–185
53Use earlier factsL186–186
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L186
apply mul_comm
54Calculate and transport equalitiesL187–187
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L187
refl
55Use earlier factsL188–188
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L188
apply mul_assoc
56Establish hyn0L189–197
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L189
have hyn0 : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (0 + (b + b * (m * x4))) + n * v - L190
specialize mod_eq_add n - L191
specialize mod_eq_add (a * (n * x3)) - L192
specialize mod_eq_add 0 - L193
specialize mod_eq_add (b * (m * x2)) - L194
specialize mod_eq_add (b + b * (m * x4)) - L195
apply mod_eq_add - L196
exact han - L197
exact hbn
57Establish hyn_normL198–198
Establish this local claim before using it. It is not an additional assumption.
- L198
have hyn_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (b + b * (m * x4)) + n * v
58Establish hyn_zeroL199–203
59Establish hkmzL204–205
60Construct an explicit witnessL206–206
Supply the displayed value, then prove that it has the required property.
- L206
exists x * (a * x5)
61Calculate and transport equalitiesL207–210
62Use earlier factsL211–211
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L211
apply mul_assoc
63Calculate and transport equalitiesL212–215
64Use earlier factsL216–216
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L216
apply mul_comm
65Calculate and transport equalitiesL217–220
66Use earlier factsL221–221
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L221
apply mul_assoc
67Calculate and transport equalitiesL222–223
68Use earlier factsL224–224
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L224
apply mul_assoc
69Calculate and transport equalitiesL225–226
70Use earlier factsL227–227
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L227
apply mul_comm
71Calculate and transport equalitiesL228–228
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L228
refl
72Use earlier factsL229–229
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L229
apply mul_assoc
73Establish hyn1L230–238
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L230
have hyn1 : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = ((b + b * (m * x4)) + 0) + n * v - L231
specialize mod_eq_add n - L232
specialize mod_eq_add ((a * (n * x3)) + (b * (m * x2))) - L233
specialize mod_eq_add (b + b * (m * x4)) - L234
specialize mod_eq_add (x * (a * (n * x5))) - L235
specialize mod_eq_add 0 - L236
apply mod_eq_add - L237
exact hyn_norm - L238
exact hkmz
74Establish hyn1_normL239–239
Establish this local claim before using it. It is not an additional assumption.
- L239
have hyn1_norm : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = (b + b * (m * x4)) + n * v
75Establish hyn1_zeroL240–244
76Establish hknL245–248
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq refl.
77Establish hynkL249–257
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq add.
- L249
have hynk : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = ((b + b * (m * x4)) + (x1 * (b * (m * x4)))) + n * v - L250
specialize mod_eq_add n - L251
specialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - L252
specialize mod_eq_add (b + b * (m * x4)) - L253
specialize mod_eq_add (x1 * (b * (m * x4))) - L254
specialize mod_eq_add (x1 * (b * (m * x4))) - L255
apply mod_eq_add - L256
exact hyn1_norm - L257
exact hkn
78Establish hcancelnL258–264
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq predecessor cancel.
- L258
have hcanceln : exists u v. ((b + b * (m * x4)) + x1 * (b * (m * x4))) + S x1 * u = b + S x1 * v - L259
specialize mod_eq_predecessor_cancel x1 - L260
specialize mod_eq_predecessor_cancel b - L261
specialize mod_eq_predecessor_cancel (b * (m * x4)) - L262
apply mod_eq_predecessor_cancel - L263
rewrite <- hns_witness at hcanceln - L264
rewrite <- hns_witness at hcanceln
79Establish hfinalnL265–272
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq trans.
- L265
have hfinaln : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = b + n * v - L266
specialize mod_eq_trans n - L267
specialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) - L268
specialize mod_eq_trans ((b + b * (m * x4)) + (x1 * (b * (m * x4)))) - L269
specialize mod_eq_trans b - L270
apply mod_eq_trans - L271
exact hynk - L272
exact hcanceln
80Construct an explicit witnessL273–273
Supply the displayed value, then prove that it has the required property.
- L273
exists (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))
81Separate the logical casesL274–274
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L274
split
Original exact command ledger · 276 lines
- 0001
intro m - 0002
intro n - 0003
intro a - 0004
intro b - 0005
intro hm - 0006
intro hn - 0007
intro hcop - 0008
have hms : exists k. m = S k - 0009
specialize nonzero_is_succ m - 0010
apply nonzero_is_succ - 0011
exact hm - 0012
have hns : exists k. n = S k - 0013
specialize nonzero_is_succ n - 0014
apply nonzero_is_succ - 0015
exact hn - 0016
have hbez : exists xp yp xn yn. m * xp + n * yp = 1 + (m * xn + n * yn) - 0017
specialize coprime_balanced_bezout m - 0018
specialize coprime_balanced_bezout n - 0019
apply coprime_balanced_bezout - 0020
exact hcop - 0021
cases hms - 0022
cases hns - 0023
cases hbez - 0024
cases hbez_witness - 0025
cases hbez_witness_witness - 0026
cases hbez_witness_witness_witness - 0027
have hbl : exists u v. n * x3 + m * u = (1 + n * x5) + m * v - 0028
specialize bezout_mod_left m - 0029
specialize bezout_mod_left n - 0030
specialize bezout_mod_left x2 - 0031
specialize bezout_mod_left x3 - 0032
specialize bezout_mod_left x4 - 0033
specialize bezout_mod_left x5 - 0034
apply bezout_mod_left - 0035
exact hbez_witness_witness_witness_witness - 0036
have hbr : exists u v. m * x2 + n * u = (1 + m * x4) + n * v - 0037
specialize bezout_mod_right m - 0038
specialize bezout_mod_right n - 0039
specialize bezout_mod_right x2 - 0040
specialize bezout_mod_right x3 - 0041
specialize bezout_mod_right x4 - 0042
specialize bezout_mod_right x5 - 0043
apply bezout_mod_right - 0044
exact hbez_witness_witness_witness_witness - 0045
have hal0 : exists u v. (a * (n * x3)) + m * u = (a * (1 + n * x5)) + m * v - 0046
specialize mod_eq_mul_left m - 0047
specialize mod_eq_mul_left (n * x3) - 0048
specialize mod_eq_mul_left (1 + n * x5) - 0049
specialize mod_eq_mul_left a - 0050
apply mod_eq_mul_left - 0051
exact hbl - 0052
have hal : exists u v. (a * (n * x3)) + m * u = (a + a * (n * x5)) + m * v - 0053
have haexpand : a * (1 + n * x5) = a + a * (n * x5) - 0054
trans a * 1 + a * (n * x5) - 0055
apply mul_add - 0056
congr - 0057
apply mul_one - 0058
refl - 0059
rewrite <- haexpand - 0060
exact hal0 - 0061
have hbm : exists u v. (b * (m * x2)) + m * u = 0 + m * v - 0062
apply dvd_to_mod_zero - 0063
exists b * x2 - 0064
trans (b * m) * x2 - 0065
symm - 0066
apply mul_assoc - 0067
trans (m * b) * x2 - 0068
congr - 0069
apply mul_comm - 0070
refl - 0071
apply mul_assoc - 0072
have hym : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = ((a + a * (n * x5)) + 0) + m * v - 0073
specialize mod_eq_add m - 0074
specialize mod_eq_add (a * (n * x3)) - 0075
specialize mod_eq_add (a + a * (n * x5)) - 0076
specialize mod_eq_add (b * (m * x2)) - 0077
specialize mod_eq_add 0 - 0078
apply mod_eq_add - 0079
exact hal - 0080
exact hbm - 0081
have hym_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = (a + a * (n * x5)) + m * v - 0082
have hym_zero : (a + a * (n * x5)) + 0 = a + a * (n * x5) - 0083
rewrite PA3 - 0084
refl - 0085
rewrite <- hym_zero - 0086
exact hym - 0087
have hkm : exists u v. (x * (a * (n * x5))) + m * u = (x * (a * (n * x5))) + m * v - 0088
specialize mod_eq_refl m - 0089
specialize mod_eq_refl (x * (a * (n * x5))) - 0090
apply mod_eq_refl - 0091
have hymk : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = ((a + a * (n * x5)) + (x * (a * (n * x5)))) + m * v - 0092
specialize mod_eq_add m - 0093
specialize mod_eq_add ((a * (n * x3)) + (b * (m * x2))) - 0094
specialize mod_eq_add (a + a * (n * x5)) - 0095
specialize mod_eq_add (x * (a * (n * x5))) - 0096
specialize mod_eq_add (x * (a * (n * x5))) - 0097
apply mod_eq_add - 0098
exact hym_norm - 0099
exact hkm - 0100
have hcancelm : exists u v. ((a + a * (n * x5)) + x * (a * (n * x5))) + S x * u = a + S x * v - 0101
specialize mod_eq_predecessor_cancel x - 0102
specialize mod_eq_predecessor_cancel a - 0103
specialize mod_eq_predecessor_cancel (a * (n * x5)) - 0104
apply mod_eq_predecessor_cancel - 0105
rewrite <- hms_witness at hcancelm - 0106
rewrite <- hms_witness at hcancelm - 0107
have hbasem : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = a + m * v - 0108
specialize mod_eq_trans m - 0109
specialize mod_eq_trans (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - 0110
specialize mod_eq_trans ((a + a * (n * x5)) + (x * (a * (n * x5)))) - 0111
specialize mod_eq_trans a - 0112
apply mod_eq_trans - 0113
exact hymk - 0114
exact hcancelm - 0115
have hknznm : exists u v. (x1 * (b * (m * x4))) + m * u = 0 + m * v - 0116
apply dvd_to_mod_zero - 0117
exists x1 * (b * x4) - 0118
trans x1 * ((b * m) * x4) - 0119
congr - 0120
refl - 0121
symm - 0122
apply mul_assoc - 0123
trans x1 * ((m * b) * x4) - 0124
congr - 0125
refl - 0126
congr - 0127
apply mul_comm - 0128
refl - 0129
trans x1 * (m * (b * x4)) - 0130
congr - 0131
refl - 0132
apply mul_assoc - 0133
trans (x1 * m) * (b * x4) - 0134
symm - 0135
apply mul_assoc - 0136
trans (m * x1) * (b * x4) - 0137
congr - 0138
apply mul_comm - 0139
refl - 0140
apply mul_assoc - 0141
have hfinalm0 : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = (a + 0) + m * v - 0142
specialize mod_eq_add m - 0143
specialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - 0144
specialize mod_eq_add a - 0145
specialize mod_eq_add (x1 * (b * (m * x4))) - 0146
specialize mod_eq_add 0 - 0147
apply mod_eq_add - 0148
exact hbasem - 0149
exact hknznm - 0150
have hazerom : exists u v. (a + 0) + m * u = a + m * v - 0151
exists 0 - 0152
exists 0 - 0153
simp - 0154
have hfinalm : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = a + m * v - 0155
specialize mod_eq_trans m - 0156
specialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) - 0157
specialize mod_eq_trans (a + 0) - 0158
specialize mod_eq_trans a - 0159
apply mod_eq_trans - 0160
exact hfinalm0 - 0161
exact hazerom - 0162
have hbn0 : exists u v. (b * (m * x2)) + n * u = (b * (1 + m * x4)) + n * v - 0163
specialize mod_eq_mul_left n - 0164
specialize mod_eq_mul_left (m * x2) - 0165
specialize mod_eq_mul_left (1 + m * x4) - 0166
specialize mod_eq_mul_left b - 0167
apply mod_eq_mul_left - 0168
exact hbr - 0169
have hbn : exists u v. (b * (m * x2)) + n * u = (b + b * (m * x4)) + n * v - 0170
have hbexpand : b * (1 + m * x4) = b + b * (m * x4) - 0171
trans b * 1 + b * (m * x4) - 0172
apply mul_add - 0173
congr - 0174
apply mul_one - 0175
refl - 0176
rewrite <- hbexpand - 0177
exact hbn0 - 0178
have han : exists u v. (a * (n * x3)) + n * u = 0 + n * v - 0179
apply dvd_to_mod_zero - 0180
exists a * x3 - 0181
trans (a * n) * x3 - 0182
symm - 0183
apply mul_assoc - 0184
trans (n * a) * x3 - 0185
congr - 0186
apply mul_comm - 0187
refl - 0188
apply mul_assoc - 0189
have hyn0 : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (0 + (b + b * (m * x4))) + n * v - 0190
specialize mod_eq_add n - 0191
specialize mod_eq_add (a * (n * x3)) - 0192
specialize mod_eq_add 0 - 0193
specialize mod_eq_add (b * (m * x2)) - 0194
specialize mod_eq_add (b + b * (m * x4)) - 0195
apply mod_eq_add - 0196
exact han - 0197
exact hbn - 0198
have hyn_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (b + b * (m * x4)) + n * v - 0199
have hyn_zero : 0 + (b + b * (m * x4)) = b + b * (m * x4) - 0200
specialize zero_add (b + b * (m * x4)) - 0201
exact zero_add - 0202
rewrite <- hyn_zero - 0203
exact hyn0 - 0204
have hkmz : exists u v. (x * (a * (n * x5))) + n * u = 0 + n * v - 0205
apply dvd_to_mod_zero - 0206
exists x * (a * x5) - 0207
trans x * ((a * n) * x5) - 0208
congr - 0209
refl - 0210
symm - 0211
apply mul_assoc - 0212
trans x * ((n * a) * x5) - 0213
congr - 0214
refl - 0215
congr - 0216
apply mul_comm - 0217
refl - 0218
trans x * (n * (a * x5)) - 0219
congr - 0220
refl - 0221
apply mul_assoc - 0222
trans (x * n) * (a * x5) - 0223
symm - 0224
apply mul_assoc - 0225
trans (n * x) * (a * x5) - 0226
congr - 0227
apply mul_comm - 0228
refl - 0229
apply mul_assoc - 0230
have hyn1 : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = ((b + b * (m * x4)) + 0) + n * v - 0231
specialize mod_eq_add n - 0232
specialize mod_eq_add ((a * (n * x3)) + (b * (m * x2))) - 0233
specialize mod_eq_add (b + b * (m * x4)) - 0234
specialize mod_eq_add (x * (a * (n * x5))) - 0235
specialize mod_eq_add 0 - 0236
apply mod_eq_add - 0237
exact hyn_norm - 0238
exact hkmz - 0239
have hyn1_norm : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = (b + b * (m * x4)) + n * v - 0240
have hyn1_zero : (b + b * (m * x4)) + 0 = b + b * (m * x4) - 0241
rewrite PA3 - 0242
refl - 0243
rewrite <- hyn1_zero - 0244
exact hyn1 - 0245
have hkn : exists u v. (x1 * (b * (m * x4))) + n * u = (x1 * (b * (m * x4))) + n * v - 0246
specialize mod_eq_refl n - 0247
specialize mod_eq_refl (x1 * (b * (m * x4))) - 0248
apply mod_eq_refl - 0249
have hynk : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = ((b + b * (m * x4)) + (x1 * (b * (m * x4)))) + n * v - 0250
specialize mod_eq_add n - 0251
specialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) - 0252
specialize mod_eq_add (b + b * (m * x4)) - 0253
specialize mod_eq_add (x1 * (b * (m * x4))) - 0254
specialize mod_eq_add (x1 * (b * (m * x4))) - 0255
apply mod_eq_add - 0256
exact hyn1_norm - 0257
exact hkn - 0258
have hcanceln : exists u v. ((b + b * (m * x4)) + x1 * (b * (m * x4))) + S x1 * u = b + S x1 * v - 0259
specialize mod_eq_predecessor_cancel x1 - 0260
specialize mod_eq_predecessor_cancel b - 0261
specialize mod_eq_predecessor_cancel (b * (m * x4)) - 0262
apply mod_eq_predecessor_cancel - 0263
rewrite <- hns_witness at hcanceln - 0264
rewrite <- hns_witness at hcanceln - 0265
have hfinaln : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = b + n * v - 0266
specialize mod_eq_trans n - 0267
specialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) - 0268
specialize mod_eq_trans ((b + b * (m * x4)) + (x1 * (b * (m * x4)))) - 0269
specialize mod_eq_trans b - 0270
apply mod_eq_trans - 0271
exact hynk - 0272
exact hcanceln - 0273
exists (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4))) - 0274
split - 0275
exact hfinalm - 0276
exact hfinaln