Exact expanded PA statement
forall p b c l. ~(p = 0) -> exists qb qc rb rc. (forall fdp_index_exists_result. (exists gsp_lt_gap_exists_result_index_bound. gsp_lt_gap_exists_result_index_bound + S fdp_index_exists_result = l) -> exists fdp_value_exists_result fdp_quotient_exists_result fdp_remainder_exists_result. (((exists ff_h_fdp_exists_result_source. ff_h_fdp_exists_result_source + S (fdp_value_exists_result) = S ((S (fdp_index_exists_result)) * c)) /\ exists ff_q_fdp_exists_result_source. b = ff_q_fdp_exists_result_source * S ((S (fdp_index_exists_result)) * c) + (fdp_value_exists_result))) /\ ((((exists ff_h_fdp_exists_result_quotient_entry. ff_h_fdp_exists_result_quotient_entry + S (fdp_quotient_exists_result) = S ((S (fdp_index_exists_result)) * qc)) /\ exists ff_q_fdp_exists_result_quotient_entry. qb = ff_q_fdp_exists_result_quotient_entry * S ((S (fdp_index_exists_result)) * qc) + (fdp_quotient_exists_result))) /\ ((((exists ff_h_fdp_exists_result_remainder_entry. ff_h_fdp_exists_result_remainder_entry + S (fdp_remainder_exists_result) = S ((S (fdp_index_exists_result)) * rc)) /\ exists ff_q_fdp_exists_result_remainder_entry. rb = ff_q_fdp_exists_result_remainder_entry * S ((S (fdp_index_exists_result)) * rc) + (fdp_remainder_exists_result))) /\ (fdp_value_exists_result = p * fdp_quotient_exists_result + fdp_remainder_exists_result /\ (exists gsp_lt_gap_exists_result_remainder_bound. gsp_lt_gap_exists_result_remainder_bound + S fdp_remainder_exists_result = p)))))Structural proof guide
Generated structural guide
Every finite beta source prefix has beta-coded quotients and bounded remainders for a nonzero modulus.
Use the direct prerequisites add_eq_zero_right, succ_ne_zero, beta_at_exists, division_remainder_exists, beta_division_prefix_extend as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (8), intermediate claims (6).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA0029 beta_at_exists PA001D division_remainder_exists PA00BX beta_division_prefix_extendDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Alpha-v16 checked-use theorem is independently kernel-checked when replayed; it is not a Stable theorem.
- 0001
intro p - 0002
intro b - 0003
intro c - 0004
induction l - 0005
intro hp0 - 0006
exists 0 - 0007
exists 0 - 0008
exists 0 - 0009
exists 0 - 0010
intro i - 0011
intro hi - 0012
exfalso - 0013
cases hi - 0014
have hsi : S i = 0 - 0015
specialize add_eq_zero_right x - 0016
specialize add_eq_zero_right (S i) - 0017
apply add_eq_zero_right - 0018
exact hi_witness - 0019
specialize succ_ne_zero i - 0020
apply succ_ne_zero - 0021
exact hsi - 0022
intro hp0 - 0023
have hprevious : exists qb qc rb rc. (forall fdp_index_exists_previous. (exists gsp_lt_gap_exists_previous_index_bound. gsp_lt_gap_exists_previous_index_bound + S fdp_index_exists_previous = l) -> exists fdp_value_exists_previous fdp_quotient_exists_previous fdp_remainder_exists_previous. (((exists ff_h_fdp_exists_previous_source. ff_h_fdp_exists_previous_source + S (fdp_value_exists_previous) = S ((S (fdp_index_exists_previous)) * c)) /\ exists ff_q_fdp_exists_previous_source. b = ff_q_fdp_exists_previous_source * S ((S (fdp_index_exists_previous)) * c) + (fdp_value_exists_previous))) /\ ((((exists ff_h_fdp_exists_previous_quotient_entry. ff_h_fdp_exists_previous_quotient_entry + S (fdp_quotient_exists_previous) = S ((S (fdp_index_exists_previous)) * qc)) /\ exists ff_q_fdp_exists_previous_quotient_entry. qb = ff_q_fdp_exists_previous_quotient_entry * S ((S (fdp_index_exists_previous)) * qc) + (fdp_quotient_exists_previous))) /\ ((((exists ff_h_fdp_exists_previous_remainder_entry. ff_h_fdp_exists_previous_remainder_entry + S (fdp_remainder_exists_previous) = S ((S (fdp_index_exists_previous)) * rc)) /\ exists ff_q_fdp_exists_previous_remainder_entry. rb = ff_q_fdp_exists_previous_remainder_entry * S ((S (fdp_index_exists_previous)) * rc) + (fdp_remainder_exists_previous))) /\ (fdp_value_exists_previous = p * fdp_quotient_exists_previous + fdp_remainder_exists_previous /\ (exists gsp_lt_gap_exists_previous_remainder_bound. gsp_lt_gap_exists_previous_remainder_bound + S fdp_remainder_exists_previous = p))))) - 0024
apply IH - 0025
exact hp0 - 0026
cases hprevious - 0027
cases hprevious_witness - 0028
cases hprevious_witness_witness - 0029
cases hprevious_witness_witness_witness - 0030
have hdecoded : exists x. (((exists ff_h_fdp_exists_last_source. ff_h_fdp_exists_last_source + S (x) = S ((S (l)) * c)) /\ exists ff_q_fdp_exists_last_source. b = ff_q_fdp_exists_last_source * S ((S (l)) * c) + (x))) - 0031
specialize beta_at_exists b - 0032
specialize beta_at_exists c - 0033
specialize beta_at_exists l - 0034
exact beta_at_exists - 0035
cases hdecoded - 0036
have hdivision : exists q r. x4 = p * q + r /\ (exists gsp_lt_gap_fdp_exists_last_remainder_bound. gsp_lt_gap_fdp_exists_last_remainder_bound + S r = p) - 0037
specialize division_remainder_exists p - 0038
specialize division_remainder_exists x4 - 0039
apply division_remainder_exists - 0040
exact hp0 - 0041
cases hdivision - 0042
cases hdivision_witness - 0043
have hchoice : exists x q r. (((exists ff_h_fdp_choice_source. ff_h_fdp_choice_source + S (x) = S ((S (l)) * c)) /\ exists ff_q_fdp_choice_source. b = ff_q_fdp_choice_source * S ((S (l)) * c) + (x))) /\ (x = p * q + r /\ (exists gsp_lt_gap_fdp_choice_remainder_bound. gsp_lt_gap_fdp_choice_remainder_bound + S r = p)) - 0044
exists x4 - 0045
exists x5 - 0046
exists x6 - 0047
split - 0048
exact hdecoded_witness - 0049
exact hdivision_witness_witness - 0050
have hnext : exists qb qc rb rc. (forall fdp_index_exists_next. (exists gsp_lt_gap_exists_next_index_bound. gsp_lt_gap_exists_next_index_bound + S fdp_index_exists_next = S l) -> exists fdp_value_exists_next fdp_quotient_exists_next fdp_remainder_exists_next. (((exists ff_h_fdp_exists_next_source. ff_h_fdp_exists_next_source + S (fdp_value_exists_next) = S ((S (fdp_index_exists_next)) * c)) /\ exists ff_q_fdp_exists_next_source. b = ff_q_fdp_exists_next_source * S ((S (fdp_index_exists_next)) * c) + (fdp_value_exists_next))) /\ ((((exists ff_h_fdp_exists_next_quotient_entry. ff_h_fdp_exists_next_quotient_entry + S (fdp_quotient_exists_next) = S ((S (fdp_index_exists_next)) * qc)) /\ exists ff_q_fdp_exists_next_quotient_entry. qb = ff_q_fdp_exists_next_quotient_entry * S ((S (fdp_index_exists_next)) * qc) + (fdp_quotient_exists_next))) /\ ((((exists ff_h_fdp_exists_next_remainder_entry. ff_h_fdp_exists_next_remainder_entry + S (fdp_remainder_exists_next) = S ((S (fdp_index_exists_next)) * rc)) /\ exists ff_q_fdp_exists_next_remainder_entry. rb = ff_q_fdp_exists_next_remainder_entry * S ((S (fdp_index_exists_next)) * rc) + (fdp_remainder_exists_next))) /\ (fdp_value_exists_next = p * fdp_quotient_exists_next + fdp_remainder_exists_next /\ (exists gsp_lt_gap_exists_next_remainder_bound. gsp_lt_gap_exists_next_remainder_bound + S fdp_remainder_exists_next = p))))) - 0051
specialize beta_division_prefix_extend p - 0052
specialize beta_division_prefix_extend b - 0053
specialize beta_division_prefix_extend c - 0054
specialize beta_division_prefix_extend x - 0055
specialize beta_division_prefix_extend x1 - 0056
specialize beta_division_prefix_extend x2 - 0057
specialize beta_division_prefix_extend x3 - 0058
specialize beta_division_prefix_extend l - 0059
apply beta_division_prefix_extend - 0060
exact hprevious_witness_witness_witness_witness - 0061
exact hchoice - 0062
exact hnext