DV0002

arithmetic_signed_table_equal_entry_transport

Actual finite-domain lookup plus prefix equality transports a signed value; no table-component equality or unspecified choice is used.

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

∀ N. ∀ F. ∀ G. ∀ l. ∀ i. ∀ z. ArithTable(N,G)ArithTableEqual(F,G,l)Le(i,N)Lt(i,l)ArithAt(F,i,z)ArithAt(G,i,z)

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

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall N F G l i z. (exists dst_positive_code_transport_valid dst_positive_scale_transport_valid dst_negative_code_transport_valid dst_negative_scale_transport_valid. (((G) = (((((dst_positive_code_transport_valid) + (dst_positive_scale_transport_valid)) * S ((dst_positive_code_transport_valid) + (dst_positive_scale_transport_valid)) + ((dst_positive_scale_transport_valid) + (dst_positive_scale_transport_valid))) + (((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) * S ((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) + ((dst_negative_scale_transport_valid) + (dst_negative_scale_transport_valid)))) * S ((((dst_positive_code_transport_valid) + (dst_positive_scale_transport_valid)) * S ((dst_positive_code_transport_valid) + (dst_positive_scale_transport_valid)) + ((dst_positive_scale_transport_valid) + (dst_positive_scale_transport_valid))) + (((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) * S ((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) + ((dst_negative_scale_transport_valid) + (dst_negative_scale_transport_valid)))) + ((((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) * S ((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) + ((dst_negative_scale_transport_valid) + (dst_negative_scale_transport_valid))) + (((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) * S ((dst_negative_code_transport_valid) + (dst_negative_scale_transport_valid)) + ((dst_negative_scale_transport_valid) + (dst_negative_scale_transport_valid)))))) /\ (forall dst_index_transport_valid. (exists pvs_le_gap_transport_validdomain. pvs_le_gap_transport_validdomain + (dst_index_transport_valid) = (N)) -> exists dst_positive_transport_valid dst_negative_transport_valid dst_value_transport_valid. ((((exists ff_h_pvs_transport_validentrypositive. ff_h_pvs_transport_validentrypositive + S (dst_positive_transport_valid) = S ((S (dst_index_transport_valid)) * dst_positive_scale_transport_valid)) /\ exists ff_q_pvs_transport_validentrypositive. dst_positive_code_transport_valid = ff_q_pvs_transport_validentrypositive * S ((S (dst_index_transport_valid)) * dst_positive_scale_transport_valid) + (dst_positive_transport_valid))) /\ (((((exists ff_h_pvs_transport_validentrynegative. ff_h_pvs_transport_validentrynegative + S (dst_negative_transport_valid) = S ((S (dst_index_transport_valid)) * dst_negative_scale_transport_valid)) /\ exists ff_q_pvs_transport_validentrynegative. dst_negative_code_transport_valid = ff_q_pvs_transport_validentrynegative * S ((S (dst_index_transport_valid)) * dst_negative_scale_transport_valid) + (dst_negative_transport_valid))) /\ (exists ge_balance_positive_transport_validentryvalue ge_balance_negative_transport_validentryvalue. (((((dst_value_transport_valid) = 2 * (ge_balance_positive_transport_validentryvalue) /\ (ge_balance_negative_transport_validentryvalue) = 0) \/ exists ge_signed_half_transport_validentryvaluedecode. (((dst_value_transport_valid) = 2 * ge_signed_half_transport_validentryvaluedecode + 1 /\ (ge_balance_positive_transport_validentryvalue) = 0) /\ (ge_balance_negative_transport_validentryvalue) = S ge_signed_half_transport_validentryvaluedecode))) /\ ((dst_positive_transport_valid) + ge_balance_negative_transport_validentryvalue = (dst_negative_transport_valid) + ge_balance_positive_transport_validentryvalue))))))))) -> (forall dst_index_transport_prefix dst_first_transport_prefix dst_second_transport_prefix. (exists pvs_gap_transport_prefixbound. pvs_gap_transport_prefixbound + S (dst_index_transport_prefix) = (l)) -> (exists dst_positive_code_transport_prefixfirst dst_positive_scale_transport_prefixfirst dst_negative_code_transport_prefixfirst dst_negative_scale_transport_prefixfirst dst_positive_transport_prefixfirst dst_negative_transport_prefixfirst. (((F) = (((((dst_positive_code_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst)) * S ((dst_positive_code_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst)) + ((dst_positive_scale_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst))) + (((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) * S ((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) + ((dst_negative_scale_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)))) * S ((((dst_positive_code_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst)) * S ((dst_positive_code_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst)) + ((dst_positive_scale_transport_prefixfirst) + (dst_positive_scale_transport_prefixfirst))) + (((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) * S ((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) + ((dst_negative_scale_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)))) + ((((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) * S ((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) + ((dst_negative_scale_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst))) + (((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) * S ((dst_negative_code_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)) + ((dst_negative_scale_transport_prefixfirst) + (dst_negative_scale_transport_prefixfirst)))))) /\ (((((exists ff_h_pvs_transport_prefixfirstpositive. ff_h_pvs_transport_prefixfirstpositive + S (dst_positive_transport_prefixfirst) = S ((S (dst_index_transport_prefix)) * dst_positive_scale_transport_prefixfirst)) /\ exists ff_q_pvs_transport_prefixfirstpositive. dst_positive_code_transport_prefixfirst = ff_q_pvs_transport_prefixfirstpositive * S ((S (dst_index_transport_prefix)) * dst_positive_scale_transport_prefixfirst) + (dst_positive_transport_prefixfirst))) /\ (((((exists ff_h_pvs_transport_prefixfirstnegative. ff_h_pvs_transport_prefixfirstnegative + S (dst_negative_transport_prefixfirst) = S ((S (dst_index_transport_prefix)) * dst_negative_scale_transport_prefixfirst)) /\ exists ff_q_pvs_transport_prefixfirstnegative. dst_negative_code_transport_prefixfirst = ff_q_pvs_transport_prefixfirstnegative * S ((S (dst_index_transport_prefix)) * dst_negative_scale_transport_prefixfirst) + (dst_negative_transport_prefixfirst))) /\ (exists ge_balance_positive_transport_prefixfirstvalue ge_balance_negative_transport_prefixfirstvalue. (((((dst_first_transport_prefix) = 2 * (ge_balance_positive_transport_prefixfirstvalue) /\ (ge_balance_negative_transport_prefixfirstvalue) = 0) \/ exists ge_signed_half_transport_prefixfirstvaluedecode. (((dst_first_transport_prefix) = 2 * ge_signed_half_transport_prefixfirstvaluedecode + 1 /\ (ge_balance_positive_transport_prefixfirstvalue) = 0) /\ (ge_balance_negative_transport_prefixfirstvalue) = S ge_signed_half_transport_prefixfirstvaluedecode))) /\ ((dst_positive_transport_prefixfirst) + ge_balance_negative_transport_prefixfirstvalue = (dst_negative_transport_prefixfirst) + ge_balance_positive_transport_prefixfirstvalue))))))))) -> (exists dst_positive_code_transport_prefixsecond dst_positive_scale_transport_prefixsecond dst_negative_code_transport_prefixsecond dst_negative_scale_transport_prefixsecond dst_positive_transport_prefixsecond dst_negative_transport_prefixsecond. (((G) = (((((dst_positive_code_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond)) * S ((dst_positive_code_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond)) + ((dst_positive_scale_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond))) + (((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) * S ((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) + ((dst_negative_scale_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)))) * S ((((dst_positive_code_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond)) * S ((dst_positive_code_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond)) + ((dst_positive_scale_transport_prefixsecond) + (dst_positive_scale_transport_prefixsecond))) + (((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) * S ((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) + ((dst_negative_scale_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)))) + ((((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) * S ((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) + ((dst_negative_scale_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond))) + (((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) * S ((dst_negative_code_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)) + ((dst_negative_scale_transport_prefixsecond) + (dst_negative_scale_transport_prefixsecond)))))) /\ (((((exists ff_h_pvs_transport_prefixsecondpositive. ff_h_pvs_transport_prefixsecondpositive + S (dst_positive_transport_prefixsecond) = S ((S (dst_index_transport_prefix)) * dst_positive_scale_transport_prefixsecond)) /\ exists ff_q_pvs_transport_prefixsecondpositive. dst_positive_code_transport_prefixsecond = ff_q_pvs_transport_prefixsecondpositive * S ((S (dst_index_transport_prefix)) * dst_positive_scale_transport_prefixsecond) + (dst_positive_transport_prefixsecond))) /\ (((((exists ff_h_pvs_transport_prefixsecondnegative. ff_h_pvs_transport_prefixsecondnegative + S (dst_negative_transport_prefixsecond) = S ((S (dst_index_transport_prefix)) * dst_negative_scale_transport_prefixsecond)) /\ exists ff_q_pvs_transport_prefixsecondnegative. dst_negative_code_transport_prefixsecond = ff_q_pvs_transport_prefixsecondnegative * S ((S (dst_index_transport_prefix)) * dst_negative_scale_transport_prefixsecond) + (dst_negative_transport_prefixsecond))) /\ (exists ge_balance_positive_transport_prefixsecondvalue ge_balance_negative_transport_prefixsecondvalue. (((((dst_second_transport_prefix) = 2 * (ge_balance_positive_transport_prefixsecondvalue) /\ (ge_balance_negative_transport_prefixsecondvalue) = 0) \/ exists ge_signed_half_transport_prefixsecondvaluedecode. (((dst_second_transport_prefix) = 2 * ge_signed_half_transport_prefixsecondvaluedecode + 1 /\ (ge_balance_positive_transport_prefixsecondvalue) = 0) /\ (ge_balance_negative_transport_prefixsecondvalue) = S ge_signed_half_transport_prefixsecondvaluedecode))) /\ ((dst_positive_transport_prefixsecond) + ge_balance_negative_transport_prefixsecondvalue = (dst_negative_transport_prefixsecond) + ge_balance_positive_transport_prefixsecondvalue))))))))) -> dst_first_transport_prefix = dst_second_transport_prefix) -> (exists pvs_le_gap_transport_domain. pvs_le_gap_transport_domain + (i) = (N)) -> (exists pvs_gap_transport_index. pvs_gap_transport_index + S (i) = (l)) -> (exists dst_positive_code_transport_source dst_positive_scale_transport_source dst_negative_code_transport_source dst_negative_scale_transport_source dst_positive_transport_source dst_negative_transport_source. (((F) = (((((dst_positive_code_transport_source) + (dst_positive_scale_transport_source)) * S ((dst_positive_code_transport_source) + (dst_positive_scale_transport_source)) + ((dst_positive_scale_transport_source) + (dst_positive_scale_transport_source))) + (((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) * S ((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) + ((dst_negative_scale_transport_source) + (dst_negative_scale_transport_source)))) * S ((((dst_positive_code_transport_source) + (dst_positive_scale_transport_source)) * S ((dst_positive_code_transport_source) + (dst_positive_scale_transport_source)) + ((dst_positive_scale_transport_source) + (dst_positive_scale_transport_source))) + (((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) * S ((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) + ((dst_negative_scale_transport_source) + (dst_negative_scale_transport_source)))) + ((((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) * S ((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) + ((dst_negative_scale_transport_source) + (dst_negative_scale_transport_source))) + (((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) * S ((dst_negative_code_transport_source) + (dst_negative_scale_transport_source)) + ((dst_negative_scale_transport_source) + (dst_negative_scale_transport_source)))))) /\ (((((exists ff_h_pvs_transport_sourcepositive. ff_h_pvs_transport_sourcepositive + S (dst_positive_transport_source) = S ((S (i)) * dst_positive_scale_transport_source)) /\ exists ff_q_pvs_transport_sourcepositive. dst_positive_code_transport_source = ff_q_pvs_transport_sourcepositive * S ((S (i)) * dst_positive_scale_transport_source) + (dst_positive_transport_source))) /\ (((((exists ff_h_pvs_transport_sourcenegative. ff_h_pvs_transport_sourcenegative + S (dst_negative_transport_source) = S ((S (i)) * dst_negative_scale_transport_source)) /\ exists ff_q_pvs_transport_sourcenegative. dst_negative_code_transport_source = ff_q_pvs_transport_sourcenegative * S ((S (i)) * dst_negative_scale_transport_source) + (dst_negative_transport_source))) /\ (exists ge_balance_positive_transport_sourcevalue ge_balance_negative_transport_sourcevalue. (((((z) = 2 * (ge_balance_positive_transport_sourcevalue) /\ (ge_balance_negative_transport_sourcevalue) = 0) \/ exists ge_signed_half_transport_sourcevaluedecode. (((z) = 2 * ge_signed_half_transport_sourcevaluedecode + 1 /\ (ge_balance_positive_transport_sourcevalue) = 0) /\ (ge_balance_negative_transport_sourcevalue) = S ge_signed_half_transport_sourcevaluedecode))) /\ ((dst_positive_transport_source) + ge_balance_negative_transport_sourcevalue = (dst_negative_transport_source) + ge_balance_positive_transport_sourcevalue))))))))) -> (exists dst_positive_code_transport_target dst_positive_scale_transport_target dst_negative_code_transport_target dst_negative_scale_transport_target dst_positive_transport_target dst_negative_transport_target. (((G) = (((((dst_positive_code_transport_target) + (dst_positive_scale_transport_target)) * S ((dst_positive_code_transport_target) + (dst_positive_scale_transport_target)) + ((dst_positive_scale_transport_target) + (dst_positive_scale_transport_target))) + (((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) * S ((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) + ((dst_negative_scale_transport_target) + (dst_negative_scale_transport_target)))) * S ((((dst_positive_code_transport_target) + (dst_positive_scale_transport_target)) * S ((dst_positive_code_transport_target) + (dst_positive_scale_transport_target)) + ((dst_positive_scale_transport_target) + (dst_positive_scale_transport_target))) + (((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) * S ((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) + ((dst_negative_scale_transport_target) + (dst_negative_scale_transport_target)))) + ((((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) * S ((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) + ((dst_negative_scale_transport_target) + (dst_negative_scale_transport_target))) + (((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) * S ((dst_negative_code_transport_target) + (dst_negative_scale_transport_target)) + ((dst_negative_scale_transport_target) + (dst_negative_scale_transport_target)))))) /\ (((((exists ff_h_pvs_transport_targetpositive. ff_h_pvs_transport_targetpositive + S (dst_positive_transport_target) = S ((S (i)) * dst_positive_scale_transport_target)) /\ exists ff_q_pvs_transport_targetpositive. dst_positive_code_transport_target = ff_q_pvs_transport_targetpositive * S ((S (i)) * dst_positive_scale_transport_target) + (dst_positive_transport_target))) /\ (((((exists ff_h_pvs_transport_targetnegative. ff_h_pvs_transport_targetnegative + S (dst_negative_transport_target) = S ((S (i)) * dst_negative_scale_transport_target)) /\ exists ff_q_pvs_transport_targetnegative. dst_negative_code_transport_target = ff_q_pvs_transport_targetnegative * S ((S (i)) * dst_negative_scale_transport_target) + (dst_negative_transport_target))) /\ (exists ge_balance_positive_transport_targetvalue ge_balance_negative_transport_targetvalue. (((((z) = 2 * (ge_balance_positive_transport_targetvalue) /\ (ge_balance_negative_transport_targetvalue) = 0) \/ exists ge_signed_half_transport_targetvaluedecode. (((z) = 2 * ge_signed_half_transport_targetvaluedecode + 1 /\ (ge_balance_positive_transport_targetvalue) = 0) /\ (ge_balance_negative_transport_targetvalue) = S ge_signed_half_transport_targetvaluedecode))) /\ ((dst_positive_transport_target) + ge_balance_negative_transport_targetvalue = (dst_negative_transport_target) + ge_balance_positive_transport_targetvalue)))))))))

Complete tactic proof in conservative notation

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

31 script commands · 7 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.

01Fix variables and assumptionsL1–10

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

  1. L1
    intro N
  2. L2
    intro F
  3. L3
    intro G
  4. L4
    intro l
  5. L5
    intro i
  6. L6
    intro z
  7. L7
    intro ht
  8. L8
    intro he
  9. L9
    intro hiN
  10. L10
    intro hil
02Fix variables and assumptionsL11–11

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

  1. L11
    intro hz
03Establish hbL12–18

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

  1. L12
    have hb : ∃ b. ArithAt(G,i,b)Definitions: ArithAt(G,i,b)Original native command in the exact edition
  2. L13
    specialize divisor_signed_table_lookup (N)
  3. L14
    specialize divisor_signed_table_lookup (G)
  4. L15
    specialize divisor_signed_table_lookup (i)
  5. L16
    apply divisor_signed_table_lookup
  6. L17
    exact ht
  7. L18
    exact hiN
04Separate the logical casesL19–19

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

  1. L19
    cases hb
05Establish heqL20–29

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

  1. L20
    have heq : x = z
  2. L21
    symm
  3. L22
    specialize he (i)
  4. L23
    specialize he (z)
  5. L24
    specialize he (x)
  6. L25
    apply he
  7. L26
    exact hil
  8. L27
    exact hz
  9. L28
    exact hb_witness
  10. L29
    rewrite heq at hb_witness
06Calculate and transport equalitiesL30–30

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

  1. L30
    rewrite heq at hb_witness
07Use earlier factsL31–31

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

  1. L31
    exact hb_witness

Library-wide reading audit

Original defined command ledger · 31 lines
  1. 0001intro N
  2. 0002intro F
  3. 0003intro G
  4. 0004intro l
  5. 0005intro i
  6. 0006intro z
  7. 0007intro ht
  8. 0008intro he
  9. 0009intro hiN
  10. 0010intro hil
  11. 0011intro hz
  12. 0012have hb : ∃ b. ArithAt(G,i,b)
  13. 0013specialize divisor_signed_table_lookup (N)
  14. 0014specialize divisor_signed_table_lookup (G)
  15. 0015specialize divisor_signed_table_lookup (i)
  16. 0016apply divisor_signed_table_lookup
  17. 0017exact ht
  18. 0018exact hiN
  19. 0019cases hb
  20. 0020have heq : x = z
  21. 0021symm
  22. 0022specialize he (i)
  23. 0023specialize he (z)
  24. 0024specialize he (x)
  25. 0025apply he
  26. 0026exact hil
  27. 0027exact hz
  28. 0028exact hb_witness
  29. 0029rewrite heq at hb_witness
  30. 0030rewrite heq at hb_witness
  31. 0031exact hb_witness