Exact expanded PA statement
forall mb mc rb rc b c h P Q. (forall gmp_index_product_magnitude_range. (exists gsp_lt_gap_product_magnitude_range_index_bound. gsp_lt_gap_product_magnitude_range_index_bound + S gmp_index_product_magnitude_range = h) -> exists gmp_magnitude_product_magnitude_range. ((((exists ff_h_gmp_product_magnitude_range_decoded. ff_h_gmp_product_magnitude_range_decoded + S (gmp_magnitude_product_magnitude_range) = S ((S (gmp_index_product_magnitude_range)) * mc)) /\ exists ff_q_gmp_product_magnitude_range_decoded. mb = ff_q_gmp_product_magnitude_range_decoded * S ((S (gmp_index_product_magnitude_range)) * mc) + (gmp_magnitude_product_magnitude_range))) /\ ((exists gsp_lt_gap_product_magnitude_range_positive. gsp_lt_gap_product_magnitude_range_positive + S 0 = gmp_magnitude_product_magnitude_range) /\ (exists gsp_le_gap_product_magnitude_range_bounded. gsp_le_gap_product_magnitude_range_bounded + gmp_magnitude_product_magnitude_range = h)))) -> (forall fp_i_product_magnitude_injective fp_j_product_magnitude_injective fp_value_product_magnitude_injective. (exists fp_gap_product_magnitude_injective_i. fp_gap_product_magnitude_injective_i + S fp_i_product_magnitude_injective = h) -> (exists fp_gap_product_magnitude_injective_j. fp_gap_product_magnitude_injective_j + S fp_j_product_magnitude_injective = h) -> (((exists ff_h_product_magnitude_injective_left. ff_h_product_magnitude_injective_left + S (fp_value_product_magnitude_injective) = S ((S (fp_i_product_magnitude_injective)) * mc)) /\ exists ff_q_product_magnitude_injective_left. mb = ff_q_product_magnitude_injective_left * S ((S (fp_i_product_magnitude_injective)) * mc) + (fp_value_product_magnitude_injective))) -> (((exists ff_h_product_magnitude_injective_right. ff_h_product_magnitude_injective_right + S (fp_value_product_magnitude_injective) = S ((S (fp_j_product_magnitude_injective)) * mc)) /\ exists ff_q_product_magnitude_injective_right. mb = ff_q_product_magnitude_injective_right * S ((S (fp_j_product_magnitude_injective)) * mc) + (fp_value_product_magnitude_injective))) -> fp_i_product_magnitude_injective = fp_j_product_magnitude_injective) -> (forall gmp_index_product_predecessor_recode gmp_predecessor_product_predecessor_recode. (exists gsp_lt_gap_product_predecessor_recode_index_bound. gsp_lt_gap_product_predecessor_recode_index_bound + S gmp_index_product_predecessor_recode = h) -> (((exists gsp_beta_height_gmp_product_predecessor_recode_source. gsp_beta_height_gmp_product_predecessor_recode_source + S (S gmp_predecessor_product_predecessor_recode) = S ((S (gmp_index_product_predecessor_recode)) * mc)) /\ exists gsp_beta_quotient_gmp_product_predecessor_recode_source. mb = gsp_beta_quotient_gmp_product_predecessor_recode_source * S ((S (gmp_index_product_predecessor_recode)) * mc) + (S gmp_predecessor_product_predecessor_recode))) -> (((exists ff_h_gmp_product_predecessor_recode_target. ff_h_gmp_product_predecessor_recode_target + S (gmp_predecessor_product_predecessor_recode) = S ((S (gmp_index_product_predecessor_recode)) * rc)) /\ exists ff_q_gmp_product_predecessor_recode_target. rb = ff_q_gmp_product_predecessor_recode_target * S ((S (gmp_index_product_predecessor_recode)) * rc) + (gmp_predecessor_product_predecessor_recode)))) -> (forall gsp_range_index_product_canonical_half_range. (exists gsp_lt_gap_product_canonical_half_range_range_bound. gsp_lt_gap_product_canonical_half_range_range_bound + S gsp_range_index_product_canonical_half_range = h) -> (((exists gsp_beta_height_product_canonical_half_range_range_entry. gsp_beta_height_product_canonical_half_range_range_entry + S (1 + gsp_range_index_product_canonical_half_range) = S ((S (gsp_range_index_product_canonical_half_range)) * c)) /\ exists gsp_beta_quotient_product_canonical_half_range_range_entry. b = gsp_beta_quotient_product_canonical_half_range_range_entry * S ((S (gsp_range_index_product_canonical_half_range)) * c) + (1 + gsp_range_index_product_canonical_half_range)))) -> (exists ff_u_product_canonical_product ff_v_product_canonical_product. ((((exists ff_h_product_canonical_product_start. ff_h_product_canonical_product_start + S (1) = S ((S (0)) * ff_v_product_canonical_product)) /\ exists ff_q_product_canonical_product_start. ff_u_product_canonical_product = ff_q_product_canonical_product_start * S ((S (0)) * ff_v_product_canonical_product) + (1))) /\ ((((exists ff_h_product_canonical_product_terminal. ff_h_product_canonical_product_terminal + S (P) = S ((S (h)) * ff_v_product_canonical_product)) /\ exists ff_q_product_canonical_product_terminal. ff_u_product_canonical_product = ff_q_product_canonical_product_terminal * S ((S (h)) * ff_v_product_canonical_product) + (P))) /\ forall ff_i_product_canonical_product. (exists ff_lt_product_canonical_product_bound. ff_lt_product_canonical_product_bound + S ff_i_product_canonical_product = h) -> exists ff_p_product_canonical_product ff_r_product_canonical_product ff_s_product_canonical_product. ((((exists ff_h_product_canonical_product_factor. ff_h_product_canonical_product_factor + S (ff_p_product_canonical_product) = S ((S (ff_i_product_canonical_product)) * c)) /\ exists ff_q_product_canonical_product_factor. b = ff_q_product_canonical_product_factor * S ((S (ff_i_product_canonical_product)) * c) + (ff_p_product_canonical_product))) /\ ((((exists ff_h_product_canonical_product_partial. ff_h_product_canonical_product_partial + S (ff_r_product_canonical_product) = S ((S (ff_i_product_canonical_product)) * ff_v_product_canonical_product)) /\ exists ff_q_product_canonical_product_partial. ff_u_product_canonical_product = ff_q_product_canonical_product_partial * S ((S (ff_i_product_canonical_product)) * ff_v_product_canonical_product) + (ff_r_product_canonical_product))) /\ ((((exists ff_h_product_canonical_product_successor. ff_h_product_canonical_product_successor + S (ff_s_product_canonical_product) = S ((S (S ff_i_product_canonical_product)) * ff_v_product_canonical_product)) /\ exists ff_q_product_canonical_product_successor. ff_u_product_canonical_product = ff_q_product_canonical_product_successor * S ((S (S ff_i_product_canonical_product)) * ff_v_product_canonical_product) + (ff_s_product_canonical_product))) /\ ff_s_product_canonical_product = ff_r_product_canonical_product * ff_p_product_canonical_product)))))) -> (exists ff_u_product_magnitude_product ff_v_product_magnitude_product. ((((exists ff_h_product_magnitude_product_start. ff_h_product_magnitude_product_start + S (1) = S ((S (0)) * ff_v_product_magnitude_product)) /\ exists ff_q_product_magnitude_product_start. ff_u_product_magnitude_product = ff_q_product_magnitude_product_start * S ((S (0)) * ff_v_product_magnitude_product) + (1))) /\ ((((exists ff_h_product_magnitude_product_terminal. ff_h_product_magnitude_product_terminal + S (Q) = S ((S (h)) * ff_v_product_magnitude_product)) /\ exists ff_q_product_magnitude_product_terminal. ff_u_product_magnitude_product = ff_q_product_magnitude_product_terminal * S ((S (h)) * ff_v_product_magnitude_product) + (Q))) /\ forall ff_i_product_magnitude_product. (exists ff_lt_product_magnitude_product_bound. ff_lt_product_magnitude_product_bound + S ff_i_product_magnitude_product = h) -> exists ff_p_product_magnitude_product ff_r_product_magnitude_product ff_s_product_magnitude_product. ((((exists ff_h_product_magnitude_product_factor. ff_h_product_magnitude_product_factor + S (ff_p_product_magnitude_product) = S ((S (ff_i_product_magnitude_product)) * mc)) /\ exists ff_q_product_magnitude_product_factor. mb = ff_q_product_magnitude_product_factor * S ((S (ff_i_product_magnitude_product)) * mc) + (ff_p_product_magnitude_product))) /\ ((((exists ff_h_product_magnitude_product_partial. ff_h_product_magnitude_product_partial + S (ff_r_product_magnitude_product) = S ((S (ff_i_product_magnitude_product)) * ff_v_product_magnitude_product)) /\ exists ff_q_product_magnitude_product_partial. ff_u_product_magnitude_product = ff_q_product_magnitude_product_partial * S ((S (ff_i_product_magnitude_product)) * ff_v_product_magnitude_product) + (ff_r_product_magnitude_product))) /\ ((((exists ff_h_product_magnitude_product_successor. ff_h_product_magnitude_product_successor + S (ff_s_product_magnitude_product) = S ((S (S ff_i_product_magnitude_product)) * ff_v_product_magnitude_product)) /\ exists ff_q_product_magnitude_product_successor. ff_u_product_magnitude_product = ff_q_product_magnitude_product_successor * S ((S (S ff_i_product_magnitude_product)) * ff_v_product_magnitude_product) + (ff_s_product_magnitude_product))) /\ ff_s_product_magnitude_product = ff_r_product_magnitude_product * ff_p_product_magnitude_product)))))) -> P = QStructural proof guide
Generated structural guide
A magnitude permutation has exactly the product of the canonical half range.
Use the direct prerequisites beta_magnitude_predecessor_recode_bounded, beta_magnitude_predecessor_recode_injective, gauss_predecessor_half_range_aligned, beta_product_permutation_invariant as previously established PA formulas.
The proof proceeds by intermediate claims (3).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA007S beta_magnitude_predecessor_recode_bounded PA007U beta_magnitude_predecessor_recode_injective PA007V gauss_predecessor_half_range_aligned 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 mb - 0002
intro mc - 0003
intro rb - 0004
intro rc - 0005
intro b - 0006
intro c - 0007
intro h - 0008
intro P - 0009
intro Q - 0010
intro hrange - 0011
intro hmagnitude_injective - 0012
intro hrecode - 0013
intro hhalf - 0014
intro hcanonical_product - 0015
intro hmagnitude_product - 0016
have hbounded : forall fp_i_product_predecessor_bounded. (exists fp_gap_product_predecessor_bounded_index. fp_gap_product_predecessor_bounded_index + S fp_i_product_predecessor_bounded = h) -> exists fp_value_product_predecessor_bounded. ((((exists ff_h_product_predecessor_bounded_entry. ff_h_product_predecessor_bounded_entry + S (fp_value_product_predecessor_bounded) = S ((S (fp_i_product_predecessor_bounded)) * rc)) /\ exists ff_q_product_predecessor_bounded_entry. rb = ff_q_product_predecessor_bounded_entry * S ((S (fp_i_product_predecessor_bounded)) * rc) + (fp_value_product_predecessor_bounded))) /\ (exists fp_gap_product_predecessor_bounded_value. fp_gap_product_predecessor_bounded_value + S fp_value_product_predecessor_bounded = h)) - 0017
specialize beta_magnitude_predecessor_recode_bounded mb - 0018
specialize beta_magnitude_predecessor_recode_bounded mc - 0019
specialize beta_magnitude_predecessor_recode_bounded rb - 0020
specialize beta_magnitude_predecessor_recode_bounded rc - 0021
specialize beta_magnitude_predecessor_recode_bounded h - 0022
apply beta_magnitude_predecessor_recode_bounded - 0023
exact hrange - 0024
exact hrecode - 0025
have hinjective : forall fp_i_product_predecessor_injective fp_j_product_predecessor_injective fp_value_product_predecessor_injective. (exists fp_gap_product_predecessor_injective_i. fp_gap_product_predecessor_injective_i + S fp_i_product_predecessor_injective = h) -> (exists fp_gap_product_predecessor_injective_j. fp_gap_product_predecessor_injective_j + S fp_j_product_predecessor_injective = h) -> (((exists ff_h_product_predecessor_injective_left. ff_h_product_predecessor_injective_left + S (fp_value_product_predecessor_injective) = S ((S (fp_i_product_predecessor_injective)) * rc)) /\ exists ff_q_product_predecessor_injective_left. rb = ff_q_product_predecessor_injective_left * S ((S (fp_i_product_predecessor_injective)) * rc) + (fp_value_product_predecessor_injective))) -> (((exists ff_h_product_predecessor_injective_right. ff_h_product_predecessor_injective_right + S (fp_value_product_predecessor_injective) = S ((S (fp_j_product_predecessor_injective)) * rc)) /\ exists ff_q_product_predecessor_injective_right. rb = ff_q_product_predecessor_injective_right * S ((S (fp_j_product_predecessor_injective)) * rc) + (fp_value_product_predecessor_injective))) -> fp_i_product_predecessor_injective = fp_j_product_predecessor_injective - 0026
specialize beta_magnitude_predecessor_recode_injective mb - 0027
specialize beta_magnitude_predecessor_recode_injective mc - 0028
specialize beta_magnitude_predecessor_recode_injective rb - 0029
specialize beta_magnitude_predecessor_recode_injective rc - 0030
specialize beta_magnitude_predecessor_recode_injective h - 0031
apply beta_magnitude_predecessor_recode_injective - 0032
exact hrange - 0033
exact hmagnitude_injective - 0034
exact hrecode - 0035
have haligned : forall fpr_i_product_alignment fpr_j_product_alignment fpr_x_product_alignment. (exists fpr_h_product_alignment. fpr_h_product_alignment + S fpr_i_product_alignment = h) -> (((exists ff_h_product_alignment_map. ff_h_product_alignment_map + S (fpr_j_product_alignment) = S ((S (fpr_i_product_alignment)) * rc)) /\ exists ff_q_product_alignment_map. rb = ff_q_product_alignment_map * S ((S (fpr_i_product_alignment)) * rc) + (fpr_j_product_alignment))) -> (((exists ff_h_product_alignment_source. ff_h_product_alignment_source + S (fpr_x_product_alignment) = S ((S (fpr_j_product_alignment)) * c)) /\ exists ff_q_product_alignment_source. b = ff_q_product_alignment_source * S ((S (fpr_j_product_alignment)) * c) + (fpr_x_product_alignment))) -> (((exists ff_h_product_alignment_target. ff_h_product_alignment_target + S (fpr_x_product_alignment) = S ((S (fpr_i_product_alignment)) * mc)) /\ exists ff_q_product_alignment_target. mb = ff_q_product_alignment_target * S ((S (fpr_i_product_alignment)) * mc) + (fpr_x_product_alignment))) - 0036
specialize gauss_predecessor_half_range_aligned mb - 0037
specialize gauss_predecessor_half_range_aligned mc - 0038
specialize gauss_predecessor_half_range_aligned rb - 0039
specialize gauss_predecessor_half_range_aligned rc - 0040
specialize gauss_predecessor_half_range_aligned b - 0041
specialize gauss_predecessor_half_range_aligned c - 0042
specialize gauss_predecessor_half_range_aligned h - 0043
apply gauss_predecessor_half_range_aligned - 0044
exact hrange - 0045
exact hrecode - 0046
exact hhalf - 0047
specialize beta_product_permutation_invariant h - 0048
specialize beta_product_permutation_invariant rb - 0049
specialize beta_product_permutation_invariant rc - 0050
specialize beta_product_permutation_invariant b - 0051
specialize beta_product_permutation_invariant c - 0052
specialize beta_product_permutation_invariant mb - 0053
specialize beta_product_permutation_invariant mc - 0054
specialize beta_product_permutation_invariant P - 0055
specialize beta_product_permutation_invariant Q - 0056
apply beta_product_permutation_invariant - 0057
exact hbounded - 0058
exact hinjective - 0059
exact haligned - 0060
exact hcanonical_product - 0061
exact hmagnitude_product