DV0015

divisor_mask_entry_quotient_input

At a witnessed positive divisor, a mask value is genuinely the input value, not a value attached to an unspecified quotient.

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. ∀ d. ∀ q. ∀ z. ¬d = 0 → n = d · q → DivisorMaskEntry(F,n,d,z)ArithAt(F,d,z)

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

Definition DAG

Actual proof prerequisites

none
Original expanded first-order statement
forall F n d q z. ~(d=0) -> n=d*q -> ((((~((d)=0)) /\ (exists dm_quotient_read_mask. (((n)=(d)*dm_quotient_read_mask) /\ (exists dst_positive_code_read_maskinput dst_positive_scale_read_maskinput dst_negative_code_read_maskinput dst_negative_scale_read_maskinput dst_positive_read_maskinput dst_negative_read_maskinput. (((F) = (((((dst_positive_code_read_maskinput) + (dst_positive_scale_read_maskinput)) * S ((dst_positive_code_read_maskinput) + (dst_positive_scale_read_maskinput)) + ((dst_positive_scale_read_maskinput) + (dst_positive_scale_read_maskinput))) + (((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) * S ((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) + ((dst_negative_scale_read_maskinput) + (dst_negative_scale_read_maskinput)))) * S ((((dst_positive_code_read_maskinput) + (dst_positive_scale_read_maskinput)) * S ((dst_positive_code_read_maskinput) + (dst_positive_scale_read_maskinput)) + ((dst_positive_scale_read_maskinput) + (dst_positive_scale_read_maskinput))) + (((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) * S ((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) + ((dst_negative_scale_read_maskinput) + (dst_negative_scale_read_maskinput)))) + ((((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) * S ((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) + ((dst_negative_scale_read_maskinput) + (dst_negative_scale_read_maskinput))) + (((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) * S ((dst_negative_code_read_maskinput) + (dst_negative_scale_read_maskinput)) + ((dst_negative_scale_read_maskinput) + (dst_negative_scale_read_maskinput)))))) /\ (((((exists ff_h_pvs_read_maskinputpositive. ff_h_pvs_read_maskinputpositive + S (dst_positive_read_maskinput) = S ((S (d)) * dst_positive_scale_read_maskinput)) /\ exists ff_q_pvs_read_maskinputpositive. dst_positive_code_read_maskinput = ff_q_pvs_read_maskinputpositive * S ((S (d)) * dst_positive_scale_read_maskinput) + (dst_positive_read_maskinput))) /\ (((((exists ff_h_pvs_read_maskinputnegative. ff_h_pvs_read_maskinputnegative + S (dst_negative_read_maskinput) = S ((S (d)) * dst_negative_scale_read_maskinput)) /\ exists ff_q_pvs_read_maskinputnegative. dst_negative_code_read_maskinput = ff_q_pvs_read_maskinputnegative * S ((S (d)) * dst_negative_scale_read_maskinput) + (dst_negative_read_maskinput))) /\ (exists ge_balance_positive_read_maskinputvalue ge_balance_negative_read_maskinputvalue. (((((z) = 2 * (ge_balance_positive_read_maskinputvalue) /\ (ge_balance_negative_read_maskinputvalue) = 0) \/ exists ge_signed_half_read_maskinputvaluedecode. (((z) = 2 * ge_signed_half_read_maskinputvaluedecode + 1 /\ (ge_balance_positive_read_maskinputvalue) = 0) /\ (ge_balance_negative_read_maskinputvalue) = S ge_signed_half_read_maskinputvaluedecode))) /\ ((dst_positive_read_maskinput) + ge_balance_negative_read_maskinputvalue = (dst_negative_read_maskinput) + ge_balance_positive_read_maskinputvalue))))))))))))) \/ ((((d)=0 \/ ~(exists pvs_factor_read_masknondivisor. (n) = (d) * pvs_factor_read_masknondivisor)) /\ ((z)=0)))) -> (exists dst_positive_code_read_input dst_positive_scale_read_input dst_negative_code_read_input dst_negative_scale_read_input dst_positive_read_input dst_negative_read_input. (((F) = (((((dst_positive_code_read_input) + (dst_positive_scale_read_input)) * S ((dst_positive_code_read_input) + (dst_positive_scale_read_input)) + ((dst_positive_scale_read_input) + (dst_positive_scale_read_input))) + (((dst_negative_code_read_input) + (dst_negative_scale_read_input)) * S ((dst_negative_code_read_input) + (dst_negative_scale_read_input)) + ((dst_negative_scale_read_input) + (dst_negative_scale_read_input)))) * S ((((dst_positive_code_read_input) + (dst_positive_scale_read_input)) * S ((dst_positive_code_read_input) + (dst_positive_scale_read_input)) + ((dst_positive_scale_read_input) + (dst_positive_scale_read_input))) + (((dst_negative_code_read_input) + (dst_negative_scale_read_input)) * S ((dst_negative_code_read_input) + (dst_negative_scale_read_input)) + ((dst_negative_scale_read_input) + (dst_negative_scale_read_input)))) + ((((dst_negative_code_read_input) + (dst_negative_scale_read_input)) * S ((dst_negative_code_read_input) + (dst_negative_scale_read_input)) + ((dst_negative_scale_read_input) + (dst_negative_scale_read_input))) + (((dst_negative_code_read_input) + (dst_negative_scale_read_input)) * S ((dst_negative_code_read_input) + (dst_negative_scale_read_input)) + ((dst_negative_scale_read_input) + (dst_negative_scale_read_input)))))) /\ (((((exists ff_h_pvs_read_inputpositive. ff_h_pvs_read_inputpositive + S (dst_positive_read_input) = S ((S (d)) * dst_positive_scale_read_input)) /\ exists ff_q_pvs_read_inputpositive. dst_positive_code_read_input = ff_q_pvs_read_inputpositive * S ((S (d)) * dst_positive_scale_read_input) + (dst_positive_read_input))) /\ (((((exists ff_h_pvs_read_inputnegative. ff_h_pvs_read_inputnegative + S (dst_negative_read_input) = S ((S (d)) * dst_negative_scale_read_input)) /\ exists ff_q_pvs_read_inputnegative. dst_negative_code_read_input = ff_q_pvs_read_inputnegative * S ((S (d)) * dst_negative_scale_read_input) + (dst_negative_read_input))) /\ (exists ge_balance_positive_read_inputvalue ge_balance_negative_read_inputvalue. (((((z) = 2 * (ge_balance_positive_read_inputvalue) /\ (ge_balance_negative_read_inputvalue) = 0) \/ exists ge_signed_half_read_inputvaluedecode. (((z) = 2 * ge_signed_half_read_inputvaluedecode + 1 /\ (ge_balance_positive_read_inputvalue) = 0) /\ (ge_balance_negative_read_inputvalue) = S ge_signed_half_read_inputvaluedecode))) /\ ((dst_positive_read_input) + ge_balance_negative_read_inputvalue = (dst_negative_read_input) + ge_balance_positive_read_inputvalue)))))))))

Complete tactic proof in conservative notation

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

21 script commands · 7 reading checkpoints · 0 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.

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 d
  4. L4
    intro q
  5. L5
    intro z
  6. L6
    intro hd
  7. L7
    intro hq
  8. L8
    intro he
02Separate the logical casesL9–12

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

  1. L9
    cases he
  2. L10
    cases he_left
  3. L11
    cases he_left_right
  4. L12
    cases he_left_right_witness
03Use earlier factsL13–13

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

  1. L13
    exact he_left_right_witness_right
04Separate the logical casesL14–16

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

  1. L14
    cases he_right
  2. L15
    exfalso
  3. L16
    cases he_right_left
05Use earlier factsL17–19

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

  1. L17
    apply hd
  2. L18
    exact he_right_left_left
  3. L19
    apply he_right_left_right
06Construct an explicit witnessL20–20

Supply the displayed value, then prove that it has the required property.

  1. L20
    exists q
07Use earlier factsL21–21

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

  1. L21
    exact hq

Library-wide reading audit

Original defined command ledger · 21 lines
  1. 0001intro F
  2. 0002intro n
  3. 0003intro d
  4. 0004intro q
  5. 0005intro z
  6. 0006intro hd
  7. 0007intro hq
  8. 0008intro he
  9. 0009cases he
  10. 0010cases he_left
  11. 0011cases he_left_right
  12. 0012cases he_left_right_witness
  13. 0013exact he_left_right_witness_right
  14. 0014cases he_right
  15. 0015exfalso
  16. 0016cases he_right_left
  17. 0017apply hd
  18. 0018exact he_right_left_left
  19. 0019apply he_right_left_right
  20. 0020exists q
  21. 0021exact hq