Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.
Length is representation length, not polynomial degree. Leading zeros and the empty zero polynomial are allowed; the canonical argument guard x<p also applies to the empty case. Evaluation is defined by actual field-operation steps, not an assumed residue invariant. Polynomial division, gcd, irreducibles and general prime-power extension fields remain open; this does not close G091.
Exact theorem in conservative defined notation
∀ p. ∀ b. ∀ c. ∀ d. ∀ e. ∀ t. ∀ l. ∀ n. ∀ r. Prime(p) → FpCoefficientReduction(p,b,c,d,e,l) → Horner(b,c,t,l,n) → FpHorner(p,d,e,t,l,r) → CanonicalModularResidue(p,n,r)
Every linked abbreviation expands hygienically to the identical original native formula.
Definition DAG
Actual proof prerequisites
Complete tactic proof in conservative notation
All 142 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 (4)
01Fix variables and assumptionsL1–7
02Induction on lL8–14
03Establish hnzeroL15–21
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval empty.
04Establish hrzeroL22–31
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner empty.
- L22
have hrzero : r=0 - L23
specialize prime_field_polynomial_horner_empty (p) - L24
specialize prime_field_polynomial_horner_empty (d) - L25
specialize prime_field_polynomial_horner_empty (e) - L26
specialize prime_field_polynomial_horner_empty (t) - L27
specialize prime_field_polynomial_horner_empty (r) - L28
apply prime_field_polynomial_horner_empty - L29
exact hr - L30
rewrite hnzero - L31
rewrite hrzero
05Calculate and transport equalitiesL32–32
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L32
rewrite hrzero
06Use earlier factsL33–38
Instantiate or apply named facts and discharge the corresponding proof obligations.
07Fix variables and assumptionsL39–44
08Establish hnsL45–52
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner eval successor decompose.
- L45
have hns : ∃ a. ∃ h. BetaAt(b,c,l,a) ∧ (Horner(b,c,t,l,h) ∧ n = h · t + a)Definitions: BetaAt(b,c,l,a)Horner(b,c,t,l,h)Original native command in the exact edition - L46
specialize beta_horner_eval_successor_decompose (b) - L47
specialize beta_horner_eval_successor_decompose (c) - L48
specialize beta_horner_eval_successor_decompose (t) - L49
specialize beta_horner_eval_successor_decompose (l) - L50
specialize beta_horner_eval_successor_decompose (n) - L51
apply beta_horner_eval_successor_decompose - L52
exact hn
09Separate the logical casesL53–56
10Establish hrsL57–65
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner successor decompose.
- L57
have hrs : ∃ a. ∃ h. ∃ k. BetaAt(d,e,l,a) ∧ (FpHorner(p,d,e,t,l,h) ∧ (FpMul(p,h,t,k) ∧ FpAdd(p,k,a,r)))Definitions: BetaAt(d,e,l,a)FpHorner(p,d,e,t,l,h)FpMul(p,h,t,k)FpAdd(p,k,a,r)Original native command in the exact edition - L58
specialize prime_field_polynomial_horner_successor_decompose (p) - L59
specialize prime_field_polynomial_horner_successor_decompose (d) - L60
specialize prime_field_polynomial_horner_successor_decompose (e) - L61
specialize prime_field_polynomial_horner_successor_decompose (t) - L62
specialize prime_field_polynomial_horner_successor_decompose (l) - L63
specialize prime_field_polynomial_horner_successor_decompose (r) - L64
apply prime_field_polynomial_horner_successor_decompose - L65
exact hr
11Separate the logical casesL66–71
12Establish hcoefficientL72–81
Establish this local claim before using it. It is not an additional assumption.
- L72
have hcoefficient : CanonicalModularResidue(p,x,x2)Definitions: CanonicalModularResidue(p,x,x2)Original native command in the exact edition - L73
specialize prime_field_polynomial_normalization_entry (p) - L74
specialize prime_field_polynomial_normalization_entry (b) - L75
specialize prime_field_polynomial_normalization_entry (c) - L76
specialize prime_field_polynomial_normalization_entry (d) - L77
specialize prime_field_polynomial_normalization_entry (e) - L78
specialize prime_field_polynomial_normalization_entry (S l) - L79
specialize prime_field_polynomial_normalization_entry (l) - L80
specialize prime_field_polynomial_normalization_entry (x) - L81
specialize prime_field_polynomial_normalization_entry (x2)
13Use earlier factsL82–83
14Construct an explicit witnessL84–84
Supply the displayed value, then prove that it has the required property.
- L84
exists 0
15Use earlier factsL85–87
16Establish hpreviousL88–97
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
17Use earlier factsL98–102
18Establish hboundsL103–111
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner input bounds.
- L103
have hbounds : Lt(t,p) ∧ BetaPrefixInto(d,e,l,p)Definitions: Lt(t,p)BetaPrefixInto(d,e,l,p)Original native command in the exact edition - L104
specialize prime_field_polynomial_horner_input_bounds (p) - L105
specialize prime_field_polynomial_horner_input_bounds (d) - L106
specialize prime_field_polynomial_horner_input_bounds (e) - L107
specialize prime_field_polynomial_horner_input_bounds (t) - L108
specialize prime_field_polynomial_horner_input_bounds (l) - L109
specialize prime_field_polynomial_horner_input_bounds (x3) - L110
apply prime_field_polynomial_horner_input_bounds - L111
exact hrs_witness_witness_witness_right_left
19Separate the logical casesL112–112
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L112
cases hbounds
20Establish hproductL113–122
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field residue multiply.
- L113
have hproduct : CanonicalModularResidue(p,x1 · t,x4)Definitions: CanonicalModularResidue(p,x1 · t,x4)Original native command in the exact edition - L114
specialize prime_field_residue_multiply (p) - L115
specialize prime_field_residue_multiply (x1) - L116
specialize prime_field_residue_multiply (t) - L117
specialize prime_field_residue_multiply (x3) - L118
specialize prime_field_residue_multiply (t) - L119
specialize prime_field_residue_multiply (x4) - L120
apply prime_field_residue_multiply - L121
exact hprevious - L122
specialize prime_field_residue_reflexive (p)
21Use earlier factsL123–132
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L123
specialize prime_field_residue_reflexive (t) - L124
apply prime_field_residue_reflexive - L125
exact hbounds_left - L126
exact hrs_witness_witness_witness_right_right_left - L127
specialize prime_field_residue_input_equal (p) - L128
specialize prime_field_residue_input_equal (n) - L129
specialize prime_field_residue_input_equal (x1*t+x) - L130
specialize prime_field_residue_input_equal (r) - L131
apply prime_field_residue_input_equal - L132
exact hns_witness_witness_right_right
22Use earlier factsL133–142
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L133
specialize prime_field_residue_add (p) - L134
specialize prime_field_residue_add (x1*t) - L135
specialize prime_field_residue_add (x) - L136
specialize prime_field_residue_add (x4) - L137
specialize prime_field_residue_add (x2) - L138
specialize prime_field_residue_add (r) - L139
apply prime_field_residue_add - L140
exact hproduct - L141
exact hcoefficient - L142
exact hrs_witness_witness_witness_right_right_right
Original defined command ledger · 142 lines
- 0001
intro p - 0002
intro b - 0003
intro c - 0004
intro d - 0005
intro e - 0006
intro t - 0007
intro l - 0008
induction l - 0009
intro n - 0010
intro r - 0011
intro hp - 0012
intro hred - 0013
intro hn - 0014
intro hr - 0015
have hnzero : n=0 - 0016
specialize beta_horner_eval_empty (b) - 0017
specialize beta_horner_eval_empty (c) - 0018
specialize beta_horner_eval_empty (t) - 0019
specialize beta_horner_eval_empty (n) - 0020
apply beta_horner_eval_empty - 0021
exact hn - 0022
have hrzero : r=0 - 0023
specialize prime_field_polynomial_horner_empty (p) - 0024
specialize prime_field_polynomial_horner_empty (d) - 0025
specialize prime_field_polynomial_horner_empty (e) - 0026
specialize prime_field_polynomial_horner_empty (t) - 0027
specialize prime_field_polynomial_horner_empty (r) - 0028
apply prime_field_polynomial_horner_empty - 0029
exact hr - 0030
rewrite hnzero - 0031
rewrite hrzero - 0032
rewrite hrzero - 0033
specialize prime_field_residue_reflexive (p) - 0034
specialize prime_field_residue_reflexive (0) - 0035
apply prime_field_residue_reflexive - 0036
specialize prime_field_zero_below_prime (p) - 0037
apply prime_field_zero_below_prime - 0038
exact hp - 0039
intro n - 0040
intro r - 0041
intro hp - 0042
intro hred - 0043
intro hn - 0044
intro hr - 0045
have hns : ∃ a. ∃ h. BetaAt(b,c,l,a) ∧ (Horner(b,c,t,l,h) ∧ n = h · t + a) - 0046
specialize beta_horner_eval_successor_decompose (b) - 0047
specialize beta_horner_eval_successor_decompose (c) - 0048
specialize beta_horner_eval_successor_decompose (t) - 0049
specialize beta_horner_eval_successor_decompose (l) - 0050
specialize beta_horner_eval_successor_decompose (n) - 0051
apply beta_horner_eval_successor_decompose - 0052
exact hn - 0053
cases hns - 0054
cases hns_witness - 0055
cases hns_witness_witness - 0056
cases hns_witness_witness_right - 0057
have hrs : ∃ a. ∃ h. ∃ k. BetaAt(d,e,l,a) ∧ (FpHorner(p,d,e,t,l,h) ∧ (FpMul(p,h,t,k) ∧ FpAdd(p,k,a,r))) - 0058
specialize prime_field_polynomial_horner_successor_decompose (p) - 0059
specialize prime_field_polynomial_horner_successor_decompose (d) - 0060
specialize prime_field_polynomial_horner_successor_decompose (e) - 0061
specialize prime_field_polynomial_horner_successor_decompose (t) - 0062
specialize prime_field_polynomial_horner_successor_decompose (l) - 0063
specialize prime_field_polynomial_horner_successor_decompose (r) - 0064
apply prime_field_polynomial_horner_successor_decompose - 0065
exact hr - 0066
cases hrs - 0067
cases hrs_witness - 0068
cases hrs_witness_witness - 0069
cases hrs_witness_witness_witness - 0070
cases hrs_witness_witness_witness_right - 0071
cases hrs_witness_witness_witness_right_right - 0072
have hcoefficient : CanonicalModularResidue(p,x,x2) - 0073
specialize prime_field_polynomial_normalization_entry (p) - 0074
specialize prime_field_polynomial_normalization_entry (b) - 0075
specialize prime_field_polynomial_normalization_entry (c) - 0076
specialize prime_field_polynomial_normalization_entry (d) - 0077
specialize prime_field_polynomial_normalization_entry (e) - 0078
specialize prime_field_polynomial_normalization_entry (S l) - 0079
specialize prime_field_polynomial_normalization_entry (l) - 0080
specialize prime_field_polynomial_normalization_entry (x) - 0081
specialize prime_field_polynomial_normalization_entry (x2) - 0082
apply prime_field_polynomial_normalization_entry - 0083
exact hred - 0084
exists 0 - 0085
apply zero_add - 0086
exact hns_witness_witness_left - 0087
exact hrs_witness_witness_witness_left - 0088
have hprevious : CanonicalModularResidue(p,x1,x3) - 0089
specialize IH (x1) - 0090
specialize IH (x3) - 0091
apply IH - 0092
exact hp - 0093
intro i - 0094
intro hi - 0095
specialize hred (i) - 0096
apply hred - 0097
specialize le_succ (S i) - 0098
specialize le_succ (l) - 0099
apply le_succ - 0100
exact hi - 0101
exact hns_witness_witness_right_left - 0102
exact hrs_witness_witness_witness_right_left - 0103
have hbounds : Lt(t,p) ∧ BetaPrefixInto(d,e,l,p) - 0104
specialize prime_field_polynomial_horner_input_bounds (p) - 0105
specialize prime_field_polynomial_horner_input_bounds (d) - 0106
specialize prime_field_polynomial_horner_input_bounds (e) - 0107
specialize prime_field_polynomial_horner_input_bounds (t) - 0108
specialize prime_field_polynomial_horner_input_bounds (l) - 0109
specialize prime_field_polynomial_horner_input_bounds (x3) - 0110
apply prime_field_polynomial_horner_input_bounds - 0111
exact hrs_witness_witness_witness_right_left - 0112
cases hbounds - 0113
have hproduct : CanonicalModularResidue(p,x1 · t,x4) - 0114
specialize prime_field_residue_multiply (p) - 0115
specialize prime_field_residue_multiply (x1) - 0116
specialize prime_field_residue_multiply (t) - 0117
specialize prime_field_residue_multiply (x3) - 0118
specialize prime_field_residue_multiply (t) - 0119
specialize prime_field_residue_multiply (x4) - 0120
apply prime_field_residue_multiply - 0121
exact hprevious - 0122
specialize prime_field_residue_reflexive (p) - 0123
specialize prime_field_residue_reflexive (t) - 0124
apply prime_field_residue_reflexive - 0125
exact hbounds_left - 0126
exact hrs_witness_witness_witness_right_right_left - 0127
specialize prime_field_residue_input_equal (p) - 0128
specialize prime_field_residue_input_equal (n) - 0129
specialize prime_field_residue_input_equal (x1*t+x) - 0130
specialize prime_field_residue_input_equal (r) - 0131
apply prime_field_residue_input_equal - 0132
exact hns_witness_witness_right_right - 0133
specialize prime_field_residue_add (p) - 0134
specialize prime_field_residue_add (x1*t) - 0135
specialize prime_field_residue_add (x) - 0136
specialize prime_field_residue_add (x4) - 0137
specialize prime_field_residue_add (x2) - 0138
specialize prime_field_residue_add (r) - 0139
apply prime_field_residue_add - 0140
exact hproduct - 0141
exact hcoefficient - 0142
exact hrs_witness_witness_witness_right_right_right