Exact expanded PA statement
forall b c l n z. (forall bpr_left_index_bpcpdcm_pairwise bpr_right_index_bpcpdcm_pairwise bpr_left_value_bpcpdcm_pairwise bpr_right_value_bpcpdcm_pairwise. (exists bpr_gap_bpcpdcm_pairwise_left_bound. bpr_gap_bpcpdcm_pairwise_left_bound + S (bpr_left_index_bpcpdcm_pairwise) = l) -> (exists bpr_gap_bpcpdcm_pairwise_right_bound. bpr_gap_bpcpdcm_pairwise_right_bound + S (bpr_right_index_bpcpdcm_pairwise) = l) -> (((exists bpr_height_bpcpdcm_pairwise_left_at. bpr_height_bpcpdcm_pairwise_left_at + S (bpr_left_value_bpcpdcm_pairwise) = S ((S (bpr_left_index_bpcpdcm_pairwise)) * c)) /\ exists bpr_quotient_bpcpdcm_pairwise_left_at. b = bpr_quotient_bpcpdcm_pairwise_left_at * S ((S (bpr_left_index_bpcpdcm_pairwise)) * c) + (bpr_left_value_bpcpdcm_pairwise))) -> (((exists bpr_height_bpcpdcm_pairwise_right_at. bpr_height_bpcpdcm_pairwise_right_at + S (bpr_right_value_bpcpdcm_pairwise) = S ((S (bpr_right_index_bpcpdcm_pairwise)) * c)) /\ exists bpr_quotient_bpcpdcm_pairwise_right_at. b = bpr_quotient_bpcpdcm_pairwise_right_at * S ((S (bpr_right_index_bpcpdcm_pairwise)) * c) + (bpr_right_value_bpcpdcm_pairwise))) -> ~(bpr_left_index_bpcpdcm_pairwise = bpr_right_index_bpcpdcm_pairwise) -> (forall bpr_coprime_divisor_bpcpdcm_pairwise_coprime. (exists bpr_coprime_left_factor_bpcpdcm_pairwise_coprime. bpr_left_value_bpcpdcm_pairwise = bpr_coprime_divisor_bpcpdcm_pairwise_coprime * bpr_coprime_left_factor_bpcpdcm_pairwise_coprime) -> (exists bpr_coprime_right_factor_bpcpdcm_pairwise_coprime. bpr_right_value_bpcpdcm_pairwise = bpr_coprime_divisor_bpcpdcm_pairwise_coprime * bpr_coprime_right_factor_bpcpdcm_pairwise_coprime) -> bpr_coprime_divisor_bpcpdcm_pairwise_coprime = 1)) -> (forall bpr_divisor_index_bpcpdcm_pointwise bpr_divisor_value_bpcpdcm_pointwise. (exists bpr_gap_bpcpdcm_pointwise_index_bound. bpr_gap_bpcpdcm_pointwise_index_bound + S (bpr_divisor_index_bpcpdcm_pointwise) = l) -> (((exists bpr_height_bpcpdcm_pointwise_decoded. bpr_height_bpcpdcm_pointwise_decoded + S (bpr_divisor_value_bpcpdcm_pointwise) = S ((S (bpr_divisor_index_bpcpdcm_pointwise)) * c)) /\ exists bpr_quotient_bpcpdcm_pointwise_decoded. b = bpr_quotient_bpcpdcm_pointwise_decoded * S ((S (bpr_divisor_index_bpcpdcm_pointwise)) * c) + (bpr_divisor_value_bpcpdcm_pointwise))) -> exists bpr_quotient_bpcpdcm_pointwise_result. z = bpr_divisor_value_bpcpdcm_pointwise * bpr_quotient_bpcpdcm_pointwise_result) -> (exists ff_u_bpcpdcm_source ff_v_bpcpdcm_source. ((((exists ff_h_bpcpdcm_source_start. ff_h_bpcpdcm_source_start + S (1) = S ((S (0)) * ff_v_bpcpdcm_source)) /\ exists ff_q_bpcpdcm_source_start. ff_u_bpcpdcm_source = ff_q_bpcpdcm_source_start * S ((S (0)) * ff_v_bpcpdcm_source) + (1))) /\ ((((exists ff_h_bpcpdcm_source_terminal. ff_h_bpcpdcm_source_terminal + S (n) = S ((S (l)) * ff_v_bpcpdcm_source)) /\ exists ff_q_bpcpdcm_source_terminal. ff_u_bpcpdcm_source = ff_q_bpcpdcm_source_terminal * S ((S (l)) * ff_v_bpcpdcm_source) + (n))) /\ forall ff_i_bpcpdcm_source. (exists ff_lt_bpcpdcm_source_bound. ff_lt_bpcpdcm_source_bound + S ff_i_bpcpdcm_source = l) -> exists ff_p_bpcpdcm_source ff_r_bpcpdcm_source ff_s_bpcpdcm_source. ((((exists ff_h_bpcpdcm_source_factor. ff_h_bpcpdcm_source_factor + S (ff_p_bpcpdcm_source) = S ((S (ff_i_bpcpdcm_source)) * c)) /\ exists ff_q_bpcpdcm_source_factor. b = ff_q_bpcpdcm_source_factor * S ((S (ff_i_bpcpdcm_source)) * c) + (ff_p_bpcpdcm_source))) /\ ((((exists ff_h_bpcpdcm_source_partial. ff_h_bpcpdcm_source_partial + S (ff_r_bpcpdcm_source) = S ((S (ff_i_bpcpdcm_source)) * ff_v_bpcpdcm_source)) /\ exists ff_q_bpcpdcm_source_partial. ff_u_bpcpdcm_source = ff_q_bpcpdcm_source_partial * S ((S (ff_i_bpcpdcm_source)) * ff_v_bpcpdcm_source) + (ff_r_bpcpdcm_source))) /\ ((((exists ff_h_bpcpdcm_source_successor. ff_h_bpcpdcm_source_successor + S (ff_s_bpcpdcm_source) = S ((S (S ff_i_bpcpdcm_source)) * ff_v_bpcpdcm_source)) /\ exists ff_q_bpcpdcm_source_successor. ff_u_bpcpdcm_source = ff_q_bpcpdcm_source_successor * S ((S (S ff_i_bpcpdcm_source)) * ff_v_bpcpdcm_source) + (ff_s_bpcpdcm_source))) /\ ff_s_bpcpdcm_source = ff_r_bpcpdcm_source * ff_p_bpcpdcm_source)))))) -> (exists bpr_quotient_bpcpdcm_result. z = (n) * bpr_quotient_bpcpdcm_result)Structural proof guide
A pairwise-coprime product divides every common multiple of its factors.
Direct prerequisites: beta_product_zero, beta_product_succ_decompose, le_succ, le_refl, one_multiple, lt_irrefl_expanded, beta_product_pointwise_coprime, coprime_product_is_lcm. The authored body proceeds by structural induction (1), case analysis (6), intermediate claims (9), equality transport (3).
Proof neighborhood
Direct dependencies
BT005I beta_product_zero BT005J beta_product_succ_decompose BT0018 le_succ BT000E le_refl BT0027 one_multiple BT001B lt_irrefl_expanded BT00DH beta_product_pointwise_coprime BT00BG coprime_product_is_lcmDirect 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
induction l - 0004
intro n - 0005
intro z - 0006
intro hpairwise - 0007
intro hpointwise - 0008
intro hproduct - 0009
have hn : n = 1 - 0010
specialize beta_product_zero b - 0011
specialize beta_product_zero c - 0012
specialize beta_product_zero n - 0013
apply beta_product_zero - 0014
exact hproduct - 0015
rewrite hn - 0016
specialize one_multiple z - 0017
exact one_multiple - 0018
intro n - 0019
intro z - 0020
intro hpairwise - 0021
intro hpointwise - 0022
intro hproduct - 0023
have hdecomposition : exists p r. (((exists bpr_height_bpcpdcm_last. bpr_height_bpcpdcm_last + S (p) = S ((S (l)) * c)) /\ exists bpr_quotient_bpcpdcm_last. b = bpr_quotient_bpcpdcm_last * S ((S (l)) * c) + (p))) /\ ((exists ff_u_bpcpdcm_prefix ff_v_bpcpdcm_prefix. ((((exists ff_h_bpcpdcm_prefix_start. ff_h_bpcpdcm_prefix_start + S (1) = S ((S (0)) * ff_v_bpcpdcm_prefix)) /\ exists ff_q_bpcpdcm_prefix_start. ff_u_bpcpdcm_prefix = ff_q_bpcpdcm_prefix_start * S ((S (0)) * ff_v_bpcpdcm_prefix) + (1))) /\ ((((exists ff_h_bpcpdcm_prefix_terminal. ff_h_bpcpdcm_prefix_terminal + S (r) = S ((S (l)) * ff_v_bpcpdcm_prefix)) /\ exists ff_q_bpcpdcm_prefix_terminal. ff_u_bpcpdcm_prefix = ff_q_bpcpdcm_prefix_terminal * S ((S (l)) * ff_v_bpcpdcm_prefix) + (r))) /\ forall ff_i_bpcpdcm_prefix. (exists ff_lt_bpcpdcm_prefix_bound. ff_lt_bpcpdcm_prefix_bound + S ff_i_bpcpdcm_prefix = l) -> exists ff_p_bpcpdcm_prefix ff_r_bpcpdcm_prefix ff_s_bpcpdcm_prefix. ((((exists ff_h_bpcpdcm_prefix_factor. ff_h_bpcpdcm_prefix_factor + S (ff_p_bpcpdcm_prefix) = S ((S (ff_i_bpcpdcm_prefix)) * c)) /\ exists ff_q_bpcpdcm_prefix_factor. b = ff_q_bpcpdcm_prefix_factor * S ((S (ff_i_bpcpdcm_prefix)) * c) + (ff_p_bpcpdcm_prefix))) /\ ((((exists ff_h_bpcpdcm_prefix_partial. ff_h_bpcpdcm_prefix_partial + S (ff_r_bpcpdcm_prefix) = S ((S (ff_i_bpcpdcm_prefix)) * ff_v_bpcpdcm_prefix)) /\ exists ff_q_bpcpdcm_prefix_partial. ff_u_bpcpdcm_prefix = ff_q_bpcpdcm_prefix_partial * S ((S (ff_i_bpcpdcm_prefix)) * ff_v_bpcpdcm_prefix) + (ff_r_bpcpdcm_prefix))) /\ ((((exists ff_h_bpcpdcm_prefix_successor. ff_h_bpcpdcm_prefix_successor + S (ff_s_bpcpdcm_prefix) = S ((S (S ff_i_bpcpdcm_prefix)) * ff_v_bpcpdcm_prefix)) /\ exists ff_q_bpcpdcm_prefix_successor. ff_u_bpcpdcm_prefix = ff_q_bpcpdcm_prefix_successor * S ((S (S ff_i_bpcpdcm_prefix)) * ff_v_bpcpdcm_prefix) + (ff_s_bpcpdcm_prefix))) /\ ff_s_bpcpdcm_prefix = ff_r_bpcpdcm_prefix * ff_p_bpcpdcm_prefix)))))) /\ n = r * p) - 0024
specialize beta_product_succ_decompose b - 0025
specialize beta_product_succ_decompose c - 0026
specialize beta_product_succ_decompose l - 0027
specialize beta_product_succ_decompose n - 0028
apply beta_product_succ_decompose - 0029
exact hproduct - 0030
cases hdecomposition - 0031
cases hdecomposition_witness - 0032
cases hdecomposition_witness_witness - 0033
cases hdecomposition_witness_witness_right - 0034
have hprefix_pairwise : forall bpr_left_index_bpcpdcm_prefix_pairwise bpr_right_index_bpcpdcm_prefix_pairwise bpr_left_value_bpcpdcm_prefix_pairwise bpr_right_value_bpcpdcm_prefix_pairwise. (exists bpr_gap_bpcpdcm_prefix_pairwise_left_bound. bpr_gap_bpcpdcm_prefix_pairwise_left_bound + S (bpr_left_index_bpcpdcm_prefix_pairwise) = l) -> (exists bpr_gap_bpcpdcm_prefix_pairwise_right_bound. bpr_gap_bpcpdcm_prefix_pairwise_right_bound + S (bpr_right_index_bpcpdcm_prefix_pairwise) = l) -> (((exists bpr_height_bpcpdcm_prefix_pairwise_left_at. bpr_height_bpcpdcm_prefix_pairwise_left_at + S (bpr_left_value_bpcpdcm_prefix_pairwise) = S ((S (bpr_left_index_bpcpdcm_prefix_pairwise)) * c)) /\ exists bpr_quotient_bpcpdcm_prefix_pairwise_left_at. b = bpr_quotient_bpcpdcm_prefix_pairwise_left_at * S ((S (bpr_left_index_bpcpdcm_prefix_pairwise)) * c) + (bpr_left_value_bpcpdcm_prefix_pairwise))) -> (((exists bpr_height_bpcpdcm_prefix_pairwise_right_at. bpr_height_bpcpdcm_prefix_pairwise_right_at + S (bpr_right_value_bpcpdcm_prefix_pairwise) = S ((S (bpr_right_index_bpcpdcm_prefix_pairwise)) * c)) /\ exists bpr_quotient_bpcpdcm_prefix_pairwise_right_at. b = bpr_quotient_bpcpdcm_prefix_pairwise_right_at * S ((S (bpr_right_index_bpcpdcm_prefix_pairwise)) * c) + (bpr_right_value_bpcpdcm_prefix_pairwise))) -> ~(bpr_left_index_bpcpdcm_prefix_pairwise = bpr_right_index_bpcpdcm_prefix_pairwise) -> (forall bpr_coprime_divisor_bpcpdcm_prefix_pairwise_coprime. (exists bpr_coprime_left_factor_bpcpdcm_prefix_pairwise_coprime. bpr_left_value_bpcpdcm_prefix_pairwise = bpr_coprime_divisor_bpcpdcm_prefix_pairwise_coprime * bpr_coprime_left_factor_bpcpdcm_prefix_pairwise_coprime) -> (exists bpr_coprime_right_factor_bpcpdcm_prefix_pairwise_coprime. bpr_right_value_bpcpdcm_prefix_pairwise = bpr_coprime_divisor_bpcpdcm_prefix_pairwise_coprime * bpr_coprime_right_factor_bpcpdcm_prefix_pairwise_coprime) -> bpr_coprime_divisor_bpcpdcm_prefix_pairwise_coprime = 1) - 0035
intro i - 0036
intro j - 0037
intro p - 0038
intro q - 0039
intro hi - 0040
intro hj - 0041
intro hp - 0042
intro hq - 0043
intro hij - 0044
specialize hpairwise i - 0045
specialize hpairwise j - 0046
specialize hpairwise p - 0047
specialize hpairwise q - 0048
apply hpairwise - 0049
specialize le_succ (S i) - 0050
specialize le_succ l - 0051
apply le_succ - 0052
exact hi - 0053
specialize le_succ (S j) - 0054
specialize le_succ l - 0055
apply le_succ - 0056
exact hj - 0057
exact hp - 0058
exact hq - 0059
exact hij - 0060
have hprefix_pointwise : forall bpr_divisor_index_bpcpdcm_prefix_pointwise bpr_divisor_value_bpcpdcm_prefix_pointwise. (exists bpr_gap_bpcpdcm_prefix_pointwise_index_bound. bpr_gap_bpcpdcm_prefix_pointwise_index_bound + S (bpr_divisor_index_bpcpdcm_prefix_pointwise) = l) -> (((exists bpr_height_bpcpdcm_prefix_pointwise_decoded. bpr_height_bpcpdcm_prefix_pointwise_decoded + S (bpr_divisor_value_bpcpdcm_prefix_pointwise) = S ((S (bpr_divisor_index_bpcpdcm_prefix_pointwise)) * c)) /\ exists bpr_quotient_bpcpdcm_prefix_pointwise_decoded. b = bpr_quotient_bpcpdcm_prefix_pointwise_decoded * S ((S (bpr_divisor_index_bpcpdcm_prefix_pointwise)) * c) + (bpr_divisor_value_bpcpdcm_prefix_pointwise))) -> exists bpr_quotient_bpcpdcm_prefix_pointwise_result. z = bpr_divisor_value_bpcpdcm_prefix_pointwise * bpr_quotient_bpcpdcm_prefix_pointwise_result - 0061
intro i - 0062
intro p - 0063
intro hi - 0064
intro hp - 0065
specialize hpointwise i - 0066
specialize hpointwise p - 0067
apply hpointwise - 0068
specialize le_succ (S i) - 0069
specialize le_succ l - 0070
apply le_succ - 0071
exact hi - 0072
exact hp - 0073
have hprefix_divides : exists q. z = x1 * q - 0074
specialize IH x1 - 0075
specialize IH z - 0076
apply IH - 0077
exact hprefix_pairwise - 0078
exact hprefix_pointwise - 0079
exact hdecomposition_witness_witness_right_left - 0080
have hlast_divides : exists q. z = x * q - 0081
specialize hpointwise l - 0082
specialize hpointwise x - 0083
apply hpointwise - 0084
specialize le_refl (S l) - 0085
exact le_refl - 0086
exact hdecomposition_witness_witness_left - 0087
have hcoprime : forall bpr_coprime_divisor_bpcpdcm_local_coprime. (exists bpr_coprime_left_factor_bpcpdcm_local_coprime. x1 = bpr_coprime_divisor_bpcpdcm_local_coprime * bpr_coprime_left_factor_bpcpdcm_local_coprime) -> (exists bpr_coprime_right_factor_bpcpdcm_local_coprime. x = bpr_coprime_divisor_bpcpdcm_local_coprime * bpr_coprime_right_factor_bpcpdcm_local_coprime) -> bpr_coprime_divisor_bpcpdcm_local_coprime = 1 - 0088
specialize beta_product_pointwise_coprime x - 0089
specialize beta_product_pointwise_coprime b - 0090
specialize beta_product_pointwise_coprime c - 0091
specialize beta_product_pointwise_coprime l - 0092
specialize beta_product_pointwise_coprime x1 - 0093
apply beta_product_pointwise_coprime - 0094
intro i - 0095
intro q - 0096
intro hi - 0097
intro hq - 0098
specialize hpairwise i - 0099
specialize hpairwise l - 0100
specialize hpairwise q - 0101
specialize hpairwise x - 0102
apply hpairwise - 0103
specialize le_succ (S i) - 0104
specialize le_succ l - 0105
apply le_succ - 0106
exact hi - 0107
specialize le_refl (S l) - 0108
exact le_refl - 0109
exact hq - 0110
exact hdecomposition_witness_witness_left - 0111
intro hil - 0112
rewrite hil at hi - 0113
specialize lt_irrefl_expanded l - 0114
apply lt_irrefl_expanded - 0115
exact hi - 0116
exact hdecomposition_witness_witness_right_left - 0117
have hlcm : ((((exists u. x1 * x = x1 * u) /\ exists v. x1 * x = x * v) /\ forall t. (exists a. t = x1 * a) -> (exists d. t = x * d) -> exists q. t = (x1 * x) * q)) - 0118
specialize coprime_product_is_lcm x1 - 0119
specialize coprime_product_is_lcm x - 0120
apply coprime_product_is_lcm - 0121
exact hcoprime - 0122
cases hlcm - 0123
cases hlcm_left - 0124
have hresult : exists q. z = (x1 * x) * q - 0125
specialize hlcm_right z - 0126
apply hlcm_right - 0127
exact hprefix_divides - 0128
exact hlast_divides - 0129
rewrite hdecomposition_witness_witness_right_right - 0130
exact hresult