Exact expanded first-order arithmetic statement
forall F G pb pc nb nc qb qc mb mc r s l. ((F) = (((((pb) + (pc)) * S ((pb) + (pc)) + ((pc) + (pc))) + (((nb) + (nc)) * S ((nb) + (nc)) + ((nc) + (nc)))) * S ((((pb) + (pc)) * S ((pb) + (pc)) + ((pc) + (pc))) + (((nb) + (nc)) * S ((nb) + (nc)) + ((nc) + (nc)))) + ((((nb) + (nc)) * S ((nb) + (nc)) + ((nc) + (nc))) + (((nb) + (nc)) * S ((nb) + (nc)) + ((nc) + (nc)))))) -> ((G) = (((((qb) + (qc)) * S ((qb) + (qc)) + ((qc) + (qc))) + (((mb) + (mc)) * S ((mb) + (mc)) + ((mc) + (mc)))) * S ((((qb) + (qc)) * S ((qb) + (qc)) + ((qc) + (qc))) + (((mb) + (mc)) * S ((mb) + (mc)) + ((mc) + (mc)))) + ((((mb) + (mc)) * S ((mb) + (mc)) + ((mc) + (mc))) + (((mb) + (mc)) * S ((mb) + (mc)) + ((mc) + (mc)))))) -> (((forall fms_i_component_datapositive fms_j_component_datapositive fms_v_component_datapositive. (exists fms_gap_component_datapositive. fms_gap_component_datapositive + S (fms_i_component_datapositive) = (l)) -> (((exists fs_h_fms_component_datapositive_index. fs_h_fms_component_datapositive_index + S (fms_j_component_datapositive) = S ((S (fms_i_component_datapositive)) * s)) /\ exists fs_q_fms_component_datapositive_index. r = fs_q_fms_component_datapositive_index * S ((S (fms_i_component_datapositive)) * s) + (fms_j_component_datapositive))) -> (((exists fs_h_fms_component_datapositive_source. fs_h_fms_component_datapositive_source + S (fms_v_component_datapositive) = S ((S (fms_j_component_datapositive)) * pc)) /\ exists fs_q_fms_component_datapositive_source. pb = fs_q_fms_component_datapositive_source * S ((S (fms_j_component_datapositive)) * pc) + (fms_v_component_datapositive))) -> (((exists fs_h_fms_component_datapositive_target. fs_h_fms_component_datapositive_target + S (fms_v_component_datapositive) = S ((S (fms_i_component_datapositive)) * qc)) /\ exists fs_q_fms_component_datapositive_target. qb = fs_q_fms_component_datapositive_target * S ((S (fms_i_component_datapositive)) * qc) + (fms_v_component_datapositive)))) /\ (forall fms_i_component_datanegative fms_j_component_datanegative fms_v_component_datanegative. (exists fms_gap_component_datanegative. fms_gap_component_datanegative + S (fms_i_component_datanegative) = (l)) -> (((exists fs_h_fms_component_datanegative_index. fs_h_fms_component_datanegative_index + S (fms_j_component_datanegative) = S ((S (fms_i_component_datanegative)) * s)) /\ exists fs_q_fms_component_datanegative_index. r = fs_q_fms_component_datanegative_index * S ((S (fms_i_component_datanegative)) * s) + (fms_j_component_datanegative))) -> (((exists fs_h_fms_component_datanegative_source. fs_h_fms_component_datanegative_source + S (fms_v_component_datanegative) = S ((S (fms_j_component_datanegative)) * nc)) /\ exists fs_q_fms_component_datanegative_source. nb = fs_q_fms_component_datanegative_source * S ((S (fms_j_component_datanegative)) * nc) + (fms_v_component_datanegative))) -> (((exists fs_h_fms_component_datanegative_target. fs_h_fms_component_datanegative_target + S (fms_v_component_datanegative) = S ((S (fms_i_component_datanegative)) * mc)) /\ exists fs_q_fms_component_datanegative_target. mb = fs_q_fms_component_datanegative_target * S ((S (fms_i_component_datanegative)) * mc) + (fms_v_component_datanegative)))))) -> (forall dsr_index_component_result dsr_image_component_result dsr_value_component_result. (exists pvs_gap_component_resultbound. pvs_gap_component_resultbound + S (dsr_index_component_result) = (l)) -> (((exists ff_h_pvs_component_resultmap. ff_h_pvs_component_resultmap + S (dsr_image_component_result) = S ((S (dsr_index_component_result)) * s)) /\ exists ff_q_pvs_component_resultmap. r = ff_q_pvs_component_resultmap * S ((S (dsr_index_component_result)) * s) + (dsr_image_component_result))) -> (exists dst_positive_code_component_resultsource dst_positive_scale_component_resultsource dst_negative_code_component_resultsource dst_negative_scale_component_resultsource dst_positive_component_resultsource dst_negative_component_resultsource. (((F) = (((((dst_positive_code_component_resultsource) + (dst_positive_scale_component_resultsource)) * S ((dst_positive_code_component_resultsource) + (dst_positive_scale_component_resultsource)) + ((dst_positive_scale_component_resultsource) + (dst_positive_scale_component_resultsource))) + (((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) * S ((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) + ((dst_negative_scale_component_resultsource) + (dst_negative_scale_component_resultsource)))) * S ((((dst_positive_code_component_resultsource) + (dst_positive_scale_component_resultsource)) * S ((dst_positive_code_component_resultsource) + (dst_positive_scale_component_resultsource)) + ((dst_positive_scale_component_resultsource) + (dst_positive_scale_component_resultsource))) + (((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) * S ((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) + ((dst_negative_scale_component_resultsource) + (dst_negative_scale_component_resultsource)))) + ((((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) * S ((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) + ((dst_negative_scale_component_resultsource) + (dst_negative_scale_component_resultsource))) + (((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) * S ((dst_negative_code_component_resultsource) + (dst_negative_scale_component_resultsource)) + ((dst_negative_scale_component_resultsource) + (dst_negative_scale_component_resultsource)))))) /\ (((((exists ff_h_pvs_component_resultsourcepositive. ff_h_pvs_component_resultsourcepositive + S (dst_positive_component_resultsource) = S ((S (dsr_image_component_result)) * dst_positive_scale_component_resultsource)) /\ exists ff_q_pvs_component_resultsourcepositive. dst_positive_code_component_resultsource = ff_q_pvs_component_resultsourcepositive * S ((S (dsr_image_component_result)) * dst_positive_scale_component_resultsource) + (dst_positive_component_resultsource))) /\ (((((exists ff_h_pvs_component_resultsourcenegative. ff_h_pvs_component_resultsourcenegative + S (dst_negative_component_resultsource) = S ((S (dsr_image_component_result)) * dst_negative_scale_component_resultsource)) /\ exists ff_q_pvs_component_resultsourcenegative. dst_negative_code_component_resultsource = ff_q_pvs_component_resultsourcenegative * S ((S (dsr_image_component_result)) * dst_negative_scale_component_resultsource) + (dst_negative_component_resultsource))) /\ (exists ge_balance_positive_component_resultsourcevalue ge_balance_negative_component_resultsourcevalue. (((((dsr_value_component_result) = 2 * (ge_balance_positive_component_resultsourcevalue) /\ (ge_balance_negative_component_resultsourcevalue) = 0) \/ exists ge_signed_half_component_resultsourcevaluedecode. (((dsr_value_component_result) = 2 * ge_signed_half_component_resultsourcevaluedecode + 1 /\ (ge_balance_positive_component_resultsourcevalue) = 0) /\ (ge_balance_negative_component_resultsourcevalue) = S ge_signed_half_component_resultsourcevaluedecode))) /\ ((dst_positive_component_resultsource) + ge_balance_negative_component_resultsourcevalue = (dst_negative_component_resultsource) + ge_balance_positive_component_resultsourcevalue))))))))) -> (exists dst_positive_code_component_resulttarget dst_positive_scale_component_resulttarget dst_negative_code_component_resulttarget dst_negative_scale_component_resulttarget dst_positive_component_resulttarget dst_negative_component_resulttarget. (((G) = (((((dst_positive_code_component_resulttarget) + (dst_positive_scale_component_resulttarget)) * S ((dst_positive_code_component_resulttarget) + (dst_positive_scale_component_resulttarget)) + ((dst_positive_scale_component_resulttarget) + (dst_positive_scale_component_resulttarget))) + (((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) * S ((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) + ((dst_negative_scale_component_resulttarget) + (dst_negative_scale_component_resulttarget)))) * S ((((dst_positive_code_component_resulttarget) + (dst_positive_scale_component_resulttarget)) * S ((dst_positive_code_component_resulttarget) + (dst_positive_scale_component_resulttarget)) + ((dst_positive_scale_component_resulttarget) + (dst_positive_scale_component_resulttarget))) + (((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) * S ((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) + ((dst_negative_scale_component_resulttarget) + (dst_negative_scale_component_resulttarget)))) + ((((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) * S ((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) + ((dst_negative_scale_component_resulttarget) + (dst_negative_scale_component_resulttarget))) + (((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) * S ((dst_negative_code_component_resulttarget) + (dst_negative_scale_component_resulttarget)) + ((dst_negative_scale_component_resulttarget) + (dst_negative_scale_component_resulttarget)))))) /\ (((((exists ff_h_pvs_component_resulttargetpositive. ff_h_pvs_component_resulttargetpositive + S (dst_positive_component_resulttarget) = S ((S (dsr_index_component_result)) * dst_positive_scale_component_resulttarget)) /\ exists ff_q_pvs_component_resulttargetpositive. dst_positive_code_component_resulttarget = ff_q_pvs_component_resulttargetpositive * S ((S (dsr_index_component_result)) * dst_positive_scale_component_resulttarget) + (dst_positive_component_resulttarget))) /\ (((((exists ff_h_pvs_component_resulttargetnegative. ff_h_pvs_component_resulttargetnegative + S (dst_negative_component_resulttarget) = S ((S (dsr_index_component_result)) * dst_negative_scale_component_resulttarget)) /\ exists ff_q_pvs_component_resulttargetnegative. dst_negative_code_component_resulttarget = ff_q_pvs_component_resulttargetnegative * S ((S (dsr_index_component_result)) * dst_negative_scale_component_resulttarget) + (dst_negative_component_resulttarget))) /\ (exists ge_balance_positive_component_resulttargetvalue ge_balance_negative_component_resulttargetvalue. (((((dsr_value_component_result) = 2 * (ge_balance_positive_component_resulttargetvalue) /\ (ge_balance_negative_component_resulttargetvalue) = 0) \/ exists ge_signed_half_component_resulttargetvaluedecode. (((dsr_value_component_result) = 2 * ge_signed_half_component_resulttargetvaluedecode + 1 /\ (ge_balance_positive_component_resulttargetvalue) = 0) /\ (ge_balance_negative_component_resulttargetvalue) = S ge_signed_half_component_resulttargetvaluedecode))) /\ ((dst_positive_component_resulttarget) + ge_balance_negative_component_resulttargetvalue = (dst_negative_component_resulttarget) + ge_balance_positive_component_resulttargetvalue))))))))))Constructive proof overview
Generated structural guide
Real component composition implements the signed lookup pullback exactly, at every bounded target index.
The unchanged tactic script uses 2 declared prerequisites and contains 64 exact native proof lines.
Public research checkpoint: original HA and independently compiled Lean verified; not Alpha-enrolled, no Alpha checked-use authority; not Stable
Proof neighborhood
Direct dependencies
Direct dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. The literal dependency-closed bundle is checked by original HA and the independently compiled Lean verifier. Public delivery grants no Alpha checked-use authority or Stable membership.
Read the argument
Proof checkpoints
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.
Named ingredients (2)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–20
03Fix variables and assumptionsL21–22
04Separate the logical casesL23–23
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L23
cases hcompose
05Establish hpartsL24–33
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply divisor signed table at to components.
- L24
have hparts : ∃ p. ∃ n. BetaAt(pb,pc,j,p) ∧ (BetaAt(nb,nc,j,n) ∧ SignedBalance(z,p,n))Definitions: SignedBalanceBetaAt - L25
specialize divisor_signed_table_at_to_components (F) - L26
specialize divisor_signed_table_at_to_components (pb) - L27
specialize divisor_signed_table_at_to_components (pc) - L28
specialize divisor_signed_table_at_to_components (nb) - L29
specialize divisor_signed_table_at_to_components (nc) - L30
specialize divisor_signed_table_at_to_components (j) - L31
specialize divisor_signed_table_at_to_components (z) - L32
apply divisor_signed_table_at_to_components - L33
exact hF
06Use earlier factsL34–34
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L34
exact hsource
07Separate the logical casesL35–38
08Use earlier factsL39–48
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L39
specialize divisor_signed_table_at_from_components (G) - L40
specialize divisor_signed_table_at_from_components (qb) - L41
specialize divisor_signed_table_at_from_components (qc) - L42
specialize divisor_signed_table_at_from_components (mb) - L43
specialize divisor_signed_table_at_from_components (mc) - L44
specialize divisor_signed_table_at_from_components (i) - L45
specialize divisor_signed_table_at_from_components (x) - L46
specialize divisor_signed_table_at_from_components (x1) - L47
specialize divisor_signed_table_at_from_components (z) - L48
apply divisor_signed_table_at_from_components
09Use earlier factsL49–58
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original exact command ledger · 64 lines
- 0001
intro F - 0002
intro G - 0003
intro pb - 0004
intro pc - 0005
intro nb - 0006
intro nc - 0007
intro qb - 0008
intro qc - 0009
intro mb - 0010
intro mc - 0011
intro r - 0012
intro s - 0013
intro l - 0014
intro hF - 0015
intro hG - 0016
intro hcompose - 0017
intro i - 0018
intro j - 0019
intro z - 0020
intro hi - 0021
intro hmap - 0022
intro hsource - 0023
cases hcompose - 0024
have hparts : exists p n. (((((exists ff_h_pvs_component_valuespositive. ff_h_pvs_component_valuespositive + S (p) = S ((S (j)) * pc)) /\ exists ff_q_pvs_component_valuespositive. pb = ff_q_pvs_component_valuespositive * S ((S (j)) * pc) + (p))) /\ (((((exists ff_h_pvs_component_valuesnegative. ff_h_pvs_component_valuesnegative + S (n) = S ((S (j)) * nc)) /\ exists ff_q_pvs_component_valuesnegative. nb = ff_q_pvs_component_valuesnegative * S ((S (j)) * nc) + (n))) /\ (exists ge_balance_positive_component_valuesvalue ge_balance_negative_component_valuesvalue. (((((z) = 2 * (ge_balance_positive_component_valuesvalue) /\ (ge_balance_negative_component_valuesvalue) = 0) \/ exists ge_signed_half_component_valuesvaluedecode. (((z) = 2 * ge_signed_half_component_valuesvaluedecode + 1 /\ (ge_balance_positive_component_valuesvalue) = 0) /\ (ge_balance_negative_component_valuesvalue) = S ge_signed_half_component_valuesvaluedecode))) /\ ((p) + ge_balance_negative_component_valuesvalue = (n) + ge_balance_positive_component_valuesvalue))))))) - 0025
specialize divisor_signed_table_at_to_components (F) - 0026
specialize divisor_signed_table_at_to_components (pb) - 0027
specialize divisor_signed_table_at_to_components (pc) - 0028
specialize divisor_signed_table_at_to_components (nb) - 0029
specialize divisor_signed_table_at_to_components (nc) - 0030
specialize divisor_signed_table_at_to_components (j) - 0031
specialize divisor_signed_table_at_to_components (z) - 0032
apply divisor_signed_table_at_to_components - 0033
exact hF - 0034
exact hsource - 0035
cases hparts - 0036
cases hparts_witness - 0037
cases hparts_witness_witness - 0038
cases hparts_witness_witness_right - 0039
specialize divisor_signed_table_at_from_components (G) - 0040
specialize divisor_signed_table_at_from_components (qb) - 0041
specialize divisor_signed_table_at_from_components (qc) - 0042
specialize divisor_signed_table_at_from_components (mb) - 0043
specialize divisor_signed_table_at_from_components (mc) - 0044
specialize divisor_signed_table_at_from_components (i) - 0045
specialize divisor_signed_table_at_from_components (x) - 0046
specialize divisor_signed_table_at_from_components (x1) - 0047
specialize divisor_signed_table_at_from_components (z) - 0048
apply divisor_signed_table_at_from_components - 0049
exact hG - 0050
specialize hcompose_left (i) - 0051
specialize hcompose_left (j) - 0052
specialize hcompose_left (x) - 0053
apply hcompose_left - 0054
exact hi - 0055
exact hmap - 0056
exact hparts_witness_witness_left - 0057
specialize hcompose_right (i) - 0058
specialize hcompose_right (j) - 0059
specialize hcompose_right (x1) - 0060
apply hcompose_right - 0061
exact hi - 0062
exact hmap - 0063
exact hparts_witness_witness_right_left - 0064
exact hparts_witness_witness_right_right