Exact expanded first-order arithmetic statement
forall n b c k L. (forall jt_divisor_bounddec_yes. (exists jt_gap_bounddec_yesbound. jt_gap_bounddec_yesbound+S (jt_divisor_bounddec_yes)=(L)) -> ((exists jt_factor_bounddec_yestestmodulus. (n)=(jt_divisor_bounddec_yes)*jt_factor_bounddec_yestestmodulus) -> (forall jt_index_bounddec_yestestcoordinates jt_value_bounddec_yestestcoordinates. (exists jt_gap_bounddec_yestestcoordinatesindex. jt_gap_bounddec_yestestcoordinatesindex+S (jt_index_bounddec_yestestcoordinates)=(k)) -> (((exists fs_h_jt_bounddec_yestestcoordinatesat. fs_h_jt_bounddec_yestestcoordinatesat + S (jt_value_bounddec_yestestcoordinates) = S ((S (jt_index_bounddec_yestestcoordinates)) * c)) /\ exists fs_q_jt_bounddec_yestestcoordinatesat. b = fs_q_jt_bounddec_yestestcoordinatesat * S ((S (jt_index_bounddec_yestestcoordinates)) * c) + (jt_value_bounddec_yestestcoordinates))) -> (exists jt_factor_bounddec_yestestcoordinatesdivides. (jt_value_bounddec_yestestcoordinates)=(jt_divisor_bounddec_yes)*jt_factor_bounddec_yestestcoordinatesdivides)) -> (jt_divisor_bounddec_yes)=1)) \/ ~(forall jt_divisor_bounddec_no. (exists jt_gap_bounddec_nobound. jt_gap_bounddec_nobound+S (jt_divisor_bounddec_no)=(L)) -> ((exists jt_factor_bounddec_notestmodulus. (n)=(jt_divisor_bounddec_no)*jt_factor_bounddec_notestmodulus) -> (forall jt_index_bounddec_notestcoordinates jt_value_bounddec_notestcoordinates. (exists jt_gap_bounddec_notestcoordinatesindex. jt_gap_bounddec_notestcoordinatesindex+S (jt_index_bounddec_notestcoordinates)=(k)) -> (((exists fs_h_jt_bounddec_notestcoordinatesat. fs_h_jt_bounddec_notestcoordinatesat + S (jt_value_bounddec_notestcoordinates) = S ((S (jt_index_bounddec_notestcoordinates)) * c)) /\ exists fs_q_jt_bounddec_notestcoordinatesat. b = fs_q_jt_bounddec_notestcoordinatesat * S ((S (jt_index_bounddec_notestcoordinates)) * c) + (jt_value_bounddec_notestcoordinates))) -> (exists jt_factor_bounddec_notestcoordinatesdivides. (jt_value_bounddec_notestcoordinates)=(jt_divisor_bounddec_no)*jt_factor_bounddec_notestcoordinatesdivides)) -> (jt_divisor_bounddec_no)=1))Constructive proof overview
Generated structural guide
A finite sweep decides the primitive common-divisor condition up to any natural bound.
The unchanged tactic script uses 6 declared prerequisites and contains 87 exact native proof lines.
Alpha v35 checked-use · first admitted v35 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
lt_not_le Alpha theorem; checked-use authorized zero_le Alpha theorem; checked-use authorized JT0013 jordan_tuple_divisor_test_decidable finite_lt_succ_eq_or_lt Alpha theorem; checked-use authorized le_refl Alpha theorem; checked-use authorized le_succ 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–4
02Induction on LL5–5
Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.
- L5
induction L
03Separate the logical casesL6–6
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L6
left
04Fix variables and assumptionsL7–10
05Separate the logical casesL11–11
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L11
exfalso
06Use earlier factsL12–17
07Establish htL18–24
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply jordan tuple divisor test decidable.
- L18
have ht : (Dvd(L,n) → JordanTupleAllDivisible(L,b,c,k) → L = 1) ∨ ¬(Dvd(L,n) → JordanTupleAllDivisible(L,b,c,k) → L = 1)Definitions: JordanTupleAllDivisibleDvd - L19
specialize jordan_tuple_divisor_test_decidable (n) - L20
specialize jordan_tuple_divisor_test_decidable (b) - L21
specialize jordan_tuple_divisor_test_decidable (c) - L22
specialize jordan_tuple_divisor_test_decidable (k) - L23
specialize jordan_tuple_divisor_test_decidable (L) - L24
apply jordan_tuple_divisor_test_decidable
08Separate the logical casesL25–27
09Fix variables and assumptionsL28–29
10Establish hcL30–34
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
11Separate the logical casesL35–35
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L35
cases hc
12Fix variables and assumptionsL36–37
13Establish heqL38–47
14Use earlier factsL48–51
15Calculate and transport equalitiesL52–52
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L52
trans L
16Use earlier factsL53–54
17Fix variables and assumptionsL55–56
18Use earlier factsL57–61
19Separate the logical casesL62–62
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L62
right
20Fix variables and assumptionsL63–63
Work with arbitrary variables or the premises of the current implication.
- L63
intro h
21Use earlier factsL64–64
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L64
apply ht_right
22Fix variables and assumptionsL65–66
23Use earlier factsL67–72
24Separate the logical casesL73–73
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L73
right
25Fix variables and assumptionsL74–74
Work with arbitrary variables or the premises of the current implication.
- L74
intro h
26Use earlier factsL75–75
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L75
apply IH_right
27Fix variables and assumptionsL76–79
Original exact command ledger · 87 lines
- 0001
intro n - 0002
intro b - 0003
intro c - 0004
intro k - 0005
induction L - 0006
left - 0007
intro d - 0008
intro hd - 0009
intro hdiv - 0010
intro hall - 0011
exfalso - 0012
specialize lt_not_le (d) - 0013
specialize lt_not_le (0) - 0014
apply lt_not_le - 0015
exact hd - 0016
specialize zero_le (d) - 0017
apply zero_le - 0018
have ht : ((exists jt_factor_boundedyesmodulus. (n)=(L)*jt_factor_boundedyesmodulus) -> (forall jt_index_boundedyescoordinates jt_value_boundedyescoordinates. (exists jt_gap_boundedyescoordinatesindex. jt_gap_boundedyescoordinatesindex+S (jt_index_boundedyescoordinates)=(k)) -> (((exists fs_h_jt_boundedyescoordinatesat. fs_h_jt_boundedyescoordinatesat + S (jt_value_boundedyescoordinates) = S ((S (jt_index_boundedyescoordinates)) * c)) /\ exists fs_q_jt_boundedyescoordinatesat. b = fs_q_jt_boundedyescoordinatesat * S ((S (jt_index_boundedyescoordinates)) * c) + (jt_value_boundedyescoordinates))) -> (exists jt_factor_boundedyescoordinatesdivides. (jt_value_boundedyescoordinates)=(L)*jt_factor_boundedyescoordinatesdivides)) -> (L)=1) \/ ~((exists jt_factor_boundednomodulus. (n)=(L)*jt_factor_boundednomodulus) -> (forall jt_index_boundednocoordinates jt_value_boundednocoordinates. (exists jt_gap_boundednocoordinatesindex. jt_gap_boundednocoordinatesindex+S (jt_index_boundednocoordinates)=(k)) -> (((exists fs_h_jt_boundednocoordinatesat. fs_h_jt_boundednocoordinatesat + S (jt_value_boundednocoordinates) = S ((S (jt_index_boundednocoordinates)) * c)) /\ exists fs_q_jt_boundednocoordinatesat. b = fs_q_jt_boundednocoordinatesat * S ((S (jt_index_boundednocoordinates)) * c) + (jt_value_boundednocoordinates))) -> (exists jt_factor_boundednocoordinatesdivides. (jt_value_boundednocoordinates)=(L)*jt_factor_boundednocoordinatesdivides)) -> (L)=1) - 0019
specialize jordan_tuple_divisor_test_decidable (n) - 0020
specialize jordan_tuple_divisor_test_decidable (b) - 0021
specialize jordan_tuple_divisor_test_decidable (c) - 0022
specialize jordan_tuple_divisor_test_decidable (k) - 0023
specialize jordan_tuple_divisor_test_decidable (L) - 0024
apply jordan_tuple_divisor_test_decidable - 0025
cases IH - 0026
cases ht - 0027
left - 0028
intro d - 0029
intro hd - 0030
have hc : d=L \/ (exists jt_gap_boundedcases. jt_gap_boundedcases+S (d)=(L)) - 0031
specialize finite_lt_succ_eq_or_lt (L) - 0032
specialize finite_lt_succ_eq_or_lt (d) - 0033
apply finite_lt_succ_eq_or_lt - 0034
exact hd - 0035
cases hc - 0036
intro hdiv - 0037
intro hall - 0038
have heq : L=1 - 0039
apply ht_left - 0040
rewrite <- hc_left - 0041
exact hdiv - 0042
intro i - 0043
intro a - 0044
intro hi - 0045
intro ha - 0046
rewrite <- hc_left - 0047
specialize hall (i) - 0048
specialize hall (a) - 0049
apply hall - 0050
exact hi - 0051
exact ha - 0052
trans L - 0053
exact hc_left - 0054
exact heq - 0055
intro hdiv - 0056
intro hall - 0057
specialize IH_left (d) - 0058
apply IH_left - 0059
exact hc_right - 0060
exact hdiv - 0061
exact hall - 0062
right - 0063
intro h - 0064
apply ht_right - 0065
intro hdiv - 0066
intro hall - 0067
specialize h (L) - 0068
apply h - 0069
specialize le_refl (S L) - 0070
apply le_refl - 0071
exact hdiv - 0072
exact hall - 0073
right - 0074
intro h - 0075
apply IH_right - 0076
intro d - 0077
intro hd - 0078
intro hdiv - 0079
intro hall - 0080
specialize h (d) - 0081
apply h - 0082
specialize le_succ (S d) - 0083
specialize le_succ (L) - 0084
apply le_succ - 0085
exact hd - 0086
exact hdiv - 0087
exact hall