PA007I

beta_sign_factor_product_power

Alpha v34 checked-use theorem · independently closed; not Stable

The product of 1/r sign factors is exactly r to the number of one bits.

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 PA statement

forall sb sc fb fc r l e F R. (((exists ff_u_sign_product_count_sum ff_v_sign_product_count_sum. ((((exists ff_h_sign_product_count_sum_start. ff_h_sign_product_count_sum_start + S (0) = S ((S (0)) * ff_v_sign_product_count_sum)) /\ exists ff_q_sign_product_count_sum_start. ff_u_sign_product_count_sum = ff_q_sign_product_count_sum_start * S ((S (0)) * ff_v_sign_product_count_sum) + (0))) /\ ((((exists ff_h_sign_product_count_sum_terminal. ff_h_sign_product_count_sum_terminal + S (e) = S ((S (l)) * ff_v_sign_product_count_sum)) /\ exists ff_q_sign_product_count_sum_terminal. ff_u_sign_product_count_sum = ff_q_sign_product_count_sum_terminal * S ((S (l)) * ff_v_sign_product_count_sum) + (e))) /\ forall ff_i_sign_product_count_sum. (exists ff_lt_sign_product_count_sum_bound. ff_lt_sign_product_count_sum_bound + S ff_i_sign_product_count_sum = l) -> exists ff_a_sign_product_count_sum ff_r_sign_product_count_sum ff_s_sign_product_count_sum. ((((exists ff_h_sign_product_count_sum_summand. ff_h_sign_product_count_sum_summand + S (ff_a_sign_product_count_sum) = S ((S (ff_i_sign_product_count_sum)) * sc)) /\ exists ff_q_sign_product_count_sum_summand. sb = ff_q_sign_product_count_sum_summand * S ((S (ff_i_sign_product_count_sum)) * sc) + (ff_a_sign_product_count_sum))) /\ ((((exists ff_h_sign_product_count_sum_partial. ff_h_sign_product_count_sum_partial + S (ff_r_sign_product_count_sum) = S ((S (ff_i_sign_product_count_sum)) * ff_v_sign_product_count_sum)) /\ exists ff_q_sign_product_count_sum_partial. ff_u_sign_product_count_sum = ff_q_sign_product_count_sum_partial * S ((S (ff_i_sign_product_count_sum)) * ff_v_sign_product_count_sum) + (ff_r_sign_product_count_sum))) /\ ((((exists ff_h_sign_product_count_sum_successor. ff_h_sign_product_count_sum_successor + S (ff_s_sign_product_count_sum) = S ((S (S ff_i_sign_product_count_sum)) * ff_v_sign_product_count_sum)) /\ exists ff_q_sign_product_count_sum_successor. ff_u_sign_product_count_sum = ff_q_sign_product_count_sum_successor * S ((S (S ff_i_sign_product_count_sum)) * ff_v_sign_product_count_sum) + (ff_s_sign_product_count_sum))) /\ ff_s_sign_product_count_sum = ff_r_sign_product_count_sum + ff_a_sign_product_count_sum)))))) /\ (forall ff_i_sign_product_count_bits. (exists ff_lt_sign_product_count_bits_bound. ff_lt_sign_product_count_bits_bound + S ff_i_sign_product_count_bits = l) -> exists ff_bit_sign_product_count_bits. ((((exists ff_h_sign_product_count_bits_decoded. ff_h_sign_product_count_bits_decoded + S (ff_bit_sign_product_count_bits) = S ((S (ff_i_sign_product_count_bits)) * sc)) /\ exists ff_q_sign_product_count_bits_decoded. sb = ff_q_sign_product_count_bits_decoded * S ((S (ff_i_sign_product_count_bits)) * sc) + (ff_bit_sign_product_count_bits))) /\ (ff_bit_sign_product_count_bits = 0 \/ ff_bit_sign_product_count_bits = 1))))) -> (forall gspf_index_sign_product_signs gspf_bit_sign_product_signs. (exists gsp_lt_gap_sign_product_signs_bound. gsp_lt_gap_sign_product_signs_bound + S gspf_index_sign_product_signs = l) -> (((exists ff_h_gspf_sign_product_signs_bit. ff_h_gspf_sign_product_signs_bit + S (gspf_bit_sign_product_signs) = S ((S (gspf_index_sign_product_signs)) * sc)) /\ exists ff_q_gspf_sign_product_signs_bit. sb = ff_q_gspf_sign_product_signs_bit * S ((S (gspf_index_sign_product_signs)) * sc) + (gspf_bit_sign_product_signs))) -> (((gspf_bit_sign_product_signs = 0) /\ (((exists gsp_beta_height_gspf_sign_product_signs_one. gsp_beta_height_gspf_sign_product_signs_one + S (1) = S ((S (gspf_index_sign_product_signs)) * fc)) /\ exists gsp_beta_quotient_gspf_sign_product_signs_one. fb = gsp_beta_quotient_gspf_sign_product_signs_one * S ((S (gspf_index_sign_product_signs)) * fc) + (1)))) \/ ((gspf_bit_sign_product_signs = 1) /\ (((exists ff_h_gspf_sign_product_signs_predecessor. ff_h_gspf_sign_product_signs_predecessor + S (r) = S ((S (gspf_index_sign_product_signs)) * fc)) /\ exists ff_q_gspf_sign_product_signs_predecessor. fb = ff_q_gspf_sign_product_signs_predecessor * S ((S (gspf_index_sign_product_signs)) * fc) + (r)))))) -> (exists ff_u_sign_product_product ff_v_sign_product_product. ((((exists ff_h_sign_product_product_start. ff_h_sign_product_product_start + S (1) = S ((S (0)) * ff_v_sign_product_product)) /\ exists ff_q_sign_product_product_start. ff_u_sign_product_product = ff_q_sign_product_product_start * S ((S (0)) * ff_v_sign_product_product) + (1))) /\ ((((exists ff_h_sign_product_product_terminal. ff_h_sign_product_product_terminal + S (F) = S ((S (l)) * ff_v_sign_product_product)) /\ exists ff_q_sign_product_product_terminal. ff_u_sign_product_product = ff_q_sign_product_product_terminal * S ((S (l)) * ff_v_sign_product_product) + (F))) /\ forall ff_i_sign_product_product. (exists ff_lt_sign_product_product_bound. ff_lt_sign_product_product_bound + S ff_i_sign_product_product = l) -> exists ff_p_sign_product_product ff_r_sign_product_product ff_s_sign_product_product. ((((exists ff_h_sign_product_product_factor. ff_h_sign_product_product_factor + S (ff_p_sign_product_product) = S ((S (ff_i_sign_product_product)) * fc)) /\ exists ff_q_sign_product_product_factor. fb = ff_q_sign_product_product_factor * S ((S (ff_i_sign_product_product)) * fc) + (ff_p_sign_product_product))) /\ ((((exists ff_h_sign_product_product_partial. ff_h_sign_product_product_partial + S (ff_r_sign_product_product) = S ((S (ff_i_sign_product_product)) * ff_v_sign_product_product)) /\ exists ff_q_sign_product_product_partial. ff_u_sign_product_product = ff_q_sign_product_product_partial * S ((S (ff_i_sign_product_product)) * ff_v_sign_product_product) + (ff_r_sign_product_product))) /\ ((((exists ff_h_sign_product_product_successor. ff_h_sign_product_product_successor + S (ff_s_sign_product_product) = S ((S (S ff_i_sign_product_product)) * ff_v_sign_product_product)) /\ exists ff_q_sign_product_product_successor. ff_u_sign_product_product = ff_q_sign_product_product_successor * S ((S (S ff_i_sign_product_product)) * ff_v_sign_product_product) + (ff_s_sign_product_product))) /\ ff_s_sign_product_product = ff_r_sign_product_product * ff_p_sign_product_product)))))) -> (exists ff_b_sign_product_power ff_c_sign_product_power. ((forall ff_i_sign_product_power_repeat. (exists ff_lt_sign_product_power_repeat_bound. ff_lt_sign_product_power_repeat_bound + S ff_i_sign_product_power_repeat = e) -> (((exists ff_h_sign_product_power_repeat_decoded. ff_h_sign_product_power_repeat_decoded + S (r) = S ((S (ff_i_sign_product_power_repeat)) * ff_c_sign_product_power)) /\ exists ff_q_sign_product_power_repeat_decoded. ff_b_sign_product_power = ff_q_sign_product_power_repeat_decoded * S ((S (ff_i_sign_product_power_repeat)) * ff_c_sign_product_power) + (r)))) /\ (exists ff_u_sign_product_power_product ff_v_sign_product_power_product. ((((exists ff_h_sign_product_power_product_start. ff_h_sign_product_power_product_start + S (1) = S ((S (0)) * ff_v_sign_product_power_product)) /\ exists ff_q_sign_product_power_product_start. ff_u_sign_product_power_product = ff_q_sign_product_power_product_start * S ((S (0)) * ff_v_sign_product_power_product) + (1))) /\ ((((exists ff_h_sign_product_power_product_terminal. ff_h_sign_product_power_product_terminal + S (R) = S ((S (e)) * ff_v_sign_product_power_product)) /\ exists ff_q_sign_product_power_product_terminal. ff_u_sign_product_power_product = ff_q_sign_product_power_product_terminal * S ((S (e)) * ff_v_sign_product_power_product) + (R))) /\ forall ff_i_sign_product_power_product. (exists ff_lt_sign_product_power_product_bound. ff_lt_sign_product_power_product_bound + S ff_i_sign_product_power_product = e) -> exists ff_p_sign_product_power_product ff_r_sign_product_power_product ff_s_sign_product_power_product. ((((exists ff_h_sign_product_power_product_factor. ff_h_sign_product_power_product_factor + S (ff_p_sign_product_power_product) = S ((S (ff_i_sign_product_power_product)) * ff_c_sign_product_power)) /\ exists ff_q_sign_product_power_product_factor. ff_b_sign_product_power = ff_q_sign_product_power_product_factor * S ((S (ff_i_sign_product_power_product)) * ff_c_sign_product_power) + (ff_p_sign_product_power_product))) /\ ((((exists ff_h_sign_product_power_product_partial. ff_h_sign_product_power_product_partial + S (ff_r_sign_product_power_product) = S ((S (ff_i_sign_product_power_product)) * ff_v_sign_product_power_product)) /\ exists ff_q_sign_product_power_product_partial. ff_u_sign_product_power_product = ff_q_sign_product_power_product_partial * S ((S (ff_i_sign_product_power_product)) * ff_v_sign_product_power_product) + (ff_r_sign_product_power_product))) /\ ((((exists ff_h_sign_product_power_product_successor. ff_h_sign_product_power_product_successor + S (ff_s_sign_product_power_product) = S ((S (S ff_i_sign_product_power_product)) * ff_v_sign_product_power_product)) /\ exists ff_q_sign_product_power_product_successor. ff_u_sign_product_power_product = ff_q_sign_product_power_product_successor * S ((S (S ff_i_sign_product_power_product)) * ff_v_sign_product_power_product) + (ff_s_sign_product_power_product))) /\ ff_s_sign_product_power_product = ff_r_sign_product_power_product * ff_p_sign_product_power_product)))))))) -> F = R

Structural proof guide

Generated structural guide

The product of 1/r sign factors is exactly r to the number of one bits.

Use the direct prerequisites bit_count_zero, bit_count_succ_decompose, beta_product_zero, beta_product_succ_decompose, pow_zero, pow_successor_decompose, beta_sign_factor_prefix_drop_last, beta_at_unique, le_refl, mul_one as previously established PA formulas.

The proof proceeds by structural induction (1), case analysis (14), intermediate claims (16), equality transport (11).

Referenced ingredients

Proof neighborhood

Direct dependencies

Direct dependents

Formal native tactic body

Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Alpha-v25 checked-use theorem is independently kernel-checked when replayed; it is not a Stable theorem.

Read the argument

Proof checkpoints

169 script commands · 31 reading checkpoints · 16 local claims

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 (10)

Long local formulas use this family’s existing definitions. Each new abbreviation was expanded back to the identical native formula, including its free-variable context. The original edition is preserved below.

01Fix variables and assumptionsL1–5

Work with arbitrary variables or the premises of the current implication.

  1. L1
    intro sb
  2. L2
    intro sc
  3. L3
    intro fb
  4. L4
    intro fc
  5. L5
    intro r
02Induction on lL6–13

Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.

  1. L6
    induction l
  2. L7
    intro e
  3. L8
    intro F
  4. L9
    intro R
  5. L10
    intro hcount
  6. L11
    intro hsigns
  7. L12
    intro hproduct
  8. L13
    intro hpower
03Establish he0L14–21

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bit count zero.

  1. L14
    have he0 : e = 0
  2. L15
    specialize bit_count_zero sb
  3. L16
    specialize bit_count_zero sc
  4. L17
    specialize bit_count_zero 0
  5. L18
    specialize bit_count_zero e
  6. L19
    apply bit_count_zero
  7. L20
    refl
  8. L21
    exact hcount
04Establish hF1L22–27

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product zero.

  1. L22
    have hF1 : F = 1
  2. L23
    specialize beta_product_zero fb
  3. L24
    specialize beta_product_zero fc
  4. L25
    specialize beta_product_zero F
  5. L26
    apply beta_product_zero
  6. L27
    exact hproduct
05Establish hR1L28–37

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow zero.

  1. L28
    have hR1 : R = 1
  2. L29
    specialize pow_zero r
  3. L30
    specialize pow_zero e
  4. L31
    specialize pow_zero R
  5. L32
    apply pow_zero
  6. L33
    exact he0
  7. L34
    exact hpower
  8. L35
    trans 1
  9. L36
    exact hF1
  10. L37
    symm
06Use earlier factsL38–38

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L38
    exact hR1
07Fix variables and assumptionsL39–45

Work with arbitrary variables or the premises of the current implication.

  1. L39
    intro e
  2. L40
    intro F
  3. L41
    intro R
  4. L42
    intro hcount
  5. L43
    intro hsigns
  6. L44
    intro hproduct
  7. L45
    intro hpower
08Establish hcount_decompL46–54

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply bit count succ decompose.

  1. L46
    have hcount_decomp : ∃ a. ∃ k. BetaAt(sb,sc,l,a) ∧ (BitCount(sb,sc,l,k) ∧ ((a = 0 ∨ a = 1) ∧ e = k + a))Definitions: BetaAtBitCount
  2. L47
    specialize bit_count_succ_decompose sb
  3. L48
    specialize bit_count_succ_decompose sc
  4. L49
    specialize bit_count_succ_decompose l
  5. L50
    specialize bit_count_succ_decompose (S l)
  6. L51
    specialize bit_count_succ_decompose e
  7. L52
    apply bit_count_succ_decompose
  8. L53
    refl
  9. L54
    exact hcount
09Separate the logical casesL55–59

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L55
    cases hcount_decomp
  2. L56
    cases hcount_decomp_witness
  3. L57
    cases hcount_decomp_witness_witness
  4. L58
    cases hcount_decomp_witness_witness_right
  5. L59
    cases hcount_decomp_witness_witness_right_right
10Establish hproduct_decompL60–66

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta product succ decompose.

  1. L60
    have hproduct_decomp : ∃ f. ∃ G. BetaAt(fb,fc,l,f) ∧ (Product(fb,fc,l,G) ∧ F = G · f)Definitions: BetaAtProduct
  2. L61
    specialize beta_product_succ_decompose fb
  3. L62
    specialize beta_product_succ_decompose fc
  4. L63
    specialize beta_product_succ_decompose l
  5. L64
    specialize beta_product_succ_decompose F
  6. L65
    apply beta_product_succ_decompose
  7. L66
    exact hproduct
11Separate the logical casesL67–70

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L67
    cases hproduct_decomp
  2. L68
    cases hproduct_decomp_witness
  3. L69
    cases hproduct_decomp_witness_witness
  4. L70
    cases hproduct_decomp_witness_witness_right
12Establish hprefix_signsL71–79

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta sign factor prefix drop last.

  1. L71
    have hprefix_signs : ∀ gspf_index_sign_product_restricted_signs. ∀ gspf_bit_sign_product_restricted_signs. Lt(gspf_index_sign_product_restricted_signs,l) → BetaAt(sb,sc,gspf_index_sign_product_restricted_signs,gspf_bit_sign_product_restricted_signs) → gspf_bit_sign_product_restricted_signs = 0 ∧ BetaAt(fb,fc,gspf_index_sign_product_restricted_signs,1) ∨ gspf_bit_sign_product_restricted_signs = 1 ∧ BetaAt(fb,fc,gspf_index_sign_product_restricted_signs,r)Definitions: LtBetaAt
  2. L72
    specialize beta_sign_factor_prefix_drop_last sb
  3. L73
    specialize beta_sign_factor_prefix_drop_last sc
  4. L74
    specialize beta_sign_factor_prefix_drop_last fb
  5. L75
    specialize beta_sign_factor_prefix_drop_last fc
  6. L76
    specialize beta_sign_factor_prefix_drop_last r
  7. L77
    specialize beta_sign_factor_prefix_drop_last l
  8. L78
    apply beta_sign_factor_prefix_drop_last
  9. L79
    exact hsigns
13Establish hlast_caseL80–86

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hsigns.

  1. L80
    have hlast_case : ((x = 0) /\ (((exists gsp_beta_height_sign_product_last_one. gsp_beta_height_sign_product_last_one + S (1) = S ((S (l)) * fc)) /\ exists gsp_beta_quotient_sign_product_last_one. fb = gsp_beta_quotient_sign_product_last_one * S ((S (l)) * fc) + (1)))) \/ ((x = 1) /\ (((exists ff_h_sign_product_last_predecessor. ff_h_sign_product_last_predecessor + S (r) = S ((S (l)) * fc)) /\ exists ff_q_sign_product_last_predecessor. fb = ff_q_sign_product_last_predecessor * S ((S (l)) * fc) + (r))))
  2. L81
    specialize hsigns l
  3. L82
    specialize hsigns x
  4. L83
    apply hsigns
  5. L84
    specialize le_refl (S l)
  6. L85
    exact le_refl
  7. L86
    exact hcount_decomp_witness_witness_left
14Separate the logical casesL87–88

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L87
    cases hlast_case
  2. L88
    cases hlast_case_left
15Establish hfactor_oneL89–97

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.

  1. L89
    have hfactor_one : x2 = 1
  2. L90
    specialize beta_at_unique fb
  3. L91
    specialize beta_at_unique fc
  4. L92
    specialize beta_at_unique l
  5. L93
    specialize beta_at_unique x2
  6. L94
    specialize beta_at_unique 1
  7. L95
    apply beta_at_unique
  8. L96
    exact hproduct_decomp_witness_witness_left
  9. L97
    exact hlast_case_left_right
16Establish heqkL98–106

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply PA3.

  1. L98
    have heqk : e = x1
  2. L99
    trans x1 + x
  3. L100
    exact hcount_decomp_witness_witness_right_right_right
  4. L101
    rewrite hlast_case_left_left
  5. L102
    apply PA3
  6. L103
    rewrite heqk at hpower
  7. L104
    rewrite heqk at hpower
  8. L105
    rewrite heqk at hpower
  9. L106
    rewrite heqk at hpower
17Establish hprefix_equalL107–116

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.

  1. L107
    have hprefix_equal : x3 = R
  2. L108
    specialize IH x1
  3. L109
    specialize IH x3
  4. L110
    specialize IH R
  5. L111
    apply IH
  6. L112
    exact hcount_decomp_witness_witness_right_left
  7. L113
    exact hprefix_signs
  8. L114
    exact hproduct_decomp_witness_witness_right_left
  9. L115
    exact hpower
  10. L116
    rewrite hproduct_decomp_witness_witness_right_right
18Calculate and transport equalitiesL117–117

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L117
    rewrite hfactor_one
19Use earlier factsL118–118

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L118
    specialize mul_one x3
20Calculate and transport equalitiesL119–119

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L119
    rewrite mul_one
21Use earlier factsL120–120

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L120
    exact hprefix_equal
22Separate the logical casesL121–121

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L121
    cases hlast_case_right
23Establish hfactor_rL122–130

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.

  1. L122
    have hfactor_r : x2 = r
  2. L123
    specialize beta_at_unique fb
  3. L124
    specialize beta_at_unique fc
  4. L125
    specialize beta_at_unique l
  5. L126
    specialize beta_at_unique x2
  6. L127
    specialize beta_at_unique r
  7. L128
    apply beta_at_unique
  8. L129
    exact hproduct_decomp_witness_witness_left
  9. L130
    exact hlast_case_right_right
24Establish hsumL131–136

Establish this local claim before using it. It is not an additional assumption.

  1. L131
    have hsum : e = x1 + 1
  2. L132
    trans x1 + x
  3. L133
    exact hcount_decomp_witness_witness_right_right_right
  4. L134
    congr
  5. L135
    refl
  6. L136
    exact hlast_case_right_left
25Establish hsuccL137–141

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply PA4.

  1. L137
    have hsucc : x1 + 1 = S x1
  2. L138
    trans S (x1 + 0)
  3. L139
    apply PA4
  4. L140
    congr
  5. L141
    apply PA3
26Establish heqsuccL142–145

Establish this local claim before using it. It is not an additional assumption.

  1. L142
    have heqsucc : e = S x1
  2. L143
    trans x1 + 1
  3. L144
    exact hsum
  4. L145
    exact hsucc
27Establish hpower_decompL146–153

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor decompose.

  1. L146
    have hpower_decomp : ∃ W. Pow(r,x1,W) ∧ R = W · rDefinitions: Pow
  2. L147
    specialize pow_successor_decompose r
  3. L148
    specialize pow_successor_decompose x1
  4. L149
    specialize pow_successor_decompose e
  5. L150
    specialize pow_successor_decompose R
  6. L151
    apply pow_successor_decompose
  7. L152
    exact heqsucc
  8. L153
    exact hpower
28Separate the logical casesL154–155

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L154
    cases hpower_decomp
  2. L155
    cases hpower_decomp_witness
29Establish hprefix_equalL156–165

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.

  1. L156
    have hprefix_equal : x3 = x4
  2. L157
    specialize IH x1
  3. L158
    specialize IH x3
  4. L159
    specialize IH x4
  5. L160
    apply IH
  6. L161
    exact hcount_decomp_witness_witness_right_left
  7. L162
    exact hprefix_signs
  8. L163
    exact hproduct_decomp_witness_witness_right_left
  9. L164
    exact hpower_decomp_witness_left
  10. L165
    rewrite hproduct_decomp_witness_witness_right_right
30Calculate and transport equalitiesL166–168

Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.

  1. L166
    rewrite hfactor_r
  2. L167
    rewrite hprefix_equal
  3. L168
    symm
31Use earlier factsL169–169

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L169
    exact hpower_decomp_witness_right

Library-wide reading audit

Original exact command ledger · 169 lines
  1. 0001intro sb
  2. 0002intro sc
  3. 0003intro fb
  4. 0004intro fc
  5. 0005intro r
  6. 0006induction l
  7. 0007intro e
  8. 0008intro F
  9. 0009intro R
  10. 0010intro hcount
  11. 0011intro hsigns
  12. 0012intro hproduct
  13. 0013intro hpower
  14. 0014have he0 : e = 0
  15. 0015specialize bit_count_zero sb
  16. 0016specialize bit_count_zero sc
  17. 0017specialize bit_count_zero 0
  18. 0018specialize bit_count_zero e
  19. 0019apply bit_count_zero
  20. 0020refl
  21. 0021exact hcount
  22. 0022have hF1 : F = 1
  23. 0023specialize beta_product_zero fb
  24. 0024specialize beta_product_zero fc
  25. 0025specialize beta_product_zero F
  26. 0026apply beta_product_zero
  27. 0027exact hproduct
  28. 0028have hR1 : R = 1
  29. 0029specialize pow_zero r
  30. 0030specialize pow_zero e
  31. 0031specialize pow_zero R
  32. 0032apply pow_zero
  33. 0033exact he0
  34. 0034exact hpower
  35. 0035trans 1
  36. 0036exact hF1
  37. 0037symm
  38. 0038exact hR1
  39. 0039intro e
  40. 0040intro F
  41. 0041intro R
  42. 0042intro hcount
  43. 0043intro hsigns
  44. 0044intro hproduct
  45. 0045intro hpower
  46. 0046have hcount_decomp : exists a k. (((exists ff_h_sign_product_last_bit. ff_h_sign_product_last_bit + S (a) = S ((S (l)) * sc)) /\ exists ff_q_sign_product_last_bit. sb = ff_q_sign_product_last_bit * S ((S (l)) * sc) + (a))) /\ ((((exists ff_u_sign_product_prefix_count_sum ff_v_sign_product_prefix_count_sum. ((((exists ff_h_sign_product_prefix_count_sum_start. ff_h_sign_product_prefix_count_sum_start + S (0) = S ((S (0)) * ff_v_sign_product_prefix_count_sum)) /\ exists ff_q_sign_product_prefix_count_sum_start. ff_u_sign_product_prefix_count_sum = ff_q_sign_product_prefix_count_sum_start * S ((S (0)) * ff_v_sign_product_prefix_count_sum) + (0))) /\ ((((exists ff_h_sign_product_prefix_count_sum_terminal. ff_h_sign_product_prefix_count_sum_terminal + S (k) = S ((S (l)) * ff_v_sign_product_prefix_count_sum)) /\ exists ff_q_sign_product_prefix_count_sum_terminal. ff_u_sign_product_prefix_count_sum = ff_q_sign_product_prefix_count_sum_terminal * S ((S (l)) * ff_v_sign_product_prefix_count_sum) + (k))) /\ forall ff_i_sign_product_prefix_count_sum. (exists ff_lt_sign_product_prefix_count_sum_bound. ff_lt_sign_product_prefix_count_sum_bound + S ff_i_sign_product_prefix_count_sum = l) -> exists ff_a_sign_product_prefix_count_sum ff_r_sign_product_prefix_count_sum ff_s_sign_product_prefix_count_sum. ((((exists ff_h_sign_product_prefix_count_sum_summand. ff_h_sign_product_prefix_count_sum_summand + S (ff_a_sign_product_prefix_count_sum) = S ((S (ff_i_sign_product_prefix_count_sum)) * sc)) /\ exists ff_q_sign_product_prefix_count_sum_summand. sb = ff_q_sign_product_prefix_count_sum_summand * S ((S (ff_i_sign_product_prefix_count_sum)) * sc) + (ff_a_sign_product_prefix_count_sum))) /\ ((((exists ff_h_sign_product_prefix_count_sum_partial. ff_h_sign_product_prefix_count_sum_partial + S (ff_r_sign_product_prefix_count_sum) = S ((S (ff_i_sign_product_prefix_count_sum)) * ff_v_sign_product_prefix_count_sum)) /\ exists ff_q_sign_product_prefix_count_sum_partial. ff_u_sign_product_prefix_count_sum = ff_q_sign_product_prefix_count_sum_partial * S ((S (ff_i_sign_product_prefix_count_sum)) * ff_v_sign_product_prefix_count_sum) + (ff_r_sign_product_prefix_count_sum))) /\ ((((exists ff_h_sign_product_prefix_count_sum_successor. ff_h_sign_product_prefix_count_sum_successor + S (ff_s_sign_product_prefix_count_sum) = S ((S (S ff_i_sign_product_prefix_count_sum)) * ff_v_sign_product_prefix_count_sum)) /\ exists ff_q_sign_product_prefix_count_sum_successor. ff_u_sign_product_prefix_count_sum = ff_q_sign_product_prefix_count_sum_successor * S ((S (S ff_i_sign_product_prefix_count_sum)) * ff_v_sign_product_prefix_count_sum) + (ff_s_sign_product_prefix_count_sum))) /\ ff_s_sign_product_prefix_count_sum = ff_r_sign_product_prefix_count_sum + ff_a_sign_product_prefix_count_sum)))))) /\ (forall ff_i_sign_product_prefix_count_bits. (exists ff_lt_sign_product_prefix_count_bits_bound. ff_lt_sign_product_prefix_count_bits_bound + S ff_i_sign_product_prefix_count_bits = l) -> exists ff_bit_sign_product_prefix_count_bits. ((((exists ff_h_sign_product_prefix_count_bits_decoded. ff_h_sign_product_prefix_count_bits_decoded + S (ff_bit_sign_product_prefix_count_bits) = S ((S (ff_i_sign_product_prefix_count_bits)) * sc)) /\ exists ff_q_sign_product_prefix_count_bits_decoded. sb = ff_q_sign_product_prefix_count_bits_decoded * S ((S (ff_i_sign_product_prefix_count_bits)) * sc) + (ff_bit_sign_product_prefix_count_bits))) /\ (ff_bit_sign_product_prefix_count_bits = 0 \/ ff_bit_sign_product_prefix_count_bits = 1))))) /\ ((a = 0 \/ a = 1) /\ e = k + a))
  47. 0047specialize bit_count_succ_decompose sb
  48. 0048specialize bit_count_succ_decompose sc
  49. 0049specialize bit_count_succ_decompose l
  50. 0050specialize bit_count_succ_decompose (S l)
  51. 0051specialize bit_count_succ_decompose e
  52. 0052apply bit_count_succ_decompose
  53. 0053refl
  54. 0054exact hcount
  55. 0055cases hcount_decomp
  56. 0056cases hcount_decomp_witness
  57. 0057cases hcount_decomp_witness_witness
  58. 0058cases hcount_decomp_witness_witness_right
  59. 0059cases hcount_decomp_witness_witness_right_right
  60. 0060have hproduct_decomp : exists f G. (((exists ff_h_sign_product_last_factor. ff_h_sign_product_last_factor + S (f) = S ((S (l)) * fc)) /\ exists ff_q_sign_product_last_factor. fb = ff_q_sign_product_last_factor * S ((S (l)) * fc) + (f))) /\ ((exists ff_u_sign_product_prefix_product ff_v_sign_product_prefix_product. ((((exists ff_h_sign_product_prefix_product_start. ff_h_sign_product_prefix_product_start + S (1) = S ((S (0)) * ff_v_sign_product_prefix_product)) /\ exists ff_q_sign_product_prefix_product_start. ff_u_sign_product_prefix_product = ff_q_sign_product_prefix_product_start * S ((S (0)) * ff_v_sign_product_prefix_product) + (1))) /\ ((((exists ff_h_sign_product_prefix_product_terminal. ff_h_sign_product_prefix_product_terminal + S (G) = S ((S (l)) * ff_v_sign_product_prefix_product)) /\ exists ff_q_sign_product_prefix_product_terminal. ff_u_sign_product_prefix_product = ff_q_sign_product_prefix_product_terminal * S ((S (l)) * ff_v_sign_product_prefix_product) + (G))) /\ forall ff_i_sign_product_prefix_product. (exists ff_lt_sign_product_prefix_product_bound. ff_lt_sign_product_prefix_product_bound + S ff_i_sign_product_prefix_product = l) -> exists ff_p_sign_product_prefix_product ff_r_sign_product_prefix_product ff_s_sign_product_prefix_product. ((((exists ff_h_sign_product_prefix_product_factor. ff_h_sign_product_prefix_product_factor + S (ff_p_sign_product_prefix_product) = S ((S (ff_i_sign_product_prefix_product)) * fc)) /\ exists ff_q_sign_product_prefix_product_factor. fb = ff_q_sign_product_prefix_product_factor * S ((S (ff_i_sign_product_prefix_product)) * fc) + (ff_p_sign_product_prefix_product))) /\ ((((exists ff_h_sign_product_prefix_product_partial. ff_h_sign_product_prefix_product_partial + S (ff_r_sign_product_prefix_product) = S ((S (ff_i_sign_product_prefix_product)) * ff_v_sign_product_prefix_product)) /\ exists ff_q_sign_product_prefix_product_partial. ff_u_sign_product_prefix_product = ff_q_sign_product_prefix_product_partial * S ((S (ff_i_sign_product_prefix_product)) * ff_v_sign_product_prefix_product) + (ff_r_sign_product_prefix_product))) /\ ((((exists ff_h_sign_product_prefix_product_successor. ff_h_sign_product_prefix_product_successor + S (ff_s_sign_product_prefix_product) = S ((S (S ff_i_sign_product_prefix_product)) * ff_v_sign_product_prefix_product)) /\ exists ff_q_sign_product_prefix_product_successor. ff_u_sign_product_prefix_product = ff_q_sign_product_prefix_product_successor * S ((S (S ff_i_sign_product_prefix_product)) * ff_v_sign_product_prefix_product) + (ff_s_sign_product_prefix_product))) /\ ff_s_sign_product_prefix_product = ff_r_sign_product_prefix_product * ff_p_sign_product_prefix_product)))))) /\ F = G * f)
  61. 0061specialize beta_product_succ_decompose fb
  62. 0062specialize beta_product_succ_decompose fc
  63. 0063specialize beta_product_succ_decompose l
  64. 0064specialize beta_product_succ_decompose F
  65. 0065apply beta_product_succ_decompose
  66. 0066exact hproduct
  67. 0067cases hproduct_decomp
  68. 0068cases hproduct_decomp_witness
  69. 0069cases hproduct_decomp_witness_witness
  70. 0070cases hproduct_decomp_witness_witness_right
  71. 0071have hprefix_signs : forall gspf_index_sign_product_restricted_signs gspf_bit_sign_product_restricted_signs. (exists gsp_lt_gap_sign_product_restricted_signs_bound. gsp_lt_gap_sign_product_restricted_signs_bound + S gspf_index_sign_product_restricted_signs = l) -> (((exists ff_h_gspf_sign_product_restricted_signs_bit. ff_h_gspf_sign_product_restricted_signs_bit + S (gspf_bit_sign_product_restricted_signs) = S ((S (gspf_index_sign_product_restricted_signs)) * sc)) /\ exists ff_q_gspf_sign_product_restricted_signs_bit. sb = ff_q_gspf_sign_product_restricted_signs_bit * S ((S (gspf_index_sign_product_restricted_signs)) * sc) + (gspf_bit_sign_product_restricted_signs))) -> (((gspf_bit_sign_product_restricted_signs = 0) /\ (((exists gsp_beta_height_gspf_sign_product_restricted_signs_one. gsp_beta_height_gspf_sign_product_restricted_signs_one + S (1) = S ((S (gspf_index_sign_product_restricted_signs)) * fc)) /\ exists gsp_beta_quotient_gspf_sign_product_restricted_signs_one. fb = gsp_beta_quotient_gspf_sign_product_restricted_signs_one * S ((S (gspf_index_sign_product_restricted_signs)) * fc) + (1)))) \/ ((gspf_bit_sign_product_restricted_signs = 1) /\ (((exists ff_h_gspf_sign_product_restricted_signs_predecessor. ff_h_gspf_sign_product_restricted_signs_predecessor + S (r) = S ((S (gspf_index_sign_product_restricted_signs)) * fc)) /\ exists ff_q_gspf_sign_product_restricted_signs_predecessor. fb = ff_q_gspf_sign_product_restricted_signs_predecessor * S ((S (gspf_index_sign_product_restricted_signs)) * fc) + (r)))))
  72. 0072specialize beta_sign_factor_prefix_drop_last sb
  73. 0073specialize beta_sign_factor_prefix_drop_last sc
  74. 0074specialize beta_sign_factor_prefix_drop_last fb
  75. 0075specialize beta_sign_factor_prefix_drop_last fc
  76. 0076specialize beta_sign_factor_prefix_drop_last r
  77. 0077specialize beta_sign_factor_prefix_drop_last l
  78. 0078apply beta_sign_factor_prefix_drop_last
  79. 0079exact hsigns
  80. 0080have hlast_case : ((x = 0) /\ (((exists gsp_beta_height_sign_product_last_one. gsp_beta_height_sign_product_last_one + S (1) = S ((S (l)) * fc)) /\ exists gsp_beta_quotient_sign_product_last_one. fb = gsp_beta_quotient_sign_product_last_one * S ((S (l)) * fc) + (1)))) \/ ((x = 1) /\ (((exists ff_h_sign_product_last_predecessor. ff_h_sign_product_last_predecessor + S (r) = S ((S (l)) * fc)) /\ exists ff_q_sign_product_last_predecessor. fb = ff_q_sign_product_last_predecessor * S ((S (l)) * fc) + (r))))
  81. 0081specialize hsigns l
  82. 0082specialize hsigns x
  83. 0083apply hsigns
  84. 0084specialize le_refl (S l)
  85. 0085exact le_refl
  86. 0086exact hcount_decomp_witness_witness_left
  87. 0087cases hlast_case
  88. 0088cases hlast_case_left
  89. 0089have hfactor_one : x2 = 1
  90. 0090specialize beta_at_unique fb
  91. 0091specialize beta_at_unique fc
  92. 0092specialize beta_at_unique l
  93. 0093specialize beta_at_unique x2
  94. 0094specialize beta_at_unique 1
  95. 0095apply beta_at_unique
  96. 0096exact hproduct_decomp_witness_witness_left
  97. 0097exact hlast_case_left_right
  98. 0098have heqk : e = x1
  99. 0099trans x1 + x
  100. 0100exact hcount_decomp_witness_witness_right_right_right
  101. 0101rewrite hlast_case_left_left
  102. 0102apply PA3
  103. 0103rewrite heqk at hpower
  104. 0104rewrite heqk at hpower
  105. 0105rewrite heqk at hpower
  106. 0106rewrite heqk at hpower
  107. 0107have hprefix_equal : x3 = R
  108. 0108specialize IH x1
  109. 0109specialize IH x3
  110. 0110specialize IH R
  111. 0111apply IH
  112. 0112exact hcount_decomp_witness_witness_right_left
  113. 0113exact hprefix_signs
  114. 0114exact hproduct_decomp_witness_witness_right_left
  115. 0115exact hpower
  116. 0116rewrite hproduct_decomp_witness_witness_right_right
  117. 0117rewrite hfactor_one
  118. 0118specialize mul_one x3
  119. 0119rewrite mul_one
  120. 0120exact hprefix_equal
  121. 0121cases hlast_case_right
  122. 0122have hfactor_r : x2 = r
  123. 0123specialize beta_at_unique fb
  124. 0124specialize beta_at_unique fc
  125. 0125specialize beta_at_unique l
  126. 0126specialize beta_at_unique x2
  127. 0127specialize beta_at_unique r
  128. 0128apply beta_at_unique
  129. 0129exact hproduct_decomp_witness_witness_left
  130. 0130exact hlast_case_right_right
  131. 0131have hsum : e = x1 + 1
  132. 0132trans x1 + x
  133. 0133exact hcount_decomp_witness_witness_right_right_right
  134. 0134congr
  135. 0135refl
  136. 0136exact hlast_case_right_left
  137. 0137have hsucc : x1 + 1 = S x1
  138. 0138trans S (x1 + 0)
  139. 0139apply PA4
  140. 0140congr
  141. 0141apply PA3
  142. 0142have heqsucc : e = S x1
  143. 0143trans x1 + 1
  144. 0144exact hsum
  145. 0145exact hsucc
  146. 0146have hpower_decomp : exists W. (exists ff_b_sign_product_predecessor_power ff_c_sign_product_predecessor_power. ((forall ff_i_sign_product_predecessor_power_repeat. (exists ff_lt_sign_product_predecessor_power_repeat_bound. ff_lt_sign_product_predecessor_power_repeat_bound + S ff_i_sign_product_predecessor_power_repeat = x1) -> (((exists ff_h_sign_product_predecessor_power_repeat_decoded. ff_h_sign_product_predecessor_power_repeat_decoded + S (r) = S ((S (ff_i_sign_product_predecessor_power_repeat)) * ff_c_sign_product_predecessor_power)) /\ exists ff_q_sign_product_predecessor_power_repeat_decoded. ff_b_sign_product_predecessor_power = ff_q_sign_product_predecessor_power_repeat_decoded * S ((S (ff_i_sign_product_predecessor_power_repeat)) * ff_c_sign_product_predecessor_power) + (r)))) /\ (exists ff_u_sign_product_predecessor_power_product ff_v_sign_product_predecessor_power_product. ((((exists ff_h_sign_product_predecessor_power_product_start. ff_h_sign_product_predecessor_power_product_start + S (1) = S ((S (0)) * ff_v_sign_product_predecessor_power_product)) /\ exists ff_q_sign_product_predecessor_power_product_start. ff_u_sign_product_predecessor_power_product = ff_q_sign_product_predecessor_power_product_start * S ((S (0)) * ff_v_sign_product_predecessor_power_product) + (1))) /\ ((((exists ff_h_sign_product_predecessor_power_product_terminal. ff_h_sign_product_predecessor_power_product_terminal + S (W) = S ((S (x1)) * ff_v_sign_product_predecessor_power_product)) /\ exists ff_q_sign_product_predecessor_power_product_terminal. ff_u_sign_product_predecessor_power_product = ff_q_sign_product_predecessor_power_product_terminal * S ((S (x1)) * ff_v_sign_product_predecessor_power_product) + (W))) /\ forall ff_i_sign_product_predecessor_power_product. (exists ff_lt_sign_product_predecessor_power_product_bound. ff_lt_sign_product_predecessor_power_product_bound + S ff_i_sign_product_predecessor_power_product = x1) -> exists ff_p_sign_product_predecessor_power_product ff_r_sign_product_predecessor_power_product ff_s_sign_product_predecessor_power_product. ((((exists ff_h_sign_product_predecessor_power_product_factor. ff_h_sign_product_predecessor_power_product_factor + S (ff_p_sign_product_predecessor_power_product) = S ((S (ff_i_sign_product_predecessor_power_product)) * ff_c_sign_product_predecessor_power)) /\ exists ff_q_sign_product_predecessor_power_product_factor. ff_b_sign_product_predecessor_power = ff_q_sign_product_predecessor_power_product_factor * S ((S (ff_i_sign_product_predecessor_power_product)) * ff_c_sign_product_predecessor_power) + (ff_p_sign_product_predecessor_power_product))) /\ ((((exists ff_h_sign_product_predecessor_power_product_partial. ff_h_sign_product_predecessor_power_product_partial + S (ff_r_sign_product_predecessor_power_product) = S ((S (ff_i_sign_product_predecessor_power_product)) * ff_v_sign_product_predecessor_power_product)) /\ exists ff_q_sign_product_predecessor_power_product_partial. ff_u_sign_product_predecessor_power_product = ff_q_sign_product_predecessor_power_product_partial * S ((S (ff_i_sign_product_predecessor_power_product)) * ff_v_sign_product_predecessor_power_product) + (ff_r_sign_product_predecessor_power_product))) /\ ((((exists ff_h_sign_product_predecessor_power_product_successor. ff_h_sign_product_predecessor_power_product_successor + S (ff_s_sign_product_predecessor_power_product) = S ((S (S ff_i_sign_product_predecessor_power_product)) * ff_v_sign_product_predecessor_power_product)) /\ exists ff_q_sign_product_predecessor_power_product_successor. ff_u_sign_product_predecessor_power_product = ff_q_sign_product_predecessor_power_product_successor * S ((S (S ff_i_sign_product_predecessor_power_product)) * ff_v_sign_product_predecessor_power_product) + (ff_s_sign_product_predecessor_power_product))) /\ ff_s_sign_product_predecessor_power_product = ff_r_sign_product_predecessor_power_product * ff_p_sign_product_predecessor_power_product)))))))) /\ R = W * r
  147. 0147specialize pow_successor_decompose r
  148. 0148specialize pow_successor_decompose x1
  149. 0149specialize pow_successor_decompose e
  150. 0150specialize pow_successor_decompose R
  151. 0151apply pow_successor_decompose
  152. 0152exact heqsucc
  153. 0153exact hpower
  154. 0154cases hpower_decomp
  155. 0155cases hpower_decomp_witness
  156. 0156have hprefix_equal : x3 = x4
  157. 0157specialize IH x1
  158. 0158specialize IH x3
  159. 0159specialize IH x4
  160. 0160apply IH
  161. 0161exact hcount_decomp_witness_witness_right_left
  162. 0162exact hprefix_signs
  163. 0163exact hproduct_decomp_witness_witness_right_left
  164. 0164exact hpower_decomp_witness_left
  165. 0165rewrite hproduct_decomp_witness_witness_right_right
  166. 0166rewrite hfactor_r
  167. 0167rewrite hprefix_equal
  168. 0168symm
  169. 0169exact hpower_decomp_witness_right