Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Exact expanded first-order arithmetic statement
forall l n b c m d e. ((~(n = 0) /\ ((exists ff_u_fsat_uniqueness_source_product ff_v_fsat_uniqueness_source_product. ((((exists ff_h_fsat_uniqueness_source_product_start. ff_h_fsat_uniqueness_source_product_start + S (1) = S ((S (0)) * ff_v_fsat_uniqueness_source_product)) /\ exists ff_q_fsat_uniqueness_source_product_start. ff_u_fsat_uniqueness_source_product = ff_q_fsat_uniqueness_source_product_start * S ((S (0)) * ff_v_fsat_uniqueness_source_product) + (1))) /\ ((((exists ff_h_fsat_uniqueness_source_product_terminal. ff_h_fsat_uniqueness_source_product_terminal + S (n) = S ((S (l)) * ff_v_fsat_uniqueness_source_product)) /\ exists ff_q_fsat_uniqueness_source_product_terminal. ff_u_fsat_uniqueness_source_product = ff_q_fsat_uniqueness_source_product_terminal * S ((S (l)) * ff_v_fsat_uniqueness_source_product) + (n))) /\ forall ff_i_fsat_uniqueness_source_product. (exists ff_lt_fsat_uniqueness_source_product_bound. ff_lt_fsat_uniqueness_source_product_bound + S ff_i_fsat_uniqueness_source_product = l) -> exists ff_p_fsat_uniqueness_source_product ff_r_fsat_uniqueness_source_product ff_s_fsat_uniqueness_source_product. ((((exists ff_h_fsat_uniqueness_source_product_factor. ff_h_fsat_uniqueness_source_product_factor + S (ff_p_fsat_uniqueness_source_product) = S ((S (ff_i_fsat_uniqueness_source_product)) * c)) /\ exists ff_q_fsat_uniqueness_source_product_factor. b = ff_q_fsat_uniqueness_source_product_factor * S ((S (ff_i_fsat_uniqueness_source_product)) * c) + (ff_p_fsat_uniqueness_source_product))) /\ ((((exists ff_h_fsat_uniqueness_source_product_partial. ff_h_fsat_uniqueness_source_product_partial + S (ff_r_fsat_uniqueness_source_product) = S ((S (ff_i_fsat_uniqueness_source_product)) * ff_v_fsat_uniqueness_source_product)) /\ exists ff_q_fsat_uniqueness_source_product_partial. ff_u_fsat_uniqueness_source_product = ff_q_fsat_uniqueness_source_product_partial * S ((S (ff_i_fsat_uniqueness_source_product)) * ff_v_fsat_uniqueness_source_product) + (ff_r_fsat_uniqueness_source_product))) /\ ((((exists ff_h_fsat_uniqueness_source_product_successor. ff_h_fsat_uniqueness_source_product_successor + S (ff_s_fsat_uniqueness_source_product) = S ((S (S ff_i_fsat_uniqueness_source_product)) * ff_v_fsat_uniqueness_source_product)) /\ exists ff_q_fsat_uniqueness_source_product_successor. ff_u_fsat_uniqueness_source_product = ff_q_fsat_uniqueness_source_product_successor * S ((S (S ff_i_fsat_uniqueness_source_product)) * ff_v_fsat_uniqueness_source_product) + (ff_s_fsat_uniqueness_source_product))) /\ ff_s_fsat_uniqueness_source_product = ff_r_fsat_uniqueness_source_product * ff_p_fsat_uniqueness_source_product)))))) /\ (forall ftsf_index_fsat_uniqueness_source_primes. (exists ftsf_gap_fsat_uniqueness_source_primes_bound. ftsf_gap_fsat_uniqueness_source_primes_bound + S ftsf_index_fsat_uniqueness_source_primes = (l)) -> exists ftsf_factor_fsat_uniqueness_source_primes. ((((exists ff_h_ftsf_fsat_uniqueness_source_primes_entry. ff_h_ftsf_fsat_uniqueness_source_primes_entry + S (ftsf_factor_fsat_uniqueness_source_primes) = S ((S (ftsf_index_fsat_uniqueness_source_primes)) * c)) /\ exists ff_q_ftsf_fsat_uniqueness_source_primes_entry. b = ff_q_ftsf_fsat_uniqueness_source_primes_entry * S ((S (ftsf_index_fsat_uniqueness_source_primes)) * c) + (ftsf_factor_fsat_uniqueness_source_primes))) /\ ((~(ftsf_factor_fsat_uniqueness_source_primes = 1) /\ forall frm_prime_left_ftsf_fsat_uniqueness_source_primes_prime frm_prime_right_ftsf_fsat_uniqueness_source_primes_prime. ftsf_factor_fsat_uniqueness_source_primes = frm_prime_left_ftsf_fsat_uniqueness_source_primes_prime * frm_prime_right_ftsf_fsat_uniqueness_source_primes_prime -> frm_prime_left_ftsf_fsat_uniqueness_source_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_uniqueness_source_primes_prime = 1))))))) -> ((~(n = 0) /\ ((exists ff_u_fsat_uniqueness_target_product ff_v_fsat_uniqueness_target_product. ((((exists ff_h_fsat_uniqueness_target_product_start. ff_h_fsat_uniqueness_target_product_start + S (1) = S ((S (0)) * ff_v_fsat_uniqueness_target_product)) /\ exists ff_q_fsat_uniqueness_target_product_start. ff_u_fsat_uniqueness_target_product = ff_q_fsat_uniqueness_target_product_start * S ((S (0)) * ff_v_fsat_uniqueness_target_product) + (1))) /\ ((((exists ff_h_fsat_uniqueness_target_product_terminal. ff_h_fsat_uniqueness_target_product_terminal + S (n) = S ((S (m)) * ff_v_fsat_uniqueness_target_product)) /\ exists ff_q_fsat_uniqueness_target_product_terminal. ff_u_fsat_uniqueness_target_product = ff_q_fsat_uniqueness_target_product_terminal * S ((S (m)) * ff_v_fsat_uniqueness_target_product) + (n))) /\ forall ff_i_fsat_uniqueness_target_product. (exists ff_lt_fsat_uniqueness_target_product_bound. ff_lt_fsat_uniqueness_target_product_bound + S ff_i_fsat_uniqueness_target_product = m) -> exists ff_p_fsat_uniqueness_target_product ff_r_fsat_uniqueness_target_product ff_s_fsat_uniqueness_target_product. ((((exists ff_h_fsat_uniqueness_target_product_factor. ff_h_fsat_uniqueness_target_product_factor + S (ff_p_fsat_uniqueness_target_product) = S ((S (ff_i_fsat_uniqueness_target_product)) * e)) /\ exists ff_q_fsat_uniqueness_target_product_factor. d = ff_q_fsat_uniqueness_target_product_factor * S ((S (ff_i_fsat_uniqueness_target_product)) * e) + (ff_p_fsat_uniqueness_target_product))) /\ ((((exists ff_h_fsat_uniqueness_target_product_partial. ff_h_fsat_uniqueness_target_product_partial + S (ff_r_fsat_uniqueness_target_product) = S ((S (ff_i_fsat_uniqueness_target_product)) * ff_v_fsat_uniqueness_target_product)) /\ exists ff_q_fsat_uniqueness_target_product_partial. ff_u_fsat_uniqueness_target_product = ff_q_fsat_uniqueness_target_product_partial * S ((S (ff_i_fsat_uniqueness_target_product)) * ff_v_fsat_uniqueness_target_product) + (ff_r_fsat_uniqueness_target_product))) /\ ((((exists ff_h_fsat_uniqueness_target_product_successor. ff_h_fsat_uniqueness_target_product_successor + S (ff_s_fsat_uniqueness_target_product) = S ((S (S ff_i_fsat_uniqueness_target_product)) * ff_v_fsat_uniqueness_target_product)) /\ exists ff_q_fsat_uniqueness_target_product_successor. ff_u_fsat_uniqueness_target_product = ff_q_fsat_uniqueness_target_product_successor * S ((S (S ff_i_fsat_uniqueness_target_product)) * ff_v_fsat_uniqueness_target_product) + (ff_s_fsat_uniqueness_target_product))) /\ ff_s_fsat_uniqueness_target_product = ff_r_fsat_uniqueness_target_product * ff_p_fsat_uniqueness_target_product)))))) /\ (forall ftsf_index_fsat_uniqueness_target_primes. (exists ftsf_gap_fsat_uniqueness_target_primes_bound. ftsf_gap_fsat_uniqueness_target_primes_bound + S ftsf_index_fsat_uniqueness_target_primes = (m)) -> exists ftsf_factor_fsat_uniqueness_target_primes. ((((exists ff_h_ftsf_fsat_uniqueness_target_primes_entry. ff_h_ftsf_fsat_uniqueness_target_primes_entry + S (ftsf_factor_fsat_uniqueness_target_primes) = S ((S (ftsf_index_fsat_uniqueness_target_primes)) * e)) /\ exists ff_q_ftsf_fsat_uniqueness_target_primes_entry. d = ff_q_ftsf_fsat_uniqueness_target_primes_entry * S ((S (ftsf_index_fsat_uniqueness_target_primes)) * e) + (ftsf_factor_fsat_uniqueness_target_primes))) /\ ((~(ftsf_factor_fsat_uniqueness_target_primes = 1) /\ forall frm_prime_left_ftsf_fsat_uniqueness_target_primes_prime frm_prime_right_ftsf_fsat_uniqueness_target_primes_prime. ftsf_factor_fsat_uniqueness_target_primes = frm_prime_left_ftsf_fsat_uniqueness_target_primes_prime * frm_prime_right_ftsf_fsat_uniqueness_target_primes_prime -> frm_prime_left_ftsf_fsat_uniqueness_target_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_uniqueness_target_primes_prime = 1))))))) -> (((l = m) /\ (exists pfp_u_uniqueness_result pfp_v_uniqueness_result. (((((forall pfp_i_uniqueness_resultmatchingpermutationbounded. (exists pfp_gap_uniqueness_resultmatchingpermutationboundedindex. pfp_gap_uniqueness_resultmatchingpermutationboundedindex + S (pfp_i_uniqueness_resultmatchingpermutationbounded) = (l)) -> exists pfp_a_uniqueness_resultmatchingpermutationbounded. (((exists ff_h_pfp_uniqueness_resultmatchingpermutationboundedentry. ff_h_pfp_uniqueness_resultmatchingpermutationboundedentry + S (pfp_a_uniqueness_resultmatchingpermutationbounded) = S ((S (pfp_i_uniqueness_resultmatchingpermutationbounded)) * pfp_v_uniqueness_result)) /\ exists ff_q_pfp_uniqueness_resultmatchingpermutationboundedentry. pfp_u_uniqueness_result = ff_q_pfp_uniqueness_resultmatchingpermutationboundedentry * S ((S (pfp_i_uniqueness_resultmatchingpermutationbounded)) * pfp_v_uniqueness_result) + (pfp_a_uniqueness_resultmatchingpermutationbounded))) /\ (exists pfp_gap_uniqueness_resultmatchingpermutationboundedvalue. pfp_gap_uniqueness_resultmatchingpermutationboundedvalue + S (pfp_a_uniqueness_resultmatchingpermutationbounded) = (l))) /\ (((forall pfp_i_uniqueness_resultmatchingpermutationinjective pfp_j_uniqueness_resultmatchingpermutationinjective pfp_a_uniqueness_resultmatchingpermutationinjective. (exists pfp_gap_uniqueness_resultmatchingpermutationinjectivefirst. pfp_gap_uniqueness_resultmatchingpermutationinjectivefirst + S (pfp_i_uniqueness_resultmatchingpermutationinjective) = (l)) -> (exists pfp_gap_uniqueness_resultmatchingpermutationinjectivesecond. pfp_gap_uniqueness_resultmatchingpermutationinjectivesecond + S (pfp_j_uniqueness_resultmatchingpermutationinjective) = (l)) -> (((exists ff_h_pfp_uniqueness_resultmatchingpermutationinjectiveleft. ff_h_pfp_uniqueness_resultmatchingpermutationinjectiveleft + S (pfp_a_uniqueness_resultmatchingpermutationinjective) = S ((S (pfp_i_uniqueness_resultmatchingpermutationinjective)) * pfp_v_uniqueness_result)) /\ exists ff_q_pfp_uniqueness_resultmatchingpermutationinjectiveleft. pfp_u_uniqueness_result = ff_q_pfp_uniqueness_resultmatchingpermutationinjectiveleft * S ((S (pfp_i_uniqueness_resultmatchingpermutationinjective)) * pfp_v_uniqueness_result) + (pfp_a_uniqueness_resultmatchingpermutationinjective))) -> (((exists ff_h_pfp_uniqueness_resultmatchingpermutationinjectiveright. ff_h_pfp_uniqueness_resultmatchingpermutationinjectiveright + S (pfp_a_uniqueness_resultmatchingpermutationinjective) = S ((S (pfp_j_uniqueness_resultmatchingpermutationinjective)) * pfp_v_uniqueness_result)) /\ exists ff_q_pfp_uniqueness_resultmatchingpermutationinjectiveright. pfp_u_uniqueness_result = ff_q_pfp_uniqueness_resultmatchingpermutationinjectiveright * S ((S (pfp_j_uniqueness_resultmatchingpermutationinjective)) * pfp_v_uniqueness_result) + (pfp_a_uniqueness_resultmatchingpermutationinjective))) -> pfp_i_uniqueness_resultmatchingpermutationinjective = pfp_j_uniqueness_resultmatchingpermutationinjective) /\ (forall pfp_a_uniqueness_resultmatchingpermutationsurjective. (exists pfp_gap_uniqueness_resultmatchingpermutationsurjectivevalue. pfp_gap_uniqueness_resultmatchingpermutationsurjectivevalue + S (pfp_a_uniqueness_resultmatchingpermutationsurjective) = (l)) -> exists pfp_i_uniqueness_resultmatchingpermutationsurjective. (exists pfp_gap_uniqueness_resultmatchingpermutationsurjectiveindex. pfp_gap_uniqueness_resultmatchingpermutationsurjectiveindex + S (pfp_i_uniqueness_resultmatchingpermutationsurjective) = (l)) /\ (((exists ff_h_pfp_uniqueness_resultmatchingpermutationsurjectiveentry. ff_h_pfp_uniqueness_resultmatchingpermutationsurjectiveentry + S (pfp_a_uniqueness_resultmatchingpermutationsurjective) = S ((S (pfp_i_uniqueness_resultmatchingpermutationsurjective)) * pfp_v_uniqueness_result)) /\ exists ff_q_pfp_uniqueness_resultmatchingpermutationsurjectiveentry. pfp_u_uniqueness_result = ff_q_pfp_uniqueness_resultmatchingpermutationsurjectiveentry * S ((S (pfp_i_uniqueness_resultmatchingpermutationsurjective)) * pfp_v_uniqueness_result) + (pfp_a_uniqueness_resultmatchingpermutationsurjective)))))))) /\ (forall pfp_i_uniqueness_resultmatchingmatching pfp_j_uniqueness_resultmatchingmatching pfp_a_uniqueness_resultmatchingmatching. (exists pfp_gap_uniqueness_resultmatchingmatchingbound. pfp_gap_uniqueness_resultmatchingmatchingbound + S (pfp_i_uniqueness_resultmatchingmatching) = (l)) -> (((exists ff_h_pfp_uniqueness_resultmatchingmatchingmap. ff_h_pfp_uniqueness_resultmatchingmatchingmap + S (pfp_j_uniqueness_resultmatchingmatching) = S ((S (pfp_i_uniqueness_resultmatchingmatching)) * pfp_v_uniqueness_result)) /\ exists ff_q_pfp_uniqueness_resultmatchingmatchingmap. pfp_u_uniqueness_result = ff_q_pfp_uniqueness_resultmatchingmatchingmap * S ((S (pfp_i_uniqueness_resultmatchingmatching)) * pfp_v_uniqueness_result) + (pfp_j_uniqueness_resultmatchingmatching))) -> (((exists ff_h_pfp_uniqueness_resultmatchingmatchingsource. ff_h_pfp_uniqueness_resultmatchingmatchingsource + S (pfp_a_uniqueness_resultmatchingmatching) = S ((S (pfp_i_uniqueness_resultmatchingmatching)) * c)) /\ exists ff_q_pfp_uniqueness_resultmatchingmatchingsource. b = ff_q_pfp_uniqueness_resultmatchingmatchingsource * S ((S (pfp_i_uniqueness_resultmatchingmatching)) * c) + (pfp_a_uniqueness_resultmatchingmatching))) -> (((exists ff_h_pfp_uniqueness_resultmatchingmatchingtarget. ff_h_pfp_uniqueness_resultmatchingmatchingtarget + S (pfp_a_uniqueness_resultmatchingmatching) = S ((S (pfp_j_uniqueness_resultmatchingmatching)) * e)) /\ exists ff_q_pfp_uniqueness_resultmatchingmatchingtarget. d = ff_q_pfp_uniqueness_resultmatchingmatchingtarget * S ((S (pfp_j_uniqueness_resultmatchingmatching)) * e) + (pfp_a_uniqueness_resultmatchingmatching)))))))))Constructive proof overview
Generated structural guide
Full induction on an arbitrary source factor list: locate the last prime in the arbitrary target, genuinely swap and cancel it, recursively match the shorter lists, and construct the restored index bijection. Neither list is assumed sorted or distinct.
The unchanged tactic script uses 13 declared prerequisites and contains 227 exact native proof lines.
Alpha v34 checked-use · first admitted v28 · independently kernel and Lean verified; not Stable
Proof neighborhood
Direct dependencies
beta_product_zero Stable theorem; checked-use authorized AF000B factor_permutation_unit_length_zero AF000D factor_permutation_empty_matching AF000A factor_permutation_successor_decompose AF000C factor_permutation_prime_member mul_comm Stable theorem; checked-use authorized AF0005 factor_permutation_below_zero_impossible nonzero_is_succ Stable theorem; checked-use authorized finite_lt_succ_eq_or_lt Stable theorem; checked-use authorized AF0009 factor_permutation_cancel_last AF0011 factor_permutation_matched_append_exists AF0016 factor_permutation_swapped_factorization_exists AF0018 factor_permutation_matched_unswap_existsDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Local theorem links identify exact declared prerequisites. This exact body belongs to a complete independently kernel-checked constructive proof bundle and has Alpha checked-use authority; it does not imply Stable membership.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (9)
01Induction on lL1–9
02Establish hproductL10–10
03Separate the logical casesL11–12
04Use earlier factsL13–13
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L13
exact hA_right_left
05Establish honeL14–19
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product zero.
06Establish hlengthL20–27
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation unit length zero.
- L20
have hlength : m = 0 - L21
specialize factor_permutation_unit_length_zero (n) - L22
specialize factor_permutation_unit_length_zero (d) - L23
specialize factor_permutation_unit_length_zero (e) - L24
specialize factor_permutation_unit_length_zero (m) - L25
apply factor_permutation_unit_length_zero - L26
exact hB - L27
exact hone
07Separate the logical casesL28–28
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L28
split
08Calculate and transport equalitiesL29–29
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L29
symm
09Use earlier factsL30–30
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L30
exact hlength
10Construct an explicit witnessL31–32
11Use earlier factsL33–37
Instantiate or apply named facts and discharge the corresponding proof obligations.
12Fix variables and assumptionsL38–45
13Establish hdL46–52
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation successor decompose.
- L46
have hd : ∃ p. ∃ r. Prime(p) ∧ (BetaAt(b,c,l,p) ∧ (n = r · p ∧ PrimeFactorList(r,b,c,l)))Definitions: PrimeFactorListPrimeBetaAt - L47
specialize factor_permutation_successor_decompose (n) - L48
specialize factor_permutation_successor_decompose (b) - L49
specialize factor_permutation_successor_decompose (c) - L50
specialize factor_permutation_successor_decompose (l) - L51
apply factor_permutation_successor_decompose - L52
exact hA
14Separate the logical casesL53–57
15Establish hmemberL58–66
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation prime member.
- L58
have hmember : exists i. (exists pfp_gap_induction_member_bound. pfp_gap_induction_member_bound + S (i) = (m)) /\ (((exists ff_h_pfp_induction_member_entry. ff_h_pfp_induction_member_entry + S (x) = S ((S (i)) * e)) /\ exists ff_q_pfp_induction_member_entry. d = ff_q_pfp_induction_member_entry * S ((S (i)) * e) + (x))) - L59
specialize factor_permutation_prime_member (n) - L60
specialize factor_permutation_prime_member (d) - L61
specialize factor_permutation_prime_member (e) - L62
specialize factor_permutation_prime_member (m) - L63
specialize factor_permutation_prime_member (x) - L64
apply factor_permutation_prime_member - L65
exact hB - L66
exact hd_witness_witness_left
16Construct an explicit witnessL67–67
Supply the displayed value, then prove that it has the required property.
- L67
exists x1
17Calculate and transport equalitiesL68–68
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L68
trans x1 * x
18Use earlier factsL69–70
19Separate the logical casesL71–72
20Establish hmnonzeroL73–78
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation below zero impossible.
21Establish hpredecessorL79–82
22Separate the logical casesL83–83
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L83
cases hpredecessor
23Establish hBsuccessorL84–89
Establish this local claim before using it. It is not an additional assumption.
24Establish hboundL90–92
25Establish hpositionL93–97
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply finite lt succ eq or lt.
26Separate the logical casesL98–98
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L98
cases hposition
27Establish hlastL99–102
Establish this local claim before using it. It is not an additional assumption.
- L99
have hlast : ((exists ff_h_pfp_induction_already_last. ff_h_pfp_induction_already_last + S (x) = S ((S (x3)) * e)) /\ exists ff_q_pfp_induction_already_last. d = ff_q_pfp_induction_already_last * S ((S (x3)) * e) + (x)) - L100
rewrite hposition_left at hmember_witness_right - L101
rewrite hposition_left at hmember_witness_right - L102
exact hmember_witness_right
28Establish hprefixL103–112
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation cancel last.
- L103
have hprefix : PrimeFactorList(x1,d,e,x3)Definitions: PrimeFactorList - L104
specialize factor_permutation_cancel_last (n) - L105
specialize factor_permutation_cancel_last (x) - L106
specialize factor_permutation_cancel_last (x1) - L107
specialize factor_permutation_cancel_last (d) - L108
specialize factor_permutation_cancel_last (e) - L109
specialize factor_permutation_cancel_last (x3) - L110
apply factor_permutation_cancel_last - L111
exact hBsuccessor - L112
exact hlast
29Use earlier factsL113–113
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L113
exact hd_witness_witness_right_right_left
30Establish hrecL114–123
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L114
have hrec : l = x3 ∧ (∃ x. ∃ y. PermutationPrefix(x,y,l) ∧ FactorListMatching(b,c,d,e,x,y,l))Definitions: PermutationPrefixFactorListMatching - L115
specialize IH (x1) - L116
specialize IH (b) - L117
specialize IH (c) - L118
specialize IH (x3) - L119
specialize IH (d) - L120
specialize IH (e) - L121
apply IH - L122
exact hd_witness_witness_right_right_right - L123
exact hprefix
31Separate the logical casesL124–126
32Establish hlastalignedL127–130
Establish this local claim before using it. It is not an additional assumption.
- L127
have hlastaligned : ((exists ff_h_pfp_induction_direct_aligned_last. ff_h_pfp_induction_direct_aligned_last + S (x) = S ((S (l)) * e)) /\ exists ff_q_pfp_induction_direct_aligned_last. d = ff_q_pfp_induction_direct_aligned_last * S ((S (l)) * e) + (x)) - L128
rewrite hrec_left - L129
rewrite hrec_left - L130
exact hlast
33Separate the logical casesL131–131
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L131
split
34Calculate and transport equalitiesL132–133
35Use earlier factsL134–134
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L134
exact hrec_left
36Calculate and transport equalitiesL135–135
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L135
symm
37Use earlier factsL136–145
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L136
exact hpredecessor_witness - L137
specialize factor_permutation_matched_append_exists (b) - L138
specialize factor_permutation_matched_append_exists (c) - L139
specialize factor_permutation_matched_append_exists (d) - L140
specialize factor_permutation_matched_append_exists (e) - L141
specialize factor_permutation_matched_append_exists (x4) - L142
specialize factor_permutation_matched_append_exists (x5) - L143
specialize factor_permutation_matched_append_exists (l) - L144
specialize factor_permutation_matched_append_exists (x) - L145
apply factor_permutation_matched_append_exists
38Use earlier factsL146–148
39Establish hswapL149–158
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation swapped factorization exists.
- L149
have hswap : ∃ B. ∃ C. ∃ q. PrimeFactorList(n,B,C,S x3) ∧ (BetaAt(d,e,x2,x) ∧ (BetaAt(d,e,x3,q) ∧ (BetaAt(B,C,x2,q) ∧ (BetaAt(B,C,x3,x) ∧ (∀ y. ∀ z. Lt(y,S x3) → ¬y = x2 → ¬y = x3 → BetaAt(d,e,y,z) → BetaAt(B,C,y,z))))))Definitions: PrimeFactorListLtBetaAt - L150
specialize factor_permutation_swapped_factorization_exists (n) - L151
specialize factor_permutation_swapped_factorization_exists (d) - L152
specialize factor_permutation_swapped_factorization_exists (e) - L153
specialize factor_permutation_swapped_factorization_exists (x3) - L154
specialize factor_permutation_swapped_factorization_exists (x2) - L155
specialize factor_permutation_swapped_factorization_exists (x) - L156
apply factor_permutation_swapped_factorization_exists - L157
exact hBsuccessor - L158
exact hposition_right
40Use earlier factsL159–159
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L159
exact hmember_witness_right
41Separate the logical casesL160–163
42Establish hlastL164–164
Establish this local claim before using it. It is not an additional assumption.
- L164
have hlast : ((exists ff_h_pfp_induction_recoded_last. ff_h_pfp_induction_recoded_last + S (x) = S ((S (x3)) * x5)) /\ exists ff_q_pfp_induction_recoded_last. x4 = ff_q_pfp_induction_recoded_last * S ((S (x3)) * x5) + (x))
43Separate the logical casesL165–168
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
44Use earlier factsL169–169
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L169
exact hswap_witness_witness_witness_right_right_right_right_left
45Establish hprefixL170–179
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factor permutation cancel last.
- L170
have hprefix : PrimeFactorList(x1,x4,x5,x3)Definitions: PrimeFactorList - L171
specialize factor_permutation_cancel_last (n) - L172
specialize factor_permutation_cancel_last (x) - L173
specialize factor_permutation_cancel_last (x1) - L174
specialize factor_permutation_cancel_last (x4) - L175
specialize factor_permutation_cancel_last (x5) - L176
specialize factor_permutation_cancel_last (x3) - L177
apply factor_permutation_cancel_last - L178
exact hswap_witness_witness_witness_left - L179
exact hlast
46Use earlier factsL180–180
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L180
exact hd_witness_witness_right_right_left
47Establish hrecL181–190
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
- L181
have hrec : l = x3 ∧ (∃ x. ∃ y. PermutationPrefix(x,y,l) ∧ FactorListMatching(b,c,x4,x5,x,y,l))Definitions: PermutationPrefixFactorListMatching - L182
specialize IH (x1) - L183
specialize IH (b) - L184
specialize IH (c) - L185
specialize IH (x3) - L186
specialize IH (x4) - L187
specialize IH (x5) - L188
apply IH - L189
exact hd_witness_witness_right_right_right - L190
exact hprefix
48Separate the logical casesL191–193
49Establish hpivotL194–196
50Establish hswapalignedL197–204
Establish this local claim before using it. It is not an additional assumption.
51Separate the logical casesL205–205
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L205
split
52Calculate and transport equalitiesL206–207
53Use earlier factsL208–208
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L208
exact hrec_left
54Calculate and transport equalitiesL209–209
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L209
symm
55Use earlier factsL210–219
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L210
exact hpredecessor_witness - L211
specialize factor_permutation_matched_unswap_exists (b) - L212
specialize factor_permutation_matched_unswap_exists (c) - L213
specialize factor_permutation_matched_unswap_exists (d) - L214
specialize factor_permutation_matched_unswap_exists (e) - L215
specialize factor_permutation_matched_unswap_exists (x4) - L216
specialize factor_permutation_matched_unswap_exists (x5) - L217
specialize factor_permutation_matched_unswap_exists (x7) - L218
specialize factor_permutation_matched_unswap_exists (x8) - L219
specialize factor_permutation_matched_unswap_exists (l)
56Use earlier factsL220–227
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L220
specialize factor_permutation_matched_unswap_exists (x2) - L221
specialize factor_permutation_matched_unswap_exists (x) - L222
specialize factor_permutation_matched_unswap_exists (x6) - L223
apply factor_permutation_matched_unswap_exists - L224
exact hpivot - L225
exact hrec_right_witness_witness - L226
exact hd_witness_witness_right_left - L227
exact hswapaligned
Original exact command ledger · 227 lines
- 0001
induction l - 0002
intro n - 0003
intro b - 0004
intro c - 0005
intro m - 0006
intro d - 0007
intro e - 0008
intro hA - 0009
intro hB - 0010
have hproduct : exists ff_u_fsat_zero_source_product ff_v_fsat_zero_source_product. ((((exists ff_h_fsat_zero_source_product_start. ff_h_fsat_zero_source_product_start + S (1) = S ((S (0)) * ff_v_fsat_zero_source_product)) /\ exists ff_q_fsat_zero_source_product_start. ff_u_fsat_zero_source_product = ff_q_fsat_zero_source_product_start * S ((S (0)) * ff_v_fsat_zero_source_product) + (1))) /\ ((((exists ff_h_fsat_zero_source_product_terminal. ff_h_fsat_zero_source_product_terminal + S (n) = S ((S (0)) * ff_v_fsat_zero_source_product)) /\ exists ff_q_fsat_zero_source_product_terminal. ff_u_fsat_zero_source_product = ff_q_fsat_zero_source_product_terminal * S ((S (0)) * ff_v_fsat_zero_source_product) + (n))) /\ forall ff_i_fsat_zero_source_product. (exists ff_lt_fsat_zero_source_product_bound. ff_lt_fsat_zero_source_product_bound + S ff_i_fsat_zero_source_product = 0) -> exists ff_p_fsat_zero_source_product ff_r_fsat_zero_source_product ff_s_fsat_zero_source_product. ((((exists ff_h_fsat_zero_source_product_factor. ff_h_fsat_zero_source_product_factor + S (ff_p_fsat_zero_source_product) = S ((S (ff_i_fsat_zero_source_product)) * c)) /\ exists ff_q_fsat_zero_source_product_factor. b = ff_q_fsat_zero_source_product_factor * S ((S (ff_i_fsat_zero_source_product)) * c) + (ff_p_fsat_zero_source_product))) /\ ((((exists ff_h_fsat_zero_source_product_partial. ff_h_fsat_zero_source_product_partial + S (ff_r_fsat_zero_source_product) = S ((S (ff_i_fsat_zero_source_product)) * ff_v_fsat_zero_source_product)) /\ exists ff_q_fsat_zero_source_product_partial. ff_u_fsat_zero_source_product = ff_q_fsat_zero_source_product_partial * S ((S (ff_i_fsat_zero_source_product)) * ff_v_fsat_zero_source_product) + (ff_r_fsat_zero_source_product))) /\ ((((exists ff_h_fsat_zero_source_product_successor. ff_h_fsat_zero_source_product_successor + S (ff_s_fsat_zero_source_product) = S ((S (S ff_i_fsat_zero_source_product)) * ff_v_fsat_zero_source_product)) /\ exists ff_q_fsat_zero_source_product_successor. ff_u_fsat_zero_source_product = ff_q_fsat_zero_source_product_successor * S ((S (S ff_i_fsat_zero_source_product)) * ff_v_fsat_zero_source_product) + (ff_s_fsat_zero_source_product))) /\ ff_s_fsat_zero_source_product = ff_r_fsat_zero_source_product * ff_p_fsat_zero_source_product))))) - 0011
cases hA - 0012
cases hA_right - 0013
exact hA_right_left - 0014
have hone : n = 1 - 0015
specialize beta_product_zero (b) - 0016
specialize beta_product_zero (c) - 0017
specialize beta_product_zero (n) - 0018
apply beta_product_zero - 0019
exact hproduct - 0020
have hlength : m = 0 - 0021
specialize factor_permutation_unit_length_zero (n) - 0022
specialize factor_permutation_unit_length_zero (d) - 0023
specialize factor_permutation_unit_length_zero (e) - 0024
specialize factor_permutation_unit_length_zero (m) - 0025
apply factor_permutation_unit_length_zero - 0026
exact hB - 0027
exact hone - 0028
split - 0029
symm - 0030
exact hlength - 0031
exists 0 - 0032
exists 0 - 0033
specialize factor_permutation_empty_matching (b) - 0034
specialize factor_permutation_empty_matching (c) - 0035
specialize factor_permutation_empty_matching (d) - 0036
specialize factor_permutation_empty_matching (e) - 0037
apply factor_permutation_empty_matching - 0038
intro n - 0039
intro b - 0040
intro c - 0041
intro m - 0042
intro d - 0043
intro e - 0044
intro hA - 0045
intro hB - 0046
have hd : exists p r. ((((~(p = 1) /\ forall frm_prime_left_pfp_induction_prime frm_prime_right_pfp_induction_prime. p = frm_prime_left_pfp_induction_prime * frm_prime_right_pfp_induction_prime -> frm_prime_left_pfp_induction_prime = 1 \/ frm_prime_right_pfp_induction_prime = 1)) /\ (((((exists ff_h_pfp_induction_last. ff_h_pfp_induction_last + S (p) = S ((S (l)) * c)) /\ exists ff_q_pfp_induction_last. b = ff_q_pfp_induction_last * S ((S (l)) * c) + (p))) /\ (((n = r * p) /\ ((~(r = 0) /\ ((exists ff_u_fsat_induction_source_prefix_product ff_v_fsat_induction_source_prefix_product. ((((exists ff_h_fsat_induction_source_prefix_product_start. ff_h_fsat_induction_source_prefix_product_start + S (1) = S ((S (0)) * ff_v_fsat_induction_source_prefix_product)) /\ exists ff_q_fsat_induction_source_prefix_product_start. ff_u_fsat_induction_source_prefix_product = ff_q_fsat_induction_source_prefix_product_start * S ((S (0)) * ff_v_fsat_induction_source_prefix_product) + (1))) /\ ((((exists ff_h_fsat_induction_source_prefix_product_terminal. ff_h_fsat_induction_source_prefix_product_terminal + S (r) = S ((S (l)) * ff_v_fsat_induction_source_prefix_product)) /\ exists ff_q_fsat_induction_source_prefix_product_terminal. ff_u_fsat_induction_source_prefix_product = ff_q_fsat_induction_source_prefix_product_terminal * S ((S (l)) * ff_v_fsat_induction_source_prefix_product) + (r))) /\ forall ff_i_fsat_induction_source_prefix_product. (exists ff_lt_fsat_induction_source_prefix_product_bound. ff_lt_fsat_induction_source_prefix_product_bound + S ff_i_fsat_induction_source_prefix_product = l) -> exists ff_p_fsat_induction_source_prefix_product ff_r_fsat_induction_source_prefix_product ff_s_fsat_induction_source_prefix_product. ((((exists ff_h_fsat_induction_source_prefix_product_factor. ff_h_fsat_induction_source_prefix_product_factor + S (ff_p_fsat_induction_source_prefix_product) = S ((S (ff_i_fsat_induction_source_prefix_product)) * c)) /\ exists ff_q_fsat_induction_source_prefix_product_factor. b = ff_q_fsat_induction_source_prefix_product_factor * S ((S (ff_i_fsat_induction_source_prefix_product)) * c) + (ff_p_fsat_induction_source_prefix_product))) /\ ((((exists ff_h_fsat_induction_source_prefix_product_partial. ff_h_fsat_induction_source_prefix_product_partial + S (ff_r_fsat_induction_source_prefix_product) = S ((S (ff_i_fsat_induction_source_prefix_product)) * ff_v_fsat_induction_source_prefix_product)) /\ exists ff_q_fsat_induction_source_prefix_product_partial. ff_u_fsat_induction_source_prefix_product = ff_q_fsat_induction_source_prefix_product_partial * S ((S (ff_i_fsat_induction_source_prefix_product)) * ff_v_fsat_induction_source_prefix_product) + (ff_r_fsat_induction_source_prefix_product))) /\ ((((exists ff_h_fsat_induction_source_prefix_product_successor. ff_h_fsat_induction_source_prefix_product_successor + S (ff_s_fsat_induction_source_prefix_product) = S ((S (S ff_i_fsat_induction_source_prefix_product)) * ff_v_fsat_induction_source_prefix_product)) /\ exists ff_q_fsat_induction_source_prefix_product_successor. ff_u_fsat_induction_source_prefix_product = ff_q_fsat_induction_source_prefix_product_successor * S ((S (S ff_i_fsat_induction_source_prefix_product)) * ff_v_fsat_induction_source_prefix_product) + (ff_s_fsat_induction_source_prefix_product))) /\ ff_s_fsat_induction_source_prefix_product = ff_r_fsat_induction_source_prefix_product * ff_p_fsat_induction_source_prefix_product)))))) /\ (forall ftsf_index_fsat_induction_source_prefix_primes. (exists ftsf_gap_fsat_induction_source_prefix_primes_bound. ftsf_gap_fsat_induction_source_prefix_primes_bound + S ftsf_index_fsat_induction_source_prefix_primes = (l)) -> exists ftsf_factor_fsat_induction_source_prefix_primes. ((((exists ff_h_ftsf_fsat_induction_source_prefix_primes_entry. ff_h_ftsf_fsat_induction_source_prefix_primes_entry + S (ftsf_factor_fsat_induction_source_prefix_primes) = S ((S (ftsf_index_fsat_induction_source_prefix_primes)) * c)) /\ exists ff_q_ftsf_fsat_induction_source_prefix_primes_entry. b = ff_q_ftsf_fsat_induction_source_prefix_primes_entry * S ((S (ftsf_index_fsat_induction_source_prefix_primes)) * c) + (ftsf_factor_fsat_induction_source_prefix_primes))) /\ ((~(ftsf_factor_fsat_induction_source_prefix_primes = 1) /\ forall frm_prime_left_ftsf_fsat_induction_source_prefix_primes_prime frm_prime_right_ftsf_fsat_induction_source_prefix_primes_prime. ftsf_factor_fsat_induction_source_prefix_primes = frm_prime_left_ftsf_fsat_induction_source_prefix_primes_prime * frm_prime_right_ftsf_fsat_induction_source_prefix_primes_prime -> frm_prime_left_ftsf_fsat_induction_source_prefix_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_induction_source_prefix_primes_prime = 1))))))))))))) - 0047
specialize factor_permutation_successor_decompose (n) - 0048
specialize factor_permutation_successor_decompose (b) - 0049
specialize factor_permutation_successor_decompose (c) - 0050
specialize factor_permutation_successor_decompose (l) - 0051
apply factor_permutation_successor_decompose - 0052
exact hA - 0053
cases hd - 0054
cases hd_witness - 0055
cases hd_witness_witness - 0056
cases hd_witness_witness_right - 0057
cases hd_witness_witness_right_right - 0058
have hmember : exists i. (exists pfp_gap_induction_member_bound. pfp_gap_induction_member_bound + S (i) = (m)) /\ (((exists ff_h_pfp_induction_member_entry. ff_h_pfp_induction_member_entry + S (x) = S ((S (i)) * e)) /\ exists ff_q_pfp_induction_member_entry. d = ff_q_pfp_induction_member_entry * S ((S (i)) * e) + (x))) - 0059
specialize factor_permutation_prime_member (n) - 0060
specialize factor_permutation_prime_member (d) - 0061
specialize factor_permutation_prime_member (e) - 0062
specialize factor_permutation_prime_member (m) - 0063
specialize factor_permutation_prime_member (x) - 0064
apply factor_permutation_prime_member - 0065
exact hB - 0066
exact hd_witness_witness_left - 0067
exists x1 - 0068
trans x1 * x - 0069
exact hd_witness_witness_right_right_left - 0070
apply mul_comm - 0071
cases hmember - 0072
cases hmember_witness - 0073
have hmnonzero : ~(m = 0) - 0074
intro hzero - 0075
specialize factor_permutation_below_zero_impossible (x2) - 0076
apply factor_permutation_below_zero_impossible - 0077
rewrite hzero at hmember_witness_left - 0078
exact hmember_witness_left - 0079
have hpredecessor : exists t. m = S t - 0080
specialize nonzero_is_succ (m) - 0081
apply nonzero_is_succ - 0082
exact hmnonzero - 0083
cases hpredecessor - 0084
have hBsuccessor : (~(n = 0) /\ ((exists ff_u_fsat_induction_target_successor_product ff_v_fsat_induction_target_successor_product. ((((exists ff_h_fsat_induction_target_successor_product_start. ff_h_fsat_induction_target_successor_product_start + S (1) = S ((S (0)) * ff_v_fsat_induction_target_successor_product)) /\ exists ff_q_fsat_induction_target_successor_product_start. ff_u_fsat_induction_target_successor_product = ff_q_fsat_induction_target_successor_product_start * S ((S (0)) * ff_v_fsat_induction_target_successor_product) + (1))) /\ ((((exists ff_h_fsat_induction_target_successor_product_terminal. ff_h_fsat_induction_target_successor_product_terminal + S (n) = S ((S (S x3)) * ff_v_fsat_induction_target_successor_product)) /\ exists ff_q_fsat_induction_target_successor_product_terminal. ff_u_fsat_induction_target_successor_product = ff_q_fsat_induction_target_successor_product_terminal * S ((S (S x3)) * ff_v_fsat_induction_target_successor_product) + (n))) /\ forall ff_i_fsat_induction_target_successor_product. (exists ff_lt_fsat_induction_target_successor_product_bound. ff_lt_fsat_induction_target_successor_product_bound + S ff_i_fsat_induction_target_successor_product = S x3) -> exists ff_p_fsat_induction_target_successor_product ff_r_fsat_induction_target_successor_product ff_s_fsat_induction_target_successor_product. ((((exists ff_h_fsat_induction_target_successor_product_factor. ff_h_fsat_induction_target_successor_product_factor + S (ff_p_fsat_induction_target_successor_product) = S ((S (ff_i_fsat_induction_target_successor_product)) * e)) /\ exists ff_q_fsat_induction_target_successor_product_factor. d = ff_q_fsat_induction_target_successor_product_factor * S ((S (ff_i_fsat_induction_target_successor_product)) * e) + (ff_p_fsat_induction_target_successor_product))) /\ ((((exists ff_h_fsat_induction_target_successor_product_partial. ff_h_fsat_induction_target_successor_product_partial + S (ff_r_fsat_induction_target_successor_product) = S ((S (ff_i_fsat_induction_target_successor_product)) * ff_v_fsat_induction_target_successor_product)) /\ exists ff_q_fsat_induction_target_successor_product_partial. ff_u_fsat_induction_target_successor_product = ff_q_fsat_induction_target_successor_product_partial * S ((S (ff_i_fsat_induction_target_successor_product)) * ff_v_fsat_induction_target_successor_product) + (ff_r_fsat_induction_target_successor_product))) /\ ((((exists ff_h_fsat_induction_target_successor_product_successor. ff_h_fsat_induction_target_successor_product_successor + S (ff_s_fsat_induction_target_successor_product) = S ((S (S ff_i_fsat_induction_target_successor_product)) * ff_v_fsat_induction_target_successor_product)) /\ exists ff_q_fsat_induction_target_successor_product_successor. ff_u_fsat_induction_target_successor_product = ff_q_fsat_induction_target_successor_product_successor * S ((S (S ff_i_fsat_induction_target_successor_product)) * ff_v_fsat_induction_target_successor_product) + (ff_s_fsat_induction_target_successor_product))) /\ ff_s_fsat_induction_target_successor_product = ff_r_fsat_induction_target_successor_product * ff_p_fsat_induction_target_successor_product)))))) /\ (forall ftsf_index_fsat_induction_target_successor_primes. (exists ftsf_gap_fsat_induction_target_successor_primes_bound. ftsf_gap_fsat_induction_target_successor_primes_bound + S ftsf_index_fsat_induction_target_successor_primes = (S x3)) -> exists ftsf_factor_fsat_induction_target_successor_primes. ((((exists ff_h_ftsf_fsat_induction_target_successor_primes_entry. ff_h_ftsf_fsat_induction_target_successor_primes_entry + S (ftsf_factor_fsat_induction_target_successor_primes) = S ((S (ftsf_index_fsat_induction_target_successor_primes)) * e)) /\ exists ff_q_ftsf_fsat_induction_target_successor_primes_entry. d = ff_q_ftsf_fsat_induction_target_successor_primes_entry * S ((S (ftsf_index_fsat_induction_target_successor_primes)) * e) + (ftsf_factor_fsat_induction_target_successor_primes))) /\ ((~(ftsf_factor_fsat_induction_target_successor_primes = 1) /\ forall frm_prime_left_ftsf_fsat_induction_target_successor_primes_prime frm_prime_right_ftsf_fsat_induction_target_successor_primes_prime. ftsf_factor_fsat_induction_target_successor_primes = frm_prime_left_ftsf_fsat_induction_target_successor_primes_prime * frm_prime_right_ftsf_fsat_induction_target_successor_primes_prime -> frm_prime_left_ftsf_fsat_induction_target_successor_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_induction_target_successor_primes_prime = 1)))))) - 0085
rewrite hpredecessor_witness at hB - 0086
rewrite hpredecessor_witness at hB - 0087
rewrite hpredecessor_witness at hB - 0088
rewrite hpredecessor_witness at hB - 0089
exact hB - 0090
have hbound : exists pfp_gap_induction_target_index. pfp_gap_induction_target_index + S (x2) = (S x3) - 0091
rewrite hpredecessor_witness at hmember_witness_left - 0092
exact hmember_witness_left - 0093
have hposition : x2 = x3 \/ (exists pfp_gap_induction_target_position. pfp_gap_induction_target_position + S (x2) = (x3)) - 0094
specialize finite_lt_succ_eq_or_lt (x3) - 0095
specialize finite_lt_succ_eq_or_lt (x2) - 0096
apply finite_lt_succ_eq_or_lt - 0097
exact hbound - 0098
cases hposition - 0099
have hlast : ((exists ff_h_pfp_induction_already_last. ff_h_pfp_induction_already_last + S (x) = S ((S (x3)) * e)) /\ exists ff_q_pfp_induction_already_last. d = ff_q_pfp_induction_already_last * S ((S (x3)) * e) + (x)) - 0100
rewrite hposition_left at hmember_witness_right - 0101
rewrite hposition_left at hmember_witness_right - 0102
exact hmember_witness_right - 0103
have hprefix : (~(x1 = 0) /\ ((exists ff_u_fsat_induction_direct_prefix_product ff_v_fsat_induction_direct_prefix_product. ((((exists ff_h_fsat_induction_direct_prefix_product_start. ff_h_fsat_induction_direct_prefix_product_start + S (1) = S ((S (0)) * ff_v_fsat_induction_direct_prefix_product)) /\ exists ff_q_fsat_induction_direct_prefix_product_start. ff_u_fsat_induction_direct_prefix_product = ff_q_fsat_induction_direct_prefix_product_start * S ((S (0)) * ff_v_fsat_induction_direct_prefix_product) + (1))) /\ ((((exists ff_h_fsat_induction_direct_prefix_product_terminal. ff_h_fsat_induction_direct_prefix_product_terminal + S (x1) = S ((S (x3)) * ff_v_fsat_induction_direct_prefix_product)) /\ exists ff_q_fsat_induction_direct_prefix_product_terminal. ff_u_fsat_induction_direct_prefix_product = ff_q_fsat_induction_direct_prefix_product_terminal * S ((S (x3)) * ff_v_fsat_induction_direct_prefix_product) + (x1))) /\ forall ff_i_fsat_induction_direct_prefix_product. (exists ff_lt_fsat_induction_direct_prefix_product_bound. ff_lt_fsat_induction_direct_prefix_product_bound + S ff_i_fsat_induction_direct_prefix_product = x3) -> exists ff_p_fsat_induction_direct_prefix_product ff_r_fsat_induction_direct_prefix_product ff_s_fsat_induction_direct_prefix_product. ((((exists ff_h_fsat_induction_direct_prefix_product_factor. ff_h_fsat_induction_direct_prefix_product_factor + S (ff_p_fsat_induction_direct_prefix_product) = S ((S (ff_i_fsat_induction_direct_prefix_product)) * e)) /\ exists ff_q_fsat_induction_direct_prefix_product_factor. d = ff_q_fsat_induction_direct_prefix_product_factor * S ((S (ff_i_fsat_induction_direct_prefix_product)) * e) + (ff_p_fsat_induction_direct_prefix_product))) /\ ((((exists ff_h_fsat_induction_direct_prefix_product_partial. ff_h_fsat_induction_direct_prefix_product_partial + S (ff_r_fsat_induction_direct_prefix_product) = S ((S (ff_i_fsat_induction_direct_prefix_product)) * ff_v_fsat_induction_direct_prefix_product)) /\ exists ff_q_fsat_induction_direct_prefix_product_partial. ff_u_fsat_induction_direct_prefix_product = ff_q_fsat_induction_direct_prefix_product_partial * S ((S (ff_i_fsat_induction_direct_prefix_product)) * ff_v_fsat_induction_direct_prefix_product) + (ff_r_fsat_induction_direct_prefix_product))) /\ ((((exists ff_h_fsat_induction_direct_prefix_product_successor. ff_h_fsat_induction_direct_prefix_product_successor + S (ff_s_fsat_induction_direct_prefix_product) = S ((S (S ff_i_fsat_induction_direct_prefix_product)) * ff_v_fsat_induction_direct_prefix_product)) /\ exists ff_q_fsat_induction_direct_prefix_product_successor. ff_u_fsat_induction_direct_prefix_product = ff_q_fsat_induction_direct_prefix_product_successor * S ((S (S ff_i_fsat_induction_direct_prefix_product)) * ff_v_fsat_induction_direct_prefix_product) + (ff_s_fsat_induction_direct_prefix_product))) /\ ff_s_fsat_induction_direct_prefix_product = ff_r_fsat_induction_direct_prefix_product * ff_p_fsat_induction_direct_prefix_product)))))) /\ (forall ftsf_index_fsat_induction_direct_prefix_primes. (exists ftsf_gap_fsat_induction_direct_prefix_primes_bound. ftsf_gap_fsat_induction_direct_prefix_primes_bound + S ftsf_index_fsat_induction_direct_prefix_primes = (x3)) -> exists ftsf_factor_fsat_induction_direct_prefix_primes. ((((exists ff_h_ftsf_fsat_induction_direct_prefix_primes_entry. ff_h_ftsf_fsat_induction_direct_prefix_primes_entry + S (ftsf_factor_fsat_induction_direct_prefix_primes) = S ((S (ftsf_index_fsat_induction_direct_prefix_primes)) * e)) /\ exists ff_q_ftsf_fsat_induction_direct_prefix_primes_entry. d = ff_q_ftsf_fsat_induction_direct_prefix_primes_entry * S ((S (ftsf_index_fsat_induction_direct_prefix_primes)) * e) + (ftsf_factor_fsat_induction_direct_prefix_primes))) /\ ((~(ftsf_factor_fsat_induction_direct_prefix_primes = 1) /\ forall frm_prime_left_ftsf_fsat_induction_direct_prefix_primes_prime frm_prime_right_ftsf_fsat_induction_direct_prefix_primes_prime. ftsf_factor_fsat_induction_direct_prefix_primes = frm_prime_left_ftsf_fsat_induction_direct_prefix_primes_prime * frm_prime_right_ftsf_fsat_induction_direct_prefix_primes_prime -> frm_prime_left_ftsf_fsat_induction_direct_prefix_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_induction_direct_prefix_primes_prime = 1)))))) - 0104
specialize factor_permutation_cancel_last (n) - 0105
specialize factor_permutation_cancel_last (x) - 0106
specialize factor_permutation_cancel_last (x1) - 0107
specialize factor_permutation_cancel_last (d) - 0108
specialize factor_permutation_cancel_last (e) - 0109
specialize factor_permutation_cancel_last (x3) - 0110
apply factor_permutation_cancel_last - 0111
exact hBsuccessor - 0112
exact hlast - 0113
exact hd_witness_witness_right_right_left - 0114
have hrec : ((l = x3) /\ (exists pfp_u_induction_direct_recursion pfp_v_induction_direct_recursion. (((((forall pfp_i_induction_direct_recursionmatchingpermutationbounded. (exists pfp_gap_induction_direct_recursionmatchingpermutationboundedindex. pfp_gap_induction_direct_recursionmatchingpermutationboundedindex + S (pfp_i_induction_direct_recursionmatchingpermutationbounded) = (l)) -> exists pfp_a_induction_direct_recursionmatchingpermutationbounded. (((exists ff_h_pfp_induction_direct_recursionmatchingpermutationboundedentry. ff_h_pfp_induction_direct_recursionmatchingpermutationboundedentry + S (pfp_a_induction_direct_recursionmatchingpermutationbounded) = S ((S (pfp_i_induction_direct_recursionmatchingpermutationbounded)) * pfp_v_induction_direct_recursion)) /\ exists ff_q_pfp_induction_direct_recursionmatchingpermutationboundedentry. pfp_u_induction_direct_recursion = ff_q_pfp_induction_direct_recursionmatchingpermutationboundedentry * S ((S (pfp_i_induction_direct_recursionmatchingpermutationbounded)) * pfp_v_induction_direct_recursion) + (pfp_a_induction_direct_recursionmatchingpermutationbounded))) /\ (exists pfp_gap_induction_direct_recursionmatchingpermutationboundedvalue. pfp_gap_induction_direct_recursionmatchingpermutationboundedvalue + S (pfp_a_induction_direct_recursionmatchingpermutationbounded) = (l))) /\ (((forall pfp_i_induction_direct_recursionmatchingpermutationinjective pfp_j_induction_direct_recursionmatchingpermutationinjective pfp_a_induction_direct_recursionmatchingpermutationinjective. (exists pfp_gap_induction_direct_recursionmatchingpermutationinjectivefirst. pfp_gap_induction_direct_recursionmatchingpermutationinjectivefirst + S (pfp_i_induction_direct_recursionmatchingpermutationinjective) = (l)) -> (exists pfp_gap_induction_direct_recursionmatchingpermutationinjectivesecond. pfp_gap_induction_direct_recursionmatchingpermutationinjectivesecond + S (pfp_j_induction_direct_recursionmatchingpermutationinjective) = (l)) -> (((exists ff_h_pfp_induction_direct_recursionmatchingpermutationinjectiveleft. ff_h_pfp_induction_direct_recursionmatchingpermutationinjectiveleft + S (pfp_a_induction_direct_recursionmatchingpermutationinjective) = S ((S (pfp_i_induction_direct_recursionmatchingpermutationinjective)) * pfp_v_induction_direct_recursion)) /\ exists ff_q_pfp_induction_direct_recursionmatchingpermutationinjectiveleft. pfp_u_induction_direct_recursion = ff_q_pfp_induction_direct_recursionmatchingpermutationinjectiveleft * S ((S (pfp_i_induction_direct_recursionmatchingpermutationinjective)) * pfp_v_induction_direct_recursion) + (pfp_a_induction_direct_recursionmatchingpermutationinjective))) -> (((exists ff_h_pfp_induction_direct_recursionmatchingpermutationinjectiveright. ff_h_pfp_induction_direct_recursionmatchingpermutationinjectiveright + S (pfp_a_induction_direct_recursionmatchingpermutationinjective) = S ((S (pfp_j_induction_direct_recursionmatchingpermutationinjective)) * pfp_v_induction_direct_recursion)) /\ exists ff_q_pfp_induction_direct_recursionmatchingpermutationinjectiveright. pfp_u_induction_direct_recursion = ff_q_pfp_induction_direct_recursionmatchingpermutationinjectiveright * S ((S (pfp_j_induction_direct_recursionmatchingpermutationinjective)) * pfp_v_induction_direct_recursion) + (pfp_a_induction_direct_recursionmatchingpermutationinjective))) -> pfp_i_induction_direct_recursionmatchingpermutationinjective = pfp_j_induction_direct_recursionmatchingpermutationinjective) /\ (forall pfp_a_induction_direct_recursionmatchingpermutationsurjective. (exists pfp_gap_induction_direct_recursionmatchingpermutationsurjectivevalue. pfp_gap_induction_direct_recursionmatchingpermutationsurjectivevalue + S (pfp_a_induction_direct_recursionmatchingpermutationsurjective) = (l)) -> exists pfp_i_induction_direct_recursionmatchingpermutationsurjective. (exists pfp_gap_induction_direct_recursionmatchingpermutationsurjectiveindex. pfp_gap_induction_direct_recursionmatchingpermutationsurjectiveindex + S (pfp_i_induction_direct_recursionmatchingpermutationsurjective) = (l)) /\ (((exists ff_h_pfp_induction_direct_recursionmatchingpermutationsurjectiveentry. ff_h_pfp_induction_direct_recursionmatchingpermutationsurjectiveentry + S (pfp_a_induction_direct_recursionmatchingpermutationsurjective) = S ((S (pfp_i_induction_direct_recursionmatchingpermutationsurjective)) * pfp_v_induction_direct_recursion)) /\ exists ff_q_pfp_induction_direct_recursionmatchingpermutationsurjectiveentry. pfp_u_induction_direct_recursion = ff_q_pfp_induction_direct_recursionmatchingpermutationsurjectiveentry * S ((S (pfp_i_induction_direct_recursionmatchingpermutationsurjective)) * pfp_v_induction_direct_recursion) + (pfp_a_induction_direct_recursionmatchingpermutationsurjective)))))))) /\ (forall pfp_i_induction_direct_recursionmatchingmatching pfp_j_induction_direct_recursionmatchingmatching pfp_a_induction_direct_recursionmatchingmatching. (exists pfp_gap_induction_direct_recursionmatchingmatchingbound. pfp_gap_induction_direct_recursionmatchingmatchingbound + S (pfp_i_induction_direct_recursionmatchingmatching) = (l)) -> (((exists ff_h_pfp_induction_direct_recursionmatchingmatchingmap. ff_h_pfp_induction_direct_recursionmatchingmatchingmap + S (pfp_j_induction_direct_recursionmatchingmatching) = S ((S (pfp_i_induction_direct_recursionmatchingmatching)) * pfp_v_induction_direct_recursion)) /\ exists ff_q_pfp_induction_direct_recursionmatchingmatchingmap. pfp_u_induction_direct_recursion = ff_q_pfp_induction_direct_recursionmatchingmatchingmap * S ((S (pfp_i_induction_direct_recursionmatchingmatching)) * pfp_v_induction_direct_recursion) + (pfp_j_induction_direct_recursionmatchingmatching))) -> (((exists ff_h_pfp_induction_direct_recursionmatchingmatchingsource. ff_h_pfp_induction_direct_recursionmatchingmatchingsource + S (pfp_a_induction_direct_recursionmatchingmatching) = S ((S (pfp_i_induction_direct_recursionmatchingmatching)) * c)) /\ exists ff_q_pfp_induction_direct_recursionmatchingmatchingsource. b = ff_q_pfp_induction_direct_recursionmatchingmatchingsource * S ((S (pfp_i_induction_direct_recursionmatchingmatching)) * c) + (pfp_a_induction_direct_recursionmatchingmatching))) -> (((exists ff_h_pfp_induction_direct_recursionmatchingmatchingtarget. ff_h_pfp_induction_direct_recursionmatchingmatchingtarget + S (pfp_a_induction_direct_recursionmatchingmatching) = S ((S (pfp_j_induction_direct_recursionmatchingmatching)) * e)) /\ exists ff_q_pfp_induction_direct_recursionmatchingmatchingtarget. d = ff_q_pfp_induction_direct_recursionmatchingmatchingtarget * S ((S (pfp_j_induction_direct_recursionmatchingmatching)) * e) + (pfp_a_induction_direct_recursionmatchingmatching)))))))) - 0115
specialize IH (x1) - 0116
specialize IH (b) - 0117
specialize IH (c) - 0118
specialize IH (x3) - 0119
specialize IH (d) - 0120
specialize IH (e) - 0121
apply IH - 0122
exact hd_witness_witness_right_right_right - 0123
exact hprefix - 0124
cases hrec - 0125
cases hrec_right - 0126
cases hrec_right_witness - 0127
have hlastaligned : ((exists ff_h_pfp_induction_direct_aligned_last. ff_h_pfp_induction_direct_aligned_last + S (x) = S ((S (l)) * e)) /\ exists ff_q_pfp_induction_direct_aligned_last. d = ff_q_pfp_induction_direct_aligned_last * S ((S (l)) * e) + (x)) - 0128
rewrite hrec_left - 0129
rewrite hrec_left - 0130
exact hlast - 0131
split - 0132
trans S x3 - 0133
congr - 0134
exact hrec_left - 0135
symm - 0136
exact hpredecessor_witness - 0137
specialize factor_permutation_matched_append_exists (b) - 0138
specialize factor_permutation_matched_append_exists (c) - 0139
specialize factor_permutation_matched_append_exists (d) - 0140
specialize factor_permutation_matched_append_exists (e) - 0141
specialize factor_permutation_matched_append_exists (x4) - 0142
specialize factor_permutation_matched_append_exists (x5) - 0143
specialize factor_permutation_matched_append_exists (l) - 0144
specialize factor_permutation_matched_append_exists (x) - 0145
apply factor_permutation_matched_append_exists - 0146
exact hrec_right_witness_witness - 0147
exact hd_witness_witness_right_left - 0148
exact hlastaligned - 0149
have hswap : exists B C q. ((((~(n = 0) /\ ((exists ff_u_fsat_induction_recoded_factorization_product ff_v_fsat_induction_recoded_factorization_product. ((((exists ff_h_fsat_induction_recoded_factorization_product_start. ff_h_fsat_induction_recoded_factorization_product_start + S (1) = S ((S (0)) * ff_v_fsat_induction_recoded_factorization_product)) /\ exists ff_q_fsat_induction_recoded_factorization_product_start. ff_u_fsat_induction_recoded_factorization_product = ff_q_fsat_induction_recoded_factorization_product_start * S ((S (0)) * ff_v_fsat_induction_recoded_factorization_product) + (1))) /\ ((((exists ff_h_fsat_induction_recoded_factorization_product_terminal. ff_h_fsat_induction_recoded_factorization_product_terminal + S (n) = S ((S (S x3)) * ff_v_fsat_induction_recoded_factorization_product)) /\ exists ff_q_fsat_induction_recoded_factorization_product_terminal. ff_u_fsat_induction_recoded_factorization_product = ff_q_fsat_induction_recoded_factorization_product_terminal * S ((S (S x3)) * ff_v_fsat_induction_recoded_factorization_product) + (n))) /\ forall ff_i_fsat_induction_recoded_factorization_product. (exists ff_lt_fsat_induction_recoded_factorization_product_bound. ff_lt_fsat_induction_recoded_factorization_product_bound + S ff_i_fsat_induction_recoded_factorization_product = S x3) -> exists ff_p_fsat_induction_recoded_factorization_product ff_r_fsat_induction_recoded_factorization_product ff_s_fsat_induction_recoded_factorization_product. ((((exists ff_h_fsat_induction_recoded_factorization_product_factor. ff_h_fsat_induction_recoded_factorization_product_factor + S (ff_p_fsat_induction_recoded_factorization_product) = S ((S (ff_i_fsat_induction_recoded_factorization_product)) * C)) /\ exists ff_q_fsat_induction_recoded_factorization_product_factor. B = ff_q_fsat_induction_recoded_factorization_product_factor * S ((S (ff_i_fsat_induction_recoded_factorization_product)) * C) + (ff_p_fsat_induction_recoded_factorization_product))) /\ ((((exists ff_h_fsat_induction_recoded_factorization_product_partial. ff_h_fsat_induction_recoded_factorization_product_partial + S (ff_r_fsat_induction_recoded_factorization_product) = S ((S (ff_i_fsat_induction_recoded_factorization_product)) * ff_v_fsat_induction_recoded_factorization_product)) /\ exists ff_q_fsat_induction_recoded_factorization_product_partial. ff_u_fsat_induction_recoded_factorization_product = ff_q_fsat_induction_recoded_factorization_product_partial * S ((S (ff_i_fsat_induction_recoded_factorization_product)) * ff_v_fsat_induction_recoded_factorization_product) + (ff_r_fsat_induction_recoded_factorization_product))) /\ ((((exists ff_h_fsat_induction_recoded_factorization_product_successor. ff_h_fsat_induction_recoded_factorization_product_successor + S (ff_s_fsat_induction_recoded_factorization_product) = S ((S (S ff_i_fsat_induction_recoded_factorization_product)) * ff_v_fsat_induction_recoded_factorization_product)) /\ exists ff_q_fsat_induction_recoded_factorization_product_successor. ff_u_fsat_induction_recoded_factorization_product = ff_q_fsat_induction_recoded_factorization_product_successor * S ((S (S ff_i_fsat_induction_recoded_factorization_product)) * ff_v_fsat_induction_recoded_factorization_product) + (ff_s_fsat_induction_recoded_factorization_product))) /\ ff_s_fsat_induction_recoded_factorization_product = ff_r_fsat_induction_recoded_factorization_product * ff_p_fsat_induction_recoded_factorization_product)))))) /\ (forall ftsf_index_fsat_induction_recoded_factorization_primes. (exists ftsf_gap_fsat_induction_recoded_factorization_primes_bound. ftsf_gap_fsat_induction_recoded_factorization_primes_bound + S ftsf_index_fsat_induction_recoded_factorization_primes = (S x3)) -> exists ftsf_factor_fsat_induction_recoded_factorization_primes. ((((exists ff_h_ftsf_fsat_induction_recoded_factorization_primes_entry. ff_h_ftsf_fsat_induction_recoded_factorization_primes_entry + S (ftsf_factor_fsat_induction_recoded_factorization_primes) = S ((S (ftsf_index_fsat_induction_recoded_factorization_primes)) * C)) /\ exists ff_q_ftsf_fsat_induction_recoded_factorization_primes_entry. B = ff_q_ftsf_fsat_induction_recoded_factorization_primes_entry * S ((S (ftsf_index_fsat_induction_recoded_factorization_primes)) * C) + (ftsf_factor_fsat_induction_recoded_factorization_primes))) /\ ((~(ftsf_factor_fsat_induction_recoded_factorization_primes = 1) /\ forall frm_prime_left_ftsf_fsat_induction_recoded_factorization_primes_prime frm_prime_right_ftsf_fsat_induction_recoded_factorization_primes_prime. ftsf_factor_fsat_induction_recoded_factorization_primes = frm_prime_left_ftsf_fsat_induction_recoded_factorization_primes_prime * frm_prime_right_ftsf_fsat_induction_recoded_factorization_primes_prime -> frm_prime_left_ftsf_fsat_induction_recoded_factorization_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_induction_recoded_factorization_primes_prime = 1))))))) /\ (((((exists ff_h_pfp_induction_target_swapoldi. ff_h_pfp_induction_target_swapoldi + S (x) = S ((S (x2)) * e)) /\ exists ff_q_pfp_induction_target_swapoldi. d = ff_q_pfp_induction_target_swapoldi * S ((S (x2)) * e) + (x))) /\ (((((exists ff_h_pfp_induction_target_swapoldlast. ff_h_pfp_induction_target_swapoldlast + S (q) = S ((S (x3)) * e)) /\ exists ff_q_pfp_induction_target_swapoldlast. d = ff_q_pfp_induction_target_swapoldlast * S ((S (x3)) * e) + (q))) /\ (((((exists ff_h_pfp_induction_target_swapnewi. ff_h_pfp_induction_target_swapnewi + S (q) = S ((S (x2)) * C)) /\ exists ff_q_pfp_induction_target_swapnewi. B = ff_q_pfp_induction_target_swapnewi * S ((S (x2)) * C) + (q))) /\ (((((exists ff_h_pfp_induction_target_swapnewlast. ff_h_pfp_induction_target_swapnewlast + S (x) = S ((S (x3)) * C)) /\ exists ff_q_pfp_induction_target_swapnewlast. B = ff_q_pfp_induction_target_swapnewlast * S ((S (x3)) * C) + (x))) /\ (forall pfp_j_induction_target_swap pfp_a_induction_target_swap. (exists pfp_gap_induction_target_swapbound. pfp_gap_induction_target_swapbound + S (pfp_j_induction_target_swap) = (S (x3))) -> ~(pfp_j_induction_target_swap = x2) -> ~(pfp_j_induction_target_swap = x3) -> (((exists ff_h_pfp_induction_target_swapold. ff_h_pfp_induction_target_swapold + S (pfp_a_induction_target_swap) = S ((S (pfp_j_induction_target_swap)) * e)) /\ exists ff_q_pfp_induction_target_swapold. d = ff_q_pfp_induction_target_swapold * S ((S (pfp_j_induction_target_swap)) * e) + (pfp_a_induction_target_swap))) -> (((exists ff_h_pfp_induction_target_swapnew. ff_h_pfp_induction_target_swapnew + S (pfp_a_induction_target_swap) = S ((S (pfp_j_induction_target_swap)) * C)) /\ exists ff_q_pfp_induction_target_swapnew. B = ff_q_pfp_induction_target_swapnew * S ((S (pfp_j_induction_target_swap)) * C) + (pfp_a_induction_target_swap)))))))))))))) - 0150
specialize factor_permutation_swapped_factorization_exists (n) - 0151
specialize factor_permutation_swapped_factorization_exists (d) - 0152
specialize factor_permutation_swapped_factorization_exists (e) - 0153
specialize factor_permutation_swapped_factorization_exists (x3) - 0154
specialize factor_permutation_swapped_factorization_exists (x2) - 0155
specialize factor_permutation_swapped_factorization_exists (x) - 0156
apply factor_permutation_swapped_factorization_exists - 0157
exact hBsuccessor - 0158
exact hposition_right - 0159
exact hmember_witness_right - 0160
cases hswap - 0161
cases hswap_witness - 0162
cases hswap_witness_witness - 0163
cases hswap_witness_witness_witness - 0164
have hlast : ((exists ff_h_pfp_induction_recoded_last. ff_h_pfp_induction_recoded_last + S (x) = S ((S (x3)) * x5)) /\ exists ff_q_pfp_induction_recoded_last. x4 = ff_q_pfp_induction_recoded_last * S ((S (x3)) * x5) + (x)) - 0165
cases hswap_witness_witness_witness_right - 0166
cases hswap_witness_witness_witness_right_right - 0167
cases hswap_witness_witness_witness_right_right_right - 0168
cases hswap_witness_witness_witness_right_right_right_right - 0169
exact hswap_witness_witness_witness_right_right_right_right_left - 0170
have hprefix : (~(x1 = 0) /\ ((exists ff_u_fsat_induction_recoded_prefix_product ff_v_fsat_induction_recoded_prefix_product. ((((exists ff_h_fsat_induction_recoded_prefix_product_start. ff_h_fsat_induction_recoded_prefix_product_start + S (1) = S ((S (0)) * ff_v_fsat_induction_recoded_prefix_product)) /\ exists ff_q_fsat_induction_recoded_prefix_product_start. ff_u_fsat_induction_recoded_prefix_product = ff_q_fsat_induction_recoded_prefix_product_start * S ((S (0)) * ff_v_fsat_induction_recoded_prefix_product) + (1))) /\ ((((exists ff_h_fsat_induction_recoded_prefix_product_terminal. ff_h_fsat_induction_recoded_prefix_product_terminal + S (x1) = S ((S (x3)) * ff_v_fsat_induction_recoded_prefix_product)) /\ exists ff_q_fsat_induction_recoded_prefix_product_terminal. ff_u_fsat_induction_recoded_prefix_product = ff_q_fsat_induction_recoded_prefix_product_terminal * S ((S (x3)) * ff_v_fsat_induction_recoded_prefix_product) + (x1))) /\ forall ff_i_fsat_induction_recoded_prefix_product. (exists ff_lt_fsat_induction_recoded_prefix_product_bound. ff_lt_fsat_induction_recoded_prefix_product_bound + S ff_i_fsat_induction_recoded_prefix_product = x3) -> exists ff_p_fsat_induction_recoded_prefix_product ff_r_fsat_induction_recoded_prefix_product ff_s_fsat_induction_recoded_prefix_product. ((((exists ff_h_fsat_induction_recoded_prefix_product_factor. ff_h_fsat_induction_recoded_prefix_product_factor + S (ff_p_fsat_induction_recoded_prefix_product) = S ((S (ff_i_fsat_induction_recoded_prefix_product)) * x5)) /\ exists ff_q_fsat_induction_recoded_prefix_product_factor. x4 = ff_q_fsat_induction_recoded_prefix_product_factor * S ((S (ff_i_fsat_induction_recoded_prefix_product)) * x5) + (ff_p_fsat_induction_recoded_prefix_product))) /\ ((((exists ff_h_fsat_induction_recoded_prefix_product_partial. ff_h_fsat_induction_recoded_prefix_product_partial + S (ff_r_fsat_induction_recoded_prefix_product) = S ((S (ff_i_fsat_induction_recoded_prefix_product)) * ff_v_fsat_induction_recoded_prefix_product)) /\ exists ff_q_fsat_induction_recoded_prefix_product_partial. ff_u_fsat_induction_recoded_prefix_product = ff_q_fsat_induction_recoded_prefix_product_partial * S ((S (ff_i_fsat_induction_recoded_prefix_product)) * ff_v_fsat_induction_recoded_prefix_product) + (ff_r_fsat_induction_recoded_prefix_product))) /\ ((((exists ff_h_fsat_induction_recoded_prefix_product_successor. ff_h_fsat_induction_recoded_prefix_product_successor + S (ff_s_fsat_induction_recoded_prefix_product) = S ((S (S ff_i_fsat_induction_recoded_prefix_product)) * ff_v_fsat_induction_recoded_prefix_product)) /\ exists ff_q_fsat_induction_recoded_prefix_product_successor. ff_u_fsat_induction_recoded_prefix_product = ff_q_fsat_induction_recoded_prefix_product_successor * S ((S (S ff_i_fsat_induction_recoded_prefix_product)) * ff_v_fsat_induction_recoded_prefix_product) + (ff_s_fsat_induction_recoded_prefix_product))) /\ ff_s_fsat_induction_recoded_prefix_product = ff_r_fsat_induction_recoded_prefix_product * ff_p_fsat_induction_recoded_prefix_product)))))) /\ (forall ftsf_index_fsat_induction_recoded_prefix_primes. (exists ftsf_gap_fsat_induction_recoded_prefix_primes_bound. ftsf_gap_fsat_induction_recoded_prefix_primes_bound + S ftsf_index_fsat_induction_recoded_prefix_primes = (x3)) -> exists ftsf_factor_fsat_induction_recoded_prefix_primes. ((((exists ff_h_ftsf_fsat_induction_recoded_prefix_primes_entry. ff_h_ftsf_fsat_induction_recoded_prefix_primes_entry + S (ftsf_factor_fsat_induction_recoded_prefix_primes) = S ((S (ftsf_index_fsat_induction_recoded_prefix_primes)) * x5)) /\ exists ff_q_ftsf_fsat_induction_recoded_prefix_primes_entry. x4 = ff_q_ftsf_fsat_induction_recoded_prefix_primes_entry * S ((S (ftsf_index_fsat_induction_recoded_prefix_primes)) * x5) + (ftsf_factor_fsat_induction_recoded_prefix_primes))) /\ ((~(ftsf_factor_fsat_induction_recoded_prefix_primes = 1) /\ forall frm_prime_left_ftsf_fsat_induction_recoded_prefix_primes_prime frm_prime_right_ftsf_fsat_induction_recoded_prefix_primes_prime. ftsf_factor_fsat_induction_recoded_prefix_primes = frm_prime_left_ftsf_fsat_induction_recoded_prefix_primes_prime * frm_prime_right_ftsf_fsat_induction_recoded_prefix_primes_prime -> frm_prime_left_ftsf_fsat_induction_recoded_prefix_primes_prime = 1 \/ frm_prime_right_ftsf_fsat_induction_recoded_prefix_primes_prime = 1)))))) - 0171
specialize factor_permutation_cancel_last (n) - 0172
specialize factor_permutation_cancel_last (x) - 0173
specialize factor_permutation_cancel_last (x1) - 0174
specialize factor_permutation_cancel_last (x4) - 0175
specialize factor_permutation_cancel_last (x5) - 0176
specialize factor_permutation_cancel_last (x3) - 0177
apply factor_permutation_cancel_last - 0178
exact hswap_witness_witness_witness_left - 0179
exact hlast - 0180
exact hd_witness_witness_right_right_left - 0181
have hrec : ((l = x3) /\ (exists pfp_u_induction_recoded_recursion pfp_v_induction_recoded_recursion. (((((forall pfp_i_induction_recoded_recursionmatchingpermutationbounded. (exists pfp_gap_induction_recoded_recursionmatchingpermutationboundedindex. pfp_gap_induction_recoded_recursionmatchingpermutationboundedindex + S (pfp_i_induction_recoded_recursionmatchingpermutationbounded) = (l)) -> exists pfp_a_induction_recoded_recursionmatchingpermutationbounded. (((exists ff_h_pfp_induction_recoded_recursionmatchingpermutationboundedentry. ff_h_pfp_induction_recoded_recursionmatchingpermutationboundedentry + S (pfp_a_induction_recoded_recursionmatchingpermutationbounded) = S ((S (pfp_i_induction_recoded_recursionmatchingpermutationbounded)) * pfp_v_induction_recoded_recursion)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingpermutationboundedentry. pfp_u_induction_recoded_recursion = ff_q_pfp_induction_recoded_recursionmatchingpermutationboundedentry * S ((S (pfp_i_induction_recoded_recursionmatchingpermutationbounded)) * pfp_v_induction_recoded_recursion) + (pfp_a_induction_recoded_recursionmatchingpermutationbounded))) /\ (exists pfp_gap_induction_recoded_recursionmatchingpermutationboundedvalue. pfp_gap_induction_recoded_recursionmatchingpermutationboundedvalue + S (pfp_a_induction_recoded_recursionmatchingpermutationbounded) = (l))) /\ (((forall pfp_i_induction_recoded_recursionmatchingpermutationinjective pfp_j_induction_recoded_recursionmatchingpermutationinjective pfp_a_induction_recoded_recursionmatchingpermutationinjective. (exists pfp_gap_induction_recoded_recursionmatchingpermutationinjectivefirst. pfp_gap_induction_recoded_recursionmatchingpermutationinjectivefirst + S (pfp_i_induction_recoded_recursionmatchingpermutationinjective) = (l)) -> (exists pfp_gap_induction_recoded_recursionmatchingpermutationinjectivesecond. pfp_gap_induction_recoded_recursionmatchingpermutationinjectivesecond + S (pfp_j_induction_recoded_recursionmatchingpermutationinjective) = (l)) -> (((exists ff_h_pfp_induction_recoded_recursionmatchingpermutationinjectiveleft. ff_h_pfp_induction_recoded_recursionmatchingpermutationinjectiveleft + S (pfp_a_induction_recoded_recursionmatchingpermutationinjective) = S ((S (pfp_i_induction_recoded_recursionmatchingpermutationinjective)) * pfp_v_induction_recoded_recursion)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingpermutationinjectiveleft. pfp_u_induction_recoded_recursion = ff_q_pfp_induction_recoded_recursionmatchingpermutationinjectiveleft * S ((S (pfp_i_induction_recoded_recursionmatchingpermutationinjective)) * pfp_v_induction_recoded_recursion) + (pfp_a_induction_recoded_recursionmatchingpermutationinjective))) -> (((exists ff_h_pfp_induction_recoded_recursionmatchingpermutationinjectiveright. ff_h_pfp_induction_recoded_recursionmatchingpermutationinjectiveright + S (pfp_a_induction_recoded_recursionmatchingpermutationinjective) = S ((S (pfp_j_induction_recoded_recursionmatchingpermutationinjective)) * pfp_v_induction_recoded_recursion)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingpermutationinjectiveright. pfp_u_induction_recoded_recursion = ff_q_pfp_induction_recoded_recursionmatchingpermutationinjectiveright * S ((S (pfp_j_induction_recoded_recursionmatchingpermutationinjective)) * pfp_v_induction_recoded_recursion) + (pfp_a_induction_recoded_recursionmatchingpermutationinjective))) -> pfp_i_induction_recoded_recursionmatchingpermutationinjective = pfp_j_induction_recoded_recursionmatchingpermutationinjective) /\ (forall pfp_a_induction_recoded_recursionmatchingpermutationsurjective. (exists pfp_gap_induction_recoded_recursionmatchingpermutationsurjectivevalue. pfp_gap_induction_recoded_recursionmatchingpermutationsurjectivevalue + S (pfp_a_induction_recoded_recursionmatchingpermutationsurjective) = (l)) -> exists pfp_i_induction_recoded_recursionmatchingpermutationsurjective. (exists pfp_gap_induction_recoded_recursionmatchingpermutationsurjectiveindex. pfp_gap_induction_recoded_recursionmatchingpermutationsurjectiveindex + S (pfp_i_induction_recoded_recursionmatchingpermutationsurjective) = (l)) /\ (((exists ff_h_pfp_induction_recoded_recursionmatchingpermutationsurjectiveentry. ff_h_pfp_induction_recoded_recursionmatchingpermutationsurjectiveentry + S (pfp_a_induction_recoded_recursionmatchingpermutationsurjective) = S ((S (pfp_i_induction_recoded_recursionmatchingpermutationsurjective)) * pfp_v_induction_recoded_recursion)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingpermutationsurjectiveentry. pfp_u_induction_recoded_recursion = ff_q_pfp_induction_recoded_recursionmatchingpermutationsurjectiveentry * S ((S (pfp_i_induction_recoded_recursionmatchingpermutationsurjective)) * pfp_v_induction_recoded_recursion) + (pfp_a_induction_recoded_recursionmatchingpermutationsurjective)))))))) /\ (forall pfp_i_induction_recoded_recursionmatchingmatching pfp_j_induction_recoded_recursionmatchingmatching pfp_a_induction_recoded_recursionmatchingmatching. (exists pfp_gap_induction_recoded_recursionmatchingmatchingbound. pfp_gap_induction_recoded_recursionmatchingmatchingbound + S (pfp_i_induction_recoded_recursionmatchingmatching) = (l)) -> (((exists ff_h_pfp_induction_recoded_recursionmatchingmatchingmap. ff_h_pfp_induction_recoded_recursionmatchingmatchingmap + S (pfp_j_induction_recoded_recursionmatchingmatching) = S ((S (pfp_i_induction_recoded_recursionmatchingmatching)) * pfp_v_induction_recoded_recursion)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingmatchingmap. pfp_u_induction_recoded_recursion = ff_q_pfp_induction_recoded_recursionmatchingmatchingmap * S ((S (pfp_i_induction_recoded_recursionmatchingmatching)) * pfp_v_induction_recoded_recursion) + (pfp_j_induction_recoded_recursionmatchingmatching))) -> (((exists ff_h_pfp_induction_recoded_recursionmatchingmatchingsource. ff_h_pfp_induction_recoded_recursionmatchingmatchingsource + S (pfp_a_induction_recoded_recursionmatchingmatching) = S ((S (pfp_i_induction_recoded_recursionmatchingmatching)) * c)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingmatchingsource. b = ff_q_pfp_induction_recoded_recursionmatchingmatchingsource * S ((S (pfp_i_induction_recoded_recursionmatchingmatching)) * c) + (pfp_a_induction_recoded_recursionmatchingmatching))) -> (((exists ff_h_pfp_induction_recoded_recursionmatchingmatchingtarget. ff_h_pfp_induction_recoded_recursionmatchingmatchingtarget + S (pfp_a_induction_recoded_recursionmatchingmatching) = S ((S (pfp_j_induction_recoded_recursionmatchingmatching)) * x5)) /\ exists ff_q_pfp_induction_recoded_recursionmatchingmatchingtarget. x4 = ff_q_pfp_induction_recoded_recursionmatchingmatchingtarget * S ((S (pfp_j_induction_recoded_recursionmatchingmatching)) * x5) + (pfp_a_induction_recoded_recursionmatchingmatching)))))))) - 0182
specialize IH (x1) - 0183
specialize IH (b) - 0184
specialize IH (c) - 0185
specialize IH (x3) - 0186
specialize IH (x4) - 0187
specialize IH (x5) - 0188
apply IH - 0189
exact hd_witness_witness_right_right_right - 0190
exact hprefix - 0191
cases hrec - 0192
cases hrec_right - 0193
cases hrec_right_witness - 0194
have hpivot : exists pfp_gap_induction_pivot_aligned. pfp_gap_induction_pivot_aligned + S (x2) = (l) - 0195
rewrite hrec_left - 0196
exact hposition_right - 0197
have hswapaligned : ((((exists ff_h_pfp_induction_swap_alignedoldi. ff_h_pfp_induction_swap_alignedoldi + S (x) = S ((S (x2)) * e)) /\ exists ff_q_pfp_induction_swap_alignedoldi. d = ff_q_pfp_induction_swap_alignedoldi * S ((S (x2)) * e) + (x))) /\ (((((exists ff_h_pfp_induction_swap_alignedoldlast. ff_h_pfp_induction_swap_alignedoldlast + S (x6) = S ((S (l)) * e)) /\ exists ff_q_pfp_induction_swap_alignedoldlast. d = ff_q_pfp_induction_swap_alignedoldlast * S ((S (l)) * e) + (x6))) /\ (((((exists ff_h_pfp_induction_swap_alignednewi. ff_h_pfp_induction_swap_alignednewi + S (x6) = S ((S (x2)) * x5)) /\ exists ff_q_pfp_induction_swap_alignednewi. x4 = ff_q_pfp_induction_swap_alignednewi * S ((S (x2)) * x5) + (x6))) /\ (((((exists ff_h_pfp_induction_swap_alignednewlast. ff_h_pfp_induction_swap_alignednewlast + S (x) = S ((S (l)) * x5)) /\ exists ff_q_pfp_induction_swap_alignednewlast. x4 = ff_q_pfp_induction_swap_alignednewlast * S ((S (l)) * x5) + (x))) /\ (forall pfp_j_induction_swap_aligned pfp_a_induction_swap_aligned. (exists pfp_gap_induction_swap_alignedbound. pfp_gap_induction_swap_alignedbound + S (pfp_j_induction_swap_aligned) = (S (l))) -> ~(pfp_j_induction_swap_aligned = x2) -> ~(pfp_j_induction_swap_aligned = l) -> (((exists ff_h_pfp_induction_swap_alignedold. ff_h_pfp_induction_swap_alignedold + S (pfp_a_induction_swap_aligned) = S ((S (pfp_j_induction_swap_aligned)) * e)) /\ exists ff_q_pfp_induction_swap_alignedold. d = ff_q_pfp_induction_swap_alignedold * S ((S (pfp_j_induction_swap_aligned)) * e) + (pfp_a_induction_swap_aligned))) -> (((exists ff_h_pfp_induction_swap_alignednew. ff_h_pfp_induction_swap_alignednew + S (pfp_a_induction_swap_aligned) = S ((S (pfp_j_induction_swap_aligned)) * x5)) /\ exists ff_q_pfp_induction_swap_alignednew. x4 = ff_q_pfp_induction_swap_alignednew * S ((S (pfp_j_induction_swap_aligned)) * x5) + (pfp_a_induction_swap_aligned))))))))))) - 0198
rewrite hrec_left - 0199
rewrite hrec_left - 0200
rewrite hrec_left - 0201
rewrite hrec_left - 0202
rewrite hrec_left - 0203
rewrite hrec_left - 0204
exact hswap_witness_witness_witness_right - 0205
split - 0206
trans S x3 - 0207
congr - 0208
exact hrec_left - 0209
symm - 0210
exact hpredecessor_witness - 0211
specialize factor_permutation_matched_unswap_exists (b) - 0212
specialize factor_permutation_matched_unswap_exists (c) - 0213
specialize factor_permutation_matched_unswap_exists (d) - 0214
specialize factor_permutation_matched_unswap_exists (e) - 0215
specialize factor_permutation_matched_unswap_exists (x4) - 0216
specialize factor_permutation_matched_unswap_exists (x5) - 0217
specialize factor_permutation_matched_unswap_exists (x7) - 0218
specialize factor_permutation_matched_unswap_exists (x8) - 0219
specialize factor_permutation_matched_unswap_exists (l) - 0220
specialize factor_permutation_matched_unswap_exists (x2) - 0221
specialize factor_permutation_matched_unswap_exists (x) - 0222
specialize factor_permutation_matched_unswap_exists (x6) - 0223
apply factor_permutation_matched_unswap_exists - 0224
exact hpivot - 0225
exact hrec_right_witness_witness - 0226
exact hd_witness_witness_right_left - 0227
exact hswapaligned