Exact expanded PA statement
forall b c z d l m n. (forall i a. (exists fps_bound_bps_split_shift. fps_bound_bps_split_shift + S i = m) -> (((exists fps_height_bps_split_shift_source. fps_height_bps_split_shift_source + S (a) = S ((S (l + i)) * c)) /\ exists fps_quotient_bps_split_shift_source. b = fps_quotient_bps_split_shift_source * S ((S (l + i)) * c) + (a))) -> (((exists fps_height_bps_split_shift_suffix. fps_height_bps_split_shift_suffix + S (a) = S ((S (i)) * d)) /\ exists fps_quotient_bps_split_shift_suffix. z = fps_quotient_bps_split_shift_suffix * S ((S (i)) * d) + (a)))) -> (exists fps_accumulator_bps_split_total fps_scale_bps_split_total. ((((exists fps_height_bps_split_total_start. fps_height_bps_split_total_start + S (1) = S ((S (0)) * fps_scale_bps_split_total)) /\ exists fps_quotient_bps_split_total_start. fps_accumulator_bps_split_total = fps_quotient_bps_split_total_start * S ((S (0)) * fps_scale_bps_split_total) + (1))) /\ ((((exists fps_height_bps_split_total_terminal. fps_height_bps_split_total_terminal + S (n) = S ((S (l + m)) * fps_scale_bps_split_total)) /\ exists fps_quotient_bps_split_total_terminal. fps_accumulator_bps_split_total = fps_quotient_bps_split_total_terminal * S ((S (l + m)) * fps_scale_bps_split_total) + (n))) /\ forall fps_index_bps_split_total. (exists fps_gap_bps_split_total_bound. fps_gap_bps_split_total_bound + S fps_index_bps_split_total = l + m) -> exists fps_factor_bps_split_total fps_partial_bps_split_total fps_successor_bps_split_total. ((((exists fps_height_bps_split_total_factor. fps_height_bps_split_total_factor + S (fps_factor_bps_split_total) = S ((S (fps_index_bps_split_total)) * c)) /\ exists fps_quotient_bps_split_total_factor. b = fps_quotient_bps_split_total_factor * S ((S (fps_index_bps_split_total)) * c) + (fps_factor_bps_split_total))) /\ ((((exists fps_height_bps_split_total_partial. fps_height_bps_split_total_partial + S (fps_partial_bps_split_total) = S ((S (fps_index_bps_split_total)) * fps_scale_bps_split_total)) /\ exists fps_quotient_bps_split_total_partial. fps_accumulator_bps_split_total = fps_quotient_bps_split_total_partial * S ((S (fps_index_bps_split_total)) * fps_scale_bps_split_total) + (fps_partial_bps_split_total))) /\ ((((exists fps_height_bps_split_total_successor. fps_height_bps_split_total_successor + S (fps_successor_bps_split_total) = S ((S (S fps_index_bps_split_total)) * fps_scale_bps_split_total)) /\ exists fps_quotient_bps_split_total_successor. fps_accumulator_bps_split_total = fps_quotient_bps_split_total_successor * S ((S (S fps_index_bps_split_total)) * fps_scale_bps_split_total) + (fps_successor_bps_split_total))) /\ fps_successor_bps_split_total = fps_partial_bps_split_total * fps_factor_bps_split_total)))))) -> exists p q. (exists ff_u_bps_split_prefix ff_v_bps_split_prefix. ((((exists ff_h_bps_split_prefix_start. ff_h_bps_split_prefix_start + S (1) = S ((S (0)) * ff_v_bps_split_prefix)) /\ exists ff_q_bps_split_prefix_start. ff_u_bps_split_prefix = ff_q_bps_split_prefix_start * S ((S (0)) * ff_v_bps_split_prefix) + (1))) /\ ((((exists ff_h_bps_split_prefix_terminal. ff_h_bps_split_prefix_terminal + S (p) = S ((S (l)) * ff_v_bps_split_prefix)) /\ exists ff_q_bps_split_prefix_terminal. ff_u_bps_split_prefix = ff_q_bps_split_prefix_terminal * S ((S (l)) * ff_v_bps_split_prefix) + (p))) /\ forall ff_i_bps_split_prefix. (exists ff_lt_bps_split_prefix_bound. ff_lt_bps_split_prefix_bound + S ff_i_bps_split_prefix = l) -> exists ff_p_bps_split_prefix ff_r_bps_split_prefix ff_s_bps_split_prefix. ((((exists ff_h_bps_split_prefix_factor. ff_h_bps_split_prefix_factor + S (ff_p_bps_split_prefix) = S ((S (ff_i_bps_split_prefix)) * c)) /\ exists ff_q_bps_split_prefix_factor. b = ff_q_bps_split_prefix_factor * S ((S (ff_i_bps_split_prefix)) * c) + (ff_p_bps_split_prefix))) /\ ((((exists ff_h_bps_split_prefix_partial. ff_h_bps_split_prefix_partial + S (ff_r_bps_split_prefix) = S ((S (ff_i_bps_split_prefix)) * ff_v_bps_split_prefix)) /\ exists ff_q_bps_split_prefix_partial. ff_u_bps_split_prefix = ff_q_bps_split_prefix_partial * S ((S (ff_i_bps_split_prefix)) * ff_v_bps_split_prefix) + (ff_r_bps_split_prefix))) /\ ((((exists ff_h_bps_split_prefix_successor. ff_h_bps_split_prefix_successor + S (ff_s_bps_split_prefix) = S ((S (S ff_i_bps_split_prefix)) * ff_v_bps_split_prefix)) /\ exists ff_q_bps_split_prefix_successor. ff_u_bps_split_prefix = ff_q_bps_split_prefix_successor * S ((S (S ff_i_bps_split_prefix)) * ff_v_bps_split_prefix) + (ff_s_bps_split_prefix))) /\ ff_s_bps_split_prefix = ff_r_bps_split_prefix * ff_p_bps_split_prefix)))))) /\ ((exists ff_u_bps_split_suffix ff_v_bps_split_suffix. ((((exists ff_h_bps_split_suffix_start. ff_h_bps_split_suffix_start + S (1) = S ((S (0)) * ff_v_bps_split_suffix)) /\ exists ff_q_bps_split_suffix_start. ff_u_bps_split_suffix = ff_q_bps_split_suffix_start * S ((S (0)) * ff_v_bps_split_suffix) + (1))) /\ ((((exists ff_h_bps_split_suffix_terminal. ff_h_bps_split_suffix_terminal + S (q) = S ((S (m)) * ff_v_bps_split_suffix)) /\ exists ff_q_bps_split_suffix_terminal. ff_u_bps_split_suffix = ff_q_bps_split_suffix_terminal * S ((S (m)) * ff_v_bps_split_suffix) + (q))) /\ forall ff_i_bps_split_suffix. (exists ff_lt_bps_split_suffix_bound. ff_lt_bps_split_suffix_bound + S ff_i_bps_split_suffix = m) -> exists ff_p_bps_split_suffix ff_r_bps_split_suffix ff_s_bps_split_suffix. ((((exists ff_h_bps_split_suffix_factor. ff_h_bps_split_suffix_factor + S (ff_p_bps_split_suffix) = S ((S (ff_i_bps_split_suffix)) * d)) /\ exists ff_q_bps_split_suffix_factor. z = ff_q_bps_split_suffix_factor * S ((S (ff_i_bps_split_suffix)) * d) + (ff_p_bps_split_suffix))) /\ ((((exists ff_h_bps_split_suffix_partial. ff_h_bps_split_suffix_partial + S (ff_r_bps_split_suffix) = S ((S (ff_i_bps_split_suffix)) * ff_v_bps_split_suffix)) /\ exists ff_q_bps_split_suffix_partial. ff_u_bps_split_suffix = ff_q_bps_split_suffix_partial * S ((S (ff_i_bps_split_suffix)) * ff_v_bps_split_suffix) + (ff_r_bps_split_suffix))) /\ ((((exists ff_h_bps_split_suffix_successor. ff_h_bps_split_suffix_successor + S (ff_s_bps_split_suffix) = S ((S (S ff_i_bps_split_suffix)) * ff_v_bps_split_suffix)) /\ exists ff_q_bps_split_suffix_successor. ff_u_bps_split_suffix = ff_q_bps_split_suffix_successor * S ((S (S ff_i_bps_split_suffix)) * ff_v_bps_split_suffix) + (ff_s_bps_split_suffix))) /\ ff_s_bps_split_suffix = ff_r_bps_split_suffix * ff_p_bps_split_suffix)))))) /\ n = p * q)Structural proof guide
Split a finite Product into an initial prefix and an aligned suffix.
Direct prerequisites: beta_product_exists, beta_product_zero, beta_product_succ_decompose, beta_product_succ_append, le_succ, le_refl, mul_one, mul_assoc. The authored body proceeds by structural induction (1), case analysis (11), intermediate claims (7), equality transport (9).
Proof neighborhood
Direct dependencies
BT005F beta_product_exists BT005I beta_product_zero BT005J beta_product_succ_decompose BT005K beta_product_succ_append BT0018 le_succ BT000E le_refl BT000A mul_one BT0008 mul_assocDirect dependents
Formal native tactic body
Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.
- 0001
intro b - 0002
intro c - 0003
intro z - 0004
intro d - 0005
intro l - 0006
induction m - 0007
intro n - 0008
intro hshift - 0009
intro htotal - 0010
specialize beta_product_exists z - 0011
specialize beta_product_exists d - 0012
specialize beta_product_exists 0 - 0013
cases beta_product_exists - 0014
cases beta_product_exists_witness - 0015
cases beta_product_exists_witness_witness - 0016
have hqone : x = 1 - 0017
specialize beta_product_zero z - 0018
specialize beta_product_zero d - 0019
specialize beta_product_zero x - 0020
apply beta_product_zero - 0021
exists x1 - 0022
exists x2 - 0023
exact beta_product_exists_witness_witness_witness - 0024
exists n - 0025
exists x - 0026
split - 0027
have hbase : l + 0 = l - 0028
apply PA3 - 0029
rewrite hbase at htotal - 0030
rewrite hbase at htotal - 0031
rewrite hbase at htotal - 0032
exact htotal - 0033
split - 0034
exists x1 - 0035
exists x2 - 0036
exact beta_product_exists_witness_witness_witness - 0037
rewrite hqone - 0038
specialize mul_one n - 0039
symm - 0040
exact mul_one - 0041
intro n - 0042
intro hshift - 0043
intro htotal - 0044
have hlength : l + S m = S (l + m) - 0045
apply PA4 - 0046
rewrite hlength at htotal - 0047
rewrite hlength at htotal - 0048
rewrite hlength at htotal - 0049
have hdecomposition : exists a r. (((exists fps_height_bps_split_last. fps_height_bps_split_last + S (a) = S ((S (l + m)) * c)) /\ exists fps_quotient_bps_split_last. b = fps_quotient_bps_split_last * S ((S (l + m)) * c) + (a))) /\ ((exists fps_accumulator_bps_split_previous_total fps_scale_bps_split_previous_total. ((((exists fps_height_bps_split_previous_total_start. fps_height_bps_split_previous_total_start + S (1) = S ((S (0)) * fps_scale_bps_split_previous_total)) /\ exists fps_quotient_bps_split_previous_total_start. fps_accumulator_bps_split_previous_total = fps_quotient_bps_split_previous_total_start * S ((S (0)) * fps_scale_bps_split_previous_total) + (1))) /\ ((((exists fps_height_bps_split_previous_total_terminal. fps_height_bps_split_previous_total_terminal + S (r) = S ((S (l + m)) * fps_scale_bps_split_previous_total)) /\ exists fps_quotient_bps_split_previous_total_terminal. fps_accumulator_bps_split_previous_total = fps_quotient_bps_split_previous_total_terminal * S ((S (l + m)) * fps_scale_bps_split_previous_total) + (r))) /\ forall fps_index_bps_split_previous_total. (exists fps_gap_bps_split_previous_total_bound. fps_gap_bps_split_previous_total_bound + S fps_index_bps_split_previous_total = l + m) -> exists fps_factor_bps_split_previous_total fps_partial_bps_split_previous_total fps_successor_bps_split_previous_total. ((((exists fps_height_bps_split_previous_total_factor. fps_height_bps_split_previous_total_factor + S (fps_factor_bps_split_previous_total) = S ((S (fps_index_bps_split_previous_total)) * c)) /\ exists fps_quotient_bps_split_previous_total_factor. b = fps_quotient_bps_split_previous_total_factor * S ((S (fps_index_bps_split_previous_total)) * c) + (fps_factor_bps_split_previous_total))) /\ ((((exists fps_height_bps_split_previous_total_partial. fps_height_bps_split_previous_total_partial + S (fps_partial_bps_split_previous_total) = S ((S (fps_index_bps_split_previous_total)) * fps_scale_bps_split_previous_total)) /\ exists fps_quotient_bps_split_previous_total_partial. fps_accumulator_bps_split_previous_total = fps_quotient_bps_split_previous_total_partial * S ((S (fps_index_bps_split_previous_total)) * fps_scale_bps_split_previous_total) + (fps_partial_bps_split_previous_total))) /\ ((((exists fps_height_bps_split_previous_total_successor. fps_height_bps_split_previous_total_successor + S (fps_successor_bps_split_previous_total) = S ((S (S fps_index_bps_split_previous_total)) * fps_scale_bps_split_previous_total)) /\ exists fps_quotient_bps_split_previous_total_successor. fps_accumulator_bps_split_previous_total = fps_quotient_bps_split_previous_total_successor * S ((S (S fps_index_bps_split_previous_total)) * fps_scale_bps_split_previous_total) + (fps_successor_bps_split_previous_total))) /\ fps_successor_bps_split_previous_total = fps_partial_bps_split_previous_total * fps_factor_bps_split_previous_total)))))) /\ n = r * a) - 0050
specialize beta_product_succ_decompose b - 0051
specialize beta_product_succ_decompose c - 0052
specialize beta_product_succ_decompose (l + m) - 0053
specialize beta_product_succ_decompose n - 0054
apply beta_product_succ_decompose - 0055
exact htotal - 0056
cases hdecomposition - 0057
cases hdecomposition_witness - 0058
cases hdecomposition_witness_witness - 0059
cases hdecomposition_witness_witness_right - 0060
have hprefix_shift : forall i a. (exists fps_bound_bps_split_previous_shift. fps_bound_bps_split_previous_shift + S i = m) -> (((exists fps_height_bps_split_previous_shift_source. fps_height_bps_split_previous_shift_source + S (a) = S ((S (l + i)) * c)) /\ exists fps_quotient_bps_split_previous_shift_source. b = fps_quotient_bps_split_previous_shift_source * S ((S (l + i)) * c) + (a))) -> (((exists fps_height_bps_split_previous_shift_suffix. fps_height_bps_split_previous_shift_suffix + S (a) = S ((S (i)) * d)) /\ exists fps_quotient_bps_split_previous_shift_suffix. z = fps_quotient_bps_split_previous_shift_suffix * S ((S (i)) * d) + (a))) - 0061
intro i - 0062
intro a - 0063
intro hi - 0064
intro ha - 0065
specialize hshift i - 0066
specialize hshift a - 0067
apply hshift - 0068
specialize le_succ (S i) - 0069
specialize le_succ m - 0070
apply le_succ - 0071
exact hi - 0072
exact ha - 0073
have hrecursive : exists p q. (exists ff_u_bps_split_recursive_prefix ff_v_bps_split_recursive_prefix. ((((exists ff_h_bps_split_recursive_prefix_start. ff_h_bps_split_recursive_prefix_start + S (1) = S ((S (0)) * ff_v_bps_split_recursive_prefix)) /\ exists ff_q_bps_split_recursive_prefix_start. ff_u_bps_split_recursive_prefix = ff_q_bps_split_recursive_prefix_start * S ((S (0)) * ff_v_bps_split_recursive_prefix) + (1))) /\ ((((exists ff_h_bps_split_recursive_prefix_terminal. ff_h_bps_split_recursive_prefix_terminal + S (p) = S ((S (l)) * ff_v_bps_split_recursive_prefix)) /\ exists ff_q_bps_split_recursive_prefix_terminal. ff_u_bps_split_recursive_prefix = ff_q_bps_split_recursive_prefix_terminal * S ((S (l)) * ff_v_bps_split_recursive_prefix) + (p))) /\ forall ff_i_bps_split_recursive_prefix. (exists ff_lt_bps_split_recursive_prefix_bound. ff_lt_bps_split_recursive_prefix_bound + S ff_i_bps_split_recursive_prefix = l) -> exists ff_p_bps_split_recursive_prefix ff_r_bps_split_recursive_prefix ff_s_bps_split_recursive_prefix. ((((exists ff_h_bps_split_recursive_prefix_factor. ff_h_bps_split_recursive_prefix_factor + S (ff_p_bps_split_recursive_prefix) = S ((S (ff_i_bps_split_recursive_prefix)) * c)) /\ exists ff_q_bps_split_recursive_prefix_factor. b = ff_q_bps_split_recursive_prefix_factor * S ((S (ff_i_bps_split_recursive_prefix)) * c) + (ff_p_bps_split_recursive_prefix))) /\ ((((exists ff_h_bps_split_recursive_prefix_partial. ff_h_bps_split_recursive_prefix_partial + S (ff_r_bps_split_recursive_prefix) = S ((S (ff_i_bps_split_recursive_prefix)) * ff_v_bps_split_recursive_prefix)) /\ exists ff_q_bps_split_recursive_prefix_partial. ff_u_bps_split_recursive_prefix = ff_q_bps_split_recursive_prefix_partial * S ((S (ff_i_bps_split_recursive_prefix)) * ff_v_bps_split_recursive_prefix) + (ff_r_bps_split_recursive_prefix))) /\ ((((exists ff_h_bps_split_recursive_prefix_successor. ff_h_bps_split_recursive_prefix_successor + S (ff_s_bps_split_recursive_prefix) = S ((S (S ff_i_bps_split_recursive_prefix)) * ff_v_bps_split_recursive_prefix)) /\ exists ff_q_bps_split_recursive_prefix_successor. ff_u_bps_split_recursive_prefix = ff_q_bps_split_recursive_prefix_successor * S ((S (S ff_i_bps_split_recursive_prefix)) * ff_v_bps_split_recursive_prefix) + (ff_s_bps_split_recursive_prefix))) /\ ff_s_bps_split_recursive_prefix = ff_r_bps_split_recursive_prefix * ff_p_bps_split_recursive_prefix)))))) /\ ((exists ff_u_bps_split_recursive_suffix ff_v_bps_split_recursive_suffix. ((((exists ff_h_bps_split_recursive_suffix_start. ff_h_bps_split_recursive_suffix_start + S (1) = S ((S (0)) * ff_v_bps_split_recursive_suffix)) /\ exists ff_q_bps_split_recursive_suffix_start. ff_u_bps_split_recursive_suffix = ff_q_bps_split_recursive_suffix_start * S ((S (0)) * ff_v_bps_split_recursive_suffix) + (1))) /\ ((((exists ff_h_bps_split_recursive_suffix_terminal. ff_h_bps_split_recursive_suffix_terminal + S (q) = S ((S (m)) * ff_v_bps_split_recursive_suffix)) /\ exists ff_q_bps_split_recursive_suffix_terminal. ff_u_bps_split_recursive_suffix = ff_q_bps_split_recursive_suffix_terminal * S ((S (m)) * ff_v_bps_split_recursive_suffix) + (q))) /\ forall ff_i_bps_split_recursive_suffix. (exists ff_lt_bps_split_recursive_suffix_bound. ff_lt_bps_split_recursive_suffix_bound + S ff_i_bps_split_recursive_suffix = m) -> exists ff_p_bps_split_recursive_suffix ff_r_bps_split_recursive_suffix ff_s_bps_split_recursive_suffix. ((((exists ff_h_bps_split_recursive_suffix_factor. ff_h_bps_split_recursive_suffix_factor + S (ff_p_bps_split_recursive_suffix) = S ((S (ff_i_bps_split_recursive_suffix)) * d)) /\ exists ff_q_bps_split_recursive_suffix_factor. z = ff_q_bps_split_recursive_suffix_factor * S ((S (ff_i_bps_split_recursive_suffix)) * d) + (ff_p_bps_split_recursive_suffix))) /\ ((((exists ff_h_bps_split_recursive_suffix_partial. ff_h_bps_split_recursive_suffix_partial + S (ff_r_bps_split_recursive_suffix) = S ((S (ff_i_bps_split_recursive_suffix)) * ff_v_bps_split_recursive_suffix)) /\ exists ff_q_bps_split_recursive_suffix_partial. ff_u_bps_split_recursive_suffix = ff_q_bps_split_recursive_suffix_partial * S ((S (ff_i_bps_split_recursive_suffix)) * ff_v_bps_split_recursive_suffix) + (ff_r_bps_split_recursive_suffix))) /\ ((((exists ff_h_bps_split_recursive_suffix_successor. ff_h_bps_split_recursive_suffix_successor + S (ff_s_bps_split_recursive_suffix) = S ((S (S ff_i_bps_split_recursive_suffix)) * ff_v_bps_split_recursive_suffix)) /\ exists ff_q_bps_split_recursive_suffix_successor. ff_u_bps_split_recursive_suffix = ff_q_bps_split_recursive_suffix_successor * S ((S (S ff_i_bps_split_recursive_suffix)) * ff_v_bps_split_recursive_suffix) + (ff_s_bps_split_recursive_suffix))) /\ ff_s_bps_split_recursive_suffix = ff_r_bps_split_recursive_suffix * ff_p_bps_split_recursive_suffix)))))) /\ x1 = p * q) - 0074
specialize IH x1 - 0075
apply IH - 0076
exact hprefix_shift - 0077
exact hdecomposition_witness_witness_right_left - 0078
cases hrecursive - 0079
cases hrecursive_witness - 0080
cases hrecursive_witness_witness - 0081
cases hrecursive_witness_witness_right - 0082
have hsuffix_last : ((exists ff_h_bps_split_suffix_last. ff_h_bps_split_suffix_last + S (x) = S ((S (m)) * d)) /\ exists ff_q_bps_split_suffix_last. z = ff_q_bps_split_suffix_last * S ((S (m)) * d) + (x)) - 0083
specialize hshift m - 0084
specialize hshift x - 0085
apply hshift - 0086
specialize le_refl (S m) - 0087
exact le_refl - 0088
exact hdecomposition_witness_witness_left - 0089
exists x2 - 0090
exists x3 * x - 0091
split - 0092
exact hrecursive_witness_witness_left - 0093
split - 0094
specialize beta_product_succ_append z - 0095
specialize beta_product_succ_append d - 0096
specialize beta_product_succ_append m - 0097
specialize beta_product_succ_append x3 - 0098
specialize beta_product_succ_append x - 0099
apply beta_product_succ_append - 0100
exact hrecursive_witness_witness_right_left - 0101
exact hsuffix_last - 0102
rewrite hdecomposition_witness_witness_right_right - 0103
rewrite hrecursive_witness_witness_right_right - 0104
specialize mul_assoc x2 - 0105
specialize mul_assoc x3 - 0106
specialize mul_assoc x - 0107
exact mul_assoc