PP001E

prime_field_polynomial_scale_distributes_over_add

Actual scalar multiplication distributes over actual coefficient addition, with code-independent output equality.

Alpha v34 checked-use · first admitted v31 · independently kernel and Lean verified; not Stable

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. ∀ k. ∀ ab. ∀ ac. ∀ bb. ∀ bc. ∀ sb. ∀ sc. ∀ xb. ∀ xc. ∀ yb. ∀ yc. ∀ ub. ∀ uc. ∀ vb. ∀ vc. ∀ l. FpPolyAdd(p,ab,ac,bb,bc,sb,sc,l)FpPolyScale(p,k,sb,sc,ub,uc,l)FpPolyScale(p,k,ab,ac,xb,xc,l)FpPolyScale(p,k,bb,bc,yb,yc,l)FpPolyAdd(p,xb,xc,yb,yc,vb,vc,l)BetaPrefixEqual(ub,uc,vb,vc,l)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall p k ab ac bb bc sb sc xb xc yb yc ub uc vb vc l. (forall pfp_index_distribute_sum. (exists pfa_gap_distribute_sumindex. pfa_gap_distribute_sumindex + S (pfp_index_distribute_sum) = (l)) -> exists pfp_left_distribute_sum pfp_right_distribute_sum pfp_value_distribute_sum. ((((exists ff_h_pfp_distribute_sumleft. ff_h_pfp_distribute_sumleft + S (pfp_left_distribute_sum) = S ((S (pfp_index_distribute_sum)) * ac)) /\ exists ff_q_pfp_distribute_sumleft. ab = ff_q_pfp_distribute_sumleft * S ((S (pfp_index_distribute_sum)) * ac) + (pfp_left_distribute_sum))) /\ (((((exists ff_h_pfp_distribute_sumright. ff_h_pfp_distribute_sumright + S (pfp_right_distribute_sum) = S ((S (pfp_index_distribute_sum)) * bc)) /\ exists ff_q_pfp_distribute_sumright. bb = ff_q_pfp_distribute_sumright * S ((S (pfp_index_distribute_sum)) * bc) + (pfp_right_distribute_sum))) /\ (((((exists ff_h_pfp_distribute_sumtarget. ff_h_pfp_distribute_sumtarget + S (pfp_value_distribute_sum) = S ((S (pfp_index_distribute_sum)) * sc)) /\ exists ff_q_pfp_distribute_sumtarget. sb = ff_q_pfp_distribute_sumtarget * S ((S (pfp_index_distribute_sum)) * sc) + (pfp_value_distribute_sum))) /\ ((((exists pfa_gap_distribute_sumoperationleft. pfa_gap_distribute_sumoperationleft + S (pfp_left_distribute_sum) = (p)) /\ (((exists pfa_gap_distribute_sumoperationright. pfa_gap_distribute_sumoperationright + S (pfp_right_distribute_sum) = (p)) /\ ((((exists pfa_gap_distribute_sumoperationresultbound. pfa_gap_distribute_sumoperationresultbound + S (pfp_value_distribute_sum) = (p)) /\ ((exists pfa_offset_left_distribute_sumoperationresultcongruence pfa_offset_right_distribute_sumoperationresultcongruence. ((pfp_left_distribute_sum) + (pfp_right_distribute_sum)) + (p) * pfa_offset_left_distribute_sumoperationresultcongruence = (pfp_value_distribute_sum) + (p) * pfa_offset_right_distribute_sumoperationresultcongruence)))))))))))))))) -> (((exists pfa_gap_distribute_leftscalar. pfa_gap_distribute_leftscalar + S (k) = (p)) /\ ((forall pfp_index_distribute_left. (exists pfa_gap_distribute_leftindex. pfa_gap_distribute_leftindex + S (pfp_index_distribute_left) = (l)) -> exists pfp_source_distribute_left pfp_value_distribute_left. ((((exists ff_h_pfp_distribute_leftsource. ff_h_pfp_distribute_leftsource + S (pfp_source_distribute_left) = S ((S (pfp_index_distribute_left)) * sc)) /\ exists ff_q_pfp_distribute_leftsource. sb = ff_q_pfp_distribute_leftsource * S ((S (pfp_index_distribute_left)) * sc) + (pfp_source_distribute_left))) /\ (((((exists ff_h_pfp_distribute_lefttarget. ff_h_pfp_distribute_lefttarget + S (pfp_value_distribute_left) = S ((S (pfp_index_distribute_left)) * uc)) /\ exists ff_q_pfp_distribute_lefttarget. ub = ff_q_pfp_distribute_lefttarget * S ((S (pfp_index_distribute_left)) * uc) + (pfp_value_distribute_left))) /\ ((((exists pfa_gap_distribute_leftoperationleft. pfa_gap_distribute_leftoperationleft + S (k) = (p)) /\ (((exists pfa_gap_distribute_leftoperationright. pfa_gap_distribute_leftoperationright + S (pfp_source_distribute_left) = (p)) /\ ((((exists pfa_gap_distribute_leftoperationresultbound. pfa_gap_distribute_leftoperationresultbound + S (pfp_value_distribute_left) = (p)) /\ ((exists pfa_offset_left_distribute_leftoperationresultcongruence pfa_offset_right_distribute_leftoperationresultcongruence. ((k) * (pfp_source_distribute_left)) + (p) * pfa_offset_left_distribute_leftoperationresultcongruence = (pfp_value_distribute_left) + (p) * pfa_offset_right_distribute_leftoperationresultcongruence))))))))))))))))) -> (((exists pfa_gap_distribute_ascalar. pfa_gap_distribute_ascalar + S (k) = (p)) /\ ((forall pfp_index_distribute_a. (exists pfa_gap_distribute_aindex. pfa_gap_distribute_aindex + S (pfp_index_distribute_a) = (l)) -> exists pfp_source_distribute_a pfp_value_distribute_a. ((((exists ff_h_pfp_distribute_asource. ff_h_pfp_distribute_asource + S (pfp_source_distribute_a) = S ((S (pfp_index_distribute_a)) * ac)) /\ exists ff_q_pfp_distribute_asource. ab = ff_q_pfp_distribute_asource * S ((S (pfp_index_distribute_a)) * ac) + (pfp_source_distribute_a))) /\ (((((exists ff_h_pfp_distribute_atarget. ff_h_pfp_distribute_atarget + S (pfp_value_distribute_a) = S ((S (pfp_index_distribute_a)) * xc)) /\ exists ff_q_pfp_distribute_atarget. xb = ff_q_pfp_distribute_atarget * S ((S (pfp_index_distribute_a)) * xc) + (pfp_value_distribute_a))) /\ ((((exists pfa_gap_distribute_aoperationleft. pfa_gap_distribute_aoperationleft + S (k) = (p)) /\ (((exists pfa_gap_distribute_aoperationright. pfa_gap_distribute_aoperationright + S (pfp_source_distribute_a) = (p)) /\ ((((exists pfa_gap_distribute_aoperationresultbound. pfa_gap_distribute_aoperationresultbound + S (pfp_value_distribute_a) = (p)) /\ ((exists pfa_offset_left_distribute_aoperationresultcongruence pfa_offset_right_distribute_aoperationresultcongruence. ((k) * (pfp_source_distribute_a)) + (p) * pfa_offset_left_distribute_aoperationresultcongruence = (pfp_value_distribute_a) + (p) * pfa_offset_right_distribute_aoperationresultcongruence))))))))))))))))) -> (((exists pfa_gap_distribute_bscalar. pfa_gap_distribute_bscalar + S (k) = (p)) /\ ((forall pfp_index_distribute_b. (exists pfa_gap_distribute_bindex. pfa_gap_distribute_bindex + S (pfp_index_distribute_b) = (l)) -> exists pfp_source_distribute_b pfp_value_distribute_b. ((((exists ff_h_pfp_distribute_bsource. ff_h_pfp_distribute_bsource + S (pfp_source_distribute_b) = S ((S (pfp_index_distribute_b)) * bc)) /\ exists ff_q_pfp_distribute_bsource. bb = ff_q_pfp_distribute_bsource * S ((S (pfp_index_distribute_b)) * bc) + (pfp_source_distribute_b))) /\ (((((exists ff_h_pfp_distribute_btarget. ff_h_pfp_distribute_btarget + S (pfp_value_distribute_b) = S ((S (pfp_index_distribute_b)) * yc)) /\ exists ff_q_pfp_distribute_btarget. yb = ff_q_pfp_distribute_btarget * S ((S (pfp_index_distribute_b)) * yc) + (pfp_value_distribute_b))) /\ ((((exists pfa_gap_distribute_boperationleft. pfa_gap_distribute_boperationleft + S (k) = (p)) /\ (((exists pfa_gap_distribute_boperationright. pfa_gap_distribute_boperationright + S (pfp_source_distribute_b) = (p)) /\ ((((exists pfa_gap_distribute_boperationresultbound. pfa_gap_distribute_boperationresultbound + S (pfp_value_distribute_b) = (p)) /\ ((exists pfa_offset_left_distribute_boperationresultcongruence pfa_offset_right_distribute_boperationresultcongruence. ((k) * (pfp_source_distribute_b)) + (p) * pfa_offset_left_distribute_boperationresultcongruence = (pfp_value_distribute_b) + (p) * pfa_offset_right_distribute_boperationresultcongruence))))))))))))))))) -> (forall pfp_index_distribute_right. (exists pfa_gap_distribute_rightindex. pfa_gap_distribute_rightindex + S (pfp_index_distribute_right) = (l)) -> exists pfp_left_distribute_right pfp_right_distribute_right pfp_value_distribute_right. ((((exists ff_h_pfp_distribute_rightleft. ff_h_pfp_distribute_rightleft + S (pfp_left_distribute_right) = S ((S (pfp_index_distribute_right)) * xc)) /\ exists ff_q_pfp_distribute_rightleft. xb = ff_q_pfp_distribute_rightleft * S ((S (pfp_index_distribute_right)) * xc) + (pfp_left_distribute_right))) /\ (((((exists ff_h_pfp_distribute_rightright. ff_h_pfp_distribute_rightright + S (pfp_right_distribute_right) = S ((S (pfp_index_distribute_right)) * yc)) /\ exists ff_q_pfp_distribute_rightright. yb = ff_q_pfp_distribute_rightright * S ((S (pfp_index_distribute_right)) * yc) + (pfp_right_distribute_right))) /\ (((((exists ff_h_pfp_distribute_righttarget. ff_h_pfp_distribute_righttarget + S (pfp_value_distribute_right) = S ((S (pfp_index_distribute_right)) * vc)) /\ exists ff_q_pfp_distribute_righttarget. vb = ff_q_pfp_distribute_righttarget * S ((S (pfp_index_distribute_right)) * vc) + (pfp_value_distribute_right))) /\ ((((exists pfa_gap_distribute_rightoperationleft. pfa_gap_distribute_rightoperationleft + S (pfp_left_distribute_right) = (p)) /\ (((exists pfa_gap_distribute_rightoperationright. pfa_gap_distribute_rightoperationright + S (pfp_right_distribute_right) = (p)) /\ ((((exists pfa_gap_distribute_rightoperationresultbound. pfa_gap_distribute_rightoperationresultbound + S (pfp_value_distribute_right) = (p)) /\ ((exists pfa_offset_left_distribute_rightoperationresultcongruence pfa_offset_right_distribute_rightoperationresultcongruence. ((pfp_left_distribute_right) + (pfp_right_distribute_right)) + (p) * pfa_offset_left_distribute_rightoperationresultcongruence = (pfp_value_distribute_right) + (p) * pfa_offset_right_distribute_rightoperationresultcongruence)))))))))))))))) -> (forall mdr_i_pfp_distribute_result mdr_a_pfp_distribute_result. (exists mdr_gap_pfp_distribute_resultb. mdr_gap_pfp_distribute_resultb + S (mdr_i_pfp_distribute_result) = (l)) -> (((exists ff_h_mdr_pfp_distribute_resulto. ff_h_mdr_pfp_distribute_resulto + S (mdr_a_pfp_distribute_result) = S ((S (mdr_i_pfp_distribute_result)) * uc)) /\ exists ff_q_mdr_pfp_distribute_resulto. ub = ff_q_mdr_pfp_distribute_resulto * S ((S (mdr_i_pfp_distribute_result)) * uc) + (mdr_a_pfp_distribute_result))) -> (((exists ff_h_mdr_pfp_distribute_resultn. ff_h_mdr_pfp_distribute_resultn + S (mdr_a_pfp_distribute_result) = S ((S (mdr_i_pfp_distribute_result)) * vc)) /\ exists ff_q_mdr_pfp_distribute_resultn. vb = ff_q_mdr_pfp_distribute_resultn * S ((S (mdr_i_pfp_distribute_result)) * vc) + (mdr_a_pfp_distribute_result))))

Complete tactic proof in conservative notation

All 157 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

157 script commands · 27 reading checkpoints · 7 local claims

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.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (2)
01Fix variables and assumptionsL1–10

Work with arbitrary variables or the premises of the current implication.

  1. L1
    intro p
  2. L2
    intro k
  3. L3
    intro ab
  4. L4
    intro ac
  5. L5
    intro bb
  6. L6
    intro bc
  7. L7
    intro sb
  8. L8
    intro sc
  9. L9
    intro xb
  10. L10
    intro xc
02Fix variables and assumptionsL11–20

Work with arbitrary variables or the premises of the current implication.

  1. L11
    intro yb
  2. L12
    intro yc
  3. L13
    intro ub
  4. L14
    intro uc
  5. L15
    intro vb
  6. L16
    intro vc
  7. L17
    intro l
  8. L18
    intro hsum
  9. L19
    intro hleft
  10. L20
    intro hfirst
03Fix variables and assumptionsL21–26

Work with arbitrary variables or the premises of the current implication.

  1. L21
    intro hsecond
  2. L22
    intro hright
  3. L23
    intro i
  4. L24
    intro r
  5. L25
    intro hi
  6. L26
    intro hr
04Establish entry_aL27–31

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L27
    have entry_a : ∃ z. BetaAt(ab,ac,i,z)Definitions: BetaAt(ab,ac,i,z)Original native command in the exact edition
  2. L28
    specialize beta_at_exists (ab)
  3. L29
    specialize beta_at_exists (ac)
  4. L30
    specialize beta_at_exists (i)
  5. L31
    apply beta_at_exists
05Separate the logical casesL32–32

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L32
    cases entry_a
06Establish entry_bL33–37

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L33
    have entry_b : ∃ z. BetaAt(bb,bc,i,z)Definitions: BetaAt(bb,bc,i,z)Original native command in the exact edition
  2. L34
    specialize beta_at_exists (bb)
  3. L35
    specialize beta_at_exists (bc)
  4. L36
    specialize beta_at_exists (i)
  5. L37
    apply beta_at_exists
07Separate the logical casesL38–38

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L38
    cases entry_b
08Establish entry_sL39–43

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L39
    have entry_s : ∃ z. BetaAt(sb,sc,i,z)Definitions: BetaAt(sb,sc,i,z)Original native command in the exact edition
  2. L40
    specialize beta_at_exists (sb)
  3. L41
    specialize beta_at_exists (sc)
  4. L42
    specialize beta_at_exists (i)
  5. L43
    apply beta_at_exists
09Separate the logical casesL44–44

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L44
    cases entry_s
10Establish entry_xL45–49

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L45
    have entry_x : ∃ z. BetaAt(xb,xc,i,z)Definitions: BetaAt(xb,xc,i,z)Original native command in the exact edition
  2. L46
    specialize beta_at_exists (xb)
  3. L47
    specialize beta_at_exists (xc)
  4. L48
    specialize beta_at_exists (i)
  5. L49
    apply beta_at_exists
11Separate the logical casesL50–50

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L50
    cases entry_x
12Establish entry_yL51–55

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L51
    have entry_y : ∃ z. BetaAt(yb,yc,i,z)Definitions: BetaAt(yb,yc,i,z)Original native command in the exact edition
  2. L52
    specialize beta_at_exists (yb)
  3. L53
    specialize beta_at_exists (yc)
  4. L54
    specialize beta_at_exists (i)
  5. L55
    apply beta_at_exists
13Separate the logical casesL56–56

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L56
    cases entry_y
14Establish entry_vL57–61

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at exists.

  1. L57
    have entry_v : ∃ z. BetaAt(vb,vc,i,z)Definitions: BetaAt(vb,vc,i,z)Original native command in the exact edition
  2. L58
    specialize beta_at_exists (vb)
  3. L59
    specialize beta_at_exists (vc)
  4. L60
    specialize beta_at_exists (i)
  5. L61
    apply beta_at_exists
15Separate the logical casesL62–62

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L62
    cases entry_v
16Establish heqL63–72

Establish this local claim before using it. It is not an additional assumption.

  1. L63
    have heq : r=x5
  2. L64
    specialize prime_field_left_distributive (p)
  3. L65
    specialize prime_field_left_distributive (k)
  4. L66
    specialize prime_field_left_distributive (x)
  5. L67
    specialize prime_field_left_distributive (x1)
  6. L68
    specialize prime_field_left_distributive (x2)
  7. L69
    specialize prime_field_left_distributive (x3)
  8. L70
    specialize prime_field_left_distributive (x4)
  9. L71
    specialize prime_field_left_distributive (r)
  10. L72
    specialize prime_field_left_distributive (x5)
17Use earlier factsL73–82

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L73
    apply prime_field_left_distributive
  2. L74
    specialize prime_field_polynomial_add_entry (p)
  3. L75
    specialize prime_field_polynomial_add_entry (ab)
  4. L76
    specialize prime_field_polynomial_add_entry (ac)
  5. L77
    specialize prime_field_polynomial_add_entry (bb)
  6. L78
    specialize prime_field_polynomial_add_entry (bc)
  7. L79
    specialize prime_field_polynomial_add_entry (sb)
  8. L80
    specialize prime_field_polynomial_add_entry (sc)
  9. L81
    specialize prime_field_polynomial_add_entry (l)
  10. L82
    specialize prime_field_polynomial_add_entry (i)
18Use earlier factsL83–92

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L83
    specialize prime_field_polynomial_add_entry (x)
  2. L84
    specialize prime_field_polynomial_add_entry (x1)
  3. L85
    specialize prime_field_polynomial_add_entry (x2)
  4. L86
    apply prime_field_polynomial_add_entry
  5. L87
    exact hsum
  6. L88
    exact hi
  7. L89
    exact entry_a_witness
  8. L90
    exact entry_b_witness
  9. L91
    exact entry_s_witness
  10. L92
    specialize prime_field_polynomial_scale_entry (p)
19Use earlier factsL93–102

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L93
    specialize prime_field_polynomial_scale_entry (k)
  2. L94
    specialize prime_field_polynomial_scale_entry (sb)
  3. L95
    specialize prime_field_polynomial_scale_entry (sc)
  4. L96
    specialize prime_field_polynomial_scale_entry (ub)
  5. L97
    specialize prime_field_polynomial_scale_entry (uc)
  6. L98
    specialize prime_field_polynomial_scale_entry (l)
  7. L99
    specialize prime_field_polynomial_scale_entry (i)
  8. L100
    specialize prime_field_polynomial_scale_entry (x2)
  9. L101
    specialize prime_field_polynomial_scale_entry (r)
  10. L102
    apply prime_field_polynomial_scale_entry
20Use earlier factsL103–112

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L103
    exact hleft
  2. L104
    exact hi
  3. L105
    exact entry_s_witness
  4. L106
    exact hr
  5. L107
    specialize prime_field_polynomial_scale_entry (p)
  6. L108
    specialize prime_field_polynomial_scale_entry (k)
  7. L109
    specialize prime_field_polynomial_scale_entry (ab)
  8. L110
    specialize prime_field_polynomial_scale_entry (ac)
  9. L111
    specialize prime_field_polynomial_scale_entry (xb)
  10. L112
    specialize prime_field_polynomial_scale_entry (xc)
21Use earlier factsL113–122

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L113
    specialize prime_field_polynomial_scale_entry (l)
  2. L114
    specialize prime_field_polynomial_scale_entry (i)
  3. L115
    specialize prime_field_polynomial_scale_entry (x)
  4. L116
    specialize prime_field_polynomial_scale_entry (x3)
  5. L117
    apply prime_field_polynomial_scale_entry
  6. L118
    exact hfirst
  7. L119
    exact hi
  8. L120
    exact entry_a_witness
  9. L121
    exact entry_x_witness
  10. L122
    specialize prime_field_polynomial_scale_entry (p)
22Use earlier factsL123–132

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L123
    specialize prime_field_polynomial_scale_entry (k)
  2. L124
    specialize prime_field_polynomial_scale_entry (bb)
  3. L125
    specialize prime_field_polynomial_scale_entry (bc)
  4. L126
    specialize prime_field_polynomial_scale_entry (yb)
  5. L127
    specialize prime_field_polynomial_scale_entry (yc)
  6. L128
    specialize prime_field_polynomial_scale_entry (l)
  7. L129
    specialize prime_field_polynomial_scale_entry (i)
  8. L130
    specialize prime_field_polynomial_scale_entry (x1)
  9. L131
    specialize prime_field_polynomial_scale_entry (x4)
  10. L132
    apply prime_field_polynomial_scale_entry
23Use earlier factsL133–142

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L133
    exact hsecond
  2. L134
    exact hi
  3. L135
    exact entry_b_witness
  4. L136
    exact entry_y_witness
  5. L137
    specialize prime_field_polynomial_add_entry (p)
  6. L138
    specialize prime_field_polynomial_add_entry (xb)
  7. L139
    specialize prime_field_polynomial_add_entry (xc)
  8. L140
    specialize prime_field_polynomial_add_entry (yb)
  9. L141
    specialize prime_field_polynomial_add_entry (yc)
  10. L142
    specialize prime_field_polynomial_add_entry (vb)
24Use earlier factsL143–152

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L143
    specialize prime_field_polynomial_add_entry (vc)
  2. L144
    specialize prime_field_polynomial_add_entry (l)
  3. L145
    specialize prime_field_polynomial_add_entry (i)
  4. L146
    specialize prime_field_polynomial_add_entry (x3)
  5. L147
    specialize prime_field_polynomial_add_entry (x4)
  6. L148
    specialize prime_field_polynomial_add_entry (x5)
  7. L149
    apply prime_field_polynomial_add_entry
  8. L150
    exact hright
  9. L151
    exact hi
  10. L152
    exact entry_x_witness
25Use earlier factsL153–154

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L153
    exact entry_y_witness
  2. L154
    exact entry_v_witness
26Calculate and transport equalitiesL155–156

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L155
    rewrite heq
  2. L156
    rewrite heq
27Use earlier factsL157–157

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L157
    exact entry_v_witness

Library-wide reading audit

Original defined command ledger · 157 lines
  1. 0001intro p
  2. 0002intro k
  3. 0003intro ab
  4. 0004intro ac
  5. 0005intro bb
  6. 0006intro bc
  7. 0007intro sb
  8. 0008intro sc
  9. 0009intro xb
  10. 0010intro xc
  11. 0011intro yb
  12. 0012intro yc
  13. 0013intro ub
  14. 0014intro uc
  15. 0015intro vb
  16. 0016intro vc
  17. 0017intro l
  18. 0018intro hsum
  19. 0019intro hleft
  20. 0020intro hfirst
  21. 0021intro hsecond
  22. 0022intro hright
  23. 0023intro i
  24. 0024intro r
  25. 0025intro hi
  26. 0026intro hr
  27. 0027have entry_a : ∃ z. BetaAt(ab,ac,i,z)
  28. 0028specialize beta_at_exists (ab)
  29. 0029specialize beta_at_exists (ac)
  30. 0030specialize beta_at_exists (i)
  31. 0031apply beta_at_exists
  32. 0032cases entry_a
  33. 0033have entry_b : ∃ z. BetaAt(bb,bc,i,z)
  34. 0034specialize beta_at_exists (bb)
  35. 0035specialize beta_at_exists (bc)
  36. 0036specialize beta_at_exists (i)
  37. 0037apply beta_at_exists
  38. 0038cases entry_b
  39. 0039have entry_s : ∃ z. BetaAt(sb,sc,i,z)
  40. 0040specialize beta_at_exists (sb)
  41. 0041specialize beta_at_exists (sc)
  42. 0042specialize beta_at_exists (i)
  43. 0043apply beta_at_exists
  44. 0044cases entry_s
  45. 0045have entry_x : ∃ z. BetaAt(xb,xc,i,z)
  46. 0046specialize beta_at_exists (xb)
  47. 0047specialize beta_at_exists (xc)
  48. 0048specialize beta_at_exists (i)
  49. 0049apply beta_at_exists
  50. 0050cases entry_x
  51. 0051have entry_y : ∃ z. BetaAt(yb,yc,i,z)
  52. 0052specialize beta_at_exists (yb)
  53. 0053specialize beta_at_exists (yc)
  54. 0054specialize beta_at_exists (i)
  55. 0055apply beta_at_exists
  56. 0056cases entry_y
  57. 0057have entry_v : ∃ z. BetaAt(vb,vc,i,z)
  58. 0058specialize beta_at_exists (vb)
  59. 0059specialize beta_at_exists (vc)
  60. 0060specialize beta_at_exists (i)
  61. 0061apply beta_at_exists
  62. 0062cases entry_v
  63. 0063have heq : r=x5
  64. 0064specialize prime_field_left_distributive (p)
  65. 0065specialize prime_field_left_distributive (k)
  66. 0066specialize prime_field_left_distributive (x)
  67. 0067specialize prime_field_left_distributive (x1)
  68. 0068specialize prime_field_left_distributive (x2)
  69. 0069specialize prime_field_left_distributive (x3)
  70. 0070specialize prime_field_left_distributive (x4)
  71. 0071specialize prime_field_left_distributive (r)
  72. 0072specialize prime_field_left_distributive (x5)
  73. 0073apply prime_field_left_distributive
  74. 0074specialize prime_field_polynomial_add_entry (p)
  75. 0075specialize prime_field_polynomial_add_entry (ab)
  76. 0076specialize prime_field_polynomial_add_entry (ac)
  77. 0077specialize prime_field_polynomial_add_entry (bb)
  78. 0078specialize prime_field_polynomial_add_entry (bc)
  79. 0079specialize prime_field_polynomial_add_entry (sb)
  80. 0080specialize prime_field_polynomial_add_entry (sc)
  81. 0081specialize prime_field_polynomial_add_entry (l)
  82. 0082specialize prime_field_polynomial_add_entry (i)
  83. 0083specialize prime_field_polynomial_add_entry (x)
  84. 0084specialize prime_field_polynomial_add_entry (x1)
  85. 0085specialize prime_field_polynomial_add_entry (x2)
  86. 0086apply prime_field_polynomial_add_entry
  87. 0087exact hsum
  88. 0088exact hi
  89. 0089exact entry_a_witness
  90. 0090exact entry_b_witness
  91. 0091exact entry_s_witness
  92. 0092specialize prime_field_polynomial_scale_entry (p)
  93. 0093specialize prime_field_polynomial_scale_entry (k)
  94. 0094specialize prime_field_polynomial_scale_entry (sb)
  95. 0095specialize prime_field_polynomial_scale_entry (sc)
  96. 0096specialize prime_field_polynomial_scale_entry (ub)
  97. 0097specialize prime_field_polynomial_scale_entry (uc)
  98. 0098specialize prime_field_polynomial_scale_entry (l)
  99. 0099specialize prime_field_polynomial_scale_entry (i)
  100. 0100specialize prime_field_polynomial_scale_entry (x2)
  101. 0101specialize prime_field_polynomial_scale_entry (r)
  102. 0102apply prime_field_polynomial_scale_entry
  103. 0103exact hleft
  104. 0104exact hi
  105. 0105exact entry_s_witness
  106. 0106exact hr
  107. 0107specialize prime_field_polynomial_scale_entry (p)
  108. 0108specialize prime_field_polynomial_scale_entry (k)
  109. 0109specialize prime_field_polynomial_scale_entry (ab)
  110. 0110specialize prime_field_polynomial_scale_entry (ac)
  111. 0111specialize prime_field_polynomial_scale_entry (xb)
  112. 0112specialize prime_field_polynomial_scale_entry (xc)
  113. 0113specialize prime_field_polynomial_scale_entry (l)
  114. 0114specialize prime_field_polynomial_scale_entry (i)
  115. 0115specialize prime_field_polynomial_scale_entry (x)
  116. 0116specialize prime_field_polynomial_scale_entry (x3)
  117. 0117apply prime_field_polynomial_scale_entry
  118. 0118exact hfirst
  119. 0119exact hi
  120. 0120exact entry_a_witness
  121. 0121exact entry_x_witness
  122. 0122specialize prime_field_polynomial_scale_entry (p)
  123. 0123specialize prime_field_polynomial_scale_entry (k)
  124. 0124specialize prime_field_polynomial_scale_entry (bb)
  125. 0125specialize prime_field_polynomial_scale_entry (bc)
  126. 0126specialize prime_field_polynomial_scale_entry (yb)
  127. 0127specialize prime_field_polynomial_scale_entry (yc)
  128. 0128specialize prime_field_polynomial_scale_entry (l)
  129. 0129specialize prime_field_polynomial_scale_entry (i)
  130. 0130specialize prime_field_polynomial_scale_entry (x1)
  131. 0131specialize prime_field_polynomial_scale_entry (x4)
  132. 0132apply prime_field_polynomial_scale_entry
  133. 0133exact hsecond
  134. 0134exact hi
  135. 0135exact entry_b_witness
  136. 0136exact entry_y_witness
  137. 0137specialize prime_field_polynomial_add_entry (p)
  138. 0138specialize prime_field_polynomial_add_entry (xb)
  139. 0139specialize prime_field_polynomial_add_entry (xc)
  140. 0140specialize prime_field_polynomial_add_entry (yb)
  141. 0141specialize prime_field_polynomial_add_entry (yc)
  142. 0142specialize prime_field_polynomial_add_entry (vb)
  143. 0143specialize prime_field_polynomial_add_entry (vc)
  144. 0144specialize prime_field_polynomial_add_entry (l)
  145. 0145specialize prime_field_polynomial_add_entry (i)
  146. 0146specialize prime_field_polynomial_add_entry (x3)
  147. 0147specialize prime_field_polynomial_add_entry (x4)
  148. 0148specialize prime_field_polynomial_add_entry (x5)
  149. 0149apply prime_field_polynomial_add_entry
  150. 0150exact hright
  151. 0151exact hi
  152. 0152exact entry_x_witness
  153. 0153exact entry_y_witness
  154. 0154exact entry_v_witness
  155. 0155rewrite heq
  156. 0156rewrite heq
  157. 0157exact entry_v_witness