Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.
All coefficients retain the established highest-degree-first order. Trimming handles empty and all-zero prefixes; monic normalization requires a nonzero leading coefficient. Synthetic division has a nonempty input of length S n and a quotient of length n, unique in decoded values. Its coefficient recurrence, actual evaluation remainder and positive-degree drop are checked. General polynomial Euclidean division, gcd/Bezout, an arbitrary-convolution factor theorem, irreducible-polynomial existence and the full G091 prime-power-field endpoint remain open. These exact theorems are first admitted to Alpha v32; Stable remains unchanged.
Exact theorem in conservative defined notation
∀ p. ∀ ab. ∀ ac. ∀ l. Prime(p) → BetaPrefixInto(ab,ac,l,p) → ∃ x. ∃ y. FpCoefficientNegation(p,ab,ac,x,y,l)
Every linked abbreviation expands hygienically to the identical original native formula.
Definition DAG
Actual proof prerequisites
Complete tactic proof in conservative notation
All 91 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.
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
02Induction on lL6–7
03Construct an explicit witnessL8–9
04Use earlier factsL10–15
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L10
specialize prime_field_polynomial_negate_empty (p) - L11
specialize prime_field_polynomial_negate_empty (ab) - L12
specialize prime_field_polynomial_negate_empty (ac) - L13
specialize prime_field_polynomial_negate_empty (0) - L14
specialize prime_field_polynomial_negate_empty (0) - L15
apply prime_field_polynomial_negate_empty
05Fix variables and assumptionsL16–16
Work with arbitrary variables or the premises of the current implication.
- L16
intro ha
06Establish holdL17–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L17
have hold : ∃ rb. ∃ rc. FpCoefficientNegation(p,ab,ac,rb,rc,l)Definitions: FpCoefficientNegation(p,ab,ac,rb,rc,l)Original native command in the exact edition - L18
apply IH - L19
intro j - L20
intro hj - L21
specialize ha (j) - L22
apply ha - L23
specialize le_succ (S j) - L24
specialize le_succ (l) - L25
apply le_succ - L26
exact hj
07Separate the logical casesL27–28
08Establish hsource0L29–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply ha.
- L29
have hsource0 : ∃ a. BetaAt(ab,ac,l,a) ∧ Lt(a,p)Definitions: BetaAt(ab,ac,l,a)Lt(a,p)Original native command in the exact edition - L30
specialize ha (l) - L31
apply ha
09Construct an explicit witnessL32–32
Supply the displayed value, then prove that it has the required property.
- L32
exists 0
10Use earlier factsL33–33
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L33
apply zero_add
11Separate the logical casesL34–35
12Establish hvalueL36–41
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field negate exists.
- L36
have hvalue : ∃ r. FpAdd(p,x2,r,0)Definitions: FpAdd(p,x2,r,0)Original native command in the exact edition - L37
specialize prime_field_negate_exists (p) - L38
specialize prime_field_negate_exists (x2) - L39
apply prime_field_negate_exists - L40
exact hp - L41
exact hsource0_witness_right
13Separate the logical casesL42–42
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L42
cases hvalue
14Establish hnewL43–48
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta prefix extend.
- L43
have hnew : ∃ db. ∃ dc. BetaAt(db,dc,l,x3) ∧ (∀ y. ∀ z. Lt(y,l) → BetaAt(x,x1,y,z) → BetaAt(db,dc,y,z))Definitions: BetaAt(db,dc,l,x3)Lt(y,l)BetaAt(x,x1,y,z)BetaAt(db,dc,y,z)Original native command in the exact edition - L44
specialize beta_prefix_extend (l) - L45
specialize beta_prefix_extend (x) - L46
specialize beta_prefix_extend (x1) - L47
specialize beta_prefix_extend (x3) - L48
apply beta_prefix_extend
15Separate the logical casesL49–51
16Construct an explicit witnessL52–53
17Fix variables and assumptionsL54–55
18Establish hcaseL56–60
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
19Separate the logical casesL61–61
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L61
cases hcase
20Construct an explicit witnessL62–63
21Separate the logical casesL64–64
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L64
split
22Calculate and transport equalitiesL65–66
23Use earlier factsL67–67
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L67
exact hsource0_witness_left
24Separate the logical casesL68–68
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L68
split
25Calculate and transport equalitiesL69–70
26Use earlier factsL71–72
27Establish hpreviousL73–76
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hold witness witness.
- L73
have hprevious : ∃ v0. ∃ v1. BetaAt(ab,ac,j,v0) ∧ (BetaAt(x,x1,j,v1) ∧ FpAdd(p,v0,v1,0))Definitions: BetaAt(ab,ac,j,v0)BetaAt(x,x1,j,v1)FpAdd(p,v0,v1,0)Original native command in the exact edition - L74
specialize hold_witness_witness (j) - L75
apply hold_witness_witness - L76
exact hcase_right
28Separate the logical casesL77–80
29Construct an explicit witnessL81–82
30Separate the logical casesL83–83
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L83
split
31Use earlier factsL84–84
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L84
exact hprevious_witness_witness_left
32Separate the logical casesL85–85
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L85
split
33Use earlier factsL86–91
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original defined command ledger · 91 lines
- 0001
intro p - 0002
intro ab - 0003
intro ac - 0004
intro l - 0005
intro hp - 0006
induction l - 0007
intro ha - 0008
exists 0 - 0009
exists 0 - 0010
specialize prime_field_polynomial_negate_empty (p) - 0011
specialize prime_field_polynomial_negate_empty (ab) - 0012
specialize prime_field_polynomial_negate_empty (ac) - 0013
specialize prime_field_polynomial_negate_empty (0) - 0014
specialize prime_field_polynomial_negate_empty (0) - 0015
apply prime_field_polynomial_negate_empty - 0016
intro ha - 0017
have hold : ∃ rb. ∃ rc. FpCoefficientNegation(p,ab,ac,rb,rc,l) - 0018
apply IH - 0019
intro j - 0020
intro hj - 0021
specialize ha (j) - 0022
apply ha - 0023
specialize le_succ (S j) - 0024
specialize le_succ (l) - 0025
apply le_succ - 0026
exact hj - 0027
cases hold - 0028
cases hold_witness - 0029
have hsource0 : ∃ a. BetaAt(ab,ac,l,a) ∧ Lt(a,p) - 0030
specialize ha (l) - 0031
apply ha - 0032
exists 0 - 0033
apply zero_add - 0034
cases hsource0 - 0035
cases hsource0_witness - 0036
have hvalue : ∃ r. FpAdd(p,x2,r,0) - 0037
specialize prime_field_negate_exists (p) - 0038
specialize prime_field_negate_exists (x2) - 0039
apply prime_field_negate_exists - 0040
exact hp - 0041
exact hsource0_witness_right - 0042
cases hvalue - 0043
have hnew : ∃ db. ∃ dc. BetaAt(db,dc,l,x3) ∧ (∀ y. ∀ z. Lt(y,l) → BetaAt(x,x1,y,z) → BetaAt(db,dc,y,z)) - 0044
specialize beta_prefix_extend (l) - 0045
specialize beta_prefix_extend (x) - 0046
specialize beta_prefix_extend (x1) - 0047
specialize beta_prefix_extend (x3) - 0048
apply beta_prefix_extend - 0049
cases hnew - 0050
cases hnew_witness - 0051
cases hnew_witness_witness - 0052
exists x4 - 0053
exists x5 - 0054
intro j - 0055
intro hj - 0056
have hcase : j = l ∨ Lt(j,l) - 0057
specialize finite_lt_succ_eq_or_lt (l) - 0058
specialize finite_lt_succ_eq_or_lt (j) - 0059
apply finite_lt_succ_eq_or_lt - 0060
exact hj - 0061
cases hcase - 0062
exists x2 - 0063
exists x3 - 0064
split - 0065
rewrite hcase_left - 0066
rewrite hcase_left - 0067
exact hsource0_witness_left - 0068
split - 0069
rewrite hcase_left - 0070
rewrite hcase_left - 0071
exact hnew_witness_witness_left - 0072
exact hvalue_witness - 0073
have hprevious : ∃ v0. ∃ v1. BetaAt(ab,ac,j,v0) ∧ (BetaAt(x,x1,j,v1) ∧ FpAdd(p,v0,v1,0)) - 0074
specialize hold_witness_witness (j) - 0075
apply hold_witness_witness - 0076
exact hcase_right - 0077
cases hprevious - 0078
cases hprevious_witness - 0079
cases hprevious_witness_witness - 0080
cases hprevious_witness_witness_right - 0081
exists x6 - 0082
exists x7 - 0083
split - 0084
exact hprevious_witness_witness_left - 0085
split - 0086
specialize hnew_witness_witness_right (j) - 0087
specialize hnew_witness_witness_right (x7) - 0088
apply hnew_witness_witness_right - 0089
exact hcase_right - 0090
exact hprevious_witness_witness_right_left - 0091
exact hprevious_witness_witness_right_right