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 M g r x. (exists lcc_gap_residue_reference. lcc_gap_residue_reference+S (r)=(M)) -> ((((((exists lcc_gap_residue_bound. lcc_gap_residue_bound+S (x)=(g*M)) /\ ((exists hgcrt_mod_left_lcc_residue_mod hgcrt_mod_right_lcc_residue_mod. x + M * hgcrt_mod_left_lcc_residue_mod = r + M * hgcrt_mod_right_lcc_residue_mod)))) -> (exists t. ((exists lcc_gap_residue_parameter_bound. lcc_gap_residue_parameter_bound+S (t)=(g)) /\ (((x)=(r)+(M)*t))))) /\ (((exists t. ((exists lcc_gap_residue_parameter_bound. lcc_gap_residue_parameter_bound+S (t)=(g)) /\ (((x)=(r)+(M)*t)))) -> (((exists lcc_gap_residue_bound. lcc_gap_residue_bound+S (x)=(g*M)) /\ ((exists hgcrt_mod_left_lcc_residue_mod hgcrt_mod_right_lcc_residue_mod. x + M * hgcrt_mod_left_lcc_residue_mod = r + M * hgcrt_mod_right_lcc_residue_mod))))))))Constructive proof overview
Generated structural guide
Construct the exact interval parameter for every bounded member of a residue class, and conversely.
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
le_zero Alpha theorem; checked-use authorized succ_ne_zero Alpha theorem; checked-use authorized mod_eq_to_remainder_decomposition Alpha theorem; checked-use authorized add_comm Alpha theorem; checked-use authorized mul_comm Alpha theorem; checked-use authorized CG0004 linear_congruence_progression_bound_iff remainder_decomposition_to_mod_eq 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.
Named ingredients (1)
01Fix variables and assumptionsL1–5
02Establish hM0L6–7
03Establish hbadL8–10
04Establish hsL11–17
05Separate the logical casesL18–18
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L18
split
06Fix variables and assumptionsL19–19
Work with arbitrary variables or the premises of the current implication.
- L19
intro h
07Separate the logical casesL20–20
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L20
cases h
08Establish hqL21–28
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq to remainder decomposition.
09Separate the logical casesL29–29
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L29
cases hq
10Establish heL30–37
11Construct an explicit witnessL38–38
Supply the displayed value, then prove that it has the required property.
- L38
exists x1
12Separate the logical casesL39–39
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L39
split
13Establish hcL40–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply linear congruence progression bound iff.
- L40
have hc : (((exists lcc_gap_residue_forward. lcc_gap_residue_forward+S (r+M*x1)=(g*M)) -> (exists lcc_gap_residue_forward_index. lcc_gap_residue_forward_index+S (x1)=(g))) /\ (((exists lcc_gap_residue_forward_index. lcc_gap_residue_forward_index+S (x1)=(g)) -> (exists lcc_gap_residue_forward. lcc_gap_residue_forward+S (r+M*x1)=(g*M))))) - L41
specialize linear_congruence_progression_bound_iff (M) - L42
specialize linear_congruence_progression_bound_iff (g) - L43
specialize linear_congruence_progression_bound_iff (r) - L44
specialize linear_congruence_progression_bound_iff (x1) - L45
apply linear_congruence_progression_bound_iff - L46
exact hr
14Separate the logical casesL47–47
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L47
cases hc
15Use earlier factsL48–48
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L48
apply hc_left
16Calculate and transport equalitiesL49–49
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L49
rewrite <- he
17Use earlier factsL50–51
18Fix variables and assumptionsL52–52
Work with arbitrary variables or the premises of the current implication.
- L52
intro h
19Separate the logical casesL53–55
20Calculate and transport equalitiesL56–56
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L56
rewrite h_witness_right
21Establish hcL57–63
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply linear congruence progression bound iff.
- L57
have hc : (((exists lcc_gap_residue_backward. lcc_gap_residue_backward+S (r+M*x1)=(g*M)) -> (exists lcc_gap_residue_backward_index. lcc_gap_residue_backward_index+S (x1)=(g))) /\ (((exists lcc_gap_residue_backward_index. lcc_gap_residue_backward_index+S (x1)=(g)) -> (exists lcc_gap_residue_backward. lcc_gap_residue_backward+S (r+M*x1)=(g*M))))) - L58
specialize linear_congruence_progression_bound_iff (M) - L59
specialize linear_congruence_progression_bound_iff (g) - L60
specialize linear_congruence_progression_bound_iff (r) - L61
specialize linear_congruence_progression_bound_iff (x1) - L62
apply linear_congruence_progression_bound_iff - L63
exact hr
22Separate the logical casesL64–64
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L64
cases hc
23Use earlier factsL65–71
Instantiate or apply named facts and discharge the corresponding proof obligations.
24Calculate and transport equalitiesL72–72
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L72
trans r+M*x1
25Use earlier factsL73–73
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L73
exact h_witness_right
26Calculate and transport equalitiesL74–74
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L74
trans M*x1+r
27Use earlier factsL75–75
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L75
apply add_comm
28Calculate and transport equalitiesL76–76
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L76
congr
29Use earlier factsL77–77
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L77
apply mul_comm
30Calculate and transport equalitiesL78–78
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L78
refl
Original exact command ledger · 78 lines
- 0001
intro M - 0002
intro g - 0003
intro r - 0004
intro x - 0005
intro hr - 0006
have hM0 : ~(M=0) - 0007
intro hz - 0008
have hbad : exists lcc_gap_residue_bad. lcc_gap_residue_bad+S (r)=(0) - 0009
rewrite <- hz - 0010
exact hr - 0011
have hs : S r=0 - 0012
specialize le_zero (S r) - 0013
apply le_zero - 0014
exact hbad - 0015
specialize succ_ne_zero r - 0016
apply succ_ne_zero - 0017
exact hs - 0018
split - 0019
intro h - 0020
cases h - 0021
have hq : exists q. x=q*M+r - 0022
specialize mod_eq_to_remainder_decomposition (M) - 0023
specialize mod_eq_to_remainder_decomposition (x) - 0024
specialize mod_eq_to_remainder_decomposition (r) - 0025
apply mod_eq_to_remainder_decomposition - 0026
exact hM0 - 0027
exact hr - 0028
exact h_right - 0029
cases hq - 0030
have he : x=r+M*x1 - 0031
trans x1*M+r - 0032
exact hq_witness - 0033
trans r+x1*M - 0034
apply add_comm - 0035
congr - 0036
refl - 0037
apply mul_comm - 0038
exists x1 - 0039
split - 0040
have hc : (((exists lcc_gap_residue_forward. lcc_gap_residue_forward+S (r+M*x1)=(g*M)) -> (exists lcc_gap_residue_forward_index. lcc_gap_residue_forward_index+S (x1)=(g))) /\ (((exists lcc_gap_residue_forward_index. lcc_gap_residue_forward_index+S (x1)=(g)) -> (exists lcc_gap_residue_forward. lcc_gap_residue_forward+S (r+M*x1)=(g*M))))) - 0041
specialize linear_congruence_progression_bound_iff (M) - 0042
specialize linear_congruence_progression_bound_iff (g) - 0043
specialize linear_congruence_progression_bound_iff (r) - 0044
specialize linear_congruence_progression_bound_iff (x1) - 0045
apply linear_congruence_progression_bound_iff - 0046
exact hr - 0047
cases hc - 0048
apply hc_left - 0049
rewrite <- he - 0050
exact h_left - 0051
exact he - 0052
intro h - 0053
cases h - 0054
cases h_witness - 0055
split - 0056
rewrite h_witness_right - 0057
have hc : (((exists lcc_gap_residue_backward. lcc_gap_residue_backward+S (r+M*x1)=(g*M)) -> (exists lcc_gap_residue_backward_index. lcc_gap_residue_backward_index+S (x1)=(g))) /\ (((exists lcc_gap_residue_backward_index. lcc_gap_residue_backward_index+S (x1)=(g)) -> (exists lcc_gap_residue_backward. lcc_gap_residue_backward+S (r+M*x1)=(g*M))))) - 0058
specialize linear_congruence_progression_bound_iff (M) - 0059
specialize linear_congruence_progression_bound_iff (g) - 0060
specialize linear_congruence_progression_bound_iff (r) - 0061
specialize linear_congruence_progression_bound_iff (x1) - 0062
apply linear_congruence_progression_bound_iff - 0063
exact hr - 0064
cases hc - 0065
apply hc_right - 0066
exact h_witness_left - 0067
specialize remainder_decomposition_to_mod_eq (M) - 0068
specialize remainder_decomposition_to_mod_eq (x) - 0069
specialize remainder_decomposition_to_mod_eq (x1) - 0070
specialize remainder_decomposition_to_mod_eq (r) - 0071
apply remainder_decomposition_to_mod_eq - 0072
trans r+M*x1 - 0073
exact h_witness_right - 0074
trans M*x1+r - 0075
apply add_comm - 0076
congr - 0077
apply mul_comm - 0078
refl