Exact expanded PA statement
forall p n a b c F A. p = S n -> ((~(p = 1) /\ forall frm_prime_left_balance_prime frm_prime_right_balance_prime. p = frm_prime_left_balance_prime * frm_prime_right_balance_prime -> frm_prime_left_balance_prime = 1 \/ frm_prime_right_balance_prime = 1)) -> (~(exists frm_factor_balance_multiplier. a = p * frm_factor_balance_multiplier)) -> (forall ff_i_frp_range_balance_range. (exists ff_lt_frp_range_balance_range_bound. ff_lt_frp_range_balance_range_bound + S ff_i_frp_range_balance_range = n) -> (((exists ff_h_frp_range_balance_range_decoded. ff_h_frp_range_balance_range_decoded + S (1 + ff_i_frp_range_balance_range) = S ((S (ff_i_frp_range_balance_range)) * c)) /\ exists ff_q_frp_range_balance_range_decoded. b = ff_q_frp_range_balance_range_decoded * S ((S (ff_i_frp_range_balance_range)) * c) + (1 + ff_i_frp_range_balance_range)))) -> (exists ff_u_balance_source ff_v_balance_source. ((((exists ff_h_balance_source_start. ff_h_balance_source_start + S (1) = S ((S (0)) * ff_v_balance_source)) /\ exists ff_q_balance_source_start. ff_u_balance_source = ff_q_balance_source_start * S ((S (0)) * ff_v_balance_source) + (1))) /\ ((((exists ff_h_balance_source_terminal. ff_h_balance_source_terminal + S (F) = S ((S (n)) * ff_v_balance_source)) /\ exists ff_q_balance_source_terminal. ff_u_balance_source = ff_q_balance_source_terminal * S ((S (n)) * ff_v_balance_source) + (F))) /\ forall ff_i_balance_source. (exists ff_lt_balance_source_bound. ff_lt_balance_source_bound + S ff_i_balance_source = n) -> exists ff_p_balance_source ff_r_balance_source ff_s_balance_source. ((((exists ff_h_balance_source_factor. ff_h_balance_source_factor + S (ff_p_balance_source) = S ((S (ff_i_balance_source)) * c)) /\ exists ff_q_balance_source_factor. b = ff_q_balance_source_factor * S ((S (ff_i_balance_source)) * c) + (ff_p_balance_source))) /\ ((((exists ff_h_balance_source_partial. ff_h_balance_source_partial + S (ff_r_balance_source) = S ((S (ff_i_balance_source)) * ff_v_balance_source)) /\ exists ff_q_balance_source_partial. ff_u_balance_source = ff_q_balance_source_partial * S ((S (ff_i_balance_source)) * ff_v_balance_source) + (ff_r_balance_source))) /\ ((((exists ff_h_balance_source_successor. ff_h_balance_source_successor + S (ff_s_balance_source) = S ((S (S ff_i_balance_source)) * ff_v_balance_source)) /\ exists ff_q_balance_source_successor. ff_u_balance_source = ff_q_balance_source_successor * S ((S (S ff_i_balance_source)) * ff_v_balance_source) + (ff_s_balance_source))) /\ ff_s_balance_source = ff_r_balance_source * ff_p_balance_source)))))) -> (exists ff_b_balance_power ff_c_balance_power. ((forall ff_i_balance_power_repeat. (exists ff_lt_balance_power_repeat_bound. ff_lt_balance_power_repeat_bound + S ff_i_balance_power_repeat = n) -> (((exists ff_h_balance_power_repeat_decoded. ff_h_balance_power_repeat_decoded + S (a) = S ((S (ff_i_balance_power_repeat)) * ff_c_balance_power)) /\ exists ff_q_balance_power_repeat_decoded. ff_b_balance_power = ff_q_balance_power_repeat_decoded * S ((S (ff_i_balance_power_repeat)) * ff_c_balance_power) + (a)))) /\ (exists ff_u_balance_power_product ff_v_balance_power_product. ((((exists ff_h_balance_power_product_start. ff_h_balance_power_product_start + S (1) = S ((S (0)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_start. ff_u_balance_power_product = ff_q_balance_power_product_start * S ((S (0)) * ff_v_balance_power_product) + (1))) /\ ((((exists ff_h_balance_power_product_terminal. ff_h_balance_power_product_terminal + S (A) = S ((S (n)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_terminal. ff_u_balance_power_product = ff_q_balance_power_product_terminal * S ((S (n)) * ff_v_balance_power_product) + (A))) /\ forall ff_i_balance_power_product. (exists ff_lt_balance_power_product_bound. ff_lt_balance_power_product_bound + S ff_i_balance_power_product = n) -> exists ff_p_balance_power_product ff_r_balance_power_product ff_s_balance_power_product. ((((exists ff_h_balance_power_product_factor. ff_h_balance_power_product_factor + S (ff_p_balance_power_product) = S ((S (ff_i_balance_power_product)) * ff_c_balance_power)) /\ exists ff_q_balance_power_product_factor. ff_b_balance_power = ff_q_balance_power_product_factor * S ((S (ff_i_balance_power_product)) * ff_c_balance_power) + (ff_p_balance_power_product))) /\ ((((exists ff_h_balance_power_product_partial. ff_h_balance_power_product_partial + S (ff_r_balance_power_product) = S ((S (ff_i_balance_power_product)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_partial. ff_u_balance_power_product = ff_q_balance_power_product_partial * S ((S (ff_i_balance_power_product)) * ff_v_balance_power_product) + (ff_r_balance_power_product))) /\ ((((exists ff_h_balance_power_product_successor. ff_h_balance_power_product_successor + S (ff_s_balance_power_product) = S ((S (S ff_i_balance_power_product)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_successor. ff_u_balance_power_product = ff_q_balance_power_product_successor * S ((S (S ff_i_balance_power_product)) * ff_v_balance_power_product) + (ff_s_balance_power_product))) /\ ff_s_balance_power_product = ff_r_balance_power_product * ff_p_balance_power_product)))))))) -> (exists fsp_product_mod_left_balance_result fsp_product_mod_right_balance_result. (A * F) + p * fsp_product_mod_left_balance_result = F + p * fsp_product_mod_right_balance_result)Structural proof guide
Generated structural guide
Scaling the nonzero residues modulo a prime preserves their exact product modulo p.
Use the direct prerequisites prime_mul_residue_reindex_exists, beta_product_pointwise_scale_mod, beta_product_exists, beta_product_permutation_invariant as previously established PA formulas.
The proof proceeds by case analysis (8), intermediate claims (4), equality transport (1).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA008I prime_mul_residue_reindex_exists PA007Q beta_product_pointwise_scale_mod PA003X beta_product_exists PA007X beta_product_permutation_invariantDirect 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 n - 0003
intro a - 0004
intro b - 0005
intro c - 0006
intro F - 0007
intro A - 0008
intro hpn - 0009
intro hp - 0010
intro hnotdiv - 0011
intro hrange - 0012
intro hF - 0013
intro hA - 0014
have hreindex : exists fpb_map_code_balance_reindex fpb_map_scale_balance_reindex fpb_target_code_balance_reindex fpb_target_scale_balance_reindex. ((forall fp_i_fpb_balance_reindex_data_bounded. (exists fp_gap_fpb_balance_reindex_data_bounded_index. fp_gap_fpb_balance_reindex_data_bounded_index + S fp_i_fpb_balance_reindex_data_bounded = n) -> exists fp_value_fpb_balance_reindex_data_bounded. ((((exists ff_h_fpb_balance_reindex_data_bounded_entry. ff_h_fpb_balance_reindex_data_bounded_entry + S (fp_value_fpb_balance_reindex_data_bounded) = S ((S (fp_i_fpb_balance_reindex_data_bounded)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_bounded_entry. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_bounded_entry * S ((S (fp_i_fpb_balance_reindex_data_bounded)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_bounded))) /\ (exists fp_gap_fpb_balance_reindex_data_bounded_value. fp_gap_fpb_balance_reindex_data_bounded_value + S fp_value_fpb_balance_reindex_data_bounded = n))) /\ ((forall fp_i_fpb_balance_reindex_data_injective fp_j_fpb_balance_reindex_data_injective fp_value_fpb_balance_reindex_data_injective. (exists fp_gap_fpb_balance_reindex_data_injective_i. fp_gap_fpb_balance_reindex_data_injective_i + S fp_i_fpb_balance_reindex_data_injective = n) -> (exists fp_gap_fpb_balance_reindex_data_injective_j. fp_gap_fpb_balance_reindex_data_injective_j + S fp_j_fpb_balance_reindex_data_injective = n) -> (((exists ff_h_fpb_balance_reindex_data_injective_left. ff_h_fpb_balance_reindex_data_injective_left + S (fp_value_fpb_balance_reindex_data_injective) = S ((S (fp_i_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_injective_left. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_injective_left * S ((S (fp_i_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_injective))) -> (((exists ff_h_fpb_balance_reindex_data_injective_right. ff_h_fpb_balance_reindex_data_injective_right + S (fp_value_fpb_balance_reindex_data_injective) = S ((S (fp_j_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_injective_right. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_injective_right * S ((S (fp_j_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_injective))) -> fp_i_fpb_balance_reindex_data_injective = fp_j_fpb_balance_reindex_data_injective) /\ ((forall fpr_i_fpb_balance_reindex_data_aligned fpr_j_fpb_balance_reindex_data_aligned fpr_x_fpb_balance_reindex_data_aligned. (exists fpr_h_fpb_balance_reindex_data_aligned. fpr_h_fpb_balance_reindex_data_aligned + S fpr_i_fpb_balance_reindex_data_aligned = n) -> (((exists ff_h_fpb_balance_reindex_data_aligned_map. ff_h_fpb_balance_reindex_data_aligned_map + S (fpr_j_fpb_balance_reindex_data_aligned) = S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_aligned_map. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_aligned_map * S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_map_scale_balance_reindex) + (fpr_j_fpb_balance_reindex_data_aligned))) -> (((exists ff_h_fpb_balance_reindex_data_aligned_source. ff_h_fpb_balance_reindex_data_aligned_source + S (fpr_x_fpb_balance_reindex_data_aligned) = S ((S (fpr_j_fpb_balance_reindex_data_aligned)) * c)) /\ exists ff_q_fpb_balance_reindex_data_aligned_source. b = ff_q_fpb_balance_reindex_data_aligned_source * S ((S (fpr_j_fpb_balance_reindex_data_aligned)) * c) + (fpr_x_fpb_balance_reindex_data_aligned))) -> (((exists ff_h_fpb_balance_reindex_data_aligned_target. ff_h_fpb_balance_reindex_data_aligned_target + S (fpr_x_fpb_balance_reindex_data_aligned) = S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_target_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_aligned_target. fpb_target_code_balance_reindex = ff_q_fpb_balance_reindex_data_aligned_target * S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_target_scale_balance_reindex) + (fpr_x_fpb_balance_reindex_data_aligned)))) /\ (forall fsp_index_fpb_balance_reindex_data_scaled fsp_source_fpb_balance_reindex_data_scaled fsp_target_fpb_balance_reindex_data_scaled. (exists fsp_gap_fpb_balance_reindex_data_scaled. fsp_gap_fpb_balance_reindex_data_scaled + S fsp_index_fpb_balance_reindex_data_scaled = n) -> (((exists fsp_source_height_fpb_balance_reindex_data_scaled. fsp_source_height_fpb_balance_reindex_data_scaled + S (fsp_source_fpb_balance_reindex_data_scaled) = S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * c)) /\ exists fsp_source_quotient_fpb_balance_reindex_data_scaled. b = fsp_source_quotient_fpb_balance_reindex_data_scaled * S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * c) + (fsp_source_fpb_balance_reindex_data_scaled))) -> (((exists fsp_target_height_fpb_balance_reindex_data_scaled. fsp_target_height_fpb_balance_reindex_data_scaled + S (fsp_target_fpb_balance_reindex_data_scaled) = S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * fpb_target_scale_balance_reindex)) /\ exists fsp_target_quotient_fpb_balance_reindex_data_scaled. fpb_target_code_balance_reindex = fsp_target_quotient_fpb_balance_reindex_data_scaled * S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * fpb_target_scale_balance_reindex) + (fsp_target_fpb_balance_reindex_data_scaled))) -> (exists fsp_mod_left_fpb_balance_reindex_data_scaled fsp_mod_right_fpb_balance_reindex_data_scaled. a * fsp_source_fpb_balance_reindex_data_scaled + p * fsp_mod_left_fpb_balance_reindex_data_scaled = fsp_target_fpb_balance_reindex_data_scaled + p * fsp_mod_right_fpb_balance_reindex_data_scaled))))) - 0015
specialize prime_mul_residue_reindex_exists p - 0016
specialize prime_mul_residue_reindex_exists n - 0017
specialize prime_mul_residue_reindex_exists a - 0018
specialize prime_mul_residue_reindex_exists b - 0019
specialize prime_mul_residue_reindex_exists c - 0020
apply prime_mul_residue_reindex_exists - 0021
exact hpn - 0022
exact hp - 0023
exact hnotdiv - 0024
exact hrange - 0025
cases hreindex - 0026
cases hreindex_witness - 0027
cases hreindex_witness_witness - 0028
cases hreindex_witness_witness_witness - 0029
cases hreindex_witness_witness_witness_witness - 0030
cases hreindex_witness_witness_witness_witness_right - 0031
cases hreindex_witness_witness_witness_witness_right_right - 0032
have htarget_product_exists : exists Q. (exists ff_u_balance_target_exists ff_v_balance_target_exists. ((((exists ff_h_balance_target_exists_start. ff_h_balance_target_exists_start + S (1) = S ((S (0)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_start. ff_u_balance_target_exists = ff_q_balance_target_exists_start * S ((S (0)) * ff_v_balance_target_exists) + (1))) /\ ((((exists ff_h_balance_target_exists_terminal. ff_h_balance_target_exists_terminal + S (Q) = S ((S (n)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_terminal. ff_u_balance_target_exists = ff_q_balance_target_exists_terminal * S ((S (n)) * ff_v_balance_target_exists) + (Q))) /\ forall ff_i_balance_target_exists. (exists ff_lt_balance_target_exists_bound. ff_lt_balance_target_exists_bound + S ff_i_balance_target_exists = n) -> exists ff_p_balance_target_exists ff_r_balance_target_exists ff_s_balance_target_exists. ((((exists ff_h_balance_target_exists_factor. ff_h_balance_target_exists_factor + S (ff_p_balance_target_exists) = S ((S (ff_i_balance_target_exists)) * x3)) /\ exists ff_q_balance_target_exists_factor. x2 = ff_q_balance_target_exists_factor * S ((S (ff_i_balance_target_exists)) * x3) + (ff_p_balance_target_exists))) /\ ((((exists ff_h_balance_target_exists_partial. ff_h_balance_target_exists_partial + S (ff_r_balance_target_exists) = S ((S (ff_i_balance_target_exists)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_partial. ff_u_balance_target_exists = ff_q_balance_target_exists_partial * S ((S (ff_i_balance_target_exists)) * ff_v_balance_target_exists) + (ff_r_balance_target_exists))) /\ ((((exists ff_h_balance_target_exists_successor. ff_h_balance_target_exists_successor + S (ff_s_balance_target_exists) = S ((S (S ff_i_balance_target_exists)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_successor. ff_u_balance_target_exists = ff_q_balance_target_exists_successor * S ((S (S ff_i_balance_target_exists)) * ff_v_balance_target_exists) + (ff_s_balance_target_exists))) /\ ff_s_balance_target_exists = ff_r_balance_target_exists * ff_p_balance_target_exists)))))) - 0033
specialize beta_product_exists x2 - 0034
specialize beta_product_exists x3 - 0035
specialize beta_product_exists n - 0036
exact beta_product_exists - 0037
cases htarget_product_exists - 0038
have hFQ : F = x4 - 0039
specialize beta_product_permutation_invariant n - 0040
specialize beta_product_permutation_invariant x - 0041
specialize beta_product_permutation_invariant x1 - 0042
specialize beta_product_permutation_invariant b - 0043
specialize beta_product_permutation_invariant c - 0044
specialize beta_product_permutation_invariant x2 - 0045
specialize beta_product_permutation_invariant x3 - 0046
specialize beta_product_permutation_invariant F - 0047
specialize beta_product_permutation_invariant x4 - 0048
apply beta_product_permutation_invariant - 0049
exact hreindex_witness_witness_witness_witness_left - 0050
exact hreindex_witness_witness_witness_witness_right_left - 0051
exact hreindex_witness_witness_witness_witness_right_right_left - 0052
exact hF - 0053
exact htarget_product_exists_witness - 0054
have hscale : exists fsp_product_mod_left_balance_scaled_product fsp_product_mod_right_balance_scaled_product. (A * F) + p * fsp_product_mod_left_balance_scaled_product = x4 + p * fsp_product_mod_right_balance_scaled_product - 0055
specialize beta_product_pointwise_scale_mod p - 0056
specialize beta_product_pointwise_scale_mod a - 0057
specialize beta_product_pointwise_scale_mod b - 0058
specialize beta_product_pointwise_scale_mod c - 0059
specialize beta_product_pointwise_scale_mod x2 - 0060
specialize beta_product_pointwise_scale_mod x3 - 0061
specialize beta_product_pointwise_scale_mod n - 0062
specialize beta_product_pointwise_scale_mod F - 0063
specialize beta_product_pointwise_scale_mod x4 - 0064
specialize beta_product_pointwise_scale_mod A - 0065
apply beta_product_pointwise_scale_mod - 0066
exact hreindex_witness_witness_witness_witness_right_right_right - 0067
exact hF - 0068
exact htarget_product_exists_witness - 0069
exact hA - 0070
rewrite <- hFQ at hscale - 0071
exact hscale