Exact expanded PA statement
forall p q i d r rb rc k. (forall eri_column_row_quotient_source. (exists eri_gap_row_quotient_source_bound. eri_gap_row_quotient_source_bound + S (eri_column_row_quotient_source) = k) -> exists eri_bit_row_quotient_source. ((((exists ff_h_eri_row_quotient_source_decoded. ff_h_eri_row_quotient_source_decoded + S (eri_bit_row_quotient_source) = S ((S (eri_column_row_quotient_source)) * rc)) /\ exists ff_q_eri_row_quotient_source_decoded. rb = ff_q_eri_row_quotient_source_decoded * S ((S (eri_column_row_quotient_source)) * rc) + (eri_bit_row_quotient_source))) /\ (((eri_bit_row_quotient_source = 0 /\ ((exists eri_gap_row_quotient_source_choice_left. eri_gap_row_quotient_source_choice_left + S (q * S i) = p * S eri_column_row_quotient_source) /\ ~(exists eri_gap_row_quotient_source_choice_right. eri_gap_row_quotient_source_choice_right + S (p * S eri_column_row_quotient_source) = q * S i))) \/ (eri_bit_row_quotient_source = 1 /\ ((exists eri_gap_row_quotient_source_choice_right. eri_gap_row_quotient_source_choice_right + S (p * S eri_column_row_quotient_source) = q * S i) /\ ~(exists eri_gap_row_quotient_source_choice_left. eri_gap_row_quotient_source_choice_left + S (q * S i) = p * S eri_column_row_quotient_source))))))) -> q * S i = p * d + r -> ~(r = 0) -> (exists edt_lt_gap_row_quotient_remainder_bound. edt_lt_gap_row_quotient_remainder_bound + S (r) = p) -> (forall eis_index_row_quotient_initial. (exists eis_lt_gap_row_quotient_initial_bound. eis_lt_gap_row_quotient_initial_bound + S (eis_index_row_quotient_initial) = k) -> exists eis_bit_row_quotient_initial. ((((exists ff_h_eis_row_quotient_initial_decoded. ff_h_eis_row_quotient_initial_decoded + S (eis_bit_row_quotient_initial) = S ((S (eis_index_row_quotient_initial)) * rc)) /\ exists ff_q_eis_row_quotient_initial_decoded. rb = ff_q_eis_row_quotient_initial_decoded * S ((S (eis_index_row_quotient_initial)) * rc) + (eis_bit_row_quotient_initial))) /\ (((eis_bit_row_quotient_initial = 1 /\ (exists eis_le_gap_row_quotient_initial_choice_inside. eis_le_gap_row_quotient_initial_choice_inside + (S eis_index_row_quotient_initial) = d)) \/ (eis_bit_row_quotient_initial = 0 /\ (exists eis_lt_gap_row_quotient_initial_choice_outside. eis_lt_gap_row_quotient_initial_choice_outside + S (d) = S eis_index_row_quotient_initial))))))Structural proof guide
Generated structural guide
A semantic row prefix is the exact initial segment cut out by its nonzero division quotient.
Use the direct prerequisites nonzero_remainder_division_positive_multiple_threshold, le_or_lt as previously established PA formulas.
The proof proceeds by case analysis (9), intermediate claims (2).
Referenced ingredients
Proof neighborhood
Direct dependencies
Direct 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 q - 0003
intro i - 0004
intro d - 0005
intro r - 0006
intro rb - 0007
intro rc - 0008
intro k - 0009
intro hrow - 0010
intro hdivision - 0011
intro hr0 - 0012
intro hrp - 0013
intro j - 0014
intro hj - 0015
have hstored : exists bit. ((((exists ff_h_row_quotient_stored. ff_h_row_quotient_stored + S (bit) = S ((S (j)) * rc)) /\ exists ff_q_row_quotient_stored. rb = ff_q_row_quotient_stored * S ((S (j)) * rc) + (bit))) /\ (((bit = 0 /\ ((exists eri_gap_row_quotient_stored_choice_left. eri_gap_row_quotient_stored_choice_left + S (q * S i) = p * S j) /\ ~(exists eri_gap_row_quotient_stored_choice_right. eri_gap_row_quotient_stored_choice_right + S (p * S j) = q * S i))) \/ (bit = 1 /\ ((exists eri_gap_row_quotient_stored_choice_right. eri_gap_row_quotient_stored_choice_right + S (p * S j) = q * S i) /\ ~(exists eri_gap_row_quotient_stored_choice_left. eri_gap_row_quotient_stored_choice_left + S (q * S i) = p * S j)))))) - 0016
specialize hrow j - 0017
apply hrow - 0018
exact hj - 0019
cases hstored - 0020
cases hstored_witness - 0021
exists x - 0022
split - 0023
exact hstored_witness_left - 0024
have hthreshold : (((exists edt_lt_gap_row_quotient_below. edt_lt_gap_row_quotient_below + S (p * S j) = q * S i) -> (exists edt_le_gap_row_quotient_bounded. edt_le_gap_row_quotient_bounded + (S j) = d)) /\ ((exists edt_le_gap_row_quotient_bounded. edt_le_gap_row_quotient_bounded + (S j) = d) -> (exists edt_lt_gap_row_quotient_below. edt_lt_gap_row_quotient_below + S (p * S j) = q * S i))) - 0025
specialize nonzero_remainder_division_positive_multiple_threshold p - 0026
specialize nonzero_remainder_division_positive_multiple_threshold (q * S i) - 0027
specialize nonzero_remainder_division_positive_multiple_threshold d - 0028
specialize nonzero_remainder_division_positive_multiple_threshold r - 0029
specialize nonzero_remainder_division_positive_multiple_threshold j - 0030
apply nonzero_remainder_division_positive_multiple_threshold - 0031
exact hdivision - 0032
exact hr0 - 0033
exact hrp - 0034
cases hthreshold - 0035
cases hstored_witness_right - 0036
cases hstored_witness_right_left - 0037
cases hstored_witness_right_left_right - 0038
right - 0039
split - 0040
exact hstored_witness_right_left_left - 0041
specialize le_or_lt (S j) - 0042
specialize le_or_lt d - 0043
cases le_or_lt - 0044
exfalso - 0045
apply hstored_witness_right_left_right_right - 0046
apply hthreshold_right - 0047
exact le_or_lt_left - 0048
exact le_or_lt_right - 0049
cases hstored_witness_right_right - 0050
cases hstored_witness_right_right_right - 0051
left - 0052
split - 0053
exact hstored_witness_right_right_left - 0054
apply hthreshold_left - 0055
exact hstored_witness_right_right_right_left