Exact expanded PA statement
forall p r e z. p = S r -> (exists ff_b_main ff_c_main. ((forall ff_i_main_repeat. (exists ff_lt_main_repeat_bound. ff_lt_main_repeat_bound + S ff_i_main_repeat = e) -> (((exists ff_h_main_repeat_decoded. ff_h_main_repeat_decoded + S (r) = S ((S (ff_i_main_repeat)) * ff_c_main)) /\ exists ff_q_main_repeat_decoded. ff_b_main = ff_q_main_repeat_decoded * S ((S (ff_i_main_repeat)) * ff_c_main) + (r)))) /\ (exists ff_u_main_product ff_v_main_product. ((((exists ff_h_main_product_start. ff_h_main_product_start + S (1) = S ((S (0)) * ff_v_main_product)) /\ exists ff_q_main_product_start. ff_u_main_product = ff_q_main_product_start * S ((S (0)) * ff_v_main_product) + (1))) /\ ((((exists ff_h_main_product_terminal. ff_h_main_product_terminal + S (z) = S ((S (e)) * ff_v_main_product)) /\ exists ff_q_main_product_terminal. ff_u_main_product = ff_q_main_product_terminal * S ((S (e)) * ff_v_main_product) + (z))) /\ forall ff_i_main_product. (exists ff_lt_main_product_bound. ff_lt_main_product_bound + S ff_i_main_product = e) -> exists ff_p_main_product ff_r_main_product ff_s_main_product. ((((exists ff_h_main_product_factor. ff_h_main_product_factor + S (ff_p_main_product) = S ((S (ff_i_main_product)) * ff_c_main)) /\ exists ff_q_main_product_factor. ff_b_main = ff_q_main_product_factor * S ((S (ff_i_main_product)) * ff_c_main) + (ff_p_main_product))) /\ ((((exists ff_h_main_product_partial. ff_h_main_product_partial + S (ff_r_main_product) = S ((S (ff_i_main_product)) * ff_v_main_product)) /\ exists ff_q_main_product_partial. ff_u_main_product = ff_q_main_product_partial * S ((S (ff_i_main_product)) * ff_v_main_product) + (ff_r_main_product))) /\ ((((exists ff_h_main_product_successor. ff_h_main_product_successor + S (ff_s_main_product) = S ((S (S ff_i_main_product)) * ff_v_main_product)) /\ exists ff_q_main_product_successor. ff_u_main_product = ff_q_main_product_successor * S ((S (S ff_i_main_product)) * ff_v_main_product) + (ff_s_main_product))) /\ ff_s_main_product = ff_r_main_product * ff_p_main_product)))))))) -> (((exists gs_even_main. e = 2 * gs_even_main) -> (exists gs_u_result_even gs_v_result_even. (z) + p * gs_u_result_even = (1) + p * gs_v_result_even)) /\ ((exists gs_odd_main. e = 2 * gs_odd_main + 1) -> (exists gs_u_result_odd gs_v_result_odd. (z) + p * gs_u_result_odd = (r) + p * gs_v_result_odd)))Structural proof guide
Generated structural guide
Powers of the predecessor of p alternate between one and the predecessor modulo p.
Use the direct prerequisites pow_zero, pow_successor_decompose, odd_not_even, even_successor_to_odd, odd_successor_to_even, predecessor_square_mod_one, mod_eq_refl, mod_eq_mul, mod_eq_trans, one_mul as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (3), intermediate claims (13), equality transport (4), closed numeral normalization (1).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA004B pow_zero PA004D pow_successor_decompose PA0056 odd_not_even PA005A even_successor_to_odd PA005C odd_successor_to_even PA005D predecessor_square_mod_one PA0023 mod_eq_refl PA004E mod_eq_mul PA0024 mod_eq_trans PA000M one_mulDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Stable checked-use theorem is independently kernel-checked when replayed.
- 0001
intro p - 0002
intro r - 0003
induction e - 0004
intro z - 0005
intro hp - 0006
intro hpow - 0007
split - 0008
intro he - 0009
have hz : z = 1 - 0010
specialize pow_zero r - 0011
specialize pow_zero 0 - 0012
specialize pow_zero z - 0013
apply pow_zero - 0014
refl - 0015
exact hpow - 0016
rewrite hz - 0017
specialize mod_eq_refl p - 0018
specialize mod_eq_refl 1 - 0019
exact mod_eq_refl - 0020
intro ho - 0021
exfalso - 0022
specialize odd_not_even 0 - 0023
apply odd_not_even - 0024
exact ho - 0025
exists 0 - 0026
norm_num - 0027
intro z - 0028
intro hp - 0029
intro hpow - 0030
have hstep : exists w. (exists ff_b_predecessor ff_c_predecessor. ((forall ff_i_predecessor_repeat. (exists ff_lt_predecessor_repeat_bound. ff_lt_predecessor_repeat_bound + S ff_i_predecessor_repeat = e) -> (((exists ff_h_predecessor_repeat_decoded. ff_h_predecessor_repeat_decoded + S (r) = S ((S (ff_i_predecessor_repeat)) * ff_c_predecessor)) /\ exists ff_q_predecessor_repeat_decoded. ff_b_predecessor = ff_q_predecessor_repeat_decoded * S ((S (ff_i_predecessor_repeat)) * ff_c_predecessor) + (r)))) /\ (exists ff_u_predecessor_product ff_v_predecessor_product. ((((exists ff_h_predecessor_product_start. ff_h_predecessor_product_start + S (1) = S ((S (0)) * ff_v_predecessor_product)) /\ exists ff_q_predecessor_product_start. ff_u_predecessor_product = ff_q_predecessor_product_start * S ((S (0)) * ff_v_predecessor_product) + (1))) /\ ((((exists ff_h_predecessor_product_terminal. ff_h_predecessor_product_terminal + S (w) = S ((S (e)) * ff_v_predecessor_product)) /\ exists ff_q_predecessor_product_terminal. ff_u_predecessor_product = ff_q_predecessor_product_terminal * S ((S (e)) * ff_v_predecessor_product) + (w))) /\ forall ff_i_predecessor_product. (exists ff_lt_predecessor_product_bound. ff_lt_predecessor_product_bound + S ff_i_predecessor_product = e) -> exists ff_p_predecessor_product ff_r_predecessor_product ff_s_predecessor_product. ((((exists ff_h_predecessor_product_factor. ff_h_predecessor_product_factor + S (ff_p_predecessor_product) = S ((S (ff_i_predecessor_product)) * ff_c_predecessor)) /\ exists ff_q_predecessor_product_factor. ff_b_predecessor = ff_q_predecessor_product_factor * S ((S (ff_i_predecessor_product)) * ff_c_predecessor) + (ff_p_predecessor_product))) /\ ((((exists ff_h_predecessor_product_partial. ff_h_predecessor_product_partial + S (ff_r_predecessor_product) = S ((S (ff_i_predecessor_product)) * ff_v_predecessor_product)) /\ exists ff_q_predecessor_product_partial. ff_u_predecessor_product = ff_q_predecessor_product_partial * S ((S (ff_i_predecessor_product)) * ff_v_predecessor_product) + (ff_r_predecessor_product))) /\ ((((exists ff_h_predecessor_product_successor. ff_h_predecessor_product_successor + S (ff_s_predecessor_product) = S ((S (S ff_i_predecessor_product)) * ff_v_predecessor_product)) /\ exists ff_q_predecessor_product_successor. ff_u_predecessor_product = ff_q_predecessor_product_successor * S ((S (S ff_i_predecessor_product)) * ff_v_predecessor_product) + (ff_s_predecessor_product))) /\ ff_s_predecessor_product = ff_r_predecessor_product * ff_p_predecessor_product)))))))) /\ z = w * r - 0031
specialize pow_successor_decompose r - 0032
specialize pow_successor_decompose e - 0033
specialize pow_successor_decompose (S e) - 0034
specialize pow_successor_decompose z - 0035
apply pow_successor_decompose - 0036
refl - 0037
exact hpow - 0038
cases hstep - 0039
cases hstep_witness - 0040
have hinv : (((exists gs_even_ih. e = 2 * gs_even_ih) -> (exists gs_u_ih_even gs_v_ih_even. (x) + p * gs_u_ih_even = (1) + p * gs_v_ih_even)) /\ ((exists gs_odd_ih. e = 2 * gs_odd_ih + 1) -> (exists gs_u_ih_odd gs_v_ih_odd. (x) + p * gs_u_ih_odd = (r) + p * gs_v_ih_odd))) - 0041
specialize IH x - 0042
apply IH - 0043
exact hp - 0044
exact hstep_witness_left - 0045
cases hinv - 0046
split - 0047
intro hse - 0048
have heo : exists a. e = 2 * a + 1 - 0049
specialize even_successor_to_odd e - 0050
apply even_successor_to_odd - 0051
exact hse - 0052
have hwr : exists u v. x + p * u = r + p * v - 0053
apply hinv_right - 0054
exact heo - 0055
have hrr : exists u v. r + p * u = r + p * v - 0056
specialize mod_eq_refl p - 0057
specialize mod_eq_refl r - 0058
exact mod_eq_refl - 0059
have hmul : exists u v. (x * r) + p * u = (r * r) + p * v - 0060
specialize mod_eq_mul p - 0061
specialize mod_eq_mul x - 0062
specialize mod_eq_mul r - 0063
specialize mod_eq_mul r - 0064
specialize mod_eq_mul r - 0065
apply mod_eq_mul - 0066
exact hwr - 0067
exact hrr - 0068
have hsq : exists u v. (r * r) + p * u = 1 + p * v - 0069
specialize predecessor_square_mod_one p - 0070
specialize predecessor_square_mod_one r - 0071
apply predecessor_square_mod_one - 0072
exact hp - 0073
have hfinal : exists u v. (x * r) + p * u = 1 + p * v - 0074
specialize mod_eq_trans p - 0075
specialize mod_eq_trans (x * r) - 0076
specialize mod_eq_trans (r * r) - 0077
specialize mod_eq_trans 1 - 0078
apply mod_eq_trans - 0079
exact hmul - 0080
exact hsq - 0081
rewrite hstep_witness_right - 0082
exact hfinal - 0083
intro hso - 0084
have hee : exists a. e = 2 * a - 0085
specialize odd_successor_to_even e - 0086
apply odd_successor_to_even - 0087
exact hso - 0088
have hw1 : exists u v. x + p * u = 1 + p * v - 0089
apply hinv_left - 0090
exact hee - 0091
have hrr : exists u v. r + p * u = r + p * v - 0092
specialize mod_eq_refl p - 0093
specialize mod_eq_refl r - 0094
exact mod_eq_refl - 0095
have hmul : exists u v. (x * r) + p * u = (1 * r) + p * v - 0096
specialize mod_eq_mul p - 0097
specialize mod_eq_mul x - 0098
specialize mod_eq_mul 1 - 0099
specialize mod_eq_mul r - 0100
specialize mod_eq_mul r - 0101
apply mod_eq_mul - 0102
exact hw1 - 0103
exact hrr - 0104
specialize one_mul r - 0105
rewrite one_mul at hmul - 0106
rewrite hstep_witness_right - 0107
exact hmul