Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.
Exact expanded first-order arithmetic statement
forall F k l a b. (exists pvs_le_gap_tail_order. pvs_le_gap_tail_order + (k) = (l)) -> (forall sfs_index_tail_window sfs_value_tail_window. (exists pvs_le_gap_tail_windowlower. pvs_le_gap_tail_windowlower + (k) = (sfs_index_tail_window)) -> (exists pvs_gap_tail_windowupper. pvs_gap_tail_windowupper + S (sfs_index_tail_window) = (l)) -> (exists dst_positive_code_tail_windowentry dst_positive_scale_tail_windowentry dst_negative_code_tail_windowentry dst_negative_scale_tail_windowentry dst_positive_tail_windowentry dst_negative_tail_windowentry. (((F) = (((((dst_positive_code_tail_windowentry) + (dst_positive_scale_tail_windowentry)) * S ((dst_positive_code_tail_windowentry) + (dst_positive_scale_tail_windowentry)) + ((dst_positive_scale_tail_windowentry) + (dst_positive_scale_tail_windowentry))) + (((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) * S ((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) + ((dst_negative_scale_tail_windowentry) + (dst_negative_scale_tail_windowentry)))) * S ((((dst_positive_code_tail_windowentry) + (dst_positive_scale_tail_windowentry)) * S ((dst_positive_code_tail_windowentry) + (dst_positive_scale_tail_windowentry)) + ((dst_positive_scale_tail_windowentry) + (dst_positive_scale_tail_windowentry))) + (((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) * S ((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) + ((dst_negative_scale_tail_windowentry) + (dst_negative_scale_tail_windowentry)))) + ((((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) * S ((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) + ((dst_negative_scale_tail_windowentry) + (dst_negative_scale_tail_windowentry))) + (((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) * S ((dst_negative_code_tail_windowentry) + (dst_negative_scale_tail_windowentry)) + ((dst_negative_scale_tail_windowentry) + (dst_negative_scale_tail_windowentry)))))) /\ (((((exists ff_h_pvs_tail_windowentrypositive. ff_h_pvs_tail_windowentrypositive + S (dst_positive_tail_windowentry) = S ((S (sfs_index_tail_window)) * dst_positive_scale_tail_windowentry)) /\ exists ff_q_pvs_tail_windowentrypositive. dst_positive_code_tail_windowentry = ff_q_pvs_tail_windowentrypositive * S ((S (sfs_index_tail_window)) * dst_positive_scale_tail_windowentry) + (dst_positive_tail_windowentry))) /\ (((((exists ff_h_pvs_tail_windowentrynegative. ff_h_pvs_tail_windowentrynegative + S (dst_negative_tail_windowentry) = S ((S (sfs_index_tail_window)) * dst_negative_scale_tail_windowentry)) /\ exists ff_q_pvs_tail_windowentrynegative. dst_negative_code_tail_windowentry = ff_q_pvs_tail_windowentrynegative * S ((S (sfs_index_tail_window)) * dst_negative_scale_tail_windowentry) + (dst_negative_tail_windowentry))) /\ (exists ge_balance_positive_tail_windowentryvalue ge_balance_negative_tail_windowentryvalue. (((((sfs_value_tail_window) = 2 * (ge_balance_positive_tail_windowentryvalue) /\ (ge_balance_negative_tail_windowentryvalue) = 0) \/ exists ge_signed_half_tail_windowentryvaluedecode. (((sfs_value_tail_window) = 2 * ge_signed_half_tail_windowentryvaluedecode + 1 /\ (ge_balance_positive_tail_windowentryvalue) = 0) /\ (ge_balance_negative_tail_windowentryvalue) = S ge_signed_half_tail_windowentryvaluedecode))) /\ ((dst_positive_tail_windowentry) + ge_balance_negative_tail_windowentryvalue = (dst_negative_tail_windowentry) + ge_balance_positive_tail_windowentryvalue))))))))) -> sfs_value_tail_window=0) -> (exists dst_positive_code_tail_short dst_positive_scale_tail_short dst_negative_code_tail_short dst_negative_scale_tail_short dst_positive_sum_tail_short dst_negative_sum_tail_short. (((F) = (((((dst_positive_code_tail_short) + (dst_positive_scale_tail_short)) * S ((dst_positive_code_tail_short) + (dst_positive_scale_tail_short)) + ((dst_positive_scale_tail_short) + (dst_positive_scale_tail_short))) + (((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) * S ((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) + ((dst_negative_scale_tail_short) + (dst_negative_scale_tail_short)))) * S ((((dst_positive_code_tail_short) + (dst_positive_scale_tail_short)) * S ((dst_positive_code_tail_short) + (dst_positive_scale_tail_short)) + ((dst_positive_scale_tail_short) + (dst_positive_scale_tail_short))) + (((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) * S ((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) + ((dst_negative_scale_tail_short) + (dst_negative_scale_tail_short)))) + ((((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) * S ((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) + ((dst_negative_scale_tail_short) + (dst_negative_scale_tail_short))) + (((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) * S ((dst_negative_code_tail_short) + (dst_negative_scale_tail_short)) + ((dst_negative_scale_tail_short) + (dst_negative_scale_tail_short)))))) /\ (((exists fs_u_dst_tail_shortpositive fs_v_dst_tail_shortpositive. ((((exists fs_h_dst_tail_shortpositive_body_start. fs_h_dst_tail_shortpositive_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_shortpositive)) /\ exists fs_q_dst_tail_shortpositive_body_start. fs_u_dst_tail_shortpositive = fs_q_dst_tail_shortpositive_body_start * S ((S (0)) * fs_v_dst_tail_shortpositive) + (0))) /\ ((((exists fs_h_dst_tail_shortpositive_body_terminal. fs_h_dst_tail_shortpositive_body_terminal + S (dst_positive_sum_tail_short) = S ((S (k)) * fs_v_dst_tail_shortpositive)) /\ exists fs_q_dst_tail_shortpositive_body_terminal. fs_u_dst_tail_shortpositive = fs_q_dst_tail_shortpositive_body_terminal * S ((S (k)) * fs_v_dst_tail_shortpositive) + (dst_positive_sum_tail_short))) /\ forall fs_i_dst_tail_shortpositive_body_steps. (exists fs_lt_dst_tail_shortpositive_body_steps_bound. fs_lt_dst_tail_shortpositive_body_steps_bound + S fs_i_dst_tail_shortpositive_body_steps = k) -> exists fs_a_dst_tail_shortpositive_body_steps fs_r_dst_tail_shortpositive_body_steps fs_s_dst_tail_shortpositive_body_steps. ((((exists fs_h_dst_tail_shortpositive_body_steps_summand. fs_h_dst_tail_shortpositive_body_steps_summand + S (fs_a_dst_tail_shortpositive_body_steps) = S ((S (fs_i_dst_tail_shortpositive_body_steps)) * dst_positive_scale_tail_short)) /\ exists fs_q_dst_tail_shortpositive_body_steps_summand. dst_positive_code_tail_short = fs_q_dst_tail_shortpositive_body_steps_summand * S ((S (fs_i_dst_tail_shortpositive_body_steps)) * dst_positive_scale_tail_short) + (fs_a_dst_tail_shortpositive_body_steps))) /\ ((((exists fs_h_dst_tail_shortpositive_body_steps_partial. fs_h_dst_tail_shortpositive_body_steps_partial + S (fs_r_dst_tail_shortpositive_body_steps) = S ((S (fs_i_dst_tail_shortpositive_body_steps)) * fs_v_dst_tail_shortpositive)) /\ exists fs_q_dst_tail_shortpositive_body_steps_partial. fs_u_dst_tail_shortpositive = fs_q_dst_tail_shortpositive_body_steps_partial * S ((S (fs_i_dst_tail_shortpositive_body_steps)) * fs_v_dst_tail_shortpositive) + (fs_r_dst_tail_shortpositive_body_steps))) /\ ((((exists fs_h_dst_tail_shortpositive_body_steps_successor. fs_h_dst_tail_shortpositive_body_steps_successor + S (fs_s_dst_tail_shortpositive_body_steps) = S ((S (S fs_i_dst_tail_shortpositive_body_steps)) * fs_v_dst_tail_shortpositive)) /\ exists fs_q_dst_tail_shortpositive_body_steps_successor. fs_u_dst_tail_shortpositive = fs_q_dst_tail_shortpositive_body_steps_successor * S ((S (S fs_i_dst_tail_shortpositive_body_steps)) * fs_v_dst_tail_shortpositive) + (fs_s_dst_tail_shortpositive_body_steps))) /\ fs_s_dst_tail_shortpositive_body_steps = fs_r_dst_tail_shortpositive_body_steps + fs_a_dst_tail_shortpositive_body_steps)))))) /\ (((exists fs_u_dst_tail_shortnegative fs_v_dst_tail_shortnegative. ((((exists fs_h_dst_tail_shortnegative_body_start. fs_h_dst_tail_shortnegative_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_shortnegative)) /\ exists fs_q_dst_tail_shortnegative_body_start. fs_u_dst_tail_shortnegative = fs_q_dst_tail_shortnegative_body_start * S ((S (0)) * fs_v_dst_tail_shortnegative) + (0))) /\ ((((exists fs_h_dst_tail_shortnegative_body_terminal. fs_h_dst_tail_shortnegative_body_terminal + S (dst_negative_sum_tail_short) = S ((S (k)) * fs_v_dst_tail_shortnegative)) /\ exists fs_q_dst_tail_shortnegative_body_terminal. fs_u_dst_tail_shortnegative = fs_q_dst_tail_shortnegative_body_terminal * S ((S (k)) * fs_v_dst_tail_shortnegative) + (dst_negative_sum_tail_short))) /\ forall fs_i_dst_tail_shortnegative_body_steps. (exists fs_lt_dst_tail_shortnegative_body_steps_bound. fs_lt_dst_tail_shortnegative_body_steps_bound + S fs_i_dst_tail_shortnegative_body_steps = k) -> exists fs_a_dst_tail_shortnegative_body_steps fs_r_dst_tail_shortnegative_body_steps fs_s_dst_tail_shortnegative_body_steps. ((((exists fs_h_dst_tail_shortnegative_body_steps_summand. fs_h_dst_tail_shortnegative_body_steps_summand + S (fs_a_dst_tail_shortnegative_body_steps) = S ((S (fs_i_dst_tail_shortnegative_body_steps)) * dst_negative_scale_tail_short)) /\ exists fs_q_dst_tail_shortnegative_body_steps_summand. dst_negative_code_tail_short = fs_q_dst_tail_shortnegative_body_steps_summand * S ((S (fs_i_dst_tail_shortnegative_body_steps)) * dst_negative_scale_tail_short) + (fs_a_dst_tail_shortnegative_body_steps))) /\ ((((exists fs_h_dst_tail_shortnegative_body_steps_partial. fs_h_dst_tail_shortnegative_body_steps_partial + S (fs_r_dst_tail_shortnegative_body_steps) = S ((S (fs_i_dst_tail_shortnegative_body_steps)) * fs_v_dst_tail_shortnegative)) /\ exists fs_q_dst_tail_shortnegative_body_steps_partial. fs_u_dst_tail_shortnegative = fs_q_dst_tail_shortnegative_body_steps_partial * S ((S (fs_i_dst_tail_shortnegative_body_steps)) * fs_v_dst_tail_shortnegative) + (fs_r_dst_tail_shortnegative_body_steps))) /\ ((((exists fs_h_dst_tail_shortnegative_body_steps_successor. fs_h_dst_tail_shortnegative_body_steps_successor + S (fs_s_dst_tail_shortnegative_body_steps) = S ((S (S fs_i_dst_tail_shortnegative_body_steps)) * fs_v_dst_tail_shortnegative)) /\ exists fs_q_dst_tail_shortnegative_body_steps_successor. fs_u_dst_tail_shortnegative = fs_q_dst_tail_shortnegative_body_steps_successor * S ((S (S fs_i_dst_tail_shortnegative_body_steps)) * fs_v_dst_tail_shortnegative) + (fs_s_dst_tail_shortnegative_body_steps))) /\ fs_s_dst_tail_shortnegative_body_steps = fs_r_dst_tail_shortnegative_body_steps + fs_a_dst_tail_shortnegative_body_steps)))))) /\ (exists ge_balance_positive_tail_shortresult ge_balance_negative_tail_shortresult. (((((a) = 2 * (ge_balance_positive_tail_shortresult) /\ (ge_balance_negative_tail_shortresult) = 0) \/ exists ge_signed_half_tail_shortresultdecode. (((a) = 2 * ge_signed_half_tail_shortresultdecode + 1 /\ (ge_balance_positive_tail_shortresult) = 0) /\ (ge_balance_negative_tail_shortresult) = S ge_signed_half_tail_shortresultdecode))) /\ ((dst_positive_sum_tail_short) + ge_balance_negative_tail_shortresult = (dst_negative_sum_tail_short) + ge_balance_positive_tail_shortresult))))))))) -> (exists dst_positive_code_tail_long dst_positive_scale_tail_long dst_negative_code_tail_long dst_negative_scale_tail_long dst_positive_sum_tail_long dst_negative_sum_tail_long. (((F) = (((((dst_positive_code_tail_long) + (dst_positive_scale_tail_long)) * S ((dst_positive_code_tail_long) + (dst_positive_scale_tail_long)) + ((dst_positive_scale_tail_long) + (dst_positive_scale_tail_long))) + (((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) * S ((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) + ((dst_negative_scale_tail_long) + (dst_negative_scale_tail_long)))) * S ((((dst_positive_code_tail_long) + (dst_positive_scale_tail_long)) * S ((dst_positive_code_tail_long) + (dst_positive_scale_tail_long)) + ((dst_positive_scale_tail_long) + (dst_positive_scale_tail_long))) + (((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) * S ((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) + ((dst_negative_scale_tail_long) + (dst_negative_scale_tail_long)))) + ((((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) * S ((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) + ((dst_negative_scale_tail_long) + (dst_negative_scale_tail_long))) + (((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) * S ((dst_negative_code_tail_long) + (dst_negative_scale_tail_long)) + ((dst_negative_scale_tail_long) + (dst_negative_scale_tail_long)))))) /\ (((exists fs_u_dst_tail_longpositive fs_v_dst_tail_longpositive. ((((exists fs_h_dst_tail_longpositive_body_start. fs_h_dst_tail_longpositive_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_longpositive)) /\ exists fs_q_dst_tail_longpositive_body_start. fs_u_dst_tail_longpositive = fs_q_dst_tail_longpositive_body_start * S ((S (0)) * fs_v_dst_tail_longpositive) + (0))) /\ ((((exists fs_h_dst_tail_longpositive_body_terminal. fs_h_dst_tail_longpositive_body_terminal + S (dst_positive_sum_tail_long) = S ((S (l)) * fs_v_dst_tail_longpositive)) /\ exists fs_q_dst_tail_longpositive_body_terminal. fs_u_dst_tail_longpositive = fs_q_dst_tail_longpositive_body_terminal * S ((S (l)) * fs_v_dst_tail_longpositive) + (dst_positive_sum_tail_long))) /\ forall fs_i_dst_tail_longpositive_body_steps. (exists fs_lt_dst_tail_longpositive_body_steps_bound. fs_lt_dst_tail_longpositive_body_steps_bound + S fs_i_dst_tail_longpositive_body_steps = l) -> exists fs_a_dst_tail_longpositive_body_steps fs_r_dst_tail_longpositive_body_steps fs_s_dst_tail_longpositive_body_steps. ((((exists fs_h_dst_tail_longpositive_body_steps_summand. fs_h_dst_tail_longpositive_body_steps_summand + S (fs_a_dst_tail_longpositive_body_steps) = S ((S (fs_i_dst_tail_longpositive_body_steps)) * dst_positive_scale_tail_long)) /\ exists fs_q_dst_tail_longpositive_body_steps_summand. dst_positive_code_tail_long = fs_q_dst_tail_longpositive_body_steps_summand * S ((S (fs_i_dst_tail_longpositive_body_steps)) * dst_positive_scale_tail_long) + (fs_a_dst_tail_longpositive_body_steps))) /\ ((((exists fs_h_dst_tail_longpositive_body_steps_partial. fs_h_dst_tail_longpositive_body_steps_partial + S (fs_r_dst_tail_longpositive_body_steps) = S ((S (fs_i_dst_tail_longpositive_body_steps)) * fs_v_dst_tail_longpositive)) /\ exists fs_q_dst_tail_longpositive_body_steps_partial. fs_u_dst_tail_longpositive = fs_q_dst_tail_longpositive_body_steps_partial * S ((S (fs_i_dst_tail_longpositive_body_steps)) * fs_v_dst_tail_longpositive) + (fs_r_dst_tail_longpositive_body_steps))) /\ ((((exists fs_h_dst_tail_longpositive_body_steps_successor. fs_h_dst_tail_longpositive_body_steps_successor + S (fs_s_dst_tail_longpositive_body_steps) = S ((S (S fs_i_dst_tail_longpositive_body_steps)) * fs_v_dst_tail_longpositive)) /\ exists fs_q_dst_tail_longpositive_body_steps_successor. fs_u_dst_tail_longpositive = fs_q_dst_tail_longpositive_body_steps_successor * S ((S (S fs_i_dst_tail_longpositive_body_steps)) * fs_v_dst_tail_longpositive) + (fs_s_dst_tail_longpositive_body_steps))) /\ fs_s_dst_tail_longpositive_body_steps = fs_r_dst_tail_longpositive_body_steps + fs_a_dst_tail_longpositive_body_steps)))))) /\ (((exists fs_u_dst_tail_longnegative fs_v_dst_tail_longnegative. ((((exists fs_h_dst_tail_longnegative_body_start. fs_h_dst_tail_longnegative_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_longnegative)) /\ exists fs_q_dst_tail_longnegative_body_start. fs_u_dst_tail_longnegative = fs_q_dst_tail_longnegative_body_start * S ((S (0)) * fs_v_dst_tail_longnegative) + (0))) /\ ((((exists fs_h_dst_tail_longnegative_body_terminal. fs_h_dst_tail_longnegative_body_terminal + S (dst_negative_sum_tail_long) = S ((S (l)) * fs_v_dst_tail_longnegative)) /\ exists fs_q_dst_tail_longnegative_body_terminal. fs_u_dst_tail_longnegative = fs_q_dst_tail_longnegative_body_terminal * S ((S (l)) * fs_v_dst_tail_longnegative) + (dst_negative_sum_tail_long))) /\ forall fs_i_dst_tail_longnegative_body_steps. (exists fs_lt_dst_tail_longnegative_body_steps_bound. fs_lt_dst_tail_longnegative_body_steps_bound + S fs_i_dst_tail_longnegative_body_steps = l) -> exists fs_a_dst_tail_longnegative_body_steps fs_r_dst_tail_longnegative_body_steps fs_s_dst_tail_longnegative_body_steps. ((((exists fs_h_dst_tail_longnegative_body_steps_summand. fs_h_dst_tail_longnegative_body_steps_summand + S (fs_a_dst_tail_longnegative_body_steps) = S ((S (fs_i_dst_tail_longnegative_body_steps)) * dst_negative_scale_tail_long)) /\ exists fs_q_dst_tail_longnegative_body_steps_summand. dst_negative_code_tail_long = fs_q_dst_tail_longnegative_body_steps_summand * S ((S (fs_i_dst_tail_longnegative_body_steps)) * dst_negative_scale_tail_long) + (fs_a_dst_tail_longnegative_body_steps))) /\ ((((exists fs_h_dst_tail_longnegative_body_steps_partial. fs_h_dst_tail_longnegative_body_steps_partial + S (fs_r_dst_tail_longnegative_body_steps) = S ((S (fs_i_dst_tail_longnegative_body_steps)) * fs_v_dst_tail_longnegative)) /\ exists fs_q_dst_tail_longnegative_body_steps_partial. fs_u_dst_tail_longnegative = fs_q_dst_tail_longnegative_body_steps_partial * S ((S (fs_i_dst_tail_longnegative_body_steps)) * fs_v_dst_tail_longnegative) + (fs_r_dst_tail_longnegative_body_steps))) /\ ((((exists fs_h_dst_tail_longnegative_body_steps_successor. fs_h_dst_tail_longnegative_body_steps_successor + S (fs_s_dst_tail_longnegative_body_steps) = S ((S (S fs_i_dst_tail_longnegative_body_steps)) * fs_v_dst_tail_longnegative)) /\ exists fs_q_dst_tail_longnegative_body_steps_successor. fs_u_dst_tail_longnegative = fs_q_dst_tail_longnegative_body_steps_successor * S ((S (S fs_i_dst_tail_longnegative_body_steps)) * fs_v_dst_tail_longnegative) + (fs_s_dst_tail_longnegative_body_steps))) /\ fs_s_dst_tail_longnegative_body_steps = fs_r_dst_tail_longnegative_body_steps + fs_a_dst_tail_longnegative_body_steps)))))) /\ (exists ge_balance_positive_tail_longresult ge_balance_negative_tail_longresult. (((((b) = 2 * (ge_balance_positive_tail_longresult) /\ (ge_balance_negative_tail_longresult) = 0) \/ exists ge_signed_half_tail_longresultdecode. (((b) = 2 * ge_signed_half_tail_longresultdecode + 1 /\ (ge_balance_positive_tail_longresult) = 0) /\ (ge_balance_negative_tail_longresult) = S ge_signed_half_tail_longresultdecode))) /\ ((dst_positive_sum_tail_long) + ge_balance_negative_tail_longresult = (dst_negative_sum_tail_long) + ge_balance_positive_tail_longresult))))))))) -> a=bConstructive proof overview
Generated structural guide
Ordinary finite induction proves that a genuinely zero tail changes no actual canonical signed prefix sum.
The unchanged tactic script uses 10 declared prerequisites and contains 103 exact native proof lines.
Alpha v34 checked-use · first admitted v31 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
le_zero Stable theorem; checked-use authorized divisor_signed_sum_functional Alpha theorem; checked-use authorized le_eq_or_lt Stable theorem; checked-use authorized le_of_succ_le_succ Stable theorem; checked-use authorized divisor_signed_sum_successor_decompose Alpha theorem; checked-use authorized ZS0002 signed_zero_window_restrict le_succ_self Stable theorem; checked-use authorized le_refl Stable theorem; checked-use authorized signed_add_functional Alpha theorem; checked-use authorized signed_add_zero_right Alpha theorem; checked-use authorizedDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply 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 (1)
01Fix variables and assumptionsL1–3
02Induction on lL4–10
03Establish hkL11–20
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le zero.
04Use earlier factsL21–27
Instantiate or apply named facts and discharge the corresponding proof obligations.
05Fix variables and assumptionsL28–33
06Establish hcL34–38
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le eq or lt.
07Separate the logical casesL39–39
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L39
cases hc
08Calculate and transport equalitiesL40–45
09Use earlier factsL46–52
Instantiate or apply named facts and discharge the corresponding proof obligations.
10Establish hsmallL53–57
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le of succ le succ.
11Establish hdL58–63
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply divisor signed sum successor decompose.
- L58
have hd : ∃ u. ∃ v. SignedPrefixSum(F,l,u) ∧ (ArithAt(F,l,v) ∧ SignedAdd(u,v,b))Definitions: SignedAddArithAtSignedPrefixSum - L59
specialize divisor_signed_sum_successor_decompose (F) - L60
specialize divisor_signed_sum_successor_decompose (l) - L61
specialize divisor_signed_sum_successor_decompose (b) - L62
apply divisor_signed_sum_successor_decompose - L63
exact hb
12Separate the logical casesL64–67
13Establish hpL68–77
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L68
have hp : a=x - L69
specialize IH (a) - L70
specialize IH (x) - L71
apply IH - L72
exact hsmall - L73
specialize signed_zero_window_restrict (F) - L74
specialize signed_zero_window_restrict (k) - L75
specialize signed_zero_window_restrict (l) - L76
specialize signed_zero_window_restrict (S l) - L77
apply signed_zero_window_restrict
14Use earlier factsL78–82
15Establish hlastL83–92
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hz.
16Calculate and transport equalitiesL93–93
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L93
trans x
17Use earlier factsL94–94
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L94
exact hp
18Calculate and transport equalitiesL95–95
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L95
symm
19Use earlier factsL96–103
Instantiate or apply named facts and discharge the corresponding proof obligations.
Original exact command ledger · 103 lines
- 0001
intro F - 0002
intro k - 0003
intro l - 0004
induction l - 0005
intro a - 0006
intro b - 0007
intro hkl - 0008
intro hz - 0009
intro ha - 0010
intro hb - 0011
have hk : k=0 - 0012
specialize le_zero (k) - 0013
apply le_zero - 0014
exact hkl - 0015
rewrite hk at ha - 0016
rewrite hk at ha - 0017
rewrite hk at ha - 0018
rewrite hk at ha - 0019
rewrite hk at ha - 0020
rewrite hk at ha - 0021
specialize divisor_signed_sum_functional (F) - 0022
specialize divisor_signed_sum_functional (0) - 0023
specialize divisor_signed_sum_functional (a) - 0024
specialize divisor_signed_sum_functional (b) - 0025
apply divisor_signed_sum_functional - 0026
exact ha - 0027
exact hb - 0028
intro a - 0029
intro b - 0030
intro hkl - 0031
intro hz - 0032
intro ha - 0033
intro hb - 0034
have hc : k=S l \/ (exists pvs_gap_tail_cases. pvs_gap_tail_cases + S (k) = (S l)) - 0035
specialize le_eq_or_lt (k) - 0036
specialize le_eq_or_lt (S l) - 0037
apply le_eq_or_lt - 0038
exact hkl - 0039
cases hc - 0040
rewrite hc_left at ha - 0041
rewrite hc_left at ha - 0042
rewrite hc_left at ha - 0043
rewrite hc_left at ha - 0044
rewrite hc_left at ha - 0045
rewrite hc_left at ha - 0046
specialize divisor_signed_sum_functional (F) - 0047
specialize divisor_signed_sum_functional (S l) - 0048
specialize divisor_signed_sum_functional (a) - 0049
specialize divisor_signed_sum_functional (b) - 0050
apply divisor_signed_sum_functional - 0051
exact ha - 0052
exact hb - 0053
have hsmall : exists pvs_le_gap_tail_small. pvs_le_gap_tail_small + (k) = (l) - 0054
specialize le_of_succ_le_succ (k) - 0055
specialize le_of_succ_le_succ (l) - 0056
apply le_of_succ_le_succ - 0057
exact hc_right - 0058
have hd : exists u v. (((exists dst_positive_code_tail_prefix dst_positive_scale_tail_prefix dst_negative_code_tail_prefix dst_negative_scale_tail_prefix dst_positive_sum_tail_prefix dst_negative_sum_tail_prefix. (((F) = (((((dst_positive_code_tail_prefix) + (dst_positive_scale_tail_prefix)) * S ((dst_positive_code_tail_prefix) + (dst_positive_scale_tail_prefix)) + ((dst_positive_scale_tail_prefix) + (dst_positive_scale_tail_prefix))) + (((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) * S ((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) + ((dst_negative_scale_tail_prefix) + (dst_negative_scale_tail_prefix)))) * S ((((dst_positive_code_tail_prefix) + (dst_positive_scale_tail_prefix)) * S ((dst_positive_code_tail_prefix) + (dst_positive_scale_tail_prefix)) + ((dst_positive_scale_tail_prefix) + (dst_positive_scale_tail_prefix))) + (((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) * S ((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) + ((dst_negative_scale_tail_prefix) + (dst_negative_scale_tail_prefix)))) + ((((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) * S ((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) + ((dst_negative_scale_tail_prefix) + (dst_negative_scale_tail_prefix))) + (((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) * S ((dst_negative_code_tail_prefix) + (dst_negative_scale_tail_prefix)) + ((dst_negative_scale_tail_prefix) + (dst_negative_scale_tail_prefix)))))) /\ (((exists fs_u_dst_tail_prefixpositive fs_v_dst_tail_prefixpositive. ((((exists fs_h_dst_tail_prefixpositive_body_start. fs_h_dst_tail_prefixpositive_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_prefixpositive)) /\ exists fs_q_dst_tail_prefixpositive_body_start. fs_u_dst_tail_prefixpositive = fs_q_dst_tail_prefixpositive_body_start * S ((S (0)) * fs_v_dst_tail_prefixpositive) + (0))) /\ ((((exists fs_h_dst_tail_prefixpositive_body_terminal. fs_h_dst_tail_prefixpositive_body_terminal + S (dst_positive_sum_tail_prefix) = S ((S (l)) * fs_v_dst_tail_prefixpositive)) /\ exists fs_q_dst_tail_prefixpositive_body_terminal. fs_u_dst_tail_prefixpositive = fs_q_dst_tail_prefixpositive_body_terminal * S ((S (l)) * fs_v_dst_tail_prefixpositive) + (dst_positive_sum_tail_prefix))) /\ forall fs_i_dst_tail_prefixpositive_body_steps. (exists fs_lt_dst_tail_prefixpositive_body_steps_bound. fs_lt_dst_tail_prefixpositive_body_steps_bound + S fs_i_dst_tail_prefixpositive_body_steps = l) -> exists fs_a_dst_tail_prefixpositive_body_steps fs_r_dst_tail_prefixpositive_body_steps fs_s_dst_tail_prefixpositive_body_steps. ((((exists fs_h_dst_tail_prefixpositive_body_steps_summand. fs_h_dst_tail_prefixpositive_body_steps_summand + S (fs_a_dst_tail_prefixpositive_body_steps) = S ((S (fs_i_dst_tail_prefixpositive_body_steps)) * dst_positive_scale_tail_prefix)) /\ exists fs_q_dst_tail_prefixpositive_body_steps_summand. dst_positive_code_tail_prefix = fs_q_dst_tail_prefixpositive_body_steps_summand * S ((S (fs_i_dst_tail_prefixpositive_body_steps)) * dst_positive_scale_tail_prefix) + (fs_a_dst_tail_prefixpositive_body_steps))) /\ ((((exists fs_h_dst_tail_prefixpositive_body_steps_partial. fs_h_dst_tail_prefixpositive_body_steps_partial + S (fs_r_dst_tail_prefixpositive_body_steps) = S ((S (fs_i_dst_tail_prefixpositive_body_steps)) * fs_v_dst_tail_prefixpositive)) /\ exists fs_q_dst_tail_prefixpositive_body_steps_partial. fs_u_dst_tail_prefixpositive = fs_q_dst_tail_prefixpositive_body_steps_partial * S ((S (fs_i_dst_tail_prefixpositive_body_steps)) * fs_v_dst_tail_prefixpositive) + (fs_r_dst_tail_prefixpositive_body_steps))) /\ ((((exists fs_h_dst_tail_prefixpositive_body_steps_successor. fs_h_dst_tail_prefixpositive_body_steps_successor + S (fs_s_dst_tail_prefixpositive_body_steps) = S ((S (S fs_i_dst_tail_prefixpositive_body_steps)) * fs_v_dst_tail_prefixpositive)) /\ exists fs_q_dst_tail_prefixpositive_body_steps_successor. fs_u_dst_tail_prefixpositive = fs_q_dst_tail_prefixpositive_body_steps_successor * S ((S (S fs_i_dst_tail_prefixpositive_body_steps)) * fs_v_dst_tail_prefixpositive) + (fs_s_dst_tail_prefixpositive_body_steps))) /\ fs_s_dst_tail_prefixpositive_body_steps = fs_r_dst_tail_prefixpositive_body_steps + fs_a_dst_tail_prefixpositive_body_steps)))))) /\ (((exists fs_u_dst_tail_prefixnegative fs_v_dst_tail_prefixnegative. ((((exists fs_h_dst_tail_prefixnegative_body_start. fs_h_dst_tail_prefixnegative_body_start + S (0) = S ((S (0)) * fs_v_dst_tail_prefixnegative)) /\ exists fs_q_dst_tail_prefixnegative_body_start. fs_u_dst_tail_prefixnegative = fs_q_dst_tail_prefixnegative_body_start * S ((S (0)) * fs_v_dst_tail_prefixnegative) + (0))) /\ ((((exists fs_h_dst_tail_prefixnegative_body_terminal. fs_h_dst_tail_prefixnegative_body_terminal + S (dst_negative_sum_tail_prefix) = S ((S (l)) * fs_v_dst_tail_prefixnegative)) /\ exists fs_q_dst_tail_prefixnegative_body_terminal. fs_u_dst_tail_prefixnegative = fs_q_dst_tail_prefixnegative_body_terminal * S ((S (l)) * fs_v_dst_tail_prefixnegative) + (dst_negative_sum_tail_prefix))) /\ forall fs_i_dst_tail_prefixnegative_body_steps. (exists fs_lt_dst_tail_prefixnegative_body_steps_bound. fs_lt_dst_tail_prefixnegative_body_steps_bound + S fs_i_dst_tail_prefixnegative_body_steps = l) -> exists fs_a_dst_tail_prefixnegative_body_steps fs_r_dst_tail_prefixnegative_body_steps fs_s_dst_tail_prefixnegative_body_steps. ((((exists fs_h_dst_tail_prefixnegative_body_steps_summand. fs_h_dst_tail_prefixnegative_body_steps_summand + S (fs_a_dst_tail_prefixnegative_body_steps) = S ((S (fs_i_dst_tail_prefixnegative_body_steps)) * dst_negative_scale_tail_prefix)) /\ exists fs_q_dst_tail_prefixnegative_body_steps_summand. dst_negative_code_tail_prefix = fs_q_dst_tail_prefixnegative_body_steps_summand * S ((S (fs_i_dst_tail_prefixnegative_body_steps)) * dst_negative_scale_tail_prefix) + (fs_a_dst_tail_prefixnegative_body_steps))) /\ ((((exists fs_h_dst_tail_prefixnegative_body_steps_partial. fs_h_dst_tail_prefixnegative_body_steps_partial + S (fs_r_dst_tail_prefixnegative_body_steps) = S ((S (fs_i_dst_tail_prefixnegative_body_steps)) * fs_v_dst_tail_prefixnegative)) /\ exists fs_q_dst_tail_prefixnegative_body_steps_partial. fs_u_dst_tail_prefixnegative = fs_q_dst_tail_prefixnegative_body_steps_partial * S ((S (fs_i_dst_tail_prefixnegative_body_steps)) * fs_v_dst_tail_prefixnegative) + (fs_r_dst_tail_prefixnegative_body_steps))) /\ ((((exists fs_h_dst_tail_prefixnegative_body_steps_successor. fs_h_dst_tail_prefixnegative_body_steps_successor + S (fs_s_dst_tail_prefixnegative_body_steps) = S ((S (S fs_i_dst_tail_prefixnegative_body_steps)) * fs_v_dst_tail_prefixnegative)) /\ exists fs_q_dst_tail_prefixnegative_body_steps_successor. fs_u_dst_tail_prefixnegative = fs_q_dst_tail_prefixnegative_body_steps_successor * S ((S (S fs_i_dst_tail_prefixnegative_body_steps)) * fs_v_dst_tail_prefixnegative) + (fs_s_dst_tail_prefixnegative_body_steps))) /\ fs_s_dst_tail_prefixnegative_body_steps = fs_r_dst_tail_prefixnegative_body_steps + fs_a_dst_tail_prefixnegative_body_steps)))))) /\ (exists ge_balance_positive_tail_prefixresult ge_balance_negative_tail_prefixresult. (((((u) = 2 * (ge_balance_positive_tail_prefixresult) /\ (ge_balance_negative_tail_prefixresult) = 0) \/ exists ge_signed_half_tail_prefixresultdecode. (((u) = 2 * ge_signed_half_tail_prefixresultdecode + 1 /\ (ge_balance_positive_tail_prefixresult) = 0) /\ (ge_balance_negative_tail_prefixresult) = S ge_signed_half_tail_prefixresultdecode))) /\ ((dst_positive_sum_tail_prefix) + ge_balance_negative_tail_prefixresult = (dst_negative_sum_tail_prefix) + ge_balance_positive_tail_prefixresult))))))))) /\ (((exists dst_positive_code_tail_entry dst_positive_scale_tail_entry dst_negative_code_tail_entry dst_negative_scale_tail_entry dst_positive_tail_entry dst_negative_tail_entry. (((F) = (((((dst_positive_code_tail_entry) + (dst_positive_scale_tail_entry)) * S ((dst_positive_code_tail_entry) + (dst_positive_scale_tail_entry)) + ((dst_positive_scale_tail_entry) + (dst_positive_scale_tail_entry))) + (((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) * S ((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) + ((dst_negative_scale_tail_entry) + (dst_negative_scale_tail_entry)))) * S ((((dst_positive_code_tail_entry) + (dst_positive_scale_tail_entry)) * S ((dst_positive_code_tail_entry) + (dst_positive_scale_tail_entry)) + ((dst_positive_scale_tail_entry) + (dst_positive_scale_tail_entry))) + (((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) * S ((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) + ((dst_negative_scale_tail_entry) + (dst_negative_scale_tail_entry)))) + ((((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) * S ((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) + ((dst_negative_scale_tail_entry) + (dst_negative_scale_tail_entry))) + (((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) * S ((dst_negative_code_tail_entry) + (dst_negative_scale_tail_entry)) + ((dst_negative_scale_tail_entry) + (dst_negative_scale_tail_entry)))))) /\ (((((exists ff_h_pvs_tail_entrypositive. ff_h_pvs_tail_entrypositive + S (dst_positive_tail_entry) = S ((S (l)) * dst_positive_scale_tail_entry)) /\ exists ff_q_pvs_tail_entrypositive. dst_positive_code_tail_entry = ff_q_pvs_tail_entrypositive * S ((S (l)) * dst_positive_scale_tail_entry) + (dst_positive_tail_entry))) /\ (((((exists ff_h_pvs_tail_entrynegative. ff_h_pvs_tail_entrynegative + S (dst_negative_tail_entry) = S ((S (l)) * dst_negative_scale_tail_entry)) /\ exists ff_q_pvs_tail_entrynegative. dst_negative_code_tail_entry = ff_q_pvs_tail_entrynegative * S ((S (l)) * dst_negative_scale_tail_entry) + (dst_negative_tail_entry))) /\ (exists ge_balance_positive_tail_entryvalue ge_balance_negative_tail_entryvalue. (((((v) = 2 * (ge_balance_positive_tail_entryvalue) /\ (ge_balance_negative_tail_entryvalue) = 0) \/ exists ge_signed_half_tail_entryvaluedecode. (((v) = 2 * ge_signed_half_tail_entryvaluedecode + 1 /\ (ge_balance_positive_tail_entryvalue) = 0) /\ (ge_balance_negative_tail_entryvalue) = S ge_signed_half_tail_entryvaluedecode))) /\ ((dst_positive_tail_entry) + ge_balance_negative_tail_entryvalue = (dst_negative_tail_entry) + ge_balance_positive_tail_entryvalue))))))))) /\ (exists dsa_ap_tail_add dsa_an_tail_add dsa_bp_tail_add dsa_bn_tail_add dsa_cp_tail_add dsa_cn_tail_add. (((((u) = 2 * (dsa_ap_tail_add) /\ (dsa_an_tail_add) = 0) \/ exists ge_signed_half_tail_addleft. (((u) = 2 * ge_signed_half_tail_addleft + 1 /\ (dsa_ap_tail_add) = 0) /\ (dsa_an_tail_add) = S ge_signed_half_tail_addleft))) /\ ((((((v) = 2 * (dsa_bp_tail_add) /\ (dsa_bn_tail_add) = 0) \/ exists ge_signed_half_tail_addright. (((v) = 2 * ge_signed_half_tail_addright + 1 /\ (dsa_bp_tail_add) = 0) /\ (dsa_bn_tail_add) = S ge_signed_half_tail_addright))) /\ ((((((b) = 2 * (dsa_cp_tail_add) /\ (dsa_cn_tail_add) = 0) \/ exists ge_signed_half_tail_addoutput. (((b) = 2 * ge_signed_half_tail_addoutput + 1 /\ (dsa_cp_tail_add) = 0) /\ (dsa_cn_tail_add) = S ge_signed_half_tail_addoutput))) /\ ((dsa_ap_tail_add + dsa_bp_tail_add) + dsa_cn_tail_add = (dsa_an_tail_add + dsa_bn_tail_add) + dsa_cp_tail_add))))))))))) - 0059
specialize divisor_signed_sum_successor_decompose (F) - 0060
specialize divisor_signed_sum_successor_decompose (l) - 0061
specialize divisor_signed_sum_successor_decompose (b) - 0062
apply divisor_signed_sum_successor_decompose - 0063
exact hb - 0064
cases hd - 0065
cases hd_witness - 0066
cases hd_witness_witness - 0067
cases hd_witness_witness_right - 0068
have hp : a=x - 0069
specialize IH (a) - 0070
specialize IH (x) - 0071
apply IH - 0072
exact hsmall - 0073
specialize signed_zero_window_restrict (F) - 0074
specialize signed_zero_window_restrict (k) - 0075
specialize signed_zero_window_restrict (l) - 0076
specialize signed_zero_window_restrict (S l) - 0077
apply signed_zero_window_restrict - 0078
specialize le_succ_self (l) - 0079
apply le_succ_self - 0080
exact hz - 0081
exact ha - 0082
exact hd_witness_witness_left - 0083
have hlast : x1=0 - 0084
specialize hz (l) - 0085
specialize hz (x1) - 0086
apply hz - 0087
exact hsmall - 0088
specialize le_refl (S l) - 0089
apply le_refl - 0090
exact hd_witness_witness_right_left - 0091
rewrite hlast at hd_witness_witness_right_right - 0092
rewrite hlast at hd_witness_witness_right_right - 0093
trans x - 0094
exact hp - 0095
symm - 0096
specialize signed_add_functional (x) - 0097
specialize signed_add_functional (0) - 0098
specialize signed_add_functional (b) - 0099
specialize signed_add_functional (x) - 0100
apply signed_add_functional - 0101
exact hd_witness_witness_right_right - 0102
specialize signed_add_zero_right (x) - 0103
apply signed_add_zero_right