DV001D

divisor_mask_omitted_entry

Every actual mask explicitly has zero at index zero and at each nondivisor; the source value there is not constrained.

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.

A genuine divisor mask has S n entries, indexed zero through n, and forces its zeroth entry to zero regardless of F(0). Möbius values remain positive-domain only. This family constructs divisor sums and Möbius tables; cancellation and the full G007 endpoint are separately proved later in the same release.

Exact theorem in conservative defined notation

∀ F. ∀ n. ∀ l. ∀ M. ∀ d. DivisorMask(F,n,l,M)Le(d,l) → d = 0 ∨ ¬Dvd(d,n)ArithAt(M,d,0)

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

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall F n l M d. (((exists dst_positive_code_omit_masktable dst_positive_scale_omit_masktable dst_negative_code_omit_masktable dst_negative_scale_omit_masktable. (((M) = (((((dst_positive_code_omit_masktable) + (dst_positive_scale_omit_masktable)) * S ((dst_positive_code_omit_masktable) + (dst_positive_scale_omit_masktable)) + ((dst_positive_scale_omit_masktable) + (dst_positive_scale_omit_masktable))) + (((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) * S ((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) + ((dst_negative_scale_omit_masktable) + (dst_negative_scale_omit_masktable)))) * S ((((dst_positive_code_omit_masktable) + (dst_positive_scale_omit_masktable)) * S ((dst_positive_code_omit_masktable) + (dst_positive_scale_omit_masktable)) + ((dst_positive_scale_omit_masktable) + (dst_positive_scale_omit_masktable))) + (((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) * S ((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) + ((dst_negative_scale_omit_masktable) + (dst_negative_scale_omit_masktable)))) + ((((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) * S ((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) + ((dst_negative_scale_omit_masktable) + (dst_negative_scale_omit_masktable))) + (((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) * S ((dst_negative_code_omit_masktable) + (dst_negative_scale_omit_masktable)) + ((dst_negative_scale_omit_masktable) + (dst_negative_scale_omit_masktable)))))) /\ (forall dst_index_omit_masktable. (exists pvs_le_gap_omit_masktabledomain. pvs_le_gap_omit_masktabledomain + (dst_index_omit_masktable) = (l)) -> exists dst_positive_omit_masktable dst_negative_omit_masktable dst_value_omit_masktable. ((((exists ff_h_pvs_omit_masktableentrypositive. ff_h_pvs_omit_masktableentrypositive + S (dst_positive_omit_masktable) = S ((S (dst_index_omit_masktable)) * dst_positive_scale_omit_masktable)) /\ exists ff_q_pvs_omit_masktableentrypositive. dst_positive_code_omit_masktable = ff_q_pvs_omit_masktableentrypositive * S ((S (dst_index_omit_masktable)) * dst_positive_scale_omit_masktable) + (dst_positive_omit_masktable))) /\ (((((exists ff_h_pvs_omit_masktableentrynegative. ff_h_pvs_omit_masktableentrynegative + S (dst_negative_omit_masktable) = S ((S (dst_index_omit_masktable)) * dst_negative_scale_omit_masktable)) /\ exists ff_q_pvs_omit_masktableentrynegative. dst_negative_code_omit_masktable = ff_q_pvs_omit_masktableentrynegative * S ((S (dst_index_omit_masktable)) * dst_negative_scale_omit_masktable) + (dst_negative_omit_masktable))) /\ (exists ge_balance_positive_omit_masktableentryvalue ge_balance_negative_omit_masktableentryvalue. (((((dst_value_omit_masktable) = 2 * (ge_balance_positive_omit_masktableentryvalue) /\ (ge_balance_negative_omit_masktableentryvalue) = 0) \/ exists ge_signed_half_omit_masktableentryvaluedecode. (((dst_value_omit_masktable) = 2 * ge_signed_half_omit_masktableentryvaluedecode + 1 /\ (ge_balance_positive_omit_masktableentryvalue) = 0) /\ (ge_balance_negative_omit_masktableentryvalue) = S ge_signed_half_omit_masktableentryvaluedecode))) /\ ((dst_positive_omit_masktable) + ge_balance_negative_omit_masktableentryvalue = (dst_negative_omit_masktable) + ge_balance_positive_omit_masktableentryvalue))))))))) /\ (forall dm_index_omit_mask dm_value_omit_mask. (exists pvs_le_gap_omit_maskdomain. pvs_le_gap_omit_maskdomain + (dm_index_omit_mask) = (l)) -> (exists dst_positive_code_omit_masklookup dst_positive_scale_omit_masklookup dst_negative_code_omit_masklookup dst_negative_scale_omit_masklookup dst_positive_omit_masklookup dst_negative_omit_masklookup. (((M) = (((((dst_positive_code_omit_masklookup) + (dst_positive_scale_omit_masklookup)) * S ((dst_positive_code_omit_masklookup) + (dst_positive_scale_omit_masklookup)) + ((dst_positive_scale_omit_masklookup) + (dst_positive_scale_omit_masklookup))) + (((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) * S ((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) + ((dst_negative_scale_omit_masklookup) + (dst_negative_scale_omit_masklookup)))) * S ((((dst_positive_code_omit_masklookup) + (dst_positive_scale_omit_masklookup)) * S ((dst_positive_code_omit_masklookup) + (dst_positive_scale_omit_masklookup)) + ((dst_positive_scale_omit_masklookup) + (dst_positive_scale_omit_masklookup))) + (((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) * S ((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) + ((dst_negative_scale_omit_masklookup) + (dst_negative_scale_omit_masklookup)))) + ((((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) * S ((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) + ((dst_negative_scale_omit_masklookup) + (dst_negative_scale_omit_masklookup))) + (((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) * S ((dst_negative_code_omit_masklookup) + (dst_negative_scale_omit_masklookup)) + ((dst_negative_scale_omit_masklookup) + (dst_negative_scale_omit_masklookup)))))) /\ (((((exists ff_h_pvs_omit_masklookuppositive. ff_h_pvs_omit_masklookuppositive + S (dst_positive_omit_masklookup) = S ((S (dm_index_omit_mask)) * dst_positive_scale_omit_masklookup)) /\ exists ff_q_pvs_omit_masklookuppositive. dst_positive_code_omit_masklookup = ff_q_pvs_omit_masklookuppositive * S ((S (dm_index_omit_mask)) * dst_positive_scale_omit_masklookup) + (dst_positive_omit_masklookup))) /\ (((((exists ff_h_pvs_omit_masklookupnegative. ff_h_pvs_omit_masklookupnegative + S (dst_negative_omit_masklookup) = S ((S (dm_index_omit_mask)) * dst_negative_scale_omit_masklookup)) /\ exists ff_q_pvs_omit_masklookupnegative. dst_negative_code_omit_masklookup = ff_q_pvs_omit_masklookupnegative * S ((S (dm_index_omit_mask)) * dst_negative_scale_omit_masklookup) + (dst_negative_omit_masklookup))) /\ (exists ge_balance_positive_omit_masklookupvalue ge_balance_negative_omit_masklookupvalue. (((((dm_value_omit_mask) = 2 * (ge_balance_positive_omit_masklookupvalue) /\ (ge_balance_negative_omit_masklookupvalue) = 0) \/ exists ge_signed_half_omit_masklookupvaluedecode. (((dm_value_omit_mask) = 2 * ge_signed_half_omit_masklookupvaluedecode + 1 /\ (ge_balance_positive_omit_masklookupvalue) = 0) /\ (ge_balance_negative_omit_masklookupvalue) = S ge_signed_half_omit_masklookupvaluedecode))) /\ ((dst_positive_omit_masklookup) + ge_balance_negative_omit_masklookupvalue = (dst_negative_omit_masklookup) + ge_balance_positive_omit_masklookupvalue))))))))) -> ((((~((dm_index_omit_mask)=0)) /\ (exists dm_quotient_omit_maskentry. (((n)=(dm_index_omit_mask)*dm_quotient_omit_maskentry) /\ (exists dst_positive_code_omit_maskentryinput dst_positive_scale_omit_maskentryinput dst_negative_code_omit_maskentryinput dst_negative_scale_omit_maskentryinput dst_positive_omit_maskentryinput dst_negative_omit_maskentryinput. (((F) = (((((dst_positive_code_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput)) * S ((dst_positive_code_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput)) + ((dst_positive_scale_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput))) + (((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) * S ((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) + ((dst_negative_scale_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)))) * S ((((dst_positive_code_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput)) * S ((dst_positive_code_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput)) + ((dst_positive_scale_omit_maskentryinput) + (dst_positive_scale_omit_maskentryinput))) + (((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) * S ((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) + ((dst_negative_scale_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)))) + ((((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) * S ((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) + ((dst_negative_scale_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput))) + (((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) * S ((dst_negative_code_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)) + ((dst_negative_scale_omit_maskentryinput) + (dst_negative_scale_omit_maskentryinput)))))) /\ (((((exists ff_h_pvs_omit_maskentryinputpositive. ff_h_pvs_omit_maskentryinputpositive + S (dst_positive_omit_maskentryinput) = S ((S (dm_index_omit_mask)) * dst_positive_scale_omit_maskentryinput)) /\ exists ff_q_pvs_omit_maskentryinputpositive. dst_positive_code_omit_maskentryinput = ff_q_pvs_omit_maskentryinputpositive * S ((S (dm_index_omit_mask)) * dst_positive_scale_omit_maskentryinput) + (dst_positive_omit_maskentryinput))) /\ (((((exists ff_h_pvs_omit_maskentryinputnegative. ff_h_pvs_omit_maskentryinputnegative + S (dst_negative_omit_maskentryinput) = S ((S (dm_index_omit_mask)) * dst_negative_scale_omit_maskentryinput)) /\ exists ff_q_pvs_omit_maskentryinputnegative. dst_negative_code_omit_maskentryinput = ff_q_pvs_omit_maskentryinputnegative * S ((S (dm_index_omit_mask)) * dst_negative_scale_omit_maskentryinput) + (dst_negative_omit_maskentryinput))) /\ (exists ge_balance_positive_omit_maskentryinputvalue ge_balance_negative_omit_maskentryinputvalue. (((((dm_value_omit_mask) = 2 * (ge_balance_positive_omit_maskentryinputvalue) /\ (ge_balance_negative_omit_maskentryinputvalue) = 0) \/ exists ge_signed_half_omit_maskentryinputvaluedecode. (((dm_value_omit_mask) = 2 * ge_signed_half_omit_maskentryinputvaluedecode + 1 /\ (ge_balance_positive_omit_maskentryinputvalue) = 0) /\ (ge_balance_negative_omit_maskentryinputvalue) = S ge_signed_half_omit_maskentryinputvaluedecode))) /\ ((dst_positive_omit_maskentryinput) + ge_balance_negative_omit_maskentryinputvalue = (dst_negative_omit_maskentryinput) + ge_balance_positive_omit_maskentryinputvalue))))))))))))) \/ ((((dm_index_omit_mask)=0 \/ ~(exists pvs_factor_omit_maskentrynondivisor. (n) = (dm_index_omit_mask) * pvs_factor_omit_maskentrynondivisor)) /\ ((dm_value_omit_mask)=0))))))) -> (exists pvs_le_gap_omit_bound. pvs_le_gap_omit_bound + (d) = (l)) -> (d=0 \/ ~(exists pvs_factor_omit_reason. (n) = (d) * pvs_factor_omit_reason)) -> (exists dst_positive_code_omit_mask_entry dst_positive_scale_omit_mask_entry dst_negative_code_omit_mask_entry dst_negative_scale_omit_mask_entry dst_positive_omit_mask_entry dst_negative_omit_mask_entry. (((M) = (((((dst_positive_code_omit_mask_entry) + (dst_positive_scale_omit_mask_entry)) * S ((dst_positive_code_omit_mask_entry) + (dst_positive_scale_omit_mask_entry)) + ((dst_positive_scale_omit_mask_entry) + (dst_positive_scale_omit_mask_entry))) + (((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) * S ((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) + ((dst_negative_scale_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)))) * S ((((dst_positive_code_omit_mask_entry) + (dst_positive_scale_omit_mask_entry)) * S ((dst_positive_code_omit_mask_entry) + (dst_positive_scale_omit_mask_entry)) + ((dst_positive_scale_omit_mask_entry) + (dst_positive_scale_omit_mask_entry))) + (((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) * S ((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) + ((dst_negative_scale_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)))) + ((((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) * S ((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) + ((dst_negative_scale_omit_mask_entry) + (dst_negative_scale_omit_mask_entry))) + (((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) * S ((dst_negative_code_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)) + ((dst_negative_scale_omit_mask_entry) + (dst_negative_scale_omit_mask_entry)))))) /\ (((((exists ff_h_pvs_omit_mask_entrypositive. ff_h_pvs_omit_mask_entrypositive + S (dst_positive_omit_mask_entry) = S ((S (d)) * dst_positive_scale_omit_mask_entry)) /\ exists ff_q_pvs_omit_mask_entrypositive. dst_positive_code_omit_mask_entry = ff_q_pvs_omit_mask_entrypositive * S ((S (d)) * dst_positive_scale_omit_mask_entry) + (dst_positive_omit_mask_entry))) /\ (((((exists ff_h_pvs_omit_mask_entrynegative. ff_h_pvs_omit_mask_entrynegative + S (dst_negative_omit_mask_entry) = S ((S (d)) * dst_negative_scale_omit_mask_entry)) /\ exists ff_q_pvs_omit_mask_entrynegative. dst_negative_code_omit_mask_entry = ff_q_pvs_omit_mask_entrynegative * S ((S (d)) * dst_negative_scale_omit_mask_entry) + (dst_negative_omit_mask_entry))) /\ (exists ge_balance_positive_omit_mask_entryvalue ge_balance_negative_omit_mask_entryvalue. (((((0) = 2 * (ge_balance_positive_omit_mask_entryvalue) /\ (ge_balance_negative_omit_mask_entryvalue) = 0) \/ exists ge_signed_half_omit_mask_entryvaluedecode. (((0) = 2 * ge_signed_half_omit_mask_entryvaluedecode + 1 /\ (ge_balance_positive_omit_mask_entryvalue) = 0) /\ (ge_balance_negative_omit_mask_entryvalue) = S ge_signed_half_omit_mask_entryvaluedecode))) /\ ((dst_positive_omit_mask_entry) + ge_balance_negative_omit_mask_entryvalue = (dst_negative_omit_mask_entry) + ge_balance_positive_omit_mask_entryvalue)))))))))

Complete tactic proof in conservative notation

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

32 script commands · 8 reading checkpoints · 2 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 (1)
01Fix variables and assumptionsL1–8

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

  1. L1
    intro F
  2. L2
    intro n
  3. L3
    intro l
  4. L4
    intro M
  5. L5
    intro d
  6. L6
    intro hm
  7. L7
    intro hbound
  8. L8
    intro hc
02Separate the logical casesL9–9

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

  1. L9
    cases hm
03Establish huL10–16

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply divisor signed table lookup.

  1. L10
    have hu : ∃ u. ArithAt(M,d,u)Definitions: ArithAt(M,d,u)Original native command in the exact edition
  2. L11
    specialize divisor_signed_table_lookup (l)
  3. L12
    specialize divisor_signed_table_lookup (M)
  4. L13
    specialize divisor_signed_table_lookup (d)
  5. L14
    apply divisor_signed_table_lookup
  6. L15
    exact hm_left
  7. L16
    exact hbound
04Separate the logical casesL17–17

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

  1. L17
    cases hu
05Establish heqL18–27

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply divisor mask entry omitted value.

  1. L18
    have heq : x=0
  2. L19
    specialize divisor_mask_entry_omitted_value (F)
  3. L20
    specialize divisor_mask_entry_omitted_value (n)
  4. L21
    specialize divisor_mask_entry_omitted_value (d)
  5. L22
    specialize divisor_mask_entry_omitted_value (x)
  6. L23
    apply divisor_mask_entry_omitted_value
  7. L24
    exact hc
  8. L25
    specialize hm_right (d)
  9. L26
    specialize hm_right (x)
  10. L27
    apply hm_right
06Use earlier factsL28–29

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

  1. L28
    exact hbound
  2. L29
    exact hu_witness
07Calculate and transport equalitiesL30–31

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

  1. L30
    rewrite heq at hu_witness
  2. L31
    rewrite heq at hu_witness
08Use earlier factsL32–32

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

  1. L32
    exact hu_witness

Library-wide reading audit

Original defined command ledger · 32 lines
  1. 0001intro F
  2. 0002intro n
  3. 0003intro l
  4. 0004intro M
  5. 0005intro d
  6. 0006intro hm
  7. 0007intro hbound
  8. 0008intro hc
  9. 0009cases hm
  10. 0010have hu : ∃ u. ArithAt(M,d,u)
  11. 0011specialize divisor_signed_table_lookup (l)
  12. 0012specialize divisor_signed_table_lookup (M)
  13. 0013specialize divisor_signed_table_lookup (d)
  14. 0014apply divisor_signed_table_lookup
  15. 0015exact hm_left
  16. 0016exact hbound
  17. 0017cases hu
  18. 0018have heq : x=0
  19. 0019specialize divisor_mask_entry_omitted_value (F)
  20. 0020specialize divisor_mask_entry_omitted_value (n)
  21. 0021specialize divisor_mask_entry_omitted_value (d)
  22. 0022specialize divisor_mask_entry_omitted_value (x)
  23. 0023apply divisor_mask_entry_omitted_value
  24. 0024exact hc
  25. 0025specialize hm_right (d)
  26. 0026specialize hm_right (x)
  27. 0027apply hm_right
  28. 0028exact hbound
  29. 0029exact hu_witness
  30. 0030rewrite heq at hu_witness
  31. 0031rewrite heq at hu_witness
  32. 0032exact hu_witness