Exact expanded first-order arithmetic statement
forall b c k B C D E j. (exists jt_index_listedyes jt_code_listedyes jt_scale_listedyes. ((exists jt_gap_listedyesindex. jt_gap_listedyesindex+S (jt_index_listedyes)=(j)) /\ (((((((exists fs_h_jt_listedyescode. fs_h_jt_listedyescode + S (jt_code_listedyes) = S ((S (jt_index_listedyes)) * C)) /\ exists fs_q_jt_listedyescode. B = fs_q_jt_listedyescode * S ((S (jt_index_listedyes)) * C) + (jt_code_listedyes))) /\ (((exists fs_h_jt_listedyesscale. fs_h_jt_listedyesscale + S (jt_scale_listedyes) = S ((S (jt_index_listedyes)) * E)) /\ exists fs_q_jt_listedyesscale. D = fs_q_jt_listedyesscale * S ((S (jt_index_listedyes)) * E) + (jt_scale_listedyes))))) /\ (forall jt_index_listedyesequal jt_left_listedyesequal jt_right_listedyesequal. (exists jt_gap_listedyesequalindex. jt_gap_listedyesequalindex+S (jt_index_listedyesequal)=(k)) -> (((exists fs_h_jt_listedyesequalleft. fs_h_jt_listedyesequalleft + S (jt_left_listedyesequal) = S ((S (jt_index_listedyesequal)) * c)) /\ exists fs_q_jt_listedyesequalleft. b = fs_q_jt_listedyesequalleft * S ((S (jt_index_listedyesequal)) * c) + (jt_left_listedyesequal))) -> (((exists fs_h_jt_listedyesequalright. fs_h_jt_listedyesequalright + S (jt_right_listedyesequal) = S ((S (jt_index_listedyesequal)) * jt_scale_listedyes)) /\ exists fs_q_jt_listedyesequalright. jt_code_listedyes = fs_q_jt_listedyesequalright * S ((S (jt_index_listedyesequal)) * jt_scale_listedyes) + (jt_right_listedyesequal))) -> jt_left_listedyesequal=jt_right_listedyesequal))))) \/ ~(exists jt_index_listedno jt_code_listedno jt_scale_listedno. ((exists jt_gap_listednoindex. jt_gap_listednoindex+S (jt_index_listedno)=(j)) /\ (((((((exists fs_h_jt_listednocode. fs_h_jt_listednocode + S (jt_code_listedno) = S ((S (jt_index_listedno)) * C)) /\ exists fs_q_jt_listednocode. B = fs_q_jt_listednocode * S ((S (jt_index_listedno)) * C) + (jt_code_listedno))) /\ (((exists fs_h_jt_listednoscale. fs_h_jt_listednoscale + S (jt_scale_listedno) = S ((S (jt_index_listedno)) * E)) /\ exists fs_q_jt_listednoscale. D = fs_q_jt_listednoscale * S ((S (jt_index_listedno)) * E) + (jt_scale_listedno))))) /\ (forall jt_index_listednoequal jt_left_listednoequal jt_right_listednoequal. (exists jt_gap_listednoequalindex. jt_gap_listednoequalindex+S (jt_index_listednoequal)=(k)) -> (((exists fs_h_jt_listednoequalleft. fs_h_jt_listednoequalleft + S (jt_left_listednoequal) = S ((S (jt_index_listednoequal)) * c)) /\ exists fs_q_jt_listednoequalleft. b = fs_q_jt_listednoequalleft * S ((S (jt_index_listednoequal)) * c) + (jt_left_listednoequal))) -> (((exists fs_h_jt_listednoequalright. fs_h_jt_listednoequalright + S (jt_right_listednoequal) = S ((S (jt_index_listednoequal)) * jt_scale_listedno)) /\ exists fs_q_jt_listednoequalright. jt_code_listedno = fs_q_jt_listednoequalright * S ((S (jt_index_listednoequal)) * jt_scale_listedno) + (jt_right_listednoequal))) -> jt_left_listednoequal=jt_right_listednoequal)))))Constructive proof overview
Generated structural guide
Finite list membership is decided by actual outer entries and coordinate equality.
The unchanged tactic script uses 7 declared prerequisites and contains 113 exact native proof lines.
Alpha v35 checked-use · first admitted v35 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
JT001A jordan_tuple_listed_empty JT001B jordan_tuple_listed_lift beta_at_exists Alpha theorem; checked-use authorized JT0019 jordan_tuple_equal_decidable le_refl Alpha theorem; checked-use authorized finite_lt_succ_eq_or_lt Alpha theorem; checked-use authorized beta_at_unique 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 (3)
01Fix variables and assumptionsL1–7
02Induction on jL8–8
Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.
- L8
induction j
03Separate the logical casesL9–9
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L9
right
04Fix variables and assumptionsL10–10
Work with arbitrary variables or the premises of the current implication.
- L10
intro hempty
05Use earlier factsL11–19
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L11
specialize jordan_tuple_listed_empty (b) - L12
specialize jordan_tuple_listed_empty (c) - L13
specialize jordan_tuple_listed_empty (k) - L14
specialize jordan_tuple_listed_empty (B) - L15
specialize jordan_tuple_listed_empty (C) - L16
specialize jordan_tuple_listed_empty (D) - L17
specialize jordan_tuple_listed_empty (E) - L18
apply jordan_tuple_listed_empty - L19
exact hempty
06Separate the logical casesL20–21
07Use earlier factsL22–31
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L22
specialize jordan_tuple_listed_lift (b) - L23
specialize jordan_tuple_listed_lift (c) - L24
specialize jordan_tuple_listed_lift (k) - L25
specialize jordan_tuple_listed_lift (B) - L26
specialize jordan_tuple_listed_lift (C) - L27
specialize jordan_tuple_listed_lift (D) - L28
specialize jordan_tuple_listed_lift (E) - L29
specialize jordan_tuple_listed_lift (j) - L30
apply jordan_tuple_listed_lift - L31
exact IH_left
08Establish hdL32–36
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.
- L32
have hd : exists d. ((exists fs_h_jt_listedlastcode. fs_h_jt_listedlastcode + S (d) = S ((S (j)) * C)) /\ exists fs_q_jt_listedlastcode. B = fs_q_jt_listedlastcode * S ((S (j)) * C) + (d)) - L33
specialize beta_at_exists (B) - L34
specialize beta_at_exists (C) - L35
specialize beta_at_exists (j) - L36
apply beta_at_exists
09Separate the logical casesL37–37
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L37
cases hd
10Establish heL38–42
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.
- L38
have he : exists e. ((exists fs_h_jt_listedlastscale. fs_h_jt_listedlastscale + S (e) = S ((S (j)) * E)) /\ exists fs_q_jt_listedlastscale. D = fs_q_jt_listedlastscale * S ((S (j)) * E) + (e)) - L39
specialize beta_at_exists (D) - L40
specialize beta_at_exists (E) - L41
specialize beta_at_exists (j) - L42
apply beta_at_exists
11Separate the logical casesL43–43
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L43
cases he
12Establish heqL44–50
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply jordan tuple equal decidable.
- L44
have heq : IntegerVectorZero(b,c,x,x1,k) ∨ ¬IntegerVectorZero(b,c,x,x1,k)Definitions: IntegerVectorZero - L45
specialize jordan_tuple_equal_decidable (b) - L46
specialize jordan_tuple_equal_decidable (c) - L47
specialize jordan_tuple_equal_decidable (x) - L48
specialize jordan_tuple_equal_decidable (x1) - L49
specialize jordan_tuple_equal_decidable (k) - L50
apply jordan_tuple_equal_decidable
13Separate the logical casesL51–52
14Construct an explicit witnessL53–55
15Separate the logical casesL56–56
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L56
split
16Use earlier factsL57–58
17Separate the logical casesL59–60
18Use earlier factsL61–63
19Separate the logical casesL64–64
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L64
right
20Fix variables and assumptionsL65–65
Work with arbitrary variables or the premises of the current implication.
- L65
intro h
21Separate the logical casesL66–70
22Establish hcL71–75
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
23Separate the logical casesL76–77
24Establish hdvalL78–87
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
- L78
have hdval : x3=x - L79
specialize beta_at_unique (B) - L80
specialize beta_at_unique (C) - L81
specialize beta_at_unique (j) - L82
specialize beta_at_unique (x3) - L83
specialize beta_at_unique (x) - L84
apply beta_at_unique - L85
rewrite hc_left at h_witness_witness_witness_right_left_left - L86
rewrite hc_left at h_witness_witness_witness_right_left_left - L87
exact h_witness_witness_witness_right_left_left
25Use earlier factsL88–88
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L88
exact hd_witness
26Establish hevalL89–98
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
- L89
have heval : x4=x1 - L90
specialize beta_at_unique (D) - L91
specialize beta_at_unique (E) - L92
specialize beta_at_unique (j) - L93
specialize beta_at_unique (x4) - L94
specialize beta_at_unique (x1) - L95
apply beta_at_unique - L96
rewrite hc_left at h_witness_witness_witness_right_left_right - L97
rewrite hc_left at h_witness_witness_witness_right_left_right - L98
exact h_witness_witness_witness_right_left_right
27Use earlier factsL99–100
28Calculate and transport equalitiesL101–103
29Use earlier factsL104–105
30Construct an explicit witnessL106–108
31Separate the logical casesL109–109
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L109
split
32Use earlier factsL110–110
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L110
exact hc_right
33Separate the logical casesL111–111
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L111
split
Original exact command ledger · 113 lines
- 0001
intro b - 0002
intro c - 0003
intro k - 0004
intro B - 0005
intro C - 0006
intro D - 0007
intro E - 0008
induction j - 0009
right - 0010
intro hempty - 0011
specialize jordan_tuple_listed_empty (b) - 0012
specialize jordan_tuple_listed_empty (c) - 0013
specialize jordan_tuple_listed_empty (k) - 0014
specialize jordan_tuple_listed_empty (B) - 0015
specialize jordan_tuple_listed_empty (C) - 0016
specialize jordan_tuple_listed_empty (D) - 0017
specialize jordan_tuple_listed_empty (E) - 0018
apply jordan_tuple_listed_empty - 0019
exact hempty - 0020
cases IH - 0021
left - 0022
specialize jordan_tuple_listed_lift (b) - 0023
specialize jordan_tuple_listed_lift (c) - 0024
specialize jordan_tuple_listed_lift (k) - 0025
specialize jordan_tuple_listed_lift (B) - 0026
specialize jordan_tuple_listed_lift (C) - 0027
specialize jordan_tuple_listed_lift (D) - 0028
specialize jordan_tuple_listed_lift (E) - 0029
specialize jordan_tuple_listed_lift (j) - 0030
apply jordan_tuple_listed_lift - 0031
exact IH_left - 0032
have hd : exists d. ((exists fs_h_jt_listedlastcode. fs_h_jt_listedlastcode + S (d) = S ((S (j)) * C)) /\ exists fs_q_jt_listedlastcode. B = fs_q_jt_listedlastcode * S ((S (j)) * C) + (d)) - 0033
specialize beta_at_exists (B) - 0034
specialize beta_at_exists (C) - 0035
specialize beta_at_exists (j) - 0036
apply beta_at_exists - 0037
cases hd - 0038
have he : exists e. ((exists fs_h_jt_listedlastscale. fs_h_jt_listedlastscale + S (e) = S ((S (j)) * E)) /\ exists fs_q_jt_listedlastscale. D = fs_q_jt_listedlastscale * S ((S (j)) * E) + (e)) - 0039
specialize beta_at_exists (D) - 0040
specialize beta_at_exists (E) - 0041
specialize beta_at_exists (j) - 0042
apply beta_at_exists - 0043
cases he - 0044
have heq : (forall jt_index_listedyes jt_left_listedyes jt_right_listedyes. (exists jt_gap_listedyesindex. jt_gap_listedyesindex+S (jt_index_listedyes)=(k)) -> (((exists fs_h_jt_listedyesleft. fs_h_jt_listedyesleft + S (jt_left_listedyes) = S ((S (jt_index_listedyes)) * c)) /\ exists fs_q_jt_listedyesleft. b = fs_q_jt_listedyesleft * S ((S (jt_index_listedyes)) * c) + (jt_left_listedyes))) -> (((exists fs_h_jt_listedyesright. fs_h_jt_listedyesright + S (jt_right_listedyes) = S ((S (jt_index_listedyes)) * x1)) /\ exists fs_q_jt_listedyesright. x = fs_q_jt_listedyesright * S ((S (jt_index_listedyes)) * x1) + (jt_right_listedyes))) -> jt_left_listedyes=jt_right_listedyes) \/ ~(forall jt_index_listedno jt_left_listedno jt_right_listedno. (exists jt_gap_listednoindex. jt_gap_listednoindex+S (jt_index_listedno)=(k)) -> (((exists fs_h_jt_listednoleft. fs_h_jt_listednoleft + S (jt_left_listedno) = S ((S (jt_index_listedno)) * c)) /\ exists fs_q_jt_listednoleft. b = fs_q_jt_listednoleft * S ((S (jt_index_listedno)) * c) + (jt_left_listedno))) -> (((exists fs_h_jt_listednoright. fs_h_jt_listednoright + S (jt_right_listedno) = S ((S (jt_index_listedno)) * x1)) /\ exists fs_q_jt_listednoright. x = fs_q_jt_listednoright * S ((S (jt_index_listedno)) * x1) + (jt_right_listedno))) -> jt_left_listedno=jt_right_listedno) - 0045
specialize jordan_tuple_equal_decidable (b) - 0046
specialize jordan_tuple_equal_decidable (c) - 0047
specialize jordan_tuple_equal_decidable (x) - 0048
specialize jordan_tuple_equal_decidable (x1) - 0049
specialize jordan_tuple_equal_decidable (k) - 0050
apply jordan_tuple_equal_decidable - 0051
cases heq - 0052
left - 0053
exists j - 0054
exists x - 0055
exists x1 - 0056
split - 0057
specialize le_refl (S j) - 0058
apply le_refl - 0059
split - 0060
split - 0061
exact hd_witness - 0062
exact he_witness - 0063
exact heq_left - 0064
right - 0065
intro h - 0066
cases h - 0067
cases h_witness - 0068
cases h_witness_witness - 0069
cases h_witness_witness_witness - 0070
cases h_witness_witness_witness_right - 0071
have hc : x2=j \/ (exists jt_gap_listedcase. jt_gap_listedcase+S (x2)=(j)) - 0072
specialize finite_lt_succ_eq_or_lt (j) - 0073
specialize finite_lt_succ_eq_or_lt (x2) - 0074
apply finite_lt_succ_eq_or_lt - 0075
exact h_witness_witness_witness_left - 0076
cases hc - 0077
cases h_witness_witness_witness_right_left - 0078
have hdval : x3=x - 0079
specialize beta_at_unique (B) - 0080
specialize beta_at_unique (C) - 0081
specialize beta_at_unique (j) - 0082
specialize beta_at_unique (x3) - 0083
specialize beta_at_unique (x) - 0084
apply beta_at_unique - 0085
rewrite hc_left at h_witness_witness_witness_right_left_left - 0086
rewrite hc_left at h_witness_witness_witness_right_left_left - 0087
exact h_witness_witness_witness_right_left_left - 0088
exact hd_witness - 0089
have heval : x4=x1 - 0090
specialize beta_at_unique (D) - 0091
specialize beta_at_unique (E) - 0092
specialize beta_at_unique (j) - 0093
specialize beta_at_unique (x4) - 0094
specialize beta_at_unique (x1) - 0095
apply beta_at_unique - 0096
rewrite hc_left at h_witness_witness_witness_right_left_right - 0097
rewrite hc_left at h_witness_witness_witness_right_left_right - 0098
exact h_witness_witness_witness_right_left_right - 0099
exact he_witness - 0100
apply heq_right - 0101
rewrite hdval at h_witness_witness_witness_right_right - 0102
rewrite heval at h_witness_witness_witness_right_right - 0103
rewrite heval at h_witness_witness_witness_right_right - 0104
exact h_witness_witness_witness_right_right - 0105
apply IH_right - 0106
exists x2 - 0107
exists x3 - 0108
exists x4 - 0109
split - 0110
exact hc_right - 0111
split - 0112
exact h_witness_witness_witness_right_left - 0113
exact h_witness_witness_witness_right_right