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 ab ac AB AC bb bc d N a b db dc eb ec u v. (forall mdr_i_pfp_tri_sum_equal mdr_a_pfp_tri_sum_equal. (exists mdr_gap_pfp_tri_sum_equalb. mdr_gap_pfp_tri_sum_equalb + S (mdr_i_pfp_tri_sum_equal) = (N)) -> (((exists ff_h_mdr_pfp_tri_sum_equalo. ff_h_mdr_pfp_tri_sum_equalo + S (mdr_a_pfp_tri_sum_equal) = S ((S (mdr_i_pfp_tri_sum_equal)) * ac)) /\ exists ff_q_mdr_pfp_tri_sum_equalo. ab = ff_q_mdr_pfp_tri_sum_equalo * S ((S (mdr_i_pfp_tri_sum_equal)) * ac) + (mdr_a_pfp_tri_sum_equal))) -> (((exists ff_h_mdr_pfp_tri_sum_equaln. ff_h_mdr_pfp_tri_sum_equaln + S (mdr_a_pfp_tri_sum_equal) = S ((S (mdr_i_pfp_tri_sum_equal)) * AC)) /\ exists ff_q_mdr_pfp_tri_sum_equaln. AB = ff_q_mdr_pfp_tri_sum_equaln * S ((S (mdr_i_pfp_tri_sum_equal)) * AC) + (mdr_a_pfp_tri_sum_equal)))) -> (((exists ff_h_pfp_tri_sum_appended. ff_h_pfp_tri_sum_appended + S (a) = S ((S (N)) * AC)) /\ exists ff_q_pfp_tri_sum_appended. AB = ff_q_pfp_tri_sum_appended * S ((S (N)) * AC) + (a))) -> (((exists ff_h_pfp_tri_sum_head. ff_h_pfp_tri_sum_head + S (b) = S ((S (0)) * bc)) /\ exists ff_q_pfp_tri_sum_head. bb = ff_q_pfp_tri_sum_head * S ((S (0)) * bc) + (b))) -> (forall pfc_index_tri_sum_old_table. (exists pfa_gap_tri_sum_old_tablebound. pfa_gap_tri_sum_old_tablebound + S (pfc_index_tri_sum_old_table) = (S N)) -> exists pfc_value_tri_sum_old_table. ((((exists ff_h_pfp_tri_sum_old_tableentry. ff_h_pfp_tri_sum_old_tableentry + S (pfc_value_tri_sum_old_table) = S ((S (pfc_index_tri_sum_old_table)) * dc)) /\ exists ff_q_pfp_tri_sum_old_tableentry. db = ff_q_pfp_tri_sum_old_tableentry * S ((S (pfc_index_tri_sum_old_table)) * dc) + (pfc_value_tri_sum_old_table))) /\ ((exists pfc_complement_tri_sum_old_tableterm pfc_left_tri_sum_old_tableterm pfc_right_tri_sum_old_tableterm. (((pfc_index_tri_sum_old_table)+pfc_complement_tri_sum_old_tableterm=(N)) /\ ((((((exists pfa_gap_tri_sum_old_tabletermleftinside. pfa_gap_tri_sum_old_tabletermleftinside + S (pfc_index_tri_sum_old_table) = (N)) /\ ((((exists ff_h_pfp_tri_sum_old_tabletermleftentry. ff_h_pfp_tri_sum_old_tabletermleftentry + S (pfc_left_tri_sum_old_tableterm) = S ((S (pfc_index_tri_sum_old_table)) * ac)) /\ exists ff_q_pfp_tri_sum_old_tabletermleftentry. ab = ff_q_pfp_tri_sum_old_tabletermleftentry * S ((S (pfc_index_tri_sum_old_table)) * ac) + (pfc_left_tri_sum_old_tableterm)))))) \/ (((exists pfc_gap_tri_sum_old_tabletermleftoutside. pfc_gap_tri_sum_old_tabletermleftoutside+(N)=(pfc_index_tri_sum_old_table)) /\ (((pfc_left_tri_sum_old_tableterm)=0))))) /\ ((((((exists pfa_gap_tri_sum_old_tabletermrightinside. pfa_gap_tri_sum_old_tabletermrightinside + S (pfc_complement_tri_sum_old_tableterm) = (S d)) /\ ((((exists ff_h_pfp_tri_sum_old_tabletermrightentry. ff_h_pfp_tri_sum_old_tabletermrightentry + S (pfc_right_tri_sum_old_tableterm) = S ((S (pfc_complement_tri_sum_old_tableterm)) * bc)) /\ exists ff_q_pfp_tri_sum_old_tabletermrightentry. bb = ff_q_pfp_tri_sum_old_tabletermrightentry * S ((S (pfc_complement_tri_sum_old_tableterm)) * bc) + (pfc_right_tri_sum_old_tableterm)))))) \/ (((exists pfc_gap_tri_sum_old_tabletermrightoutside. pfc_gap_tri_sum_old_tabletermrightoutside+(S d)=(pfc_complement_tri_sum_old_tableterm)) /\ (((pfc_right_tri_sum_old_tableterm)=0))))) /\ (((pfc_value_tri_sum_old_table)=pfc_left_tri_sum_old_tableterm*pfc_right_tri_sum_old_tableterm))))))))))) -> (exists fs_u_pfc_tri_sum_old_actual fs_v_pfc_tri_sum_old_actual. ((((exists fs_h_pfc_tri_sum_old_actual_body_start. fs_h_pfc_tri_sum_old_actual_body_start + S (0) = S ((S (0)) * fs_v_pfc_tri_sum_old_actual)) /\ exists fs_q_pfc_tri_sum_old_actual_body_start. fs_u_pfc_tri_sum_old_actual = fs_q_pfc_tri_sum_old_actual_body_start * S ((S (0)) * fs_v_pfc_tri_sum_old_actual) + (0))) /\ ((((exists fs_h_pfc_tri_sum_old_actual_body_terminal. fs_h_pfc_tri_sum_old_actual_body_terminal + S (u) = S ((S (S N)) * fs_v_pfc_tri_sum_old_actual)) /\ exists fs_q_pfc_tri_sum_old_actual_body_terminal. fs_u_pfc_tri_sum_old_actual = fs_q_pfc_tri_sum_old_actual_body_terminal * S ((S (S N)) * fs_v_pfc_tri_sum_old_actual) + (u))) /\ forall fs_i_pfc_tri_sum_old_actual_body_steps. (exists fs_lt_pfc_tri_sum_old_actual_body_steps_bound. fs_lt_pfc_tri_sum_old_actual_body_steps_bound + S fs_i_pfc_tri_sum_old_actual_body_steps = S N) -> exists fs_a_pfc_tri_sum_old_actual_body_steps fs_r_pfc_tri_sum_old_actual_body_steps fs_s_pfc_tri_sum_old_actual_body_steps. ((((exists fs_h_pfc_tri_sum_old_actual_body_steps_summand. fs_h_pfc_tri_sum_old_actual_body_steps_summand + S (fs_a_pfc_tri_sum_old_actual_body_steps) = S ((S (fs_i_pfc_tri_sum_old_actual_body_steps)) * dc)) /\ exists fs_q_pfc_tri_sum_old_actual_body_steps_summand. db = fs_q_pfc_tri_sum_old_actual_body_steps_summand * S ((S (fs_i_pfc_tri_sum_old_actual_body_steps)) * dc) + (fs_a_pfc_tri_sum_old_actual_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_old_actual_body_steps_partial. fs_h_pfc_tri_sum_old_actual_body_steps_partial + S (fs_r_pfc_tri_sum_old_actual_body_steps) = S ((S (fs_i_pfc_tri_sum_old_actual_body_steps)) * fs_v_pfc_tri_sum_old_actual)) /\ exists fs_q_pfc_tri_sum_old_actual_body_steps_partial. fs_u_pfc_tri_sum_old_actual = fs_q_pfc_tri_sum_old_actual_body_steps_partial * S ((S (fs_i_pfc_tri_sum_old_actual_body_steps)) * fs_v_pfc_tri_sum_old_actual) + (fs_r_pfc_tri_sum_old_actual_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_old_actual_body_steps_successor. fs_h_pfc_tri_sum_old_actual_body_steps_successor + S (fs_s_pfc_tri_sum_old_actual_body_steps) = S ((S (S fs_i_pfc_tri_sum_old_actual_body_steps)) * fs_v_pfc_tri_sum_old_actual)) /\ exists fs_q_pfc_tri_sum_old_actual_body_steps_successor. fs_u_pfc_tri_sum_old_actual = fs_q_pfc_tri_sum_old_actual_body_steps_successor * S ((S (S fs_i_pfc_tri_sum_old_actual_body_steps)) * fs_v_pfc_tri_sum_old_actual) + (fs_s_pfc_tri_sum_old_actual_body_steps))) /\ fs_s_pfc_tri_sum_old_actual_body_steps = fs_r_pfc_tri_sum_old_actual_body_steps + fs_a_pfc_tri_sum_old_actual_body_steps)))))) -> (forall pfc_index_tri_sum_new_table. (exists pfa_gap_tri_sum_new_tablebound. pfa_gap_tri_sum_new_tablebound + S (pfc_index_tri_sum_new_table) = (S N)) -> exists pfc_value_tri_sum_new_table. ((((exists ff_h_pfp_tri_sum_new_tableentry. ff_h_pfp_tri_sum_new_tableentry + S (pfc_value_tri_sum_new_table) = S ((S (pfc_index_tri_sum_new_table)) * ec)) /\ exists ff_q_pfp_tri_sum_new_tableentry. eb = ff_q_pfp_tri_sum_new_tableentry * S ((S (pfc_index_tri_sum_new_table)) * ec) + (pfc_value_tri_sum_new_table))) /\ ((exists pfc_complement_tri_sum_new_tableterm pfc_left_tri_sum_new_tableterm pfc_right_tri_sum_new_tableterm. (((pfc_index_tri_sum_new_table)+pfc_complement_tri_sum_new_tableterm=(N)) /\ ((((((exists pfa_gap_tri_sum_new_tabletermleftinside. pfa_gap_tri_sum_new_tabletermleftinside + S (pfc_index_tri_sum_new_table) = (S N)) /\ ((((exists ff_h_pfp_tri_sum_new_tabletermleftentry. ff_h_pfp_tri_sum_new_tabletermleftentry + S (pfc_left_tri_sum_new_tableterm) = S ((S (pfc_index_tri_sum_new_table)) * AC)) /\ exists ff_q_pfp_tri_sum_new_tabletermleftentry. AB = ff_q_pfp_tri_sum_new_tabletermleftentry * S ((S (pfc_index_tri_sum_new_table)) * AC) + (pfc_left_tri_sum_new_tableterm)))))) \/ (((exists pfc_gap_tri_sum_new_tabletermleftoutside. pfc_gap_tri_sum_new_tabletermleftoutside+(S N)=(pfc_index_tri_sum_new_table)) /\ (((pfc_left_tri_sum_new_tableterm)=0))))) /\ ((((((exists pfa_gap_tri_sum_new_tabletermrightinside. pfa_gap_tri_sum_new_tabletermrightinside + S (pfc_complement_tri_sum_new_tableterm) = (S d)) /\ ((((exists ff_h_pfp_tri_sum_new_tabletermrightentry. ff_h_pfp_tri_sum_new_tabletermrightentry + S (pfc_right_tri_sum_new_tableterm) = S ((S (pfc_complement_tri_sum_new_tableterm)) * bc)) /\ exists ff_q_pfp_tri_sum_new_tabletermrightentry. bb = ff_q_pfp_tri_sum_new_tabletermrightentry * S ((S (pfc_complement_tri_sum_new_tableterm)) * bc) + (pfc_right_tri_sum_new_tableterm)))))) \/ (((exists pfc_gap_tri_sum_new_tabletermrightoutside. pfc_gap_tri_sum_new_tabletermrightoutside+(S d)=(pfc_complement_tri_sum_new_tableterm)) /\ (((pfc_right_tri_sum_new_tableterm)=0))))) /\ (((pfc_value_tri_sum_new_table)=pfc_left_tri_sum_new_tableterm*pfc_right_tri_sum_new_tableterm))))))))))) -> (exists fs_u_pfc_tri_sum_new_actual fs_v_pfc_tri_sum_new_actual. ((((exists fs_h_pfc_tri_sum_new_actual_body_start. fs_h_pfc_tri_sum_new_actual_body_start + S (0) = S ((S (0)) * fs_v_pfc_tri_sum_new_actual)) /\ exists fs_q_pfc_tri_sum_new_actual_body_start. fs_u_pfc_tri_sum_new_actual = fs_q_pfc_tri_sum_new_actual_body_start * S ((S (0)) * fs_v_pfc_tri_sum_new_actual) + (0))) /\ ((((exists fs_h_pfc_tri_sum_new_actual_body_terminal. fs_h_pfc_tri_sum_new_actual_body_terminal + S (v) = S ((S (S N)) * fs_v_pfc_tri_sum_new_actual)) /\ exists fs_q_pfc_tri_sum_new_actual_body_terminal. fs_u_pfc_tri_sum_new_actual = fs_q_pfc_tri_sum_new_actual_body_terminal * S ((S (S N)) * fs_v_pfc_tri_sum_new_actual) + (v))) /\ forall fs_i_pfc_tri_sum_new_actual_body_steps. (exists fs_lt_pfc_tri_sum_new_actual_body_steps_bound. fs_lt_pfc_tri_sum_new_actual_body_steps_bound + S fs_i_pfc_tri_sum_new_actual_body_steps = S N) -> exists fs_a_pfc_tri_sum_new_actual_body_steps fs_r_pfc_tri_sum_new_actual_body_steps fs_s_pfc_tri_sum_new_actual_body_steps. ((((exists fs_h_pfc_tri_sum_new_actual_body_steps_summand. fs_h_pfc_tri_sum_new_actual_body_steps_summand + S (fs_a_pfc_tri_sum_new_actual_body_steps) = S ((S (fs_i_pfc_tri_sum_new_actual_body_steps)) * ec)) /\ exists fs_q_pfc_tri_sum_new_actual_body_steps_summand. eb = fs_q_pfc_tri_sum_new_actual_body_steps_summand * S ((S (fs_i_pfc_tri_sum_new_actual_body_steps)) * ec) + (fs_a_pfc_tri_sum_new_actual_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_new_actual_body_steps_partial. fs_h_pfc_tri_sum_new_actual_body_steps_partial + S (fs_r_pfc_tri_sum_new_actual_body_steps) = S ((S (fs_i_pfc_tri_sum_new_actual_body_steps)) * fs_v_pfc_tri_sum_new_actual)) /\ exists fs_q_pfc_tri_sum_new_actual_body_steps_partial. fs_u_pfc_tri_sum_new_actual = fs_q_pfc_tri_sum_new_actual_body_steps_partial * S ((S (fs_i_pfc_tri_sum_new_actual_body_steps)) * fs_v_pfc_tri_sum_new_actual) + (fs_r_pfc_tri_sum_new_actual_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_new_actual_body_steps_successor. fs_h_pfc_tri_sum_new_actual_body_steps_successor + S (fs_s_pfc_tri_sum_new_actual_body_steps) = S ((S (S fs_i_pfc_tri_sum_new_actual_body_steps)) * fs_v_pfc_tri_sum_new_actual)) /\ exists fs_q_pfc_tri_sum_new_actual_body_steps_successor. fs_u_pfc_tri_sum_new_actual = fs_q_pfc_tri_sum_new_actual_body_steps_successor * S ((S (S fs_i_pfc_tri_sum_new_actual_body_steps)) * fs_v_pfc_tri_sum_new_actual) + (fs_s_pfc_tri_sum_new_actual_body_steps))) /\ fs_s_pfc_tri_sum_new_actual_body_steps = fs_r_pfc_tri_sum_new_actual_body_steps + fs_a_pfc_tri_sum_new_actual_body_steps)))))) -> v=u+a*bConstructive proof overview
Generated structural guide
Compare two independently coded actual antidiagonal sums: their first N terms agree and their last terms are zero and the new leading product.
The unchanged tactic script uses 10 declared prerequisites and contains 186 exact native proof lines.
Alpha v34 checked-use · first admitted v33 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
beta_sum_succ_decompose Alpha theorem; checked-use authorized PX0005 polynomial_diagonal_last_term_left_empty PX0006 polynomial_diagonal_last_term_left_append polynomial_diagonal_prefix_entry Alpha theorem; checked-use authorized le_refl Alpha theorem; checked-use authorized PX0002 polynomial_diagonal_prefix_left_transport le_succ Alpha theorem; checked-use authorized beta_sum_transport_prefix Alpha theorem; checked-use authorized polynomial_diagonal_prefix_functional Alpha theorem; checked-use authorized beta_sum_functional 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 (3)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–20
03Fix variables and assumptionsL21–23
04Establish holdL24–30
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sum succ decompose.
05Separate the logical casesL31–34
06Establish hnewL35–41
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sum succ decompose.
07Separate the logical casesL42–45
08Establish hzL46–55
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply polynomial diagonal last term left empty.
- L46
have hz : x=0 - L47
specialize polynomial_diagonal_last_term_left_empty (ab) - L48
specialize polynomial_diagonal_last_term_left_empty (ac) - L49
specialize polynomial_diagonal_last_term_left_empty (bb) - L50
specialize polynomial_diagonal_last_term_left_empty (bc) - L51
specialize polynomial_diagonal_last_term_left_empty (S d) - L52
specialize polynomial_diagonal_last_term_left_empty (N) - L53
specialize polynomial_diagonal_last_term_left_empty (x) - L54
apply polynomial_diagonal_last_term_left_empty - L55
specialize polynomial_diagonal_prefix_entry (ab)
09Use earlier factsL56–65
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L56
specialize polynomial_diagonal_prefix_entry (ac) - L57
specialize polynomial_diagonal_prefix_entry (N) - L58
specialize polynomial_diagonal_prefix_entry (bb) - L59
specialize polynomial_diagonal_prefix_entry (bc) - L60
specialize polynomial_diagonal_prefix_entry (S d) - L61
specialize polynomial_diagonal_prefix_entry (N) - L62
specialize polynomial_diagonal_prefix_entry (db) - L63
specialize polynomial_diagonal_prefix_entry (dc) - L64
specialize polynomial_diagonal_prefix_entry (S N) - L65
specialize polynomial_diagonal_prefix_entry (N)
10Use earlier factsL66–71
11Establish htL72–81
Establish this local claim before using it. It is not an additional assumption.
- L72
have ht : x2=a*b - L73
specialize polynomial_diagonal_last_term_left_append (AB) - L74
specialize polynomial_diagonal_last_term_left_append (AC) - L75
specialize polynomial_diagonal_last_term_left_append (bb) - L76
specialize polynomial_diagonal_last_term_left_append (bc) - L77
specialize polynomial_diagonal_last_term_left_append (d) - L78
specialize polynomial_diagonal_last_term_left_append (N) - L79
specialize polynomial_diagonal_last_term_left_append (a) - L80
specialize polynomial_diagonal_last_term_left_append (b) - L81
specialize polynomial_diagonal_last_term_left_append (x2)
12Use earlier factsL82–91
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L82
apply polynomial_diagonal_last_term_left_append - L83
exact ha - L84
exact hb - L85
specialize polynomial_diagonal_prefix_entry (AB) - L86
specialize polynomial_diagonal_prefix_entry (AC) - L87
specialize polynomial_diagonal_prefix_entry (S N) - L88
specialize polynomial_diagonal_prefix_entry (bb) - L89
specialize polynomial_diagonal_prefix_entry (bc) - L90
specialize polynomial_diagonal_prefix_entry (S d) - L91
specialize polynomial_diagonal_prefix_entry (N)
13Use earlier factsL92–101
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L92
specialize polynomial_diagonal_prefix_entry (eb) - L93
specialize polynomial_diagonal_prefix_entry (ec) - L94
specialize polynomial_diagonal_prefix_entry (S N) - L95
specialize polynomial_diagonal_prefix_entry (N) - L96
specialize polynomial_diagonal_prefix_entry (x2) - L97
apply polynomial_diagonal_prefix_entry - L98
exact hetable - L99
specialize le_refl (S N) - L100
apply le_refl - L101
exact hnew_witness_witness_left
14Establish hprefixL102–111
Establish this local claim before using it. It is not an additional assumption.
- L102
have hprefix : PolynomialDiagonalPrefix(AB,AC,S N,bb,bc,S d,N,db,dc,N)Definitions: PolynomialDiagonalPrefix - L103
specialize polynomial_diagonal_prefix_left_transport (ab) - L104
specialize polynomial_diagonal_prefix_left_transport (ac) - L105
specialize polynomial_diagonal_prefix_left_transport (N) - L106
specialize polynomial_diagonal_prefix_left_transport (AB) - L107
specialize polynomial_diagonal_prefix_left_transport (AC) - L108
specialize polynomial_diagonal_prefix_left_transport (S N) - L109
specialize polynomial_diagonal_prefix_left_transport (bb) - L110
specialize polynomial_diagonal_prefix_left_transport (bc) - L111
specialize polynomial_diagonal_prefix_left_transport (S d)
15Use earlier factsL112–121
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L112
specialize polynomial_diagonal_prefix_left_transport (N) - L113
specialize polynomial_diagonal_prefix_left_transport (N) - L114
specialize polynomial_diagonal_prefix_left_transport (db) - L115
specialize polynomial_diagonal_prefix_left_transport (dc) - L116
apply polynomial_diagonal_prefix_left_transport - L117
specialize le_refl (N) - L118
apply le_refl - L119
specialize le_succ (N) - L120
specialize le_succ (N) - L121
apply le_succ
16Use earlier factsL122–124
17Fix variables and assumptionsL125–126
18Use earlier factsL127–132
19Establish hsL133–142
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sum transport prefix.
- L133
have hs : Sum(eb,ec,N,x1)Definitions: Sum - L134
specialize beta_sum_transport_prefix (db) - L135
specialize beta_sum_transport_prefix (dc) - L136
specialize beta_sum_transport_prefix (eb) - L137
specialize beta_sum_transport_prefix (ec) - L138
specialize beta_sum_transport_prefix (N) - L139
specialize beta_sum_transport_prefix (x1) - L140
apply beta_sum_transport_prefix - L141
exact hold_witness_witness_right_left - L142
specialize polynomial_diagonal_prefix_functional (AB)
20Use earlier factsL143–152
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L143
specialize polynomial_diagonal_prefix_functional (AC) - L144
specialize polynomial_diagonal_prefix_functional (S N) - L145
specialize polynomial_diagonal_prefix_functional (bb) - L146
specialize polynomial_diagonal_prefix_functional (bc) - L147
specialize polynomial_diagonal_prefix_functional (S d) - L148
specialize polynomial_diagonal_prefix_functional (N) - L149
specialize polynomial_diagonal_prefix_functional (db) - L150
specialize polynomial_diagonal_prefix_functional (dc) - L151
specialize polynomial_diagonal_prefix_functional (eb) - L152
specialize polynomial_diagonal_prefix_functional (ec)
21Use earlier factsL153–155
22Fix variables and assumptionsL156–157
23Use earlier factsL158–163
24Establish hbaseL164–172
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sum functional.
25Establish huvalueL173–182
26Use earlier factsL183–183
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L183
exact hbase
27Calculate and transport equalitiesL184–184
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L184
symm
Original exact command ledger · 186 lines
- 0001
intro ab - 0002
intro ac - 0003
intro AB - 0004
intro AC - 0005
intro bb - 0006
intro bc - 0007
intro d - 0008
intro N - 0009
intro a - 0010
intro b - 0011
intro db - 0012
intro dc - 0013
intro eb - 0014
intro ec - 0015
intro u - 0016
intro v - 0017
intro he - 0018
intro ha - 0019
intro hb - 0020
intro hd - 0021
intro hu - 0022
intro hetable - 0023
intro hv - 0024
have hold : exists t s. ((((exists ff_h_pfp_tri_sum_old_last. ff_h_pfp_tri_sum_old_last + S (t) = S ((S (N)) * dc)) /\ exists ff_q_pfp_tri_sum_old_last. db = ff_q_pfp_tri_sum_old_last * S ((S (N)) * dc) + (t))) /\ (((exists fs_u_pfc_tri_sum_old_prefix fs_v_pfc_tri_sum_old_prefix. ((((exists fs_h_pfc_tri_sum_old_prefix_body_start. fs_h_pfc_tri_sum_old_prefix_body_start + S (0) = S ((S (0)) * fs_v_pfc_tri_sum_old_prefix)) /\ exists fs_q_pfc_tri_sum_old_prefix_body_start. fs_u_pfc_tri_sum_old_prefix = fs_q_pfc_tri_sum_old_prefix_body_start * S ((S (0)) * fs_v_pfc_tri_sum_old_prefix) + (0))) /\ ((((exists fs_h_pfc_tri_sum_old_prefix_body_terminal. fs_h_pfc_tri_sum_old_prefix_body_terminal + S (s) = S ((S (N)) * fs_v_pfc_tri_sum_old_prefix)) /\ exists fs_q_pfc_tri_sum_old_prefix_body_terminal. fs_u_pfc_tri_sum_old_prefix = fs_q_pfc_tri_sum_old_prefix_body_terminal * S ((S (N)) * fs_v_pfc_tri_sum_old_prefix) + (s))) /\ forall fs_i_pfc_tri_sum_old_prefix_body_steps. (exists fs_lt_pfc_tri_sum_old_prefix_body_steps_bound. fs_lt_pfc_tri_sum_old_prefix_body_steps_bound + S fs_i_pfc_tri_sum_old_prefix_body_steps = N) -> exists fs_a_pfc_tri_sum_old_prefix_body_steps fs_r_pfc_tri_sum_old_prefix_body_steps fs_s_pfc_tri_sum_old_prefix_body_steps. ((((exists fs_h_pfc_tri_sum_old_prefix_body_steps_summand. fs_h_pfc_tri_sum_old_prefix_body_steps_summand + S (fs_a_pfc_tri_sum_old_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_old_prefix_body_steps)) * dc)) /\ exists fs_q_pfc_tri_sum_old_prefix_body_steps_summand. db = fs_q_pfc_tri_sum_old_prefix_body_steps_summand * S ((S (fs_i_pfc_tri_sum_old_prefix_body_steps)) * dc) + (fs_a_pfc_tri_sum_old_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_old_prefix_body_steps_partial. fs_h_pfc_tri_sum_old_prefix_body_steps_partial + S (fs_r_pfc_tri_sum_old_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_old_prefix_body_steps)) * fs_v_pfc_tri_sum_old_prefix)) /\ exists fs_q_pfc_tri_sum_old_prefix_body_steps_partial. fs_u_pfc_tri_sum_old_prefix = fs_q_pfc_tri_sum_old_prefix_body_steps_partial * S ((S (fs_i_pfc_tri_sum_old_prefix_body_steps)) * fs_v_pfc_tri_sum_old_prefix) + (fs_r_pfc_tri_sum_old_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_old_prefix_body_steps_successor. fs_h_pfc_tri_sum_old_prefix_body_steps_successor + S (fs_s_pfc_tri_sum_old_prefix_body_steps) = S ((S (S fs_i_pfc_tri_sum_old_prefix_body_steps)) * fs_v_pfc_tri_sum_old_prefix)) /\ exists fs_q_pfc_tri_sum_old_prefix_body_steps_successor. fs_u_pfc_tri_sum_old_prefix = fs_q_pfc_tri_sum_old_prefix_body_steps_successor * S ((S (S fs_i_pfc_tri_sum_old_prefix_body_steps)) * fs_v_pfc_tri_sum_old_prefix) + (fs_s_pfc_tri_sum_old_prefix_body_steps))) /\ fs_s_pfc_tri_sum_old_prefix_body_steps = fs_r_pfc_tri_sum_old_prefix_body_steps + fs_a_pfc_tri_sum_old_prefix_body_steps)))))) /\ ((u=s+t))))) - 0025
specialize beta_sum_succ_decompose (db) - 0026
specialize beta_sum_succ_decompose (dc) - 0027
specialize beta_sum_succ_decompose (N) - 0028
specialize beta_sum_succ_decompose (u) - 0029
apply beta_sum_succ_decompose - 0030
exact hu - 0031
cases hold - 0032
cases hold_witness - 0033
cases hold_witness_witness - 0034
cases hold_witness_witness_right - 0035
have hnew : exists t s. ((((exists ff_h_pfp_tri_sum_new_last. ff_h_pfp_tri_sum_new_last + S (t) = S ((S (N)) * ec)) /\ exists ff_q_pfp_tri_sum_new_last. eb = ff_q_pfp_tri_sum_new_last * S ((S (N)) * ec) + (t))) /\ (((exists fs_u_pfc_tri_sum_new_prefix fs_v_pfc_tri_sum_new_prefix. ((((exists fs_h_pfc_tri_sum_new_prefix_body_start. fs_h_pfc_tri_sum_new_prefix_body_start + S (0) = S ((S (0)) * fs_v_pfc_tri_sum_new_prefix)) /\ exists fs_q_pfc_tri_sum_new_prefix_body_start. fs_u_pfc_tri_sum_new_prefix = fs_q_pfc_tri_sum_new_prefix_body_start * S ((S (0)) * fs_v_pfc_tri_sum_new_prefix) + (0))) /\ ((((exists fs_h_pfc_tri_sum_new_prefix_body_terminal. fs_h_pfc_tri_sum_new_prefix_body_terminal + S (s) = S ((S (N)) * fs_v_pfc_tri_sum_new_prefix)) /\ exists fs_q_pfc_tri_sum_new_prefix_body_terminal. fs_u_pfc_tri_sum_new_prefix = fs_q_pfc_tri_sum_new_prefix_body_terminal * S ((S (N)) * fs_v_pfc_tri_sum_new_prefix) + (s))) /\ forall fs_i_pfc_tri_sum_new_prefix_body_steps. (exists fs_lt_pfc_tri_sum_new_prefix_body_steps_bound. fs_lt_pfc_tri_sum_new_prefix_body_steps_bound + S fs_i_pfc_tri_sum_new_prefix_body_steps = N) -> exists fs_a_pfc_tri_sum_new_prefix_body_steps fs_r_pfc_tri_sum_new_prefix_body_steps fs_s_pfc_tri_sum_new_prefix_body_steps. ((((exists fs_h_pfc_tri_sum_new_prefix_body_steps_summand. fs_h_pfc_tri_sum_new_prefix_body_steps_summand + S (fs_a_pfc_tri_sum_new_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_new_prefix_body_steps)) * ec)) /\ exists fs_q_pfc_tri_sum_new_prefix_body_steps_summand. eb = fs_q_pfc_tri_sum_new_prefix_body_steps_summand * S ((S (fs_i_pfc_tri_sum_new_prefix_body_steps)) * ec) + (fs_a_pfc_tri_sum_new_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_new_prefix_body_steps_partial. fs_h_pfc_tri_sum_new_prefix_body_steps_partial + S (fs_r_pfc_tri_sum_new_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_new_prefix_body_steps)) * fs_v_pfc_tri_sum_new_prefix)) /\ exists fs_q_pfc_tri_sum_new_prefix_body_steps_partial. fs_u_pfc_tri_sum_new_prefix = fs_q_pfc_tri_sum_new_prefix_body_steps_partial * S ((S (fs_i_pfc_tri_sum_new_prefix_body_steps)) * fs_v_pfc_tri_sum_new_prefix) + (fs_r_pfc_tri_sum_new_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_new_prefix_body_steps_successor. fs_h_pfc_tri_sum_new_prefix_body_steps_successor + S (fs_s_pfc_tri_sum_new_prefix_body_steps) = S ((S (S fs_i_pfc_tri_sum_new_prefix_body_steps)) * fs_v_pfc_tri_sum_new_prefix)) /\ exists fs_q_pfc_tri_sum_new_prefix_body_steps_successor. fs_u_pfc_tri_sum_new_prefix = fs_q_pfc_tri_sum_new_prefix_body_steps_successor * S ((S (S fs_i_pfc_tri_sum_new_prefix_body_steps)) * fs_v_pfc_tri_sum_new_prefix) + (fs_s_pfc_tri_sum_new_prefix_body_steps))) /\ fs_s_pfc_tri_sum_new_prefix_body_steps = fs_r_pfc_tri_sum_new_prefix_body_steps + fs_a_pfc_tri_sum_new_prefix_body_steps)))))) /\ ((v=s+t))))) - 0036
specialize beta_sum_succ_decompose (eb) - 0037
specialize beta_sum_succ_decompose (ec) - 0038
specialize beta_sum_succ_decompose (N) - 0039
specialize beta_sum_succ_decompose (v) - 0040
apply beta_sum_succ_decompose - 0041
exact hv - 0042
cases hnew - 0043
cases hnew_witness - 0044
cases hnew_witness_witness - 0045
cases hnew_witness_witness_right - 0046
have hz : x=0 - 0047
specialize polynomial_diagonal_last_term_left_empty (ab) - 0048
specialize polynomial_diagonal_last_term_left_empty (ac) - 0049
specialize polynomial_diagonal_last_term_left_empty (bb) - 0050
specialize polynomial_diagonal_last_term_left_empty (bc) - 0051
specialize polynomial_diagonal_last_term_left_empty (S d) - 0052
specialize polynomial_diagonal_last_term_left_empty (N) - 0053
specialize polynomial_diagonal_last_term_left_empty (x) - 0054
apply polynomial_diagonal_last_term_left_empty - 0055
specialize polynomial_diagonal_prefix_entry (ab) - 0056
specialize polynomial_diagonal_prefix_entry (ac) - 0057
specialize polynomial_diagonal_prefix_entry (N) - 0058
specialize polynomial_diagonal_prefix_entry (bb) - 0059
specialize polynomial_diagonal_prefix_entry (bc) - 0060
specialize polynomial_diagonal_prefix_entry (S d) - 0061
specialize polynomial_diagonal_prefix_entry (N) - 0062
specialize polynomial_diagonal_prefix_entry (db) - 0063
specialize polynomial_diagonal_prefix_entry (dc) - 0064
specialize polynomial_diagonal_prefix_entry (S N) - 0065
specialize polynomial_diagonal_prefix_entry (N) - 0066
specialize polynomial_diagonal_prefix_entry (x) - 0067
apply polynomial_diagonal_prefix_entry - 0068
exact hd - 0069
specialize le_refl (S N) - 0070
apply le_refl - 0071
exact hold_witness_witness_left - 0072
have ht : x2=a*b - 0073
specialize polynomial_diagonal_last_term_left_append (AB) - 0074
specialize polynomial_diagonal_last_term_left_append (AC) - 0075
specialize polynomial_diagonal_last_term_left_append (bb) - 0076
specialize polynomial_diagonal_last_term_left_append (bc) - 0077
specialize polynomial_diagonal_last_term_left_append (d) - 0078
specialize polynomial_diagonal_last_term_left_append (N) - 0079
specialize polynomial_diagonal_last_term_left_append (a) - 0080
specialize polynomial_diagonal_last_term_left_append (b) - 0081
specialize polynomial_diagonal_last_term_left_append (x2) - 0082
apply polynomial_diagonal_last_term_left_append - 0083
exact ha - 0084
exact hb - 0085
specialize polynomial_diagonal_prefix_entry (AB) - 0086
specialize polynomial_diagonal_prefix_entry (AC) - 0087
specialize polynomial_diagonal_prefix_entry (S N) - 0088
specialize polynomial_diagonal_prefix_entry (bb) - 0089
specialize polynomial_diagonal_prefix_entry (bc) - 0090
specialize polynomial_diagonal_prefix_entry (S d) - 0091
specialize polynomial_diagonal_prefix_entry (N) - 0092
specialize polynomial_diagonal_prefix_entry (eb) - 0093
specialize polynomial_diagonal_prefix_entry (ec) - 0094
specialize polynomial_diagonal_prefix_entry (S N) - 0095
specialize polynomial_diagonal_prefix_entry (N) - 0096
specialize polynomial_diagonal_prefix_entry (x2) - 0097
apply polynomial_diagonal_prefix_entry - 0098
exact hetable - 0099
specialize le_refl (S N) - 0100
apply le_refl - 0101
exact hnew_witness_witness_left - 0102
have hprefix : forall pfc_index_tri_sum_transported. (exists pfa_gap_tri_sum_transportedbound. pfa_gap_tri_sum_transportedbound + S (pfc_index_tri_sum_transported) = (N)) -> exists pfc_value_tri_sum_transported. ((((exists ff_h_pfp_tri_sum_transportedentry. ff_h_pfp_tri_sum_transportedentry + S (pfc_value_tri_sum_transported) = S ((S (pfc_index_tri_sum_transported)) * dc)) /\ exists ff_q_pfp_tri_sum_transportedentry. db = ff_q_pfp_tri_sum_transportedentry * S ((S (pfc_index_tri_sum_transported)) * dc) + (pfc_value_tri_sum_transported))) /\ ((exists pfc_complement_tri_sum_transportedterm pfc_left_tri_sum_transportedterm pfc_right_tri_sum_transportedterm. (((pfc_index_tri_sum_transported)+pfc_complement_tri_sum_transportedterm=(N)) /\ ((((((exists pfa_gap_tri_sum_transportedtermleftinside. pfa_gap_tri_sum_transportedtermleftinside + S (pfc_index_tri_sum_transported) = (S N)) /\ ((((exists ff_h_pfp_tri_sum_transportedtermleftentry. ff_h_pfp_tri_sum_transportedtermleftentry + S (pfc_left_tri_sum_transportedterm) = S ((S (pfc_index_tri_sum_transported)) * AC)) /\ exists ff_q_pfp_tri_sum_transportedtermleftentry. AB = ff_q_pfp_tri_sum_transportedtermleftentry * S ((S (pfc_index_tri_sum_transported)) * AC) + (pfc_left_tri_sum_transportedterm)))))) \/ (((exists pfc_gap_tri_sum_transportedtermleftoutside. pfc_gap_tri_sum_transportedtermleftoutside+(S N)=(pfc_index_tri_sum_transported)) /\ (((pfc_left_tri_sum_transportedterm)=0))))) /\ ((((((exists pfa_gap_tri_sum_transportedtermrightinside. pfa_gap_tri_sum_transportedtermrightinside + S (pfc_complement_tri_sum_transportedterm) = (S d)) /\ ((((exists ff_h_pfp_tri_sum_transportedtermrightentry. ff_h_pfp_tri_sum_transportedtermrightentry + S (pfc_right_tri_sum_transportedterm) = S ((S (pfc_complement_tri_sum_transportedterm)) * bc)) /\ exists ff_q_pfp_tri_sum_transportedtermrightentry. bb = ff_q_pfp_tri_sum_transportedtermrightentry * S ((S (pfc_complement_tri_sum_transportedterm)) * bc) + (pfc_right_tri_sum_transportedterm)))))) \/ (((exists pfc_gap_tri_sum_transportedtermrightoutside. pfc_gap_tri_sum_transportedtermrightoutside+(S d)=(pfc_complement_tri_sum_transportedterm)) /\ (((pfc_right_tri_sum_transportedterm)=0))))) /\ (((pfc_value_tri_sum_transported)=pfc_left_tri_sum_transportedterm*pfc_right_tri_sum_transportedterm)))))))))) - 0103
specialize polynomial_diagonal_prefix_left_transport (ab) - 0104
specialize polynomial_diagonal_prefix_left_transport (ac) - 0105
specialize polynomial_diagonal_prefix_left_transport (N) - 0106
specialize polynomial_diagonal_prefix_left_transport (AB) - 0107
specialize polynomial_diagonal_prefix_left_transport (AC) - 0108
specialize polynomial_diagonal_prefix_left_transport (S N) - 0109
specialize polynomial_diagonal_prefix_left_transport (bb) - 0110
specialize polynomial_diagonal_prefix_left_transport (bc) - 0111
specialize polynomial_diagonal_prefix_left_transport (S d) - 0112
specialize polynomial_diagonal_prefix_left_transport (N) - 0113
specialize polynomial_diagonal_prefix_left_transport (N) - 0114
specialize polynomial_diagonal_prefix_left_transport (db) - 0115
specialize polynomial_diagonal_prefix_left_transport (dc) - 0116
apply polynomial_diagonal_prefix_left_transport - 0117
specialize le_refl (N) - 0118
apply le_refl - 0119
specialize le_succ (N) - 0120
specialize le_succ (N) - 0121
apply le_succ - 0122
specialize le_refl (N) - 0123
apply le_refl - 0124
exact he - 0125
intro j - 0126
intro hj - 0127
specialize hd (j) - 0128
apply hd - 0129
specialize le_succ (S j) - 0130
specialize le_succ (N) - 0131
apply le_succ - 0132
exact hj - 0133
have hs : exists fs_u_pfc_tri_sum_same_prefix fs_v_pfc_tri_sum_same_prefix. ((((exists fs_h_pfc_tri_sum_same_prefix_body_start. fs_h_pfc_tri_sum_same_prefix_body_start + S (0) = S ((S (0)) * fs_v_pfc_tri_sum_same_prefix)) /\ exists fs_q_pfc_tri_sum_same_prefix_body_start. fs_u_pfc_tri_sum_same_prefix = fs_q_pfc_tri_sum_same_prefix_body_start * S ((S (0)) * fs_v_pfc_tri_sum_same_prefix) + (0))) /\ ((((exists fs_h_pfc_tri_sum_same_prefix_body_terminal. fs_h_pfc_tri_sum_same_prefix_body_terminal + S (x1) = S ((S (N)) * fs_v_pfc_tri_sum_same_prefix)) /\ exists fs_q_pfc_tri_sum_same_prefix_body_terminal. fs_u_pfc_tri_sum_same_prefix = fs_q_pfc_tri_sum_same_prefix_body_terminal * S ((S (N)) * fs_v_pfc_tri_sum_same_prefix) + (x1))) /\ forall fs_i_pfc_tri_sum_same_prefix_body_steps. (exists fs_lt_pfc_tri_sum_same_prefix_body_steps_bound. fs_lt_pfc_tri_sum_same_prefix_body_steps_bound + S fs_i_pfc_tri_sum_same_prefix_body_steps = N) -> exists fs_a_pfc_tri_sum_same_prefix_body_steps fs_r_pfc_tri_sum_same_prefix_body_steps fs_s_pfc_tri_sum_same_prefix_body_steps. ((((exists fs_h_pfc_tri_sum_same_prefix_body_steps_summand. fs_h_pfc_tri_sum_same_prefix_body_steps_summand + S (fs_a_pfc_tri_sum_same_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_same_prefix_body_steps)) * ec)) /\ exists fs_q_pfc_tri_sum_same_prefix_body_steps_summand. eb = fs_q_pfc_tri_sum_same_prefix_body_steps_summand * S ((S (fs_i_pfc_tri_sum_same_prefix_body_steps)) * ec) + (fs_a_pfc_tri_sum_same_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_same_prefix_body_steps_partial. fs_h_pfc_tri_sum_same_prefix_body_steps_partial + S (fs_r_pfc_tri_sum_same_prefix_body_steps) = S ((S (fs_i_pfc_tri_sum_same_prefix_body_steps)) * fs_v_pfc_tri_sum_same_prefix)) /\ exists fs_q_pfc_tri_sum_same_prefix_body_steps_partial. fs_u_pfc_tri_sum_same_prefix = fs_q_pfc_tri_sum_same_prefix_body_steps_partial * S ((S (fs_i_pfc_tri_sum_same_prefix_body_steps)) * fs_v_pfc_tri_sum_same_prefix) + (fs_r_pfc_tri_sum_same_prefix_body_steps))) /\ ((((exists fs_h_pfc_tri_sum_same_prefix_body_steps_successor. fs_h_pfc_tri_sum_same_prefix_body_steps_successor + S (fs_s_pfc_tri_sum_same_prefix_body_steps) = S ((S (S fs_i_pfc_tri_sum_same_prefix_body_steps)) * fs_v_pfc_tri_sum_same_prefix)) /\ exists fs_q_pfc_tri_sum_same_prefix_body_steps_successor. fs_u_pfc_tri_sum_same_prefix = fs_q_pfc_tri_sum_same_prefix_body_steps_successor * S ((S (S fs_i_pfc_tri_sum_same_prefix_body_steps)) * fs_v_pfc_tri_sum_same_prefix) + (fs_s_pfc_tri_sum_same_prefix_body_steps))) /\ fs_s_pfc_tri_sum_same_prefix_body_steps = fs_r_pfc_tri_sum_same_prefix_body_steps + fs_a_pfc_tri_sum_same_prefix_body_steps))))) - 0134
specialize beta_sum_transport_prefix (db) - 0135
specialize beta_sum_transport_prefix (dc) - 0136
specialize beta_sum_transport_prefix (eb) - 0137
specialize beta_sum_transport_prefix (ec) - 0138
specialize beta_sum_transport_prefix (N) - 0139
specialize beta_sum_transport_prefix (x1) - 0140
apply beta_sum_transport_prefix - 0141
exact hold_witness_witness_right_left - 0142
specialize polynomial_diagonal_prefix_functional (AB) - 0143
specialize polynomial_diagonal_prefix_functional (AC) - 0144
specialize polynomial_diagonal_prefix_functional (S N) - 0145
specialize polynomial_diagonal_prefix_functional (bb) - 0146
specialize polynomial_diagonal_prefix_functional (bc) - 0147
specialize polynomial_diagonal_prefix_functional (S d) - 0148
specialize polynomial_diagonal_prefix_functional (N) - 0149
specialize polynomial_diagonal_prefix_functional (db) - 0150
specialize polynomial_diagonal_prefix_functional (dc) - 0151
specialize polynomial_diagonal_prefix_functional (eb) - 0152
specialize polynomial_diagonal_prefix_functional (ec) - 0153
specialize polynomial_diagonal_prefix_functional (N) - 0154
apply polynomial_diagonal_prefix_functional - 0155
exact hprefix - 0156
intro j - 0157
intro hj - 0158
specialize hetable (j) - 0159
apply hetable - 0160
specialize le_succ (S j) - 0161
specialize le_succ (N) - 0162
apply le_succ - 0163
exact hj - 0164
have hbase : x1=x3 - 0165
specialize beta_sum_functional (eb) - 0166
specialize beta_sum_functional (ec) - 0167
specialize beta_sum_functional (N) - 0168
specialize beta_sum_functional (x1) - 0169
specialize beta_sum_functional (x3) - 0170
apply beta_sum_functional - 0171
exact hs - 0172
exact hnew_witness_witness_right_left - 0173
have huvalue : u=x1 - 0174
trans x1+x - 0175
exact hold_witness_witness_right_right - 0176
rewrite hz - 0177
simp - 0178
trans x3+x2 - 0179
exact hnew_witness_witness_right_right - 0180
congr - 0181
trans x1 - 0182
symm - 0183
exact hbase - 0184
symm - 0185
exact huvalue - 0186
exact ht