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 p b c a n. (~((p) = 1) /\ forall pfa_factor_left_construct_prime pfa_factor_right_construct_prime. (p) = pfa_factor_left_construct_prime * pfa_factor_right_construct_prime -> pfa_factor_left_construct_prime = 1 \/ pfa_factor_right_construct_prime = 1) -> (forall fom_index_pfp_construct_coefficients. (exists fom_gap_pfp_construct_coefficients_index_bound. fom_gap_pfp_construct_coefficients_index_bound + S (fom_index_pfp_construct_coefficients) = S n) -> exists fom_value_pfp_construct_coefficients. ((((exists fom_beta_height_pfp_construct_coefficients_entry. fom_beta_height_pfp_construct_coefficients_entry + S (fom_value_pfp_construct_coefficients) = S ((S (fom_index_pfp_construct_coefficients)) * c)) /\ exists fom_beta_quotient_pfp_construct_coefficients_entry. b = fom_beta_quotient_pfp_construct_coefficients_entry * S ((S (fom_index_pfp_construct_coefficients)) * c) + (fom_value_pfp_construct_coefficients))) /\ (exists fom_gap_pfp_construct_coefficients_value_bound. fom_gap_pfp_construct_coefficients_value_bound + S (fom_value_pfp_construct_coefficients) = p))) -> (exists pfa_gap_construct_base. pfa_gap_construct_base + S (a) = (p)) -> exists qb qc r. (exists pfs_history_code_construct_result pfs_history_scale_construct_result. ((((exists pfa_gap_construct_resulttracebase. pfa_gap_construct_resulttracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_construct_resulttraceinitial. ff_h_pfp_construct_resulttraceinitial + S (0) = S ((S (0)) * pfs_history_scale_construct_result)) /\ exists ff_q_pfp_construct_resulttraceinitial. pfs_history_code_construct_result = ff_q_pfp_construct_resulttraceinitial * S ((S (0)) * pfs_history_scale_construct_result) + (0))) /\ (((((exists ff_h_pfp_construct_resulttraceterminal. ff_h_pfp_construct_resulttraceterminal + S (r) = S ((S (S (n))) * pfs_history_scale_construct_result)) /\ exists ff_q_pfp_construct_resulttraceterminal. pfs_history_code_construct_result = ff_q_pfp_construct_resulttraceterminal * S ((S (S (n))) * pfs_history_scale_construct_result) + (r))) /\ ((forall pfh_index_construct_resulttracesteps. (exists pfa_gap_construct_resulttracestepsindex. pfa_gap_construct_resulttracestepsindex + S (pfh_index_construct_resulttracesteps) = (S (n))) -> (exists pfh_coefficient_construct_resulttracestepsstep pfh_before_construct_resulttracestepsstep pfh_after_construct_resulttracestepsstep pfh_product_construct_resulttracestepsstep. ((((exists ff_h_pfp_construct_resulttracestepsstepcoefficient. ff_h_pfp_construct_resulttracestepsstepcoefficient + S (pfh_coefficient_construct_resulttracestepsstep) = S ((S (pfh_index_construct_resulttracesteps)) * c)) /\ exists ff_q_pfp_construct_resulttracestepsstepcoefficient. b = ff_q_pfp_construct_resulttracestepsstepcoefficient * S ((S (pfh_index_construct_resulttracesteps)) * c) + (pfh_coefficient_construct_resulttracestepsstep))) /\ (((((exists ff_h_pfp_construct_resulttracestepsstepbefore. ff_h_pfp_construct_resulttracestepsstepbefore + S (pfh_before_construct_resulttracestepsstep) = S ((S (pfh_index_construct_resulttracesteps)) * pfs_history_scale_construct_result)) /\ exists ff_q_pfp_construct_resulttracestepsstepbefore. pfs_history_code_construct_result = ff_q_pfp_construct_resulttracestepsstepbefore * S ((S (pfh_index_construct_resulttracesteps)) * pfs_history_scale_construct_result) + (pfh_before_construct_resulttracestepsstep))) /\ (((((exists ff_h_pfp_construct_resulttracestepsstepafter. ff_h_pfp_construct_resulttracestepsstepafter + S (pfh_after_construct_resulttracestepsstep) = S ((S (S (pfh_index_construct_resulttracesteps))) * pfs_history_scale_construct_result)) /\ exists ff_q_pfp_construct_resulttracestepsstepafter. pfs_history_code_construct_result = ff_q_pfp_construct_resulttracestepsstepafter * S ((S (S (pfh_index_construct_resulttracesteps))) * pfs_history_scale_construct_result) + (pfh_after_construct_resulttracestepsstep))) /\ (((((exists pfa_gap_construct_resulttracestepsstepmultiplyleft. pfa_gap_construct_resulttracestepsstepmultiplyleft + S (pfh_before_construct_resulttracestepsstep) = (p)) /\ (((exists pfa_gap_construct_resulttracestepsstepmultiplyright. pfa_gap_construct_resulttracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_construct_resulttracestepsstepmultiplyresultbound. pfa_gap_construct_resulttracestepsstepmultiplyresultbound + S (pfh_product_construct_resulttracestepsstep) = (p)) /\ ((exists pfa_offset_left_construct_resulttracestepsstepmultiplyresultcongruence pfa_offset_right_construct_resulttracestepsstepmultiplyresultcongruence. ((pfh_before_construct_resulttracestepsstep) * (a)) + (p) * pfa_offset_left_construct_resulttracestepsstepmultiplyresultcongruence = (pfh_product_construct_resulttracestepsstep) + (p) * pfa_offset_right_construct_resulttracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_construct_resulttracestepsstepaddleft. pfa_gap_construct_resulttracestepsstepaddleft + S (pfh_product_construct_resulttracestepsstep) = (p)) /\ (((exists pfa_gap_construct_resulttracestepsstepaddright. pfa_gap_construct_resulttracestepsstepaddright + S (pfh_coefficient_construct_resulttracestepsstep) = (p)) /\ ((((exists pfa_gap_construct_resulttracestepsstepaddresultbound. pfa_gap_construct_resulttracestepsstepaddresultbound + S (pfh_after_construct_resulttracestepsstep) = (p)) /\ ((exists pfa_offset_left_construct_resulttracestepsstepaddresultcongruence pfa_offset_right_construct_resulttracestepsstepaddresultcongruence. ((pfh_product_construct_resulttracestepsstep) + (pfh_coefficient_construct_resulttracestepsstep)) + (p) * pfa_offset_left_construct_resulttracestepsstepaddresultcongruence = (pfh_after_construct_resulttracestepsstep) + (p) * pfa_offset_right_construct_resulttracestepsstepaddresultcongruence)))))))))))))))))))))))))) /\ ((forall ff_index_mcp_pfs_construct_resultquotient ff_source_mcp_pfs_construct_resultquotient ff_target_mcp_pfs_construct_resultquotient. (exists mcp_gap_pfs_construct_resultquotient_bound. mcp_gap_pfs_construct_resultquotient_bound + S (ff_index_mcp_pfs_construct_resultquotient) = (n)) -> (((exists fs_h_mcp_pfs_construct_resultquotient_source. fs_h_mcp_pfs_construct_resultquotient_source + S (ff_source_mcp_pfs_construct_resultquotient) = S ((S ((1) + (1) * ff_index_mcp_pfs_construct_resultquotient)) * pfs_history_scale_construct_result)) /\ exists fs_q_mcp_pfs_construct_resultquotient_source. pfs_history_code_construct_result = fs_q_mcp_pfs_construct_resultquotient_source * S ((S ((1) + (1) * ff_index_mcp_pfs_construct_resultquotient)) * pfs_history_scale_construct_result) + (ff_source_mcp_pfs_construct_resultquotient))) -> (((exists fs_h_mcp_pfs_construct_resultquotient_target. fs_h_mcp_pfs_construct_resultquotient_target + S (ff_target_mcp_pfs_construct_resultquotient) = S ((S (ff_index_mcp_pfs_construct_resultquotient)) * qc)) /\ exists fs_q_mcp_pfs_construct_resultquotient_target. qb = fs_q_mcp_pfs_construct_resultquotient_target * S ((S (ff_index_mcp_pfs_construct_resultquotient)) * qc) + (ff_target_mcp_pfs_construct_resultquotient))) -> ff_target_mcp_pfs_construct_resultquotient = ff_source_mcp_pfs_construct_resultquotient))))Constructive proof overview
Generated structural guide
Construct the actual quotient code and remainder from a real modular Horner history, for every nonempty canonical coefficient prefix.
The unchanged tactic script uses 2 declared prerequisites and contains 38 exact native proof lines.
Alpha v34 checked-use · first admitted v32 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
prime_field_polynomial_horner_exists Alpha theorem; checked-use authorized beta_affine_matrix_slice_exists 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.
01Fix variables and assumptionsL1–8
02Establish heL9–18
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime field polynomial horner exists.
- L9
have he : ∃ r. FpHorner(p,b,c,a,S n,r)Definitions: FpHorner - L10
specialize prime_field_polynomial_horner_exists (p) - L11
specialize prime_field_polynomial_horner_exists (b) - L12
specialize prime_field_polynomial_horner_exists (c) - L13
specialize prime_field_polynomial_horner_exists (a) - L14
specialize prime_field_polynomial_horner_exists (S n) - L15
apply prime_field_polynomial_horner_exists - L16
exact hp - L17
exact hc - L18
exact ha
03Separate the logical casesL19–21
04Establish hqL22–28
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta affine matrix slice exists.
- L22
have hq : ∃ qb. ∃ qc. MatrixAffineSlice(x1,x2,1,1,qb,qc,n)Definitions: MatrixAffineSlice - L23
specialize beta_affine_matrix_slice_exists (x1) - L24
specialize beta_affine_matrix_slice_exists (x2) - L25
specialize beta_affine_matrix_slice_exists (1) - L26
specialize beta_affine_matrix_slice_exists (1) - L27
specialize beta_affine_matrix_slice_exists (n) - L28
apply beta_affine_matrix_slice_exists
05Separate the logical casesL29–30
06Construct an explicit witnessL31–35
07Separate the logical casesL36–36
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L36
split
Original exact command ledger · 38 lines
- 0001
intro p - 0002
intro b - 0003
intro c - 0004
intro a - 0005
intro n - 0006
intro hp - 0007
intro hc - 0008
intro ha - 0009
have he : exists r. (exists pfh_trace_code_construct_eval pfh_trace_scale_construct_eval. (((exists pfa_gap_construct_evaltracebase. pfa_gap_construct_evaltracebase + S (a) = (p)) /\ (((((exists ff_h_pfp_construct_evaltraceinitial. ff_h_pfp_construct_evaltraceinitial + S (0) = S ((S (0)) * pfh_trace_scale_construct_eval)) /\ exists ff_q_pfp_construct_evaltraceinitial. pfh_trace_code_construct_eval = ff_q_pfp_construct_evaltraceinitial * S ((S (0)) * pfh_trace_scale_construct_eval) + (0))) /\ (((((exists ff_h_pfp_construct_evaltraceterminal. ff_h_pfp_construct_evaltraceterminal + S (r) = S ((S (S n)) * pfh_trace_scale_construct_eval)) /\ exists ff_q_pfp_construct_evaltraceterminal. pfh_trace_code_construct_eval = ff_q_pfp_construct_evaltraceterminal * S ((S (S n)) * pfh_trace_scale_construct_eval) + (r))) /\ ((forall pfh_index_construct_evaltracesteps. (exists pfa_gap_construct_evaltracestepsindex. pfa_gap_construct_evaltracestepsindex + S (pfh_index_construct_evaltracesteps) = (S n)) -> (exists pfh_coefficient_construct_evaltracestepsstep pfh_before_construct_evaltracestepsstep pfh_after_construct_evaltracestepsstep pfh_product_construct_evaltracestepsstep. ((((exists ff_h_pfp_construct_evaltracestepsstepcoefficient. ff_h_pfp_construct_evaltracestepsstepcoefficient + S (pfh_coefficient_construct_evaltracestepsstep) = S ((S (pfh_index_construct_evaltracesteps)) * c)) /\ exists ff_q_pfp_construct_evaltracestepsstepcoefficient. b = ff_q_pfp_construct_evaltracestepsstepcoefficient * S ((S (pfh_index_construct_evaltracesteps)) * c) + (pfh_coefficient_construct_evaltracestepsstep))) /\ (((((exists ff_h_pfp_construct_evaltracestepsstepbefore. ff_h_pfp_construct_evaltracestepsstepbefore + S (pfh_before_construct_evaltracestepsstep) = S ((S (pfh_index_construct_evaltracesteps)) * pfh_trace_scale_construct_eval)) /\ exists ff_q_pfp_construct_evaltracestepsstepbefore. pfh_trace_code_construct_eval = ff_q_pfp_construct_evaltracestepsstepbefore * S ((S (pfh_index_construct_evaltracesteps)) * pfh_trace_scale_construct_eval) + (pfh_before_construct_evaltracestepsstep))) /\ (((((exists ff_h_pfp_construct_evaltracestepsstepafter. ff_h_pfp_construct_evaltracestepsstepafter + S (pfh_after_construct_evaltracestepsstep) = S ((S (S (pfh_index_construct_evaltracesteps))) * pfh_trace_scale_construct_eval)) /\ exists ff_q_pfp_construct_evaltracestepsstepafter. pfh_trace_code_construct_eval = ff_q_pfp_construct_evaltracestepsstepafter * S ((S (S (pfh_index_construct_evaltracesteps))) * pfh_trace_scale_construct_eval) + (pfh_after_construct_evaltracestepsstep))) /\ (((((exists pfa_gap_construct_evaltracestepsstepmultiplyleft. pfa_gap_construct_evaltracestepsstepmultiplyleft + S (pfh_before_construct_evaltracestepsstep) = (p)) /\ (((exists pfa_gap_construct_evaltracestepsstepmultiplyright. pfa_gap_construct_evaltracestepsstepmultiplyright + S (a) = (p)) /\ ((((exists pfa_gap_construct_evaltracestepsstepmultiplyresultbound. pfa_gap_construct_evaltracestepsstepmultiplyresultbound + S (pfh_product_construct_evaltracestepsstep) = (p)) /\ ((exists pfa_offset_left_construct_evaltracestepsstepmultiplyresultcongruence pfa_offset_right_construct_evaltracestepsstepmultiplyresultcongruence. ((pfh_before_construct_evaltracestepsstep) * (a)) + (p) * pfa_offset_left_construct_evaltracestepsstepmultiplyresultcongruence = (pfh_product_construct_evaltracestepsstep) + (p) * pfa_offset_right_construct_evaltracestepsstepmultiplyresultcongruence))))))))) /\ ((((exists pfa_gap_construct_evaltracestepsstepaddleft. pfa_gap_construct_evaltracestepsstepaddleft + S (pfh_product_construct_evaltracestepsstep) = (p)) /\ (((exists pfa_gap_construct_evaltracestepsstepaddright. pfa_gap_construct_evaltracestepsstepaddright + S (pfh_coefficient_construct_evaltracestepsstep) = (p)) /\ ((((exists pfa_gap_construct_evaltracestepsstepaddresultbound. pfa_gap_construct_evaltracestepsstepaddresultbound + S (pfh_after_construct_evaltracestepsstep) = (p)) /\ ((exists pfa_offset_left_construct_evaltracestepsstepaddresultcongruence pfa_offset_right_construct_evaltracestepsstepaddresultcongruence. ((pfh_product_construct_evaltracestepsstep) + (pfh_coefficient_construct_evaltracestepsstep)) + (p) * pfa_offset_left_construct_evaltracestepsstepaddresultcongruence = (pfh_after_construct_evaltracestepsstep) + (p) * pfa_offset_right_construct_evaltracestepsstepaddresultcongruence))))))))))))))))))))))))))) - 0010
specialize prime_field_polynomial_horner_exists (p) - 0011
specialize prime_field_polynomial_horner_exists (b) - 0012
specialize prime_field_polynomial_horner_exists (c) - 0013
specialize prime_field_polynomial_horner_exists (a) - 0014
specialize prime_field_polynomial_horner_exists (S n) - 0015
apply prime_field_polynomial_horner_exists - 0016
exact hp - 0017
exact hc - 0018
exact ha - 0019
cases he - 0020
cases he_witness - 0021
cases he_witness_witness - 0022
have hq : exists qb qc. (forall ff_index_mcp_pfs_construct_slice ff_source_mcp_pfs_construct_slice ff_target_mcp_pfs_construct_slice. (exists mcp_gap_pfs_construct_slice_bound. mcp_gap_pfs_construct_slice_bound + S (ff_index_mcp_pfs_construct_slice) = (n)) -> (((exists fs_h_mcp_pfs_construct_slice_source. fs_h_mcp_pfs_construct_slice_source + S (ff_source_mcp_pfs_construct_slice) = S ((S ((1) + (1) * ff_index_mcp_pfs_construct_slice)) * x2)) /\ exists fs_q_mcp_pfs_construct_slice_source. x1 = fs_q_mcp_pfs_construct_slice_source * S ((S ((1) + (1) * ff_index_mcp_pfs_construct_slice)) * x2) + (ff_source_mcp_pfs_construct_slice))) -> (((exists fs_h_mcp_pfs_construct_slice_target. fs_h_mcp_pfs_construct_slice_target + S (ff_target_mcp_pfs_construct_slice) = S ((S (ff_index_mcp_pfs_construct_slice)) * qc)) /\ exists fs_q_mcp_pfs_construct_slice_target. qb = fs_q_mcp_pfs_construct_slice_target * S ((S (ff_index_mcp_pfs_construct_slice)) * qc) + (ff_target_mcp_pfs_construct_slice))) -> ff_target_mcp_pfs_construct_slice = ff_source_mcp_pfs_construct_slice) - 0023
specialize beta_affine_matrix_slice_exists (x1) - 0024
specialize beta_affine_matrix_slice_exists (x2) - 0025
specialize beta_affine_matrix_slice_exists (1) - 0026
specialize beta_affine_matrix_slice_exists (1) - 0027
specialize beta_affine_matrix_slice_exists (n) - 0028
apply beta_affine_matrix_slice_exists - 0029
cases hq - 0030
cases hq_witness - 0031
exists x3 - 0032
exists x4 - 0033
exists x - 0034
exists x1 - 0035
exists x2 - 0036
split - 0037
exact he_witness_witness_witness - 0038
exact hq_witness_witness