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 original first-admission records.
Exact expanded first-order arithmetic statement
forall b c a l n d m p s. ~(p = 0) -> ~(m = 0) -> (exists ff_u_hd_hpl_pair ff_v_hd_hpl_pair ff_d_hd_hpl_pair ff_e_hd_hpl_pair. ((((((exists fs_h_ph_hd_hpl_pair_body_value_start. fs_h_ph_hd_hpl_pair_body_value_start + S (0) = S ((S (0)) * ff_v_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_value_start. ff_u_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_value_start * S ((S (0)) * ff_v_hd_hpl_pair) + (0))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_value_terminal. fs_h_ph_hd_hpl_pair_body_value_terminal + S (n) = S ((S (l)) * ff_v_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_value_terminal. ff_u_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_value_terminal * S ((S (l)) * ff_v_hd_hpl_pair) + (n))) /\ forall ff_i_ph_hd_hpl_pair_body_value_steps. (exists ph_bound_hd_hpl_pair_body_value_steps. ph_bound_hd_hpl_pair_body_value_steps + S ff_i_ph_hd_hpl_pair_body_value_steps = l) -> exists ff_coefficient_ph_hd_hpl_pair_body_value_steps ff_previous_ph_hd_hpl_pair_body_value_steps ff_current_ph_hd_hpl_pair_body_value_steps. ((((exists fs_h_ph_hd_hpl_pair_body_value_steps_coefficient. fs_h_ph_hd_hpl_pair_body_value_steps_coefficient + S (ff_coefficient_ph_hd_hpl_pair_body_value_steps) = S ((S (ff_i_ph_hd_hpl_pair_body_value_steps)) * c)) /\ exists fs_q_ph_hd_hpl_pair_body_value_steps_coefficient. b = fs_q_ph_hd_hpl_pair_body_value_steps_coefficient * S ((S (ff_i_ph_hd_hpl_pair_body_value_steps)) * c) + (ff_coefficient_ph_hd_hpl_pair_body_value_steps))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_value_steps_before. fs_h_ph_hd_hpl_pair_body_value_steps_before + S (ff_previous_ph_hd_hpl_pair_body_value_steps) = S ((S (ff_i_ph_hd_hpl_pair_body_value_steps)) * ff_v_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_value_steps_before. ff_u_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_value_steps_before * S ((S (ff_i_ph_hd_hpl_pair_body_value_steps)) * ff_v_hd_hpl_pair) + (ff_previous_ph_hd_hpl_pair_body_value_steps))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_value_steps_after. fs_h_ph_hd_hpl_pair_body_value_steps_after + S (ff_current_ph_hd_hpl_pair_body_value_steps) = S ((S (S ff_i_ph_hd_hpl_pair_body_value_steps)) * ff_v_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_value_steps_after. ff_u_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_value_steps_after * S ((S (S ff_i_ph_hd_hpl_pair_body_value_steps)) * ff_v_hd_hpl_pair) + (ff_current_ph_hd_hpl_pair_body_value_steps))) /\ ff_current_ph_hd_hpl_pair_body_value_steps = ff_previous_ph_hd_hpl_pair_body_value_steps * a + ff_coefficient_ph_hd_hpl_pair_body_value_steps)))))) /\ (((((exists fs_h_ph_hd_hpl_pair_body_derivative_start. fs_h_ph_hd_hpl_pair_body_derivative_start + S (0) = S ((S (0)) * ff_e_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_derivative_start. ff_d_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_derivative_start * S ((S (0)) * ff_e_hd_hpl_pair) + (0))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_derivative_terminal. fs_h_ph_hd_hpl_pair_body_derivative_terminal + S (d) = S ((S (l)) * ff_e_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_derivative_terminal. ff_d_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_derivative_terminal * S ((S (l)) * ff_e_hd_hpl_pair) + (d))) /\ forall ff_i_ph_hd_hpl_pair_body_derivative_steps. (exists ph_bound_hd_hpl_pair_body_derivative_steps. ph_bound_hd_hpl_pair_body_derivative_steps + S ff_i_ph_hd_hpl_pair_body_derivative_steps = l) -> exists ff_coefficient_ph_hd_hpl_pair_body_derivative_steps ff_previous_ph_hd_hpl_pair_body_derivative_steps ff_current_ph_hd_hpl_pair_body_derivative_steps. ((((exists fs_h_ph_hd_hpl_pair_body_derivative_steps_coefficient. fs_h_ph_hd_hpl_pair_body_derivative_steps_coefficient + S (ff_coefficient_ph_hd_hpl_pair_body_derivative_steps) = S ((S (ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_v_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_derivative_steps_coefficient. ff_u_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_derivative_steps_coefficient * S ((S (ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_v_hd_hpl_pair) + (ff_coefficient_ph_hd_hpl_pair_body_derivative_steps))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_derivative_steps_before. fs_h_ph_hd_hpl_pair_body_derivative_steps_before + S (ff_previous_ph_hd_hpl_pair_body_derivative_steps) = S ((S (ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_e_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_derivative_steps_before. ff_d_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_derivative_steps_before * S ((S (ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_e_hd_hpl_pair) + (ff_previous_ph_hd_hpl_pair_body_derivative_steps))) /\ ((((exists fs_h_ph_hd_hpl_pair_body_derivative_steps_after. fs_h_ph_hd_hpl_pair_body_derivative_steps_after + S (ff_current_ph_hd_hpl_pair_body_derivative_steps) = S ((S (S ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_e_hd_hpl_pair)) /\ exists fs_q_ph_hd_hpl_pair_body_derivative_steps_after. ff_d_hd_hpl_pair = fs_q_ph_hd_hpl_pair_body_derivative_steps_after * S ((S (S ff_i_ph_hd_hpl_pair_body_derivative_steps)) * ff_e_hd_hpl_pair) + (ff_current_ph_hd_hpl_pair_body_derivative_steps))) /\ ff_current_ph_hd_hpl_pair_body_derivative_steps = ff_previous_ph_hd_hpl_pair_body_derivative_steps * a + ff_coefficient_ph_hd_hpl_pair_body_derivative_steps)))))))) -> m = p * s -> (exists hgcrt_mod_left_hpl_mod hgcrt_mod_right_hpl_mod. n + m * hgcrt_mod_left_hpl_mod = 0 + m * hgcrt_mod_right_hpl_mod) -> (forall hmi_divisor_hpl_coprime. (exists hmi_left_factor_hpl_coprime. d = hmi_divisor_hpl_coprime * hmi_left_factor_hpl_coprime) -> (exists hmi_right_factor_hpl_coprime. p = hmi_divisor_hpl_coprime * hmi_right_factor_hpl_coprime) -> hmi_divisor_hpl_coprime = 1) -> forall j q. (exists pa_b_hpl_power pa_c_hpl_power. ((forall pa_i_hpl_power_repeat. (exists pa_lt_hpl_power_repeat_bound. pa_lt_hpl_power_repeat_bound + S pa_i_hpl_power_repeat = j) -> (((exists pa_h_hpl_power_repeat_decoded. pa_h_hpl_power_repeat_decoded + S (p) = S ((S (pa_i_hpl_power_repeat)) * pa_c_hpl_power)) /\ exists pa_q_hpl_power_repeat_decoded. pa_b_hpl_power = pa_q_hpl_power_repeat_decoded * S ((S (pa_i_hpl_power_repeat)) * pa_c_hpl_power) + (p)))) /\ (exists pa_u_hpl_power_product pa_v_hpl_power_product. ((((exists pa_h_hpl_power_product_start. pa_h_hpl_power_product_start + S (1) = S ((S (0)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_start. pa_u_hpl_power_product = pa_q_hpl_power_product_start * S ((S (0)) * pa_v_hpl_power_product) + (1))) /\ ((((exists pa_h_hpl_power_product_terminal. pa_h_hpl_power_product_terminal + S (q) = S ((S (j)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_terminal. pa_u_hpl_power_product = pa_q_hpl_power_product_terminal * S ((S (j)) * pa_v_hpl_power_product) + (q))) /\ forall pa_i_hpl_power_product. (exists pa_lt_hpl_power_product_bound. pa_lt_hpl_power_product_bound + S pa_i_hpl_power_product = j) -> exists pa_p_hpl_power_product pa_r_hpl_power_product pa_s_hpl_power_product. ((((exists pa_h_hpl_power_product_factor. pa_h_hpl_power_product_factor + S (pa_p_hpl_power_product) = S ((S (pa_i_hpl_power_product)) * pa_c_hpl_power)) /\ exists pa_q_hpl_power_product_factor. pa_b_hpl_power = pa_q_hpl_power_product_factor * S ((S (pa_i_hpl_power_product)) * pa_c_hpl_power) + (pa_p_hpl_power_product))) /\ ((((exists pa_h_hpl_power_product_partial. pa_h_hpl_power_product_partial + S (pa_r_hpl_power_product) = S ((S (pa_i_hpl_power_product)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_partial. pa_u_hpl_power_product = pa_q_hpl_power_product_partial * S ((S (pa_i_hpl_power_product)) * pa_v_hpl_power_product) + (pa_r_hpl_power_product))) /\ ((((exists pa_h_hpl_power_product_successor. pa_h_hpl_power_product_successor + S (pa_s_hpl_power_product) = S ((S (S pa_i_hpl_power_product)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_successor. pa_u_hpl_power_product = pa_q_hpl_power_product_successor * S ((S (S pa_i_hpl_power_product)) * pa_v_hpl_power_product) + (pa_s_hpl_power_product))) /\ pa_s_hpl_power_product = pa_r_hpl_power_product * pa_p_hpl_power_product)))))))) -> exists r. ((((exists hpl_gap_lift. hpl_gap_lift + S (r) = (m * q)) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. r + m * hgcrt_mod_left_hpl_lift = a + m * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * r + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (m * q) * hgcrt_mod_left_hpl_lift = 0 + (m * q) * hgcrt_mod_right_hpl_lift)))))) /\ forall z. (((exists hpl_gap_lift. hpl_gap_lift + S (z) = (m * q)) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. z + m * hgcrt_mod_left_hpl_lift = a + m * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * z + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (m * q) * hgcrt_mod_left_hpl_lift = 0 + (m * q) * hgcrt_mod_right_hpl_lift)))))) -> z = r)Constructive proof overview
Generated structural guide
HA induction constructs unique canonical simple-root lifts through every finite number of prime-power steps, including iteration zero, and proves uniqueness among all roots in the original residue class.
The unchanged tactic script uses 18 declared prerequisites and contains 234 exact native proof lines.
Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
pow_zero Stable theorem; checked-use authorized pow_successor_decompose Stable theorem; checked-use authorized pow_nonzero_of_one_le Alpha theorem; checked-use authorized one_le_of_ne_zero Stable theorem; checked-use authorized mul_ne_zero Stable theorem; checked-use authorized mul_one Stable theorem; checked-use authorized mul_assoc Stable theorem; checked-use authorized mul_comm Stable theorem; checked-use authorized HL000E hensel_canonical_horner_root_exists_unique beta_horner_derivative_value_projection Alpha theorem; checked-use authorized HL0011 beta_horner_simple_lift_preserves_simplicity HL000A beta_horner_simple_root_hensel_lift_exists_unique mod_eq_trans Stable theorem; checked-use authorized mod_eq_symm Stable theorem; checked-use authorized mod_eq_of_mod_eq_multiple Stable theorem; checked-use authorized HL0003 hensel_canonical_residue_exists HL000C beta_horner_root_mod_weaken HL000B beta_horner_root_mod_transportDirect 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 (6)
01Fix variables and assumptionsL1–10
02Fix variables and assumptionsL11–15
03Induction on jL16–18
04Establish hqL19–25
05Establish hML26–35
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul one.
06Use earlier factsL36–41
Instantiate or apply named facts and discharge the corresponding proof obligations.
07Construct an explicit witnessL42–42
Supply the displayed value, then prove that it has the required property.
- L42
exists n
08Separate the logical casesL43–43
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L43
split
09Use earlier factsL44–52
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L44
specialize beta_horner_derivative_value_projection b - L45
specialize beta_horner_derivative_value_projection c - L46
specialize beta_horner_derivative_value_projection a - L47
specialize beta_horner_derivative_value_projection l - L48
specialize beta_horner_derivative_value_projection n - L49
specialize beta_horner_derivative_value_projection d - L50
apply beta_horner_derivative_value_projection - L51
exact hpair - L52
exact hroot
10Fix variables and assumptionsL53–54
11Establish hprevious_powerL55–62
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor decompose.
12Separate the logical casesL63–64
13Establish hxL65–74
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow nonzero of one le.
14Use earlier factsL75–75
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L75
exact hzero
15Establish hnonzeroL76–83
16Establish hcurrent_factorL84–86
17Establish hML87–96
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul assoc.
18Calculate and transport equalitiesL97–98
19Establish hpreviousL99–102
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L99
have hprevious : ∃ r. CanonicalHornerLift(b,c,l,m,a,m · x,r) ∧ (∀ y. CanonicalHornerLift(b,c,l,m,a,m · x,y) → y = r)Definitions: CanonicalHornerLift - L100
specialize IH x - L101
apply IH - L102
exact hprevious_power_witness_left
20Separate the logical casesL103–104
21Establish hsimpleL105–114
Establish this local claim before using it. It is not an additional assumption.
- L105
have hsimple : SimpleHornerRoot(b,c,x1,l,m · x,p)Definitions: SimpleHornerRoot - L106
specialize beta_horner_simple_lift_preserves_simplicity b - L107
specialize beta_horner_simple_lift_preserves_simplicity c - L108
specialize beta_horner_simple_lift_preserves_simplicity a - L109
specialize beta_horner_simple_lift_preserves_simplicity l - L110
specialize beta_horner_simple_lift_preserves_simplicity n - L111
specialize beta_horner_simple_lift_preserves_simplicity d - L112
specialize beta_horner_simple_lift_preserves_simplicity m - L113
specialize beta_horner_simple_lift_preserves_simplicity p - L114
specialize beta_horner_simple_lift_preserves_simplicity s
22Use earlier factsL115–122
Instantiate or apply named facts and discharge the corresponding proof obligations.
23Separate the logical casesL123–126
24Establish hnextL127–136
Establish this local claim before using it. It is not an additional assumption.
- L127
have hnext : ∃ r. CanonicalHornerLift(b,c,l,m · x,x1,p · (m · x),r) ∧ (∀ y. CanonicalHornerLift(b,c,l,m · x,x1,p · (m · x),y) → y = r)Definitions: CanonicalHornerLift - L128
specialize beta_horner_simple_root_hensel_lift_exists_unique b - L129
specialize beta_horner_simple_root_hensel_lift_exists_unique c - L130
specialize beta_horner_simple_root_hensel_lift_exists_unique x1 - L131
specialize beta_horner_simple_root_hensel_lift_exists_unique l - L132
specialize beta_horner_simple_root_hensel_lift_exists_unique x2 - L133
specialize beta_horner_simple_root_hensel_lift_exists_unique x3 - L134
specialize beta_horner_simple_root_hensel_lift_exists_unique (m * x) - L135
specialize beta_horner_simple_root_hensel_lift_exists_unique p - L136
specialize beta_horner_simple_root_hensel_lift_exists_unique (s * x)
25Use earlier factsL137–143
Instantiate or apply named facts and discharge the corresponding proof obligations.
26Separate the logical casesL144–149
27Construct an explicit witnessL150–150
Supply the displayed value, then prove that it has the required property.
- L150
exists x4
28Separate the logical casesL151–152
29Use earlier factsL153–153
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L153
exact hnext_witness_left_left
30Separate the logical casesL154–154
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L154
split
31Use earlier factsL155–164
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L155
specialize mod_eq_trans m - L156
specialize mod_eq_trans x4 - L157
specialize mod_eq_trans x1 - L158
specialize mod_eq_trans a - L159
apply mod_eq_trans - L160
specialize mod_eq_of_mod_eq_multiple m - L161
specialize mod_eq_of_mod_eq_multiple (m * x) - L162
specialize mod_eq_of_mod_eq_multiple x4 - L163
specialize mod_eq_of_mod_eq_multiple x1 - L164
apply mod_eq_of_mod_eq_multiple
32Construct an explicit witnessL165–165
Supply the displayed value, then prove that it has the required property.
- L165
exists x
33Calculate and transport equalitiesL166–166
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L166
refl
34Use earlier factsL167–169
35Fix variables and assumptionsL170–171
36Separate the logical casesL172–173
37Establish hresidueL174–178
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hensel canonical residue exists.
- L174
have hresidue : exists r. ((exists hpl_gap_bound. hpl_gap_bound + S (r) = (m * x)) /\ (exists hgcrt_mod_left_hpl_mod hgcrt_mod_right_hpl_mod. z + (m * x) * hgcrt_mod_left_hpl_mod = r + (m * x) * hgcrt_mod_right_hpl_mod)) - L175
specialize hensel_canonical_residue_exists (m * x) - L176
specialize hensel_canonical_residue_exists z - L177
apply hensel_canonical_residue_exists - L178
exact hnonzero
38Separate the logical casesL179–180
39Establish hroot_previousL181–188
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner root mod weaken.
- L181
have hroot_previous : HornerRootModulo(b,c,z,l,m · x)Definitions: HornerRootModulo - L182
specialize beta_horner_root_mod_weaken b - L183
specialize beta_horner_root_mod_weaken c - L184
specialize beta_horner_root_mod_weaken z - L185
specialize beta_horner_root_mod_weaken l - L186
specialize beta_horner_root_mod_weaken (m * x) - L187
specialize beta_horner_root_mod_weaken (p * (m * x)) - L188
apply beta_horner_root_mod_weaken
40Construct an explicit witnessL189–189
Supply the displayed value, then prove that it has the required property.
- L189
exists p
41Use earlier factsL190–191
42Establish hroot_representativeL192–201
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta horner root mod transport.
- L192
have hroot_representative : HornerRootModulo(b,c,x5,l,m · x)Definitions: HornerRootModulo - L193
specialize beta_horner_root_mod_transport b - L194
specialize beta_horner_root_mod_transport c - L195
specialize beta_horner_root_mod_transport z - L196
specialize beta_horner_root_mod_transport x5 - L197
specialize beta_horner_root_mod_transport l - L198
specialize beta_horner_root_mod_transport (m * x) - L199
apply beta_horner_root_mod_transport - L200
exact hresidue_witness_right - L201
exact hroot_previous
43Establish hsame_previousL202–204
44Separate the logical casesL205–205
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L205
split
45Use earlier factsL206–206
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L206
exact hresidue_witness_left
46Separate the logical casesL207–207
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L207
split
47Use earlier factsL208–217
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L208
specialize mod_eq_trans m - L209
specialize mod_eq_trans x5 - L210
specialize mod_eq_trans z - L211
specialize mod_eq_trans a - L212
apply mod_eq_trans - L213
specialize mod_eq_of_mod_eq_multiple m - L214
specialize mod_eq_of_mod_eq_multiple (m * x) - L215
specialize mod_eq_of_mod_eq_multiple x5 - L216
specialize mod_eq_of_mod_eq_multiple z - L217
apply mod_eq_of_mod_eq_multiple
48Construct an explicit witnessL218–218
Supply the displayed value, then prove that it has the required property.
- L218
exists x
49Calculate and transport equalitiesL219–219
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L219
refl
50Use earlier factsL220–228
Instantiate or apply named facts and discharge the corresponding proof obligations.
51Separate the logical casesL229–229
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L229
split
52Use earlier factsL230–230
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L230
exact hz_left
53Separate the logical casesL231–231
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L231
split
54Calculate and transport equalitiesL232–232
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L232
rewrite <- hsame_previous
Original exact command ledger · 234 lines
- 0001
intro b - 0002
intro c - 0003
intro a - 0004
intro l - 0005
intro n - 0006
intro d - 0007
intro m - 0008
intro p - 0009
intro s - 0010
intro hp - 0011
intro hm - 0012
intro hpair - 0013
intro hfactor - 0014
intro hroot - 0015
intro hcop - 0016
induction j - 0017
intro q - 0018
intro hpower - 0019
have hq : q = 1 - 0020
specialize pow_zero p - 0021
specialize pow_zero 0 - 0022
specialize pow_zero q - 0023
apply pow_zero - 0024
refl - 0025
exact hpower - 0026
have hM : m * q = m - 0027
rewrite hq - 0028
apply mul_one - 0029
rewrite hM - 0030
rewrite hM - 0031
rewrite hM - 0032
rewrite hM - 0033
rewrite hM - 0034
rewrite hM - 0035
specialize hensel_canonical_horner_root_exists_unique b - 0036
specialize hensel_canonical_horner_root_exists_unique c - 0037
specialize hensel_canonical_horner_root_exists_unique a - 0038
specialize hensel_canonical_horner_root_exists_unique l - 0039
specialize hensel_canonical_horner_root_exists_unique m - 0040
apply hensel_canonical_horner_root_exists_unique - 0041
exact hm - 0042
exists n - 0043
split - 0044
specialize beta_horner_derivative_value_projection b - 0045
specialize beta_horner_derivative_value_projection c - 0046
specialize beta_horner_derivative_value_projection a - 0047
specialize beta_horner_derivative_value_projection l - 0048
specialize beta_horner_derivative_value_projection n - 0049
specialize beta_horner_derivative_value_projection d - 0050
apply beta_horner_derivative_value_projection - 0051
exact hpair - 0052
exact hroot - 0053
intro q - 0054
intro hpower - 0055
have hprevious_power : exists u. (exists pa_b_hpl_power pa_c_hpl_power. ((forall pa_i_hpl_power_repeat. (exists pa_lt_hpl_power_repeat_bound. pa_lt_hpl_power_repeat_bound + S pa_i_hpl_power_repeat = j) -> (((exists pa_h_hpl_power_repeat_decoded. pa_h_hpl_power_repeat_decoded + S (p) = S ((S (pa_i_hpl_power_repeat)) * pa_c_hpl_power)) /\ exists pa_q_hpl_power_repeat_decoded. pa_b_hpl_power = pa_q_hpl_power_repeat_decoded * S ((S (pa_i_hpl_power_repeat)) * pa_c_hpl_power) + (p)))) /\ (exists pa_u_hpl_power_product pa_v_hpl_power_product. ((((exists pa_h_hpl_power_product_start. pa_h_hpl_power_product_start + S (1) = S ((S (0)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_start. pa_u_hpl_power_product = pa_q_hpl_power_product_start * S ((S (0)) * pa_v_hpl_power_product) + (1))) /\ ((((exists pa_h_hpl_power_product_terminal. pa_h_hpl_power_product_terminal + S (u) = S ((S (j)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_terminal. pa_u_hpl_power_product = pa_q_hpl_power_product_terminal * S ((S (j)) * pa_v_hpl_power_product) + (u))) /\ forall pa_i_hpl_power_product. (exists pa_lt_hpl_power_product_bound. pa_lt_hpl_power_product_bound + S pa_i_hpl_power_product = j) -> exists pa_p_hpl_power_product pa_r_hpl_power_product pa_s_hpl_power_product. ((((exists pa_h_hpl_power_product_factor. pa_h_hpl_power_product_factor + S (pa_p_hpl_power_product) = S ((S (pa_i_hpl_power_product)) * pa_c_hpl_power)) /\ exists pa_q_hpl_power_product_factor. pa_b_hpl_power = pa_q_hpl_power_product_factor * S ((S (pa_i_hpl_power_product)) * pa_c_hpl_power) + (pa_p_hpl_power_product))) /\ ((((exists pa_h_hpl_power_product_partial. pa_h_hpl_power_product_partial + S (pa_r_hpl_power_product) = S ((S (pa_i_hpl_power_product)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_partial. pa_u_hpl_power_product = pa_q_hpl_power_product_partial * S ((S (pa_i_hpl_power_product)) * pa_v_hpl_power_product) + (pa_r_hpl_power_product))) /\ ((((exists pa_h_hpl_power_product_successor. pa_h_hpl_power_product_successor + S (pa_s_hpl_power_product) = S ((S (S pa_i_hpl_power_product)) * pa_v_hpl_power_product)) /\ exists pa_q_hpl_power_product_successor. pa_u_hpl_power_product = pa_q_hpl_power_product_successor * S ((S (S pa_i_hpl_power_product)) * pa_v_hpl_power_product) + (pa_s_hpl_power_product))) /\ pa_s_hpl_power_product = pa_r_hpl_power_product * pa_p_hpl_power_product)))))))) /\ q = u * p - 0056
specialize pow_successor_decompose p - 0057
specialize pow_successor_decompose j - 0058
specialize pow_successor_decompose (S j) - 0059
specialize pow_successor_decompose q - 0060
apply pow_successor_decompose - 0061
refl - 0062
exact hpower - 0063
cases hprevious_power - 0064
cases hprevious_power_witness - 0065
have hx : ~(x = 0) - 0066
intro hzero - 0067
specialize pow_nonzero_of_one_le p - 0068
specialize pow_nonzero_of_one_le j - 0069
specialize pow_nonzero_of_one_le x - 0070
apply pow_nonzero_of_one_le - 0071
specialize one_le_of_ne_zero p - 0072
apply one_le_of_ne_zero - 0073
exact hp - 0074
exact hprevious_power_witness_left - 0075
exact hzero - 0076
have hnonzero : ~(m * x = 0) - 0077
intro hzero - 0078
specialize mul_ne_zero m - 0079
specialize mul_ne_zero x - 0080
apply mul_ne_zero - 0081
exact hm - 0082
exact hx - 0083
exact hzero - 0084
have hcurrent_factor : m * x = p * (s * x) - 0085
rewrite hfactor - 0086
apply mul_assoc - 0087
have hM : m * q = p * (m * x) - 0088
rewrite hprevious_power_witness_right - 0089
trans (m * x) * p - 0090
symm - 0091
apply mul_assoc - 0092
apply mul_comm - 0093
rewrite hM - 0094
rewrite hM - 0095
rewrite hM - 0096
rewrite hM - 0097
rewrite hM - 0098
rewrite hM - 0099
have hprevious : exists r. ((((exists hpl_gap_lift. hpl_gap_lift + S (r) = (m * x)) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. r + m * hgcrt_mod_left_hpl_lift = a + m * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * r + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (m * x) * hgcrt_mod_left_hpl_lift = 0 + (m * x) * hgcrt_mod_right_hpl_lift)))))) /\ forall z. (((exists hpl_gap_lift. hpl_gap_lift + S (z) = (m * x)) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. z + m * hgcrt_mod_left_hpl_lift = a + m * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * z + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (m * x) * hgcrt_mod_left_hpl_lift = 0 + (m * x) * hgcrt_mod_right_hpl_lift)))))) -> z = r) - 0100
specialize IH x - 0101
apply IH - 0102
exact hprevious_power_witness_left - 0103
cases hprevious - 0104
cases hprevious_witness - 0105
have hsimple : exists hpl_value_simple hpl_derivative_simple. ((exists ff_u_hd_hpl_simple ff_v_hd_hpl_simple ff_d_hd_hpl_simple ff_e_hd_hpl_simple. ((((((exists fs_h_ph_hd_hpl_simple_body_value_start. fs_h_ph_hd_hpl_simple_body_value_start + S (0) = S ((S (0)) * ff_v_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_value_start. ff_u_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_value_start * S ((S (0)) * ff_v_hd_hpl_simple) + (0))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_value_terminal. fs_h_ph_hd_hpl_simple_body_value_terminal + S (hpl_value_simple) = S ((S (l)) * ff_v_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_value_terminal. ff_u_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_value_terminal * S ((S (l)) * ff_v_hd_hpl_simple) + (hpl_value_simple))) /\ forall ff_i_ph_hd_hpl_simple_body_value_steps. (exists ph_bound_hd_hpl_simple_body_value_steps. ph_bound_hd_hpl_simple_body_value_steps + S ff_i_ph_hd_hpl_simple_body_value_steps = l) -> exists ff_coefficient_ph_hd_hpl_simple_body_value_steps ff_previous_ph_hd_hpl_simple_body_value_steps ff_current_ph_hd_hpl_simple_body_value_steps. ((((exists fs_h_ph_hd_hpl_simple_body_value_steps_coefficient. fs_h_ph_hd_hpl_simple_body_value_steps_coefficient + S (ff_coefficient_ph_hd_hpl_simple_body_value_steps) = S ((S (ff_i_ph_hd_hpl_simple_body_value_steps)) * c)) /\ exists fs_q_ph_hd_hpl_simple_body_value_steps_coefficient. b = fs_q_ph_hd_hpl_simple_body_value_steps_coefficient * S ((S (ff_i_ph_hd_hpl_simple_body_value_steps)) * c) + (ff_coefficient_ph_hd_hpl_simple_body_value_steps))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_value_steps_before. fs_h_ph_hd_hpl_simple_body_value_steps_before + S (ff_previous_ph_hd_hpl_simple_body_value_steps) = S ((S (ff_i_ph_hd_hpl_simple_body_value_steps)) * ff_v_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_value_steps_before. ff_u_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_value_steps_before * S ((S (ff_i_ph_hd_hpl_simple_body_value_steps)) * ff_v_hd_hpl_simple) + (ff_previous_ph_hd_hpl_simple_body_value_steps))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_value_steps_after. fs_h_ph_hd_hpl_simple_body_value_steps_after + S (ff_current_ph_hd_hpl_simple_body_value_steps) = S ((S (S ff_i_ph_hd_hpl_simple_body_value_steps)) * ff_v_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_value_steps_after. ff_u_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_value_steps_after * S ((S (S ff_i_ph_hd_hpl_simple_body_value_steps)) * ff_v_hd_hpl_simple) + (ff_current_ph_hd_hpl_simple_body_value_steps))) /\ ff_current_ph_hd_hpl_simple_body_value_steps = ff_previous_ph_hd_hpl_simple_body_value_steps * x1 + ff_coefficient_ph_hd_hpl_simple_body_value_steps)))))) /\ (((((exists fs_h_ph_hd_hpl_simple_body_derivative_start. fs_h_ph_hd_hpl_simple_body_derivative_start + S (0) = S ((S (0)) * ff_e_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_derivative_start. ff_d_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_derivative_start * S ((S (0)) * ff_e_hd_hpl_simple) + (0))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_derivative_terminal. fs_h_ph_hd_hpl_simple_body_derivative_terminal + S (hpl_derivative_simple) = S ((S (l)) * ff_e_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_derivative_terminal. ff_d_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_derivative_terminal * S ((S (l)) * ff_e_hd_hpl_simple) + (hpl_derivative_simple))) /\ forall ff_i_ph_hd_hpl_simple_body_derivative_steps. (exists ph_bound_hd_hpl_simple_body_derivative_steps. ph_bound_hd_hpl_simple_body_derivative_steps + S ff_i_ph_hd_hpl_simple_body_derivative_steps = l) -> exists ff_coefficient_ph_hd_hpl_simple_body_derivative_steps ff_previous_ph_hd_hpl_simple_body_derivative_steps ff_current_ph_hd_hpl_simple_body_derivative_steps. ((((exists fs_h_ph_hd_hpl_simple_body_derivative_steps_coefficient. fs_h_ph_hd_hpl_simple_body_derivative_steps_coefficient + S (ff_coefficient_ph_hd_hpl_simple_body_derivative_steps) = S ((S (ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_v_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_derivative_steps_coefficient. ff_u_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_derivative_steps_coefficient * S ((S (ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_v_hd_hpl_simple) + (ff_coefficient_ph_hd_hpl_simple_body_derivative_steps))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_derivative_steps_before. fs_h_ph_hd_hpl_simple_body_derivative_steps_before + S (ff_previous_ph_hd_hpl_simple_body_derivative_steps) = S ((S (ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_e_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_derivative_steps_before. ff_d_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_derivative_steps_before * S ((S (ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_e_hd_hpl_simple) + (ff_previous_ph_hd_hpl_simple_body_derivative_steps))) /\ ((((exists fs_h_ph_hd_hpl_simple_body_derivative_steps_after. fs_h_ph_hd_hpl_simple_body_derivative_steps_after + S (ff_current_ph_hd_hpl_simple_body_derivative_steps) = S ((S (S ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_e_hd_hpl_simple)) /\ exists fs_q_ph_hd_hpl_simple_body_derivative_steps_after. ff_d_hd_hpl_simple = fs_q_ph_hd_hpl_simple_body_derivative_steps_after * S ((S (S ff_i_ph_hd_hpl_simple_body_derivative_steps)) * ff_e_hd_hpl_simple) + (ff_current_ph_hd_hpl_simple_body_derivative_steps))) /\ ff_current_ph_hd_hpl_simple_body_derivative_steps = ff_previous_ph_hd_hpl_simple_body_derivative_steps * x1 + ff_coefficient_ph_hd_hpl_simple_body_derivative_steps)))))))) /\ ((exists hgcrt_mod_left_hpl_simple hgcrt_mod_right_hpl_simple. hpl_value_simple + (m * x) * hgcrt_mod_left_hpl_simple = 0 + (m * x) * hgcrt_mod_right_hpl_simple) /\ (forall hmi_divisor_hpl_simple. (exists hmi_left_factor_hpl_simple. hpl_derivative_simple = hmi_divisor_hpl_simple * hmi_left_factor_hpl_simple) -> (exists hmi_right_factor_hpl_simple. p = hmi_divisor_hpl_simple * hmi_right_factor_hpl_simple) -> hmi_divisor_hpl_simple = 1))) - 0106
specialize beta_horner_simple_lift_preserves_simplicity b - 0107
specialize beta_horner_simple_lift_preserves_simplicity c - 0108
specialize beta_horner_simple_lift_preserves_simplicity a - 0109
specialize beta_horner_simple_lift_preserves_simplicity l - 0110
specialize beta_horner_simple_lift_preserves_simplicity n - 0111
specialize beta_horner_simple_lift_preserves_simplicity d - 0112
specialize beta_horner_simple_lift_preserves_simplicity m - 0113
specialize beta_horner_simple_lift_preserves_simplicity p - 0114
specialize beta_horner_simple_lift_preserves_simplicity s - 0115
specialize beta_horner_simple_lift_preserves_simplicity (m * x) - 0116
specialize beta_horner_simple_lift_preserves_simplicity x1 - 0117
apply beta_horner_simple_lift_preserves_simplicity - 0118
exact hp - 0119
exact hpair - 0120
exact hcop - 0121
exact hfactor - 0122
exact hprevious_witness_left - 0123
cases hsimple - 0124
cases hsimple_witness - 0125
cases hsimple_witness_witness - 0126
cases hsimple_witness_witness_right - 0127
have hnext : exists r. ((((exists hpl_gap_lift. hpl_gap_lift + S (r) = (p * (m * x))) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. r + (m * x) * hgcrt_mod_left_hpl_lift = x1 + (m * x) * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * r + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (p * (m * x)) * hgcrt_mod_left_hpl_lift = 0 + (p * (m * x)) * hgcrt_mod_right_hpl_lift)))))) /\ forall z. (((exists hpl_gap_lift. hpl_gap_lift + S (z) = (p * (m * x))) /\ ((exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. z + (m * x) * hgcrt_mod_left_hpl_lift = x1 + (m * x) * hgcrt_mod_right_hpl_lift) /\ (exists hpl_value_lift. ((exists ff_u_ph_hpl_lift ff_v_ph_hpl_lift. ((((exists fs_h_ph_hpl_lift_body_start. fs_h_ph_hpl_lift_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_start. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_start * S ((S (0)) * ff_v_ph_hpl_lift) + (0))) /\ ((((exists fs_h_ph_hpl_lift_body_terminal. fs_h_ph_hpl_lift_body_terminal + S (hpl_value_lift) = S ((S (l)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_terminal. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_terminal * S ((S (l)) * ff_v_ph_hpl_lift) + (hpl_value_lift))) /\ forall ff_i_ph_hpl_lift_body_steps. (exists ph_bound_hpl_lift_body_steps. ph_bound_hpl_lift_body_steps + S ff_i_ph_hpl_lift_body_steps = l) -> exists ff_coefficient_ph_hpl_lift_body_steps ff_previous_ph_hpl_lift_body_steps ff_current_ph_hpl_lift_body_steps. ((((exists fs_h_ph_hpl_lift_body_steps_coefficient. fs_h_ph_hpl_lift_body_steps_coefficient + S (ff_coefficient_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * c)) /\ exists fs_q_ph_hpl_lift_body_steps_coefficient. b = fs_q_ph_hpl_lift_body_steps_coefficient * S ((S (ff_i_ph_hpl_lift_body_steps)) * c) + (ff_coefficient_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_before. fs_h_ph_hpl_lift_body_steps_before + S (ff_previous_ph_hpl_lift_body_steps) = S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_before. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_before * S ((S (ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_previous_ph_hpl_lift_body_steps))) /\ ((((exists fs_h_ph_hpl_lift_body_steps_after. fs_h_ph_hpl_lift_body_steps_after + S (ff_current_ph_hpl_lift_body_steps) = S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift)) /\ exists fs_q_ph_hpl_lift_body_steps_after. ff_u_ph_hpl_lift = fs_q_ph_hpl_lift_body_steps_after * S ((S (S ff_i_ph_hpl_lift_body_steps)) * ff_v_ph_hpl_lift) + (ff_current_ph_hpl_lift_body_steps))) /\ ff_current_ph_hpl_lift_body_steps = ff_previous_ph_hpl_lift_body_steps * z + ff_coefficient_ph_hpl_lift_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_lift hgcrt_mod_right_hpl_lift. hpl_value_lift + (p * (m * x)) * hgcrt_mod_left_hpl_lift = 0 + (p * (m * x)) * hgcrt_mod_right_hpl_lift)))))) -> z = r) - 0128
specialize beta_horner_simple_root_hensel_lift_exists_unique b - 0129
specialize beta_horner_simple_root_hensel_lift_exists_unique c - 0130
specialize beta_horner_simple_root_hensel_lift_exists_unique x1 - 0131
specialize beta_horner_simple_root_hensel_lift_exists_unique l - 0132
specialize beta_horner_simple_root_hensel_lift_exists_unique x2 - 0133
specialize beta_horner_simple_root_hensel_lift_exists_unique x3 - 0134
specialize beta_horner_simple_root_hensel_lift_exists_unique (m * x) - 0135
specialize beta_horner_simple_root_hensel_lift_exists_unique p - 0136
specialize beta_horner_simple_root_hensel_lift_exists_unique (s * x) - 0137
apply beta_horner_simple_root_hensel_lift_exists_unique - 0138
exact hp - 0139
exact hnonzero - 0140
exact hsimple_witness_witness_left - 0141
exact hcurrent_factor - 0142
exact hsimple_witness_witness_right_left - 0143
exact hsimple_witness_witness_right_right - 0144
cases hnext - 0145
cases hnext_witness - 0146
cases hnext_witness_left - 0147
cases hnext_witness_left_right - 0148
cases hprevious_witness_left - 0149
cases hprevious_witness_left_right - 0150
exists x4 - 0151
split - 0152
split - 0153
exact hnext_witness_left_left - 0154
split - 0155
specialize mod_eq_trans m - 0156
specialize mod_eq_trans x4 - 0157
specialize mod_eq_trans x1 - 0158
specialize mod_eq_trans a - 0159
apply mod_eq_trans - 0160
specialize mod_eq_of_mod_eq_multiple m - 0161
specialize mod_eq_of_mod_eq_multiple (m * x) - 0162
specialize mod_eq_of_mod_eq_multiple x4 - 0163
specialize mod_eq_of_mod_eq_multiple x1 - 0164
apply mod_eq_of_mod_eq_multiple - 0165
exists x - 0166
refl - 0167
exact hnext_witness_left_right_left - 0168
exact hprevious_witness_left_right_left - 0169
exact hnext_witness_left_right_right - 0170
intro z - 0171
intro hz - 0172
cases hz - 0173
cases hz_right - 0174
have hresidue : exists r. ((exists hpl_gap_bound. hpl_gap_bound + S (r) = (m * x)) /\ (exists hgcrt_mod_left_hpl_mod hgcrt_mod_right_hpl_mod. z + (m * x) * hgcrt_mod_left_hpl_mod = r + (m * x) * hgcrt_mod_right_hpl_mod)) - 0175
specialize hensel_canonical_residue_exists (m * x) - 0176
specialize hensel_canonical_residue_exists z - 0177
apply hensel_canonical_residue_exists - 0178
exact hnonzero - 0179
cases hresidue - 0180
cases hresidue_witness - 0181
have hroot_previous : exists hpl_value_root. ((exists ff_u_ph_hpl_root ff_v_ph_hpl_root. ((((exists fs_h_ph_hpl_root_body_start. fs_h_ph_hpl_root_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_start. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_start * S ((S (0)) * ff_v_ph_hpl_root) + (0))) /\ ((((exists fs_h_ph_hpl_root_body_terminal. fs_h_ph_hpl_root_body_terminal + S (hpl_value_root) = S ((S (l)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_terminal. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_terminal * S ((S (l)) * ff_v_ph_hpl_root) + (hpl_value_root))) /\ forall ff_i_ph_hpl_root_body_steps. (exists ph_bound_hpl_root_body_steps. ph_bound_hpl_root_body_steps + S ff_i_ph_hpl_root_body_steps = l) -> exists ff_coefficient_ph_hpl_root_body_steps ff_previous_ph_hpl_root_body_steps ff_current_ph_hpl_root_body_steps. ((((exists fs_h_ph_hpl_root_body_steps_coefficient. fs_h_ph_hpl_root_body_steps_coefficient + S (ff_coefficient_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * c)) /\ exists fs_q_ph_hpl_root_body_steps_coefficient. b = fs_q_ph_hpl_root_body_steps_coefficient * S ((S (ff_i_ph_hpl_root_body_steps)) * c) + (ff_coefficient_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_before. fs_h_ph_hpl_root_body_steps_before + S (ff_previous_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_before. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_before * S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_previous_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_after. fs_h_ph_hpl_root_body_steps_after + S (ff_current_ph_hpl_root_body_steps) = S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_after. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_after * S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_current_ph_hpl_root_body_steps))) /\ ff_current_ph_hpl_root_body_steps = ff_previous_ph_hpl_root_body_steps * z + ff_coefficient_ph_hpl_root_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_root hgcrt_mod_right_hpl_root. hpl_value_root + (m * x) * hgcrt_mod_left_hpl_root = 0 + (m * x) * hgcrt_mod_right_hpl_root)) - 0182
specialize beta_horner_root_mod_weaken b - 0183
specialize beta_horner_root_mod_weaken c - 0184
specialize beta_horner_root_mod_weaken z - 0185
specialize beta_horner_root_mod_weaken l - 0186
specialize beta_horner_root_mod_weaken (m * x) - 0187
specialize beta_horner_root_mod_weaken (p * (m * x)) - 0188
apply beta_horner_root_mod_weaken - 0189
exists p - 0190
apply mul_comm - 0191
exact hz_right_right - 0192
have hroot_representative : exists hpl_value_root. ((exists ff_u_ph_hpl_root ff_v_ph_hpl_root. ((((exists fs_h_ph_hpl_root_body_start. fs_h_ph_hpl_root_body_start + S (0) = S ((S (0)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_start. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_start * S ((S (0)) * ff_v_ph_hpl_root) + (0))) /\ ((((exists fs_h_ph_hpl_root_body_terminal. fs_h_ph_hpl_root_body_terminal + S (hpl_value_root) = S ((S (l)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_terminal. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_terminal * S ((S (l)) * ff_v_ph_hpl_root) + (hpl_value_root))) /\ forall ff_i_ph_hpl_root_body_steps. (exists ph_bound_hpl_root_body_steps. ph_bound_hpl_root_body_steps + S ff_i_ph_hpl_root_body_steps = l) -> exists ff_coefficient_ph_hpl_root_body_steps ff_previous_ph_hpl_root_body_steps ff_current_ph_hpl_root_body_steps. ((((exists fs_h_ph_hpl_root_body_steps_coefficient. fs_h_ph_hpl_root_body_steps_coefficient + S (ff_coefficient_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * c)) /\ exists fs_q_ph_hpl_root_body_steps_coefficient. b = fs_q_ph_hpl_root_body_steps_coefficient * S ((S (ff_i_ph_hpl_root_body_steps)) * c) + (ff_coefficient_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_before. fs_h_ph_hpl_root_body_steps_before + S (ff_previous_ph_hpl_root_body_steps) = S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_before. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_before * S ((S (ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_previous_ph_hpl_root_body_steps))) /\ ((((exists fs_h_ph_hpl_root_body_steps_after. fs_h_ph_hpl_root_body_steps_after + S (ff_current_ph_hpl_root_body_steps) = S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root)) /\ exists fs_q_ph_hpl_root_body_steps_after. ff_u_ph_hpl_root = fs_q_ph_hpl_root_body_steps_after * S ((S (S ff_i_ph_hpl_root_body_steps)) * ff_v_ph_hpl_root) + (ff_current_ph_hpl_root_body_steps))) /\ ff_current_ph_hpl_root_body_steps = ff_previous_ph_hpl_root_body_steps * x5 + ff_coefficient_ph_hpl_root_body_steps)))))) /\ (exists hgcrt_mod_left_hpl_root hgcrt_mod_right_hpl_root. hpl_value_root + (m * x) * hgcrt_mod_left_hpl_root = 0 + (m * x) * hgcrt_mod_right_hpl_root)) - 0193
specialize beta_horner_root_mod_transport b - 0194
specialize beta_horner_root_mod_transport c - 0195
specialize beta_horner_root_mod_transport z - 0196
specialize beta_horner_root_mod_transport x5 - 0197
specialize beta_horner_root_mod_transport l - 0198
specialize beta_horner_root_mod_transport (m * x) - 0199
apply beta_horner_root_mod_transport - 0200
exact hresidue_witness_right - 0201
exact hroot_previous - 0202
have hsame_previous : x5 = x1 - 0203
specialize hprevious_witness_right x5 - 0204
apply hprevious_witness_right - 0205
split - 0206
exact hresidue_witness_left - 0207
split - 0208
specialize mod_eq_trans m - 0209
specialize mod_eq_trans x5 - 0210
specialize mod_eq_trans z - 0211
specialize mod_eq_trans a - 0212
apply mod_eq_trans - 0213
specialize mod_eq_of_mod_eq_multiple m - 0214
specialize mod_eq_of_mod_eq_multiple (m * x) - 0215
specialize mod_eq_of_mod_eq_multiple x5 - 0216
specialize mod_eq_of_mod_eq_multiple z - 0217
apply mod_eq_of_mod_eq_multiple - 0218
exists x - 0219
refl - 0220
specialize mod_eq_symm (m * x) - 0221
specialize mod_eq_symm z - 0222
specialize mod_eq_symm x5 - 0223
apply mod_eq_symm - 0224
exact hresidue_witness_right - 0225
exact hz_right_left - 0226
exact hroot_representative - 0227
specialize hnext_witness_right z - 0228
apply hnext_witness_right - 0229
split - 0230
exact hz_left - 0231
split - 0232
rewrite <- hsame_previous - 0233
exact hresidue_witness_right - 0234
exact hz_right_right