Exact expanded PA statement
forall b c d e f g l B A E. (exists ff_u_b5ccsdce_left_sum ff_v_b5ccsdce_left_sum. ((((exists ff_h_b5ccsdce_left_sum_start. ff_h_b5ccsdce_left_sum_start + S (0) = S ((S (0)) * ff_v_b5ccsdce_left_sum)) /\ exists ff_q_b5ccsdce_left_sum_start. ff_u_b5ccsdce_left_sum = ff_q_b5ccsdce_left_sum_start * S ((S (0)) * ff_v_b5ccsdce_left_sum) + (0))) /\ ((((exists ff_h_b5ccsdce_left_sum_terminal. ff_h_b5ccsdce_left_sum_terminal + S (B) = S ((S (l)) * ff_v_b5ccsdce_left_sum)) /\ exists ff_q_b5ccsdce_left_sum_terminal. ff_u_b5ccsdce_left_sum = ff_q_b5ccsdce_left_sum_terminal * S ((S (l)) * ff_v_b5ccsdce_left_sum) + (B))) /\ forall ff_i_b5ccsdce_left_sum. (exists ff_lt_b5ccsdce_left_sum_bound. ff_lt_b5ccsdce_left_sum_bound + S ff_i_b5ccsdce_left_sum = l) -> exists ff_a_b5ccsdce_left_sum ff_r_b5ccsdce_left_sum ff_s_b5ccsdce_left_sum. ((((exists ff_h_b5ccsdce_left_sum_summand. ff_h_b5ccsdce_left_sum_summand + S (ff_a_b5ccsdce_left_sum) = S ((S (ff_i_b5ccsdce_left_sum)) * c)) /\ exists ff_q_b5ccsdce_left_sum_summand. b = ff_q_b5ccsdce_left_sum_summand * S ((S (ff_i_b5ccsdce_left_sum)) * c) + (ff_a_b5ccsdce_left_sum))) /\ ((((exists ff_h_b5ccsdce_left_sum_partial. ff_h_b5ccsdce_left_sum_partial + S (ff_r_b5ccsdce_left_sum) = S ((S (ff_i_b5ccsdce_left_sum)) * ff_v_b5ccsdce_left_sum)) /\ exists ff_q_b5ccsdce_left_sum_partial. ff_u_b5ccsdce_left_sum = ff_q_b5ccsdce_left_sum_partial * S ((S (ff_i_b5ccsdce_left_sum)) * ff_v_b5ccsdce_left_sum) + (ff_r_b5ccsdce_left_sum))) /\ ((((exists ff_h_b5ccsdce_left_sum_successor. ff_h_b5ccsdce_left_sum_successor + S (ff_s_b5ccsdce_left_sum) = S ((S (S ff_i_b5ccsdce_left_sum)) * ff_v_b5ccsdce_left_sum)) /\ exists ff_q_b5ccsdce_left_sum_successor. ff_u_b5ccsdce_left_sum = ff_q_b5ccsdce_left_sum_successor * S ((S (S ff_i_b5ccsdce_left_sum)) * ff_v_b5ccsdce_left_sum) + (ff_s_b5ccsdce_left_sum))) /\ ff_s_b5ccsdce_left_sum = ff_r_b5ccsdce_left_sum + ff_a_b5ccsdce_left_sum)))))) -> (exists ff_u_b5ccsdce_right_sum ff_v_b5ccsdce_right_sum. ((((exists ff_h_b5ccsdce_right_sum_start. ff_h_b5ccsdce_right_sum_start + S (0) = S ((S (0)) * ff_v_b5ccsdce_right_sum)) /\ exists ff_q_b5ccsdce_right_sum_start. ff_u_b5ccsdce_right_sum = ff_q_b5ccsdce_right_sum_start * S ((S (0)) * ff_v_b5ccsdce_right_sum) + (0))) /\ ((((exists ff_h_b5ccsdce_right_sum_terminal. ff_h_b5ccsdce_right_sum_terminal + S (A) = S ((S (l)) * ff_v_b5ccsdce_right_sum)) /\ exists ff_q_b5ccsdce_right_sum_terminal. ff_u_b5ccsdce_right_sum = ff_q_b5ccsdce_right_sum_terminal * S ((S (l)) * ff_v_b5ccsdce_right_sum) + (A))) /\ forall ff_i_b5ccsdce_right_sum. (exists ff_lt_b5ccsdce_right_sum_bound. ff_lt_b5ccsdce_right_sum_bound + S ff_i_b5ccsdce_right_sum = l) -> exists ff_a_b5ccsdce_right_sum ff_r_b5ccsdce_right_sum ff_s_b5ccsdce_right_sum. ((((exists ff_h_b5ccsdce_right_sum_summand. ff_h_b5ccsdce_right_sum_summand + S (ff_a_b5ccsdce_right_sum) = S ((S (ff_i_b5ccsdce_right_sum)) * e)) /\ exists ff_q_b5ccsdce_right_sum_summand. d = ff_q_b5ccsdce_right_sum_summand * S ((S (ff_i_b5ccsdce_right_sum)) * e) + (ff_a_b5ccsdce_right_sum))) /\ ((((exists ff_h_b5ccsdce_right_sum_partial. ff_h_b5ccsdce_right_sum_partial + S (ff_r_b5ccsdce_right_sum) = S ((S (ff_i_b5ccsdce_right_sum)) * ff_v_b5ccsdce_right_sum)) /\ exists ff_q_b5ccsdce_right_sum_partial. ff_u_b5ccsdce_right_sum = ff_q_b5ccsdce_right_sum_partial * S ((S (ff_i_b5ccsdce_right_sum)) * ff_v_b5ccsdce_right_sum) + (ff_r_b5ccsdce_right_sum))) /\ ((((exists ff_h_b5ccsdce_right_sum_successor. ff_h_b5ccsdce_right_sum_successor + S (ff_s_b5ccsdce_right_sum) = S ((S (S ff_i_b5ccsdce_right_sum)) * ff_v_b5ccsdce_right_sum)) /\ exists ff_q_b5ccsdce_right_sum_successor. ff_u_b5ccsdce_right_sum = ff_q_b5ccsdce_right_sum_successor * S ((S (S ff_i_b5ccsdce_right_sum)) * ff_v_b5ccsdce_right_sum) + (ff_s_b5ccsdce_right_sum))) /\ ff_s_b5ccsdce_right_sum = ff_r_b5ccsdce_right_sum + ff_a_b5ccsdce_right_sum)))))) -> (forall b5cc_index_b5ccsdce_prefix. (exists bcf_lt_gap_b5ccsdce_prefix_bound. bcf_lt_gap_b5ccsdce_prefix_bound + S (b5cc_index_b5ccsdce_prefix) = l) -> exists b5cc_left_b5ccsdce_prefix b5cc_right_b5ccsdce_prefix b5cc_bit_b5ccsdce_prefix. (((exists fs_h_b5cc_b5ccsdce_prefix_left. fs_h_b5cc_b5ccsdce_prefix_left + S (b5cc_left_b5ccsdce_prefix) = S ((S (b5cc_index_b5ccsdce_prefix)) * c)) /\ exists fs_q_b5cc_b5ccsdce_prefix_left. b = fs_q_b5cc_b5ccsdce_prefix_left * S ((S (b5cc_index_b5ccsdce_prefix)) * c) + (b5cc_left_b5ccsdce_prefix))) /\ ((((exists fs_h_b5cc_b5ccsdce_prefix_right. fs_h_b5cc_b5ccsdce_prefix_right + S (b5cc_right_b5ccsdce_prefix) = S ((S (b5cc_index_b5ccsdce_prefix)) * e)) /\ exists fs_q_b5cc_b5ccsdce_prefix_right. d = fs_q_b5cc_b5ccsdce_prefix_right * S ((S (b5cc_index_b5ccsdce_prefix)) * e) + (b5cc_right_b5ccsdce_prefix))) /\ ((((exists fs_h_b5cc_b5ccsdce_prefix_bit. fs_h_b5cc_b5ccsdce_prefix_bit + S (b5cc_bit_b5ccsdce_prefix) = S ((S (b5cc_index_b5ccsdce_prefix)) * g)) /\ exists fs_q_b5cc_b5ccsdce_prefix_bit. f = fs_q_b5cc_b5ccsdce_prefix_bit * S ((S (b5cc_index_b5ccsdce_prefix)) * g) + (b5cc_bit_b5ccsdce_prefix))) /\ (((b5cc_bit_b5ccsdce_prefix = 0 /\ b5cc_right_b5ccsdce_prefix = b5cc_left_b5ccsdce_prefix + b5cc_left_b5ccsdce_prefix) \/ (b5cc_bit_b5ccsdce_prefix = 1 /\ b5cc_right_b5ccsdce_prefix = S (b5cc_left_b5ccsdce_prefix + b5cc_left_b5ccsdce_prefix))))))) -> (((exists ff_u_b5ccsdce_count_sum ff_v_b5ccsdce_count_sum. ((((exists ff_h_b5ccsdce_count_sum_start. ff_h_b5ccsdce_count_sum_start + S (0) = S ((S (0)) * ff_v_b5ccsdce_count_sum)) /\ exists ff_q_b5ccsdce_count_sum_start. ff_u_b5ccsdce_count_sum = ff_q_b5ccsdce_count_sum_start * S ((S (0)) * ff_v_b5ccsdce_count_sum) + (0))) /\ ((((exists ff_h_b5ccsdce_count_sum_terminal. ff_h_b5ccsdce_count_sum_terminal + S (E) = S ((S (l)) * ff_v_b5ccsdce_count_sum)) /\ exists ff_q_b5ccsdce_count_sum_terminal. ff_u_b5ccsdce_count_sum = ff_q_b5ccsdce_count_sum_terminal * S ((S (l)) * ff_v_b5ccsdce_count_sum) + (E))) /\ forall ff_i_b5ccsdce_count_sum. (exists ff_lt_b5ccsdce_count_sum_bound. ff_lt_b5ccsdce_count_sum_bound + S ff_i_b5ccsdce_count_sum = l) -> exists ff_a_b5ccsdce_count_sum ff_r_b5ccsdce_count_sum ff_s_b5ccsdce_count_sum. ((((exists ff_h_b5ccsdce_count_sum_summand. ff_h_b5ccsdce_count_sum_summand + S (ff_a_b5ccsdce_count_sum) = S ((S (ff_i_b5ccsdce_count_sum)) * g)) /\ exists ff_q_b5ccsdce_count_sum_summand. f = ff_q_b5ccsdce_count_sum_summand * S ((S (ff_i_b5ccsdce_count_sum)) * g) + (ff_a_b5ccsdce_count_sum))) /\ ((((exists ff_h_b5ccsdce_count_sum_partial. ff_h_b5ccsdce_count_sum_partial + S (ff_r_b5ccsdce_count_sum) = S ((S (ff_i_b5ccsdce_count_sum)) * ff_v_b5ccsdce_count_sum)) /\ exists ff_q_b5ccsdce_count_sum_partial. ff_u_b5ccsdce_count_sum = ff_q_b5ccsdce_count_sum_partial * S ((S (ff_i_b5ccsdce_count_sum)) * ff_v_b5ccsdce_count_sum) + (ff_r_b5ccsdce_count_sum))) /\ ((((exists ff_h_b5ccsdce_count_sum_successor. ff_h_b5ccsdce_count_sum_successor + S (ff_s_b5ccsdce_count_sum) = S ((S (S ff_i_b5ccsdce_count_sum)) * ff_v_b5ccsdce_count_sum)) /\ exists ff_q_b5ccsdce_count_sum_successor. ff_u_b5ccsdce_count_sum = ff_q_b5ccsdce_count_sum_successor * S ((S (S ff_i_b5ccsdce_count_sum)) * ff_v_b5ccsdce_count_sum) + (ff_s_b5ccsdce_count_sum))) /\ ff_s_b5ccsdce_count_sum = ff_r_b5ccsdce_count_sum + ff_a_b5ccsdce_count_sum)))))) /\ (forall ff_i_b5ccsdce_count_bits. (exists ff_lt_b5ccsdce_count_bits_bound. ff_lt_b5ccsdce_count_bits_bound + S ff_i_b5ccsdce_count_bits = l) -> exists ff_bit_b5ccsdce_count_bits. ((((exists ff_h_b5ccsdce_count_bits_decoded. ff_h_b5ccsdce_count_bits_decoded + S (ff_bit_b5ccsdce_count_bits) = S ((S (ff_i_b5ccsdce_count_bits)) * g)) /\ exists ff_q_b5ccsdce_count_bits_decoded. f = ff_q_b5ccsdce_count_bits_decoded * S ((S (ff_i_b5ccsdce_count_bits)) * g) + (ff_bit_b5ccsdce_count_bits))) /\ (ff_bit_b5ccsdce_count_bits = 0 \/ ff_bit_b5ccsdce_count_bits = 1))))) -> A = (B + B) + EStructural proof guide
The doubled quotient sum is twice the source sum plus its carries.
Direct prerequisites: beta_sum_zero, beta_sum_succ_decompose, bit_count_zero, bit_count_succ_decompose, beta_at_unique, le_refl, double_quotient_carry_prefix_restrict, add_assoc, add_permute_outer, add_comm. The authored body proceeds by structural induction (1), case analysis (22), intermediate claims (16), equality transport (21).
Proof neighborhood
Direct dependencies
BT008E beta_sum_zero BT008F beta_sum_succ_decompose BT008N bit_count_zero BT008O bit_count_succ_decompose BT0042 beta_at_unique BT000E le_refl BT00Y0 double_quotient_carry_prefix_restrict BT0003 add_assoc BT0032 add_permute_outer BT0002 add_commDirect dependents
Formal native tactic body
Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.
- 0001
intro b - 0002
intro c - 0003
intro d - 0004
intro e - 0005
intro f - 0006
intro g - 0007
induction l - 0008
intro B - 0009
intro A - 0010
intro E - 0011
intro hleft - 0012
intro hright - 0013
intro hcarry - 0014
intro hcount - 0015
have hB : B = 0 - 0016
specialize beta_sum_zero b - 0017
specialize beta_sum_zero c - 0018
specialize beta_sum_zero B - 0019
apply beta_sum_zero - 0020
exact hleft - 0021
have hA : A = 0 - 0022
specialize beta_sum_zero d - 0023
specialize beta_sum_zero e - 0024
specialize beta_sum_zero A - 0025
apply beta_sum_zero - 0026
exact hright - 0027
have hE : E = 0 - 0028
specialize bit_count_zero f - 0029
specialize bit_count_zero g - 0030
specialize bit_count_zero 0 - 0031
specialize bit_count_zero E - 0032
apply bit_count_zero - 0033
refl - 0034
exact hcount - 0035
rewrite hA - 0036
rewrite hB - 0037
rewrite hB - 0038
rewrite hE - 0039
simp - 0040
intro B - 0041
intro A - 0042
intro E - 0043
intro hleft - 0044
intro hright - 0045
intro hcarry - 0046
intro hcount - 0047
have hleft_decomp : exists a r. (((exists fs_h_b5ccsdce_left_decomp_entry. fs_h_b5ccsdce_left_decomp_entry + S (a) = S ((S (l)) * c)) /\ exists fs_q_b5ccsdce_left_decomp_entry. b = fs_q_b5ccsdce_left_decomp_entry * S ((S (l)) * c) + (a))) /\ ((exists fs_u_b5ccsdce_left_decomp_prefix fs_v_b5ccsdce_left_decomp_prefix. ((((exists fs_h_b5ccsdce_left_decomp_prefix_body_start. fs_h_b5ccsdce_left_decomp_prefix_body_start + S (0) = S ((S (0)) * fs_v_b5ccsdce_left_decomp_prefix)) /\ exists fs_q_b5ccsdce_left_decomp_prefix_body_start. fs_u_b5ccsdce_left_decomp_prefix = fs_q_b5ccsdce_left_decomp_prefix_body_start * S ((S (0)) * fs_v_b5ccsdce_left_decomp_prefix) + (0))) /\ ((((exists fs_h_b5ccsdce_left_decomp_prefix_body_terminal. fs_h_b5ccsdce_left_decomp_prefix_body_terminal + S (r) = S ((S (l)) * fs_v_b5ccsdce_left_decomp_prefix)) /\ exists fs_q_b5ccsdce_left_decomp_prefix_body_terminal. fs_u_b5ccsdce_left_decomp_prefix = fs_q_b5ccsdce_left_decomp_prefix_body_terminal * S ((S (l)) * fs_v_b5ccsdce_left_decomp_prefix) + (r))) /\ forall fs_i_b5ccsdce_left_decomp_prefix_body_steps. (exists fs_lt_b5ccsdce_left_decomp_prefix_body_steps_bound. fs_lt_b5ccsdce_left_decomp_prefix_body_steps_bound + S fs_i_b5ccsdce_left_decomp_prefix_body_steps = l) -> exists fs_a_b5ccsdce_left_decomp_prefix_body_steps fs_r_b5ccsdce_left_decomp_prefix_body_steps fs_s_b5ccsdce_left_decomp_prefix_body_steps. ((((exists fs_h_b5ccsdce_left_decomp_prefix_body_steps_summand. fs_h_b5ccsdce_left_decomp_prefix_body_steps_summand + S (fs_a_b5ccsdce_left_decomp_prefix_body_steps) = S ((S (fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * c)) /\ exists fs_q_b5ccsdce_left_decomp_prefix_body_steps_summand. b = fs_q_b5ccsdce_left_decomp_prefix_body_steps_summand * S ((S (fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * c) + (fs_a_b5ccsdce_left_decomp_prefix_body_steps))) /\ ((((exists fs_h_b5ccsdce_left_decomp_prefix_body_steps_partial. fs_h_b5ccsdce_left_decomp_prefix_body_steps_partial + S (fs_r_b5ccsdce_left_decomp_prefix_body_steps) = S ((S (fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * fs_v_b5ccsdce_left_decomp_prefix)) /\ exists fs_q_b5ccsdce_left_decomp_prefix_body_steps_partial. fs_u_b5ccsdce_left_decomp_prefix = fs_q_b5ccsdce_left_decomp_prefix_body_steps_partial * S ((S (fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * fs_v_b5ccsdce_left_decomp_prefix) + (fs_r_b5ccsdce_left_decomp_prefix_body_steps))) /\ ((((exists fs_h_b5ccsdce_left_decomp_prefix_body_steps_successor. fs_h_b5ccsdce_left_decomp_prefix_body_steps_successor + S (fs_s_b5ccsdce_left_decomp_prefix_body_steps) = S ((S (S fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * fs_v_b5ccsdce_left_decomp_prefix)) /\ exists fs_q_b5ccsdce_left_decomp_prefix_body_steps_successor. fs_u_b5ccsdce_left_decomp_prefix = fs_q_b5ccsdce_left_decomp_prefix_body_steps_successor * S ((S (S fs_i_b5ccsdce_left_decomp_prefix_body_steps)) * fs_v_b5ccsdce_left_decomp_prefix) + (fs_s_b5ccsdce_left_decomp_prefix_body_steps))) /\ fs_s_b5ccsdce_left_decomp_prefix_body_steps = fs_r_b5ccsdce_left_decomp_prefix_body_steps + fs_a_b5ccsdce_left_decomp_prefix_body_steps)))))) /\ B = r + a) - 0048
specialize beta_sum_succ_decompose b - 0049
specialize beta_sum_succ_decompose c - 0050
specialize beta_sum_succ_decompose l - 0051
specialize beta_sum_succ_decompose B - 0052
apply beta_sum_succ_decompose - 0053
exact hleft - 0054
cases hleft_decomp - 0055
cases hleft_decomp_witness - 0056
cases hleft_decomp_witness_witness - 0057
cases hleft_decomp_witness_witness_right - 0058
have hright_decomp : exists a r. (((exists fs_h_b5ccsdce_right_decomp_entry. fs_h_b5ccsdce_right_decomp_entry + S (a) = S ((S (l)) * e)) /\ exists fs_q_b5ccsdce_right_decomp_entry. d = fs_q_b5ccsdce_right_decomp_entry * S ((S (l)) * e) + (a))) /\ ((exists fs_u_b5ccsdce_right_decomp_prefix fs_v_b5ccsdce_right_decomp_prefix. ((((exists fs_h_b5ccsdce_right_decomp_prefix_body_start. fs_h_b5ccsdce_right_decomp_prefix_body_start + S (0) = S ((S (0)) * fs_v_b5ccsdce_right_decomp_prefix)) /\ exists fs_q_b5ccsdce_right_decomp_prefix_body_start. fs_u_b5ccsdce_right_decomp_prefix = fs_q_b5ccsdce_right_decomp_prefix_body_start * S ((S (0)) * fs_v_b5ccsdce_right_decomp_prefix) + (0))) /\ ((((exists fs_h_b5ccsdce_right_decomp_prefix_body_terminal. fs_h_b5ccsdce_right_decomp_prefix_body_terminal + S (r) = S ((S (l)) * fs_v_b5ccsdce_right_decomp_prefix)) /\ exists fs_q_b5ccsdce_right_decomp_prefix_body_terminal. fs_u_b5ccsdce_right_decomp_prefix = fs_q_b5ccsdce_right_decomp_prefix_body_terminal * S ((S (l)) * fs_v_b5ccsdce_right_decomp_prefix) + (r))) /\ forall fs_i_b5ccsdce_right_decomp_prefix_body_steps. (exists fs_lt_b5ccsdce_right_decomp_prefix_body_steps_bound. fs_lt_b5ccsdce_right_decomp_prefix_body_steps_bound + S fs_i_b5ccsdce_right_decomp_prefix_body_steps = l) -> exists fs_a_b5ccsdce_right_decomp_prefix_body_steps fs_r_b5ccsdce_right_decomp_prefix_body_steps fs_s_b5ccsdce_right_decomp_prefix_body_steps. ((((exists fs_h_b5ccsdce_right_decomp_prefix_body_steps_summand. fs_h_b5ccsdce_right_decomp_prefix_body_steps_summand + S (fs_a_b5ccsdce_right_decomp_prefix_body_steps) = S ((S (fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * e)) /\ exists fs_q_b5ccsdce_right_decomp_prefix_body_steps_summand. d = fs_q_b5ccsdce_right_decomp_prefix_body_steps_summand * S ((S (fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * e) + (fs_a_b5ccsdce_right_decomp_prefix_body_steps))) /\ ((((exists fs_h_b5ccsdce_right_decomp_prefix_body_steps_partial. fs_h_b5ccsdce_right_decomp_prefix_body_steps_partial + S (fs_r_b5ccsdce_right_decomp_prefix_body_steps) = S ((S (fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * fs_v_b5ccsdce_right_decomp_prefix)) /\ exists fs_q_b5ccsdce_right_decomp_prefix_body_steps_partial. fs_u_b5ccsdce_right_decomp_prefix = fs_q_b5ccsdce_right_decomp_prefix_body_steps_partial * S ((S (fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * fs_v_b5ccsdce_right_decomp_prefix) + (fs_r_b5ccsdce_right_decomp_prefix_body_steps))) /\ ((((exists fs_h_b5ccsdce_right_decomp_prefix_body_steps_successor. fs_h_b5ccsdce_right_decomp_prefix_body_steps_successor + S (fs_s_b5ccsdce_right_decomp_prefix_body_steps) = S ((S (S fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * fs_v_b5ccsdce_right_decomp_prefix)) /\ exists fs_q_b5ccsdce_right_decomp_prefix_body_steps_successor. fs_u_b5ccsdce_right_decomp_prefix = fs_q_b5ccsdce_right_decomp_prefix_body_steps_successor * S ((S (S fs_i_b5ccsdce_right_decomp_prefix_body_steps)) * fs_v_b5ccsdce_right_decomp_prefix) + (fs_s_b5ccsdce_right_decomp_prefix_body_steps))) /\ fs_s_b5ccsdce_right_decomp_prefix_body_steps = fs_r_b5ccsdce_right_decomp_prefix_body_steps + fs_a_b5ccsdce_right_decomp_prefix_body_steps)))))) /\ A = r + a) - 0059
specialize beta_sum_succ_decompose d - 0060
specialize beta_sum_succ_decompose e - 0061
specialize beta_sum_succ_decompose l - 0062
specialize beta_sum_succ_decompose A - 0063
apply beta_sum_succ_decompose - 0064
exact hright - 0065
cases hright_decomp - 0066
cases hright_decomp_witness - 0067
cases hright_decomp_witness_witness - 0068
cases hright_decomp_witness_witness_right - 0069
have hcount_decomp : exists bit r. (((exists fs_h_b5ccsdce_count_last. fs_h_b5ccsdce_count_last + S (bit) = S ((S (l)) * g)) /\ exists fs_q_b5ccsdce_count_last. f = fs_q_b5ccsdce_count_last * S ((S (l)) * g) + (bit))) /\ ((((exists ff_u_b5ccsdce_count_prefix_sum ff_v_b5ccsdce_count_prefix_sum. ((((exists ff_h_b5ccsdce_count_prefix_sum_start. ff_h_b5ccsdce_count_prefix_sum_start + S (0) = S ((S (0)) * ff_v_b5ccsdce_count_prefix_sum)) /\ exists ff_q_b5ccsdce_count_prefix_sum_start. ff_u_b5ccsdce_count_prefix_sum = ff_q_b5ccsdce_count_prefix_sum_start * S ((S (0)) * ff_v_b5ccsdce_count_prefix_sum) + (0))) /\ ((((exists ff_h_b5ccsdce_count_prefix_sum_terminal. ff_h_b5ccsdce_count_prefix_sum_terminal + S (r) = S ((S (l)) * ff_v_b5ccsdce_count_prefix_sum)) /\ exists ff_q_b5ccsdce_count_prefix_sum_terminal. ff_u_b5ccsdce_count_prefix_sum = ff_q_b5ccsdce_count_prefix_sum_terminal * S ((S (l)) * ff_v_b5ccsdce_count_prefix_sum) + (r))) /\ forall ff_i_b5ccsdce_count_prefix_sum. (exists ff_lt_b5ccsdce_count_prefix_sum_bound. ff_lt_b5ccsdce_count_prefix_sum_bound + S ff_i_b5ccsdce_count_prefix_sum = l) -> exists ff_a_b5ccsdce_count_prefix_sum ff_r_b5ccsdce_count_prefix_sum ff_s_b5ccsdce_count_prefix_sum. ((((exists ff_h_b5ccsdce_count_prefix_sum_summand. ff_h_b5ccsdce_count_prefix_sum_summand + S (ff_a_b5ccsdce_count_prefix_sum) = S ((S (ff_i_b5ccsdce_count_prefix_sum)) * g)) /\ exists ff_q_b5ccsdce_count_prefix_sum_summand. f = ff_q_b5ccsdce_count_prefix_sum_summand * S ((S (ff_i_b5ccsdce_count_prefix_sum)) * g) + (ff_a_b5ccsdce_count_prefix_sum))) /\ ((((exists ff_h_b5ccsdce_count_prefix_sum_partial. ff_h_b5ccsdce_count_prefix_sum_partial + S (ff_r_b5ccsdce_count_prefix_sum) = S ((S (ff_i_b5ccsdce_count_prefix_sum)) * ff_v_b5ccsdce_count_prefix_sum)) /\ exists ff_q_b5ccsdce_count_prefix_sum_partial. ff_u_b5ccsdce_count_prefix_sum = ff_q_b5ccsdce_count_prefix_sum_partial * S ((S (ff_i_b5ccsdce_count_prefix_sum)) * ff_v_b5ccsdce_count_prefix_sum) + (ff_r_b5ccsdce_count_prefix_sum))) /\ ((((exists ff_h_b5ccsdce_count_prefix_sum_successor. ff_h_b5ccsdce_count_prefix_sum_successor + S (ff_s_b5ccsdce_count_prefix_sum) = S ((S (S ff_i_b5ccsdce_count_prefix_sum)) * ff_v_b5ccsdce_count_prefix_sum)) /\ exists ff_q_b5ccsdce_count_prefix_sum_successor. ff_u_b5ccsdce_count_prefix_sum = ff_q_b5ccsdce_count_prefix_sum_successor * S ((S (S ff_i_b5ccsdce_count_prefix_sum)) * ff_v_b5ccsdce_count_prefix_sum) + (ff_s_b5ccsdce_count_prefix_sum))) /\ ff_s_b5ccsdce_count_prefix_sum = ff_r_b5ccsdce_count_prefix_sum + ff_a_b5ccsdce_count_prefix_sum)))))) /\ (forall ff_i_b5ccsdce_count_prefix_bits. (exists ff_lt_b5ccsdce_count_prefix_bits_bound. ff_lt_b5ccsdce_count_prefix_bits_bound + S ff_i_b5ccsdce_count_prefix_bits = l) -> exists ff_bit_b5ccsdce_count_prefix_bits. ((((exists ff_h_b5ccsdce_count_prefix_bits_decoded. ff_h_b5ccsdce_count_prefix_bits_decoded + S (ff_bit_b5ccsdce_count_prefix_bits) = S ((S (ff_i_b5ccsdce_count_prefix_bits)) * g)) /\ exists ff_q_b5ccsdce_count_prefix_bits_decoded. f = ff_q_b5ccsdce_count_prefix_bits_decoded * S ((S (ff_i_b5ccsdce_count_prefix_bits)) * g) + (ff_bit_b5ccsdce_count_prefix_bits))) /\ (ff_bit_b5ccsdce_count_prefix_bits = 0 \/ ff_bit_b5ccsdce_count_prefix_bits = 1))))) /\ ((bit = 0 \/ bit = 1) /\ E = r + bit)) - 0070
specialize bit_count_succ_decompose f - 0071
specialize bit_count_succ_decompose g - 0072
specialize bit_count_succ_decompose l - 0073
specialize bit_count_succ_decompose (S l) - 0074
specialize bit_count_succ_decompose E - 0075
apply bit_count_succ_decompose - 0076
refl - 0077
exact hcount - 0078
cases hcount_decomp - 0079
cases hcount_decomp_witness - 0080
cases hcount_decomp_witness_witness - 0081
cases hcount_decomp_witness_witness_right - 0082
cases hcount_decomp_witness_witness_right_right - 0083
have hterminal : exists q Q bit. (((exists fs_h_b5ccsdce_terminal_left. fs_h_b5ccsdce_terminal_left + S (q) = S ((S (l)) * c)) /\ exists fs_q_b5ccsdce_terminal_left. b = fs_q_b5ccsdce_terminal_left * S ((S (l)) * c) + (q))) /\ ((((exists fs_h_b5ccsdce_terminal_right. fs_h_b5ccsdce_terminal_right + S (Q) = S ((S (l)) * e)) /\ exists fs_q_b5ccsdce_terminal_right. d = fs_q_b5ccsdce_terminal_right * S ((S (l)) * e) + (Q))) /\ ((((exists fs_h_b5ccsdce_terminal_bit. fs_h_b5ccsdce_terminal_bit + S (bit) = S ((S (l)) * g)) /\ exists fs_q_b5ccsdce_terminal_bit. f = fs_q_b5ccsdce_terminal_bit * S ((S (l)) * g) + (bit))) /\ (((bit = 0 /\ Q = q + q) \/ (bit = 1 /\ Q = S (q + q)))))) - 0084
specialize hcarry l - 0085
apply hcarry - 0086
specialize le_refl (S l) - 0087
exact le_refl - 0088
cases hterminal - 0089
cases hterminal_witness - 0090
cases hterminal_witness_witness - 0091
cases hterminal_witness_witness_witness - 0092
cases hterminal_witness_witness_witness_right - 0093
cases hterminal_witness_witness_witness_right_right - 0094
have hq : x = x6 - 0095
specialize beta_at_unique b - 0096
specialize beta_at_unique c - 0097
specialize beta_at_unique l - 0098
specialize beta_at_unique x - 0099
specialize beta_at_unique x6 - 0100
apply beta_at_unique - 0101
exact hleft_decomp_witness_witness_left - 0102
exact hterminal_witness_witness_witness_left - 0103
have hQ : x2 = x7 - 0104
specialize beta_at_unique d - 0105
specialize beta_at_unique e - 0106
specialize beta_at_unique l - 0107
specialize beta_at_unique x2 - 0108
specialize beta_at_unique x7 - 0109
apply beta_at_unique - 0110
exact hright_decomp_witness_witness_left - 0111
exact hterminal_witness_witness_witness_right_left - 0112
have hbit : x4 = x8 - 0113
specialize beta_at_unique f - 0114
specialize beta_at_unique g - 0115
specialize beta_at_unique l - 0116
specialize beta_at_unique x4 - 0117
specialize beta_at_unique x8 - 0118
apply beta_at_unique - 0119
exact hcount_decomp_witness_witness_left - 0120
exact hterminal_witness_witness_witness_right_right_left - 0121
rewrite hq at hleft_decomp_witness_witness_right_right - 0122
rewrite hQ at hright_decomp_witness_witness_right_right - 0123
rewrite hbit at hcount_decomp_witness_witness_right_right_right - 0124
have hprefix : forall b5cc_index_b5ccsdce_restricted. (exists bcf_lt_gap_b5ccsdce_restricted_bound. bcf_lt_gap_b5ccsdce_restricted_bound + S (b5cc_index_b5ccsdce_restricted) = l) -> exists b5cc_left_b5ccsdce_restricted b5cc_right_b5ccsdce_restricted b5cc_bit_b5ccsdce_restricted. (((exists fs_h_b5cc_b5ccsdce_restricted_left. fs_h_b5cc_b5ccsdce_restricted_left + S (b5cc_left_b5ccsdce_restricted) = S ((S (b5cc_index_b5ccsdce_restricted)) * c)) /\ exists fs_q_b5cc_b5ccsdce_restricted_left. b = fs_q_b5cc_b5ccsdce_restricted_left * S ((S (b5cc_index_b5ccsdce_restricted)) * c) + (b5cc_left_b5ccsdce_restricted))) /\ ((((exists fs_h_b5cc_b5ccsdce_restricted_right. fs_h_b5cc_b5ccsdce_restricted_right + S (b5cc_right_b5ccsdce_restricted) = S ((S (b5cc_index_b5ccsdce_restricted)) * e)) /\ exists fs_q_b5cc_b5ccsdce_restricted_right. d = fs_q_b5cc_b5ccsdce_restricted_right * S ((S (b5cc_index_b5ccsdce_restricted)) * e) + (b5cc_right_b5ccsdce_restricted))) /\ ((((exists fs_h_b5cc_b5ccsdce_restricted_bit. fs_h_b5cc_b5ccsdce_restricted_bit + S (b5cc_bit_b5ccsdce_restricted) = S ((S (b5cc_index_b5ccsdce_restricted)) * g)) /\ exists fs_q_b5cc_b5ccsdce_restricted_bit. f = fs_q_b5cc_b5ccsdce_restricted_bit * S ((S (b5cc_index_b5ccsdce_restricted)) * g) + (b5cc_bit_b5ccsdce_restricted))) /\ (((b5cc_bit_b5ccsdce_restricted = 0 /\ b5cc_right_b5ccsdce_restricted = b5cc_left_b5ccsdce_restricted + b5cc_left_b5ccsdce_restricted) \/ (b5cc_bit_b5ccsdce_restricted = 1 /\ b5cc_right_b5ccsdce_restricted = S (b5cc_left_b5ccsdce_restricted + b5cc_left_b5ccsdce_restricted)))))) - 0125
specialize double_quotient_carry_prefix_restrict b - 0126
specialize double_quotient_carry_prefix_restrict c - 0127
specialize double_quotient_carry_prefix_restrict d - 0128
specialize double_quotient_carry_prefix_restrict e - 0129
specialize double_quotient_carry_prefix_restrict f - 0130
specialize double_quotient_carry_prefix_restrict g - 0131
specialize double_quotient_carry_prefix_restrict l - 0132
apply double_quotient_carry_prefix_restrict - 0133
exact hcarry - 0134
have hbalance : x3 = (x1 + x1) + x5 - 0135
specialize IH x1 - 0136
specialize IH x3 - 0137
specialize IH x5 - 0138
apply IH - 0139
exact hleft_decomp_witness_witness_right_left - 0140
exact hright_decomp_witness_witness_right_left - 0141
exact hprefix - 0142
exact hcount_decomp_witness_witness_right_left - 0143
have hinner : x5 + (x6 + (x6 + x1)) = x6 + (x6 + (x5 + x1)) - 0144
have hleft_assoc : x5 + (x6 + (x6 + x1)) = (x5 + x6) + (x6 + x1) - 0145
symm - 0146
apply add_assoc - 0147
have hpermute : (x5 + x6) + (x6 + x1) = (x6 + x6) + (x5 + x1) - 0148
apply add_permute_outer - 0149
have hright_assoc : (x6 + x6) + (x5 + x1) = x6 + (x6 + (x5 + x1)) - 0150
apply add_assoc - 0151
trans (x5 + x6) + (x6 + x1) - 0152
exact hleft_assoc - 0153
trans (x6 + x6) + (x5 + x1) - 0154
exact hpermute - 0155
exact hright_assoc - 0156
cases hterminal_witness_witness_witness_right_right_right - 0157
cases hterminal_witness_witness_witness_right_right_right_left - 0158
rewrite hright_decomp_witness_witness_right_right - 0159
rewrite hleft_decomp_witness_witness_right_right - 0160
rewrite hleft_decomp_witness_witness_right_right - 0161
rewrite hcount_decomp_witness_witness_right_right_right - 0162
rewrite hbalance - 0163
rewrite hterminal_witness_witness_witness_right_right_right_left_left - 0164
rewrite hterminal_witness_witness_witness_right_right_right_left_right - 0165
simp [add_assoc, add_comm] - 0166
cases hterminal_witness_witness_witness_right_right_right_right - 0167
rewrite hright_decomp_witness_witness_right_right - 0168
rewrite hleft_decomp_witness_witness_right_right - 0169
rewrite hleft_decomp_witness_witness_right_right - 0170
rewrite hcount_decomp_witness_witness_right_right_right - 0171
rewrite hbalance - 0172
rewrite hterminal_witness_witness_witness_right_right_right_right_left - 0173
rewrite hterminal_witness_witness_witness_right_right_right_right_right - 0174
simp [add_assoc, add_comm]