DV0018

divisor_mask_prefix_append

Append one actually decided divisor-mask value while preserving the whole previous signed prefix.

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. ∀ z. DivisorMask(F,n,l,M)DivisorMaskEntry(F,n,S l,z) → ∃ x. DivisorMask(F,n,S l,x)ArithTableEqual(M,x,S l)

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 z. (((exists dst_positive_code_append_sourcetable dst_positive_scale_append_sourcetable dst_negative_code_append_sourcetable dst_negative_scale_append_sourcetable. (((M) = (((((dst_positive_code_append_sourcetable) + (dst_positive_scale_append_sourcetable)) * S ((dst_positive_code_append_sourcetable) + (dst_positive_scale_append_sourcetable)) + ((dst_positive_scale_append_sourcetable) + (dst_positive_scale_append_sourcetable))) + (((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) * S ((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) + ((dst_negative_scale_append_sourcetable) + (dst_negative_scale_append_sourcetable)))) * S ((((dst_positive_code_append_sourcetable) + (dst_positive_scale_append_sourcetable)) * S ((dst_positive_code_append_sourcetable) + (dst_positive_scale_append_sourcetable)) + ((dst_positive_scale_append_sourcetable) + (dst_positive_scale_append_sourcetable))) + (((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) * S ((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) + ((dst_negative_scale_append_sourcetable) + (dst_negative_scale_append_sourcetable)))) + ((((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) * S ((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) + ((dst_negative_scale_append_sourcetable) + (dst_negative_scale_append_sourcetable))) + (((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) * S ((dst_negative_code_append_sourcetable) + (dst_negative_scale_append_sourcetable)) + ((dst_negative_scale_append_sourcetable) + (dst_negative_scale_append_sourcetable)))))) /\ (forall dst_index_append_sourcetable. (exists pvs_le_gap_append_sourcetabledomain. pvs_le_gap_append_sourcetabledomain + (dst_index_append_sourcetable) = (l)) -> exists dst_positive_append_sourcetable dst_negative_append_sourcetable dst_value_append_sourcetable. ((((exists ff_h_pvs_append_sourcetableentrypositive. ff_h_pvs_append_sourcetableentrypositive + S (dst_positive_append_sourcetable) = S ((S (dst_index_append_sourcetable)) * dst_positive_scale_append_sourcetable)) /\ exists ff_q_pvs_append_sourcetableentrypositive. dst_positive_code_append_sourcetable = ff_q_pvs_append_sourcetableentrypositive * S ((S (dst_index_append_sourcetable)) * dst_positive_scale_append_sourcetable) + (dst_positive_append_sourcetable))) /\ (((((exists ff_h_pvs_append_sourcetableentrynegative. ff_h_pvs_append_sourcetableentrynegative + S (dst_negative_append_sourcetable) = S ((S (dst_index_append_sourcetable)) * dst_negative_scale_append_sourcetable)) /\ exists ff_q_pvs_append_sourcetableentrynegative. dst_negative_code_append_sourcetable = ff_q_pvs_append_sourcetableentrynegative * S ((S (dst_index_append_sourcetable)) * dst_negative_scale_append_sourcetable) + (dst_negative_append_sourcetable))) /\ (exists ge_balance_positive_append_sourcetableentryvalue ge_balance_negative_append_sourcetableentryvalue. (((((dst_value_append_sourcetable) = 2 * (ge_balance_positive_append_sourcetableentryvalue) /\ (ge_balance_negative_append_sourcetableentryvalue) = 0) \/ exists ge_signed_half_append_sourcetableentryvaluedecode. (((dst_value_append_sourcetable) = 2 * ge_signed_half_append_sourcetableentryvaluedecode + 1 /\ (ge_balance_positive_append_sourcetableentryvalue) = 0) /\ (ge_balance_negative_append_sourcetableentryvalue) = S ge_signed_half_append_sourcetableentryvaluedecode))) /\ ((dst_positive_append_sourcetable) + ge_balance_negative_append_sourcetableentryvalue = (dst_negative_append_sourcetable) + ge_balance_positive_append_sourcetableentryvalue))))))))) /\ (forall dm_index_append_source dm_value_append_source. (exists pvs_le_gap_append_sourcedomain. pvs_le_gap_append_sourcedomain + (dm_index_append_source) = (l)) -> (exists dst_positive_code_append_sourcelookup dst_positive_scale_append_sourcelookup dst_negative_code_append_sourcelookup dst_negative_scale_append_sourcelookup dst_positive_append_sourcelookup dst_negative_append_sourcelookup. (((M) = (((((dst_positive_code_append_sourcelookup) + (dst_positive_scale_append_sourcelookup)) * S ((dst_positive_code_append_sourcelookup) + (dst_positive_scale_append_sourcelookup)) + ((dst_positive_scale_append_sourcelookup) + (dst_positive_scale_append_sourcelookup))) + (((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) * S ((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) + ((dst_negative_scale_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)))) * S ((((dst_positive_code_append_sourcelookup) + (dst_positive_scale_append_sourcelookup)) * S ((dst_positive_code_append_sourcelookup) + (dst_positive_scale_append_sourcelookup)) + ((dst_positive_scale_append_sourcelookup) + (dst_positive_scale_append_sourcelookup))) + (((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) * S ((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) + ((dst_negative_scale_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)))) + ((((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) * S ((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) + ((dst_negative_scale_append_sourcelookup) + (dst_negative_scale_append_sourcelookup))) + (((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) * S ((dst_negative_code_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)) + ((dst_negative_scale_append_sourcelookup) + (dst_negative_scale_append_sourcelookup)))))) /\ (((((exists ff_h_pvs_append_sourcelookuppositive. ff_h_pvs_append_sourcelookuppositive + S (dst_positive_append_sourcelookup) = S ((S (dm_index_append_source)) * dst_positive_scale_append_sourcelookup)) /\ exists ff_q_pvs_append_sourcelookuppositive. dst_positive_code_append_sourcelookup = ff_q_pvs_append_sourcelookuppositive * S ((S (dm_index_append_source)) * dst_positive_scale_append_sourcelookup) + (dst_positive_append_sourcelookup))) /\ (((((exists ff_h_pvs_append_sourcelookupnegative. ff_h_pvs_append_sourcelookupnegative + S (dst_negative_append_sourcelookup) = S ((S (dm_index_append_source)) * dst_negative_scale_append_sourcelookup)) /\ exists ff_q_pvs_append_sourcelookupnegative. dst_negative_code_append_sourcelookup = ff_q_pvs_append_sourcelookupnegative * S ((S (dm_index_append_source)) * dst_negative_scale_append_sourcelookup) + (dst_negative_append_sourcelookup))) /\ (exists ge_balance_positive_append_sourcelookupvalue ge_balance_negative_append_sourcelookupvalue. (((((dm_value_append_source) = 2 * (ge_balance_positive_append_sourcelookupvalue) /\ (ge_balance_negative_append_sourcelookupvalue) = 0) \/ exists ge_signed_half_append_sourcelookupvaluedecode. (((dm_value_append_source) = 2 * ge_signed_half_append_sourcelookupvaluedecode + 1 /\ (ge_balance_positive_append_sourcelookupvalue) = 0) /\ (ge_balance_negative_append_sourcelookupvalue) = S ge_signed_half_append_sourcelookupvaluedecode))) /\ ((dst_positive_append_sourcelookup) + ge_balance_negative_append_sourcelookupvalue = (dst_negative_append_sourcelookup) + ge_balance_positive_append_sourcelookupvalue))))))))) -> ((((~((dm_index_append_source)=0)) /\ (exists dm_quotient_append_sourceentry. (((n)=(dm_index_append_source)*dm_quotient_append_sourceentry) /\ (exists dst_positive_code_append_sourceentryinput dst_positive_scale_append_sourceentryinput dst_negative_code_append_sourceentryinput dst_negative_scale_append_sourceentryinput dst_positive_append_sourceentryinput dst_negative_append_sourceentryinput. (((F) = (((((dst_positive_code_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput)) * S ((dst_positive_code_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput)) + ((dst_positive_scale_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput))) + (((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) * S ((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) + ((dst_negative_scale_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)))) * S ((((dst_positive_code_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput)) * S ((dst_positive_code_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput)) + ((dst_positive_scale_append_sourceentryinput) + (dst_positive_scale_append_sourceentryinput))) + (((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) * S ((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) + ((dst_negative_scale_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)))) + ((((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) * S ((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) + ((dst_negative_scale_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput))) + (((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) * S ((dst_negative_code_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)) + ((dst_negative_scale_append_sourceentryinput) + (dst_negative_scale_append_sourceentryinput)))))) /\ (((((exists ff_h_pvs_append_sourceentryinputpositive. ff_h_pvs_append_sourceentryinputpositive + S (dst_positive_append_sourceentryinput) = S ((S (dm_index_append_source)) * dst_positive_scale_append_sourceentryinput)) /\ exists ff_q_pvs_append_sourceentryinputpositive. dst_positive_code_append_sourceentryinput = ff_q_pvs_append_sourceentryinputpositive * S ((S (dm_index_append_source)) * dst_positive_scale_append_sourceentryinput) + (dst_positive_append_sourceentryinput))) /\ (((((exists ff_h_pvs_append_sourceentryinputnegative. ff_h_pvs_append_sourceentryinputnegative + S (dst_negative_append_sourceentryinput) = S ((S (dm_index_append_source)) * dst_negative_scale_append_sourceentryinput)) /\ exists ff_q_pvs_append_sourceentryinputnegative. dst_negative_code_append_sourceentryinput = ff_q_pvs_append_sourceentryinputnegative * S ((S (dm_index_append_source)) * dst_negative_scale_append_sourceentryinput) + (dst_negative_append_sourceentryinput))) /\ (exists ge_balance_positive_append_sourceentryinputvalue ge_balance_negative_append_sourceentryinputvalue. (((((dm_value_append_source) = 2 * (ge_balance_positive_append_sourceentryinputvalue) /\ (ge_balance_negative_append_sourceentryinputvalue) = 0) \/ exists ge_signed_half_append_sourceentryinputvaluedecode. (((dm_value_append_source) = 2 * ge_signed_half_append_sourceentryinputvaluedecode + 1 /\ (ge_balance_positive_append_sourceentryinputvalue) = 0) /\ (ge_balance_negative_append_sourceentryinputvalue) = S ge_signed_half_append_sourceentryinputvaluedecode))) /\ ((dst_positive_append_sourceentryinput) + ge_balance_negative_append_sourceentryinputvalue = (dst_negative_append_sourceentryinput) + ge_balance_positive_append_sourceentryinputvalue))))))))))))) \/ ((((dm_index_append_source)=0 \/ ~(exists pvs_factor_append_sourceentrynondivisor. (n) = (dm_index_append_source) * pvs_factor_append_sourceentrynondivisor)) /\ ((dm_value_append_source)=0))))))) -> ((((~((S l)=0)) /\ (exists dm_quotient_append_last. (((n)=(S l)*dm_quotient_append_last) /\ (exists dst_positive_code_append_lastinput dst_positive_scale_append_lastinput dst_negative_code_append_lastinput dst_negative_scale_append_lastinput dst_positive_append_lastinput dst_negative_append_lastinput. (((F) = (((((dst_positive_code_append_lastinput) + (dst_positive_scale_append_lastinput)) * S ((dst_positive_code_append_lastinput) + (dst_positive_scale_append_lastinput)) + ((dst_positive_scale_append_lastinput) + (dst_positive_scale_append_lastinput))) + (((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) * S ((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) + ((dst_negative_scale_append_lastinput) + (dst_negative_scale_append_lastinput)))) * S ((((dst_positive_code_append_lastinput) + (dst_positive_scale_append_lastinput)) * S ((dst_positive_code_append_lastinput) + (dst_positive_scale_append_lastinput)) + ((dst_positive_scale_append_lastinput) + (dst_positive_scale_append_lastinput))) + (((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) * S ((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) + ((dst_negative_scale_append_lastinput) + (dst_negative_scale_append_lastinput)))) + ((((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) * S ((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) + ((dst_negative_scale_append_lastinput) + (dst_negative_scale_append_lastinput))) + (((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) * S ((dst_negative_code_append_lastinput) + (dst_negative_scale_append_lastinput)) + ((dst_negative_scale_append_lastinput) + (dst_negative_scale_append_lastinput)))))) /\ (((((exists ff_h_pvs_append_lastinputpositive. ff_h_pvs_append_lastinputpositive + S (dst_positive_append_lastinput) = S ((S (S l)) * dst_positive_scale_append_lastinput)) /\ exists ff_q_pvs_append_lastinputpositive. dst_positive_code_append_lastinput = ff_q_pvs_append_lastinputpositive * S ((S (S l)) * dst_positive_scale_append_lastinput) + (dst_positive_append_lastinput))) /\ (((((exists ff_h_pvs_append_lastinputnegative. ff_h_pvs_append_lastinputnegative + S (dst_negative_append_lastinput) = S ((S (S l)) * dst_negative_scale_append_lastinput)) /\ exists ff_q_pvs_append_lastinputnegative. dst_negative_code_append_lastinput = ff_q_pvs_append_lastinputnegative * S ((S (S l)) * dst_negative_scale_append_lastinput) + (dst_negative_append_lastinput))) /\ (exists ge_balance_positive_append_lastinputvalue ge_balance_negative_append_lastinputvalue. (((((z) = 2 * (ge_balance_positive_append_lastinputvalue) /\ (ge_balance_negative_append_lastinputvalue) = 0) \/ exists ge_signed_half_append_lastinputvaluedecode. (((z) = 2 * ge_signed_half_append_lastinputvaluedecode + 1 /\ (ge_balance_positive_append_lastinputvalue) = 0) /\ (ge_balance_negative_append_lastinputvalue) = S ge_signed_half_append_lastinputvaluedecode))) /\ ((dst_positive_append_lastinput) + ge_balance_negative_append_lastinputvalue = (dst_negative_append_lastinput) + ge_balance_positive_append_lastinputvalue))))))))))))) \/ ((((S l)=0 \/ ~(exists pvs_factor_append_lastnondivisor. (n) = (S l) * pvs_factor_append_lastnondivisor)) /\ ((z)=0)))) -> exists G. (((exists dst_positive_code_append_resulttable dst_positive_scale_append_resulttable dst_negative_code_append_resulttable dst_negative_scale_append_resulttable. (((G) = (((((dst_positive_code_append_resulttable) + (dst_positive_scale_append_resulttable)) * S ((dst_positive_code_append_resulttable) + (dst_positive_scale_append_resulttable)) + ((dst_positive_scale_append_resulttable) + (dst_positive_scale_append_resulttable))) + (((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) * S ((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) + ((dst_negative_scale_append_resulttable) + (dst_negative_scale_append_resulttable)))) * S ((((dst_positive_code_append_resulttable) + (dst_positive_scale_append_resulttable)) * S ((dst_positive_code_append_resulttable) + (dst_positive_scale_append_resulttable)) + ((dst_positive_scale_append_resulttable) + (dst_positive_scale_append_resulttable))) + (((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) * S ((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) + ((dst_negative_scale_append_resulttable) + (dst_negative_scale_append_resulttable)))) + ((((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) * S ((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) + ((dst_negative_scale_append_resulttable) + (dst_negative_scale_append_resulttable))) + (((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) * S ((dst_negative_code_append_resulttable) + (dst_negative_scale_append_resulttable)) + ((dst_negative_scale_append_resulttable) + (dst_negative_scale_append_resulttable)))))) /\ (forall dst_index_append_resulttable. (exists pvs_le_gap_append_resulttabledomain. pvs_le_gap_append_resulttabledomain + (dst_index_append_resulttable) = (S l)) -> exists dst_positive_append_resulttable dst_negative_append_resulttable dst_value_append_resulttable. ((((exists ff_h_pvs_append_resulttableentrypositive. ff_h_pvs_append_resulttableentrypositive + S (dst_positive_append_resulttable) = S ((S (dst_index_append_resulttable)) * dst_positive_scale_append_resulttable)) /\ exists ff_q_pvs_append_resulttableentrypositive. dst_positive_code_append_resulttable = ff_q_pvs_append_resulttableentrypositive * S ((S (dst_index_append_resulttable)) * dst_positive_scale_append_resulttable) + (dst_positive_append_resulttable))) /\ (((((exists ff_h_pvs_append_resulttableentrynegative. ff_h_pvs_append_resulttableentrynegative + S (dst_negative_append_resulttable) = S ((S (dst_index_append_resulttable)) * dst_negative_scale_append_resulttable)) /\ exists ff_q_pvs_append_resulttableentrynegative. dst_negative_code_append_resulttable = ff_q_pvs_append_resulttableentrynegative * S ((S (dst_index_append_resulttable)) * dst_negative_scale_append_resulttable) + (dst_negative_append_resulttable))) /\ (exists ge_balance_positive_append_resulttableentryvalue ge_balance_negative_append_resulttableentryvalue. (((((dst_value_append_resulttable) = 2 * (ge_balance_positive_append_resulttableentryvalue) /\ (ge_balance_negative_append_resulttableentryvalue) = 0) \/ exists ge_signed_half_append_resulttableentryvaluedecode. (((dst_value_append_resulttable) = 2 * ge_signed_half_append_resulttableentryvaluedecode + 1 /\ (ge_balance_positive_append_resulttableentryvalue) = 0) /\ (ge_balance_negative_append_resulttableentryvalue) = S ge_signed_half_append_resulttableentryvaluedecode))) /\ ((dst_positive_append_resulttable) + ge_balance_negative_append_resulttableentryvalue = (dst_negative_append_resulttable) + ge_balance_positive_append_resulttableentryvalue))))))))) /\ (forall dm_index_append_result dm_value_append_result. (exists pvs_le_gap_append_resultdomain. pvs_le_gap_append_resultdomain + (dm_index_append_result) = (S l)) -> (exists dst_positive_code_append_resultlookup dst_positive_scale_append_resultlookup dst_negative_code_append_resultlookup dst_negative_scale_append_resultlookup dst_positive_append_resultlookup dst_negative_append_resultlookup. (((G) = (((((dst_positive_code_append_resultlookup) + (dst_positive_scale_append_resultlookup)) * S ((dst_positive_code_append_resultlookup) + (dst_positive_scale_append_resultlookup)) + ((dst_positive_scale_append_resultlookup) + (dst_positive_scale_append_resultlookup))) + (((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) * S ((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) + ((dst_negative_scale_append_resultlookup) + (dst_negative_scale_append_resultlookup)))) * S ((((dst_positive_code_append_resultlookup) + (dst_positive_scale_append_resultlookup)) * S ((dst_positive_code_append_resultlookup) + (dst_positive_scale_append_resultlookup)) + ((dst_positive_scale_append_resultlookup) + (dst_positive_scale_append_resultlookup))) + (((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) * S ((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) + ((dst_negative_scale_append_resultlookup) + (dst_negative_scale_append_resultlookup)))) + ((((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) * S ((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) + ((dst_negative_scale_append_resultlookup) + (dst_negative_scale_append_resultlookup))) + (((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) * S ((dst_negative_code_append_resultlookup) + (dst_negative_scale_append_resultlookup)) + ((dst_negative_scale_append_resultlookup) + (dst_negative_scale_append_resultlookup)))))) /\ (((((exists ff_h_pvs_append_resultlookuppositive. ff_h_pvs_append_resultlookuppositive + S (dst_positive_append_resultlookup) = S ((S (dm_index_append_result)) * dst_positive_scale_append_resultlookup)) /\ exists ff_q_pvs_append_resultlookuppositive. dst_positive_code_append_resultlookup = ff_q_pvs_append_resultlookuppositive * S ((S (dm_index_append_result)) * dst_positive_scale_append_resultlookup) + (dst_positive_append_resultlookup))) /\ (((((exists ff_h_pvs_append_resultlookupnegative. ff_h_pvs_append_resultlookupnegative + S (dst_negative_append_resultlookup) = S ((S (dm_index_append_result)) * dst_negative_scale_append_resultlookup)) /\ exists ff_q_pvs_append_resultlookupnegative. dst_negative_code_append_resultlookup = ff_q_pvs_append_resultlookupnegative * S ((S (dm_index_append_result)) * dst_negative_scale_append_resultlookup) + (dst_negative_append_resultlookup))) /\ (exists ge_balance_positive_append_resultlookupvalue ge_balance_negative_append_resultlookupvalue. (((((dm_value_append_result) = 2 * (ge_balance_positive_append_resultlookupvalue) /\ (ge_balance_negative_append_resultlookupvalue) = 0) \/ exists ge_signed_half_append_resultlookupvaluedecode. (((dm_value_append_result) = 2 * ge_signed_half_append_resultlookupvaluedecode + 1 /\ (ge_balance_positive_append_resultlookupvalue) = 0) /\ (ge_balance_negative_append_resultlookupvalue) = S ge_signed_half_append_resultlookupvaluedecode))) /\ ((dst_positive_append_resultlookup) + ge_balance_negative_append_resultlookupvalue = (dst_negative_append_resultlookup) + ge_balance_positive_append_resultlookupvalue))))))))) -> ((((~((dm_index_append_result)=0)) /\ (exists dm_quotient_append_resultentry. (((n)=(dm_index_append_result)*dm_quotient_append_resultentry) /\ (exists dst_positive_code_append_resultentryinput dst_positive_scale_append_resultentryinput dst_negative_code_append_resultentryinput dst_negative_scale_append_resultentryinput dst_positive_append_resultentryinput dst_negative_append_resultentryinput. (((F) = (((((dst_positive_code_append_resultentryinput) + (dst_positive_scale_append_resultentryinput)) * S ((dst_positive_code_append_resultentryinput) + (dst_positive_scale_append_resultentryinput)) + ((dst_positive_scale_append_resultentryinput) + (dst_positive_scale_append_resultentryinput))) + (((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) * S ((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) + ((dst_negative_scale_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)))) * S ((((dst_positive_code_append_resultentryinput) + (dst_positive_scale_append_resultentryinput)) * S ((dst_positive_code_append_resultentryinput) + (dst_positive_scale_append_resultentryinput)) + ((dst_positive_scale_append_resultentryinput) + (dst_positive_scale_append_resultentryinput))) + (((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) * S ((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) + ((dst_negative_scale_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)))) + ((((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) * S ((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) + ((dst_negative_scale_append_resultentryinput) + (dst_negative_scale_append_resultentryinput))) + (((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) * S ((dst_negative_code_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)) + ((dst_negative_scale_append_resultentryinput) + (dst_negative_scale_append_resultentryinput)))))) /\ (((((exists ff_h_pvs_append_resultentryinputpositive. ff_h_pvs_append_resultentryinputpositive + S (dst_positive_append_resultentryinput) = S ((S (dm_index_append_result)) * dst_positive_scale_append_resultentryinput)) /\ exists ff_q_pvs_append_resultentryinputpositive. dst_positive_code_append_resultentryinput = ff_q_pvs_append_resultentryinputpositive * S ((S (dm_index_append_result)) * dst_positive_scale_append_resultentryinput) + (dst_positive_append_resultentryinput))) /\ (((((exists ff_h_pvs_append_resultentryinputnegative. ff_h_pvs_append_resultentryinputnegative + S (dst_negative_append_resultentryinput) = S ((S (dm_index_append_result)) * dst_negative_scale_append_resultentryinput)) /\ exists ff_q_pvs_append_resultentryinputnegative. dst_negative_code_append_resultentryinput = ff_q_pvs_append_resultentryinputnegative * S ((S (dm_index_append_result)) * dst_negative_scale_append_resultentryinput) + (dst_negative_append_resultentryinput))) /\ (exists ge_balance_positive_append_resultentryinputvalue ge_balance_negative_append_resultentryinputvalue. (((((dm_value_append_result) = 2 * (ge_balance_positive_append_resultentryinputvalue) /\ (ge_balance_negative_append_resultentryinputvalue) = 0) \/ exists ge_signed_half_append_resultentryinputvaluedecode. (((dm_value_append_result) = 2 * ge_signed_half_append_resultentryinputvaluedecode + 1 /\ (ge_balance_positive_append_resultentryinputvalue) = 0) /\ (ge_balance_negative_append_resultentryinputvalue) = S ge_signed_half_append_resultentryinputvaluedecode))) /\ ((dst_positive_append_resultentryinput) + ge_balance_negative_append_resultentryinputvalue = (dst_negative_append_resultentryinput) + ge_balance_positive_append_resultentryinputvalue))))))))))))) \/ ((((dm_index_append_result)=0 \/ ~(exists pvs_factor_append_resultentrynondivisor. (n) = (dm_index_append_result) * pvs_factor_append_resultentrynondivisor)) /\ ((dm_value_append_result)=0))))))) /\ (forall dst_index_append_equal dst_first_append_equal dst_second_append_equal. (exists pvs_gap_append_equalbound. pvs_gap_append_equalbound + S (dst_index_append_equal) = (S l)) -> (exists dst_positive_code_append_equalfirst dst_positive_scale_append_equalfirst dst_negative_code_append_equalfirst dst_negative_scale_append_equalfirst dst_positive_append_equalfirst dst_negative_append_equalfirst. (((M) = (((((dst_positive_code_append_equalfirst) + (dst_positive_scale_append_equalfirst)) * S ((dst_positive_code_append_equalfirst) + (dst_positive_scale_append_equalfirst)) + ((dst_positive_scale_append_equalfirst) + (dst_positive_scale_append_equalfirst))) + (((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) * S ((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) + ((dst_negative_scale_append_equalfirst) + (dst_negative_scale_append_equalfirst)))) * S ((((dst_positive_code_append_equalfirst) + (dst_positive_scale_append_equalfirst)) * S ((dst_positive_code_append_equalfirst) + (dst_positive_scale_append_equalfirst)) + ((dst_positive_scale_append_equalfirst) + (dst_positive_scale_append_equalfirst))) + (((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) * S ((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) + ((dst_negative_scale_append_equalfirst) + (dst_negative_scale_append_equalfirst)))) + ((((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) * S ((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) + ((dst_negative_scale_append_equalfirst) + (dst_negative_scale_append_equalfirst))) + (((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) * S ((dst_negative_code_append_equalfirst) + (dst_negative_scale_append_equalfirst)) + ((dst_negative_scale_append_equalfirst) + (dst_negative_scale_append_equalfirst)))))) /\ (((((exists ff_h_pvs_append_equalfirstpositive. ff_h_pvs_append_equalfirstpositive + S (dst_positive_append_equalfirst) = S ((S (dst_index_append_equal)) * dst_positive_scale_append_equalfirst)) /\ exists ff_q_pvs_append_equalfirstpositive. dst_positive_code_append_equalfirst = ff_q_pvs_append_equalfirstpositive * S ((S (dst_index_append_equal)) * dst_positive_scale_append_equalfirst) + (dst_positive_append_equalfirst))) /\ (((((exists ff_h_pvs_append_equalfirstnegative. ff_h_pvs_append_equalfirstnegative + S (dst_negative_append_equalfirst) = S ((S (dst_index_append_equal)) * dst_negative_scale_append_equalfirst)) /\ exists ff_q_pvs_append_equalfirstnegative. dst_negative_code_append_equalfirst = ff_q_pvs_append_equalfirstnegative * S ((S (dst_index_append_equal)) * dst_negative_scale_append_equalfirst) + (dst_negative_append_equalfirst))) /\ (exists ge_balance_positive_append_equalfirstvalue ge_balance_negative_append_equalfirstvalue. (((((dst_first_append_equal) = 2 * (ge_balance_positive_append_equalfirstvalue) /\ (ge_balance_negative_append_equalfirstvalue) = 0) \/ exists ge_signed_half_append_equalfirstvaluedecode. (((dst_first_append_equal) = 2 * ge_signed_half_append_equalfirstvaluedecode + 1 /\ (ge_balance_positive_append_equalfirstvalue) = 0) /\ (ge_balance_negative_append_equalfirstvalue) = S ge_signed_half_append_equalfirstvaluedecode))) /\ ((dst_positive_append_equalfirst) + ge_balance_negative_append_equalfirstvalue = (dst_negative_append_equalfirst) + ge_balance_positive_append_equalfirstvalue))))))))) -> (exists dst_positive_code_append_equalsecond dst_positive_scale_append_equalsecond dst_negative_code_append_equalsecond dst_negative_scale_append_equalsecond dst_positive_append_equalsecond dst_negative_append_equalsecond. (((G) = (((((dst_positive_code_append_equalsecond) + (dst_positive_scale_append_equalsecond)) * S ((dst_positive_code_append_equalsecond) + (dst_positive_scale_append_equalsecond)) + ((dst_positive_scale_append_equalsecond) + (dst_positive_scale_append_equalsecond))) + (((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) * S ((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) + ((dst_negative_scale_append_equalsecond) + (dst_negative_scale_append_equalsecond)))) * S ((((dst_positive_code_append_equalsecond) + (dst_positive_scale_append_equalsecond)) * S ((dst_positive_code_append_equalsecond) + (dst_positive_scale_append_equalsecond)) + ((dst_positive_scale_append_equalsecond) + (dst_positive_scale_append_equalsecond))) + (((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) * S ((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) + ((dst_negative_scale_append_equalsecond) + (dst_negative_scale_append_equalsecond)))) + ((((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) * S ((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) + ((dst_negative_scale_append_equalsecond) + (dst_negative_scale_append_equalsecond))) + (((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) * S ((dst_negative_code_append_equalsecond) + (dst_negative_scale_append_equalsecond)) + ((dst_negative_scale_append_equalsecond) + (dst_negative_scale_append_equalsecond)))))) /\ (((((exists ff_h_pvs_append_equalsecondpositive. ff_h_pvs_append_equalsecondpositive + S (dst_positive_append_equalsecond) = S ((S (dst_index_append_equal)) * dst_positive_scale_append_equalsecond)) /\ exists ff_q_pvs_append_equalsecondpositive. dst_positive_code_append_equalsecond = ff_q_pvs_append_equalsecondpositive * S ((S (dst_index_append_equal)) * dst_positive_scale_append_equalsecond) + (dst_positive_append_equalsecond))) /\ (((((exists ff_h_pvs_append_equalsecondnegative. ff_h_pvs_append_equalsecondnegative + S (dst_negative_append_equalsecond) = S ((S (dst_index_append_equal)) * dst_negative_scale_append_equalsecond)) /\ exists ff_q_pvs_append_equalsecondnegative. dst_negative_code_append_equalsecond = ff_q_pvs_append_equalsecondnegative * S ((S (dst_index_append_equal)) * dst_negative_scale_append_equalsecond) + (dst_negative_append_equalsecond))) /\ (exists ge_balance_positive_append_equalsecondvalue ge_balance_negative_append_equalsecondvalue. (((((dst_second_append_equal) = 2 * (ge_balance_positive_append_equalsecondvalue) /\ (ge_balance_negative_append_equalsecondvalue) = 0) \/ exists ge_signed_half_append_equalsecondvaluedecode. (((dst_second_append_equal) = 2 * ge_signed_half_append_equalsecondvaluedecode + 1 /\ (ge_balance_positive_append_equalsecondvalue) = 0) /\ (ge_balance_negative_append_equalsecondvalue) = S ge_signed_half_append_equalsecondvaluedecode))) /\ ((dst_positive_append_equalsecond) + ge_balance_negative_append_equalsecondvalue = (dst_negative_append_equalsecond) + ge_balance_positive_append_equalsecondvalue))))))))) -> dst_first_append_equal = dst_second_append_equal)

Complete tactic proof in conservative notation

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

84 script commands · 19 reading checkpoints · 6 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–7

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 z
  6. L6
    intro hm
  7. L7
    intro hz
02Separate the logical casesL8–8

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

  1. L8
    cases hm
03Establish hextL9–14

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

  1. L9
    have hext : ∃ G. ArithExtend(M,G,S l,z)Definitions: ArithExtend(M,G,S l,z)Original native command in the exact edition
  2. L10
    specialize arithmetic_signed_table_append (l)
  3. L11
    specialize arithmetic_signed_table_append (M)
  4. L12
    specialize arithmetic_signed_table_append (z)
  5. L13
    apply arithmetic_signed_table_append
  6. L14
    exact hm_left
04Separate the logical casesL15–17

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

  1. L15
    cases hext
  2. L16
    cases hext_witness
  3. L17
    cases hext_witness_right
05Construct an explicit witnessL18–18

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

  1. L18
    exists x
06Separate the logical casesL19–20

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

  1. L19
    split
  2. L20
    split
07Use earlier factsL21–21

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

  1. L21
    exact hext_witness_left
08Fix variables and assumptionsL22–25

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

  1. L22
    intro d
  2. L23
    intro u
  3. L24
    intro hd
  4. L25
    intro hu
09Establish hcL26–30

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le eq or lt.

  1. L26
    have hc : d = S l ∨ Lt(d,S l)Definitions: Lt(d,S l)Original native command in the exact edition
  2. L27
    specialize le_eq_or_lt (d)
  3. L28
    specialize le_eq_or_lt (S l)
  4. L29
    apply le_eq_or_lt
  5. L30
    exact hd
10Separate the logical casesL31–31

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

  1. L31
    cases hc
11Calculate and transport equalitiesL32–35

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

  1. L32
    rewrite hc_left at hu
  2. L33
    rewrite hc_left at hu
  3. L34
    rewrite hc_left at hu
  4. L35
    rewrite hc_left at hu
12Establish heqL36–45

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

  1. L36
    have heq : z=u
  2. L37
    specialize divisor_signed_table_at_functional (x)
  3. L38
    specialize divisor_signed_table_at_functional (S l)
  4. L39
    specialize divisor_signed_table_at_functional (z)
  5. L40
    specialize divisor_signed_table_at_functional (u)
  6. L41
    apply divisor_signed_table_at_functional
  7. L42
    exact hext_witness_right_right
  8. L43
    exact hu
  9. L44
    rewrite heq at hz
  10. L45
    rewrite heq at hz
13Calculate and transport equalitiesL46–54

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

  1. L46
    rewrite heq at hz
  2. L47
    rewrite hc_left
  3. L48
    rewrite hc_left
  4. L49
    rewrite hc_left
  5. L50
    rewrite hc_left
  6. L51
    rewrite hc_left
  7. L52
    rewrite hc_left
  8. L53
    rewrite hc_left
  9. L54
    rewrite hc_left
14Use earlier factsL55–55

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

  1. L55
    exact hz
15Establish hboundL56–60

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

  1. L56
    have hbound : Le(d,l)Definitions: Le(d,l)Original native command in the exact edition
  2. L57
    specialize le_of_succ_le_succ (d)
  3. L58
    specialize le_of_succ_le_succ (l)
  4. L59
    apply le_of_succ_le_succ
  5. L60
    exact hc_right
16Establish hvL61–67

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

  1. L61
    have hv : ∃ v. ArithAt(M,d,v)Definitions: ArithAt(M,d,v)Original native command in the exact edition
  2. L62
    specialize divisor_signed_table_lookup (l)
  3. L63
    specialize divisor_signed_table_lookup (M)
  4. L64
    specialize divisor_signed_table_lookup (d)
  5. L65
    apply divisor_signed_table_lookup
  6. L66
    exact hm_left
  7. L67
    exact hbound
17Separate the logical casesL68–68

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

  1. L68
    cases hv
18Establish heqL69–78

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hext witness right left.

  1. L69
    have heq : x1=u
  2. L70
    specialize hext_witness_right_left (d)
  3. L71
    specialize hext_witness_right_left (x1)
  4. L72
    specialize hext_witness_right_left (u)
  5. L73
    apply hext_witness_right_left
  6. L74
    exact hc_right
  7. L75
    exact hv_witness
  8. L76
    exact hu
  9. L77
    rewrite heq at hv_witness
  10. L78
    rewrite heq at hv_witness
19Use earlier factsL79–84

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

  1. L79
    specialize hm_right (d)
  2. L80
    specialize hm_right (u)
  3. L81
    apply hm_right
  4. L82
    exact hbound
  5. L83
    exact hv_witness
  6. L84
    exact hext_witness_right_left

Library-wide reading audit

Original defined command ledger · 84 lines
  1. 0001intro F
  2. 0002intro n
  3. 0003intro l
  4. 0004intro M
  5. 0005intro z
  6. 0006intro hm
  7. 0007intro hz
  8. 0008cases hm
  9. 0009have hext : ∃ G. ArithExtend(M,G,S l,z)
  10. 0010specialize arithmetic_signed_table_append (l)
  11. 0011specialize arithmetic_signed_table_append (M)
  12. 0012specialize arithmetic_signed_table_append (z)
  13. 0013apply arithmetic_signed_table_append
  14. 0014exact hm_left
  15. 0015cases hext
  16. 0016cases hext_witness
  17. 0017cases hext_witness_right
  18. 0018exists x
  19. 0019split
  20. 0020split
  21. 0021exact hext_witness_left
  22. 0022intro d
  23. 0023intro u
  24. 0024intro hd
  25. 0025intro hu
  26. 0026have hc : d = S l ∨ Lt(d,S l)
  27. 0027specialize le_eq_or_lt (d)
  28. 0028specialize le_eq_or_lt (S l)
  29. 0029apply le_eq_or_lt
  30. 0030exact hd
  31. 0031cases hc
  32. 0032rewrite hc_left at hu
  33. 0033rewrite hc_left at hu
  34. 0034rewrite hc_left at hu
  35. 0035rewrite hc_left at hu
  36. 0036have heq : z=u
  37. 0037specialize divisor_signed_table_at_functional (x)
  38. 0038specialize divisor_signed_table_at_functional (S l)
  39. 0039specialize divisor_signed_table_at_functional (z)
  40. 0040specialize divisor_signed_table_at_functional (u)
  41. 0041apply divisor_signed_table_at_functional
  42. 0042exact hext_witness_right_right
  43. 0043exact hu
  44. 0044rewrite heq at hz
  45. 0045rewrite heq at hz
  46. 0046rewrite heq at hz
  47. 0047rewrite hc_left
  48. 0048rewrite hc_left
  49. 0049rewrite hc_left
  50. 0050rewrite hc_left
  51. 0051rewrite hc_left
  52. 0052rewrite hc_left
  53. 0053rewrite hc_left
  54. 0054rewrite hc_left
  55. 0055exact hz
  56. 0056have hbound : Le(d,l)
  57. 0057specialize le_of_succ_le_succ (d)
  58. 0058specialize le_of_succ_le_succ (l)
  59. 0059apply le_of_succ_le_succ
  60. 0060exact hc_right
  61. 0061have hv : ∃ v. ArithAt(M,d,v)
  62. 0062specialize divisor_signed_table_lookup (l)
  63. 0063specialize divisor_signed_table_lookup (M)
  64. 0064specialize divisor_signed_table_lookup (d)
  65. 0065apply divisor_signed_table_lookup
  66. 0066exact hm_left
  67. 0067exact hbound
  68. 0068cases hv
  69. 0069have heq : x1=u
  70. 0070specialize hext_witness_right_left (d)
  71. 0071specialize hext_witness_right_left (x1)
  72. 0072specialize hext_witness_right_left (u)
  73. 0073apply hext_witness_right_left
  74. 0074exact hc_right
  75. 0075exact hv_witness
  76. 0076exact hu
  77. 0077rewrite heq at hv_witness
  78. 0078rewrite heq at hv_witness
  79. 0079specialize hm_right (d)
  80. 0080specialize hm_right (u)
  81. 0081apply hm_right
  82. 0082exact hbound
  83. 0083exact hv_witness
  84. 0084exact hext_witness_right_left