BT00XW

double_quotient_carry_prefix_extend

Alpha body-checked ยท checked-use disabled

A carry prefix extends by one freshly decoded carry bit.

Exact expanded PA statement

forall b c d e f g l. (forall b5cc_index_b5ccpe_before. (exists bcf_lt_gap_b5ccpe_before_bound. bcf_lt_gap_b5ccpe_before_bound + S (b5cc_index_b5ccpe_before) = l) -> exists b5cc_left_b5ccpe_before b5cc_right_b5ccpe_before b5cc_bit_b5ccpe_before. (((exists fs_h_b5cc_b5ccpe_before_left. fs_h_b5cc_b5ccpe_before_left + S (b5cc_left_b5ccpe_before) = S ((S (b5cc_index_b5ccpe_before)) * c)) /\ exists fs_q_b5cc_b5ccpe_before_left. b = fs_q_b5cc_b5ccpe_before_left * S ((S (b5cc_index_b5ccpe_before)) * c) + (b5cc_left_b5ccpe_before))) /\ ((((exists fs_h_b5cc_b5ccpe_before_right. fs_h_b5cc_b5ccpe_before_right + S (b5cc_right_b5ccpe_before) = S ((S (b5cc_index_b5ccpe_before)) * e)) /\ exists fs_q_b5cc_b5ccpe_before_right. d = fs_q_b5cc_b5ccpe_before_right * S ((S (b5cc_index_b5ccpe_before)) * e) + (b5cc_right_b5ccpe_before))) /\ ((((exists fs_h_b5cc_b5ccpe_before_bit. fs_h_b5cc_b5ccpe_before_bit + S (b5cc_bit_b5ccpe_before) = S ((S (b5cc_index_b5ccpe_before)) * g)) /\ exists fs_q_b5cc_b5ccpe_before_bit. f = fs_q_b5cc_b5ccpe_before_bit * S ((S (b5cc_index_b5ccpe_before)) * g) + (b5cc_bit_b5ccpe_before))) /\ (((b5cc_bit_b5ccpe_before = 0 /\ b5cc_right_b5ccpe_before = b5cc_left_b5ccpe_before + b5cc_left_b5ccpe_before) \/ (b5cc_bit_b5ccpe_before = 1 /\ b5cc_right_b5ccpe_before = S (b5cc_left_b5ccpe_before + b5cc_left_b5ccpe_before))))))) -> (exists q Q bit. (((exists fs_h_b5ccpe_last_left. fs_h_b5ccpe_last_left + S (q) = S ((S (l)) * c)) /\ exists fs_q_b5ccpe_last_left. b = fs_q_b5ccpe_last_left * S ((S (l)) * c) + (q))) /\ ((((exists fs_h_b5ccpe_last_right. fs_h_b5ccpe_last_right + S (Q) = S ((S (l)) * e)) /\ exists fs_q_b5ccpe_last_right. d = fs_q_b5ccpe_last_right * S ((S (l)) * e) + (Q))) /\ (((bit = 0 /\ Q = q + q) \/ (bit = 1 /\ Q = S (q + q)))))) -> exists z h. (forall b5cc_index_b5ccpe_after. (exists bcf_lt_gap_b5ccpe_after_bound. bcf_lt_gap_b5ccpe_after_bound + S (b5cc_index_b5ccpe_after) = S l) -> exists b5cc_left_b5ccpe_after b5cc_right_b5ccpe_after b5cc_bit_b5ccpe_after. (((exists fs_h_b5cc_b5ccpe_after_left. fs_h_b5cc_b5ccpe_after_left + S (b5cc_left_b5ccpe_after) = S ((S (b5cc_index_b5ccpe_after)) * c)) /\ exists fs_q_b5cc_b5ccpe_after_left. b = fs_q_b5cc_b5ccpe_after_left * S ((S (b5cc_index_b5ccpe_after)) * c) + (b5cc_left_b5ccpe_after))) /\ ((((exists fs_h_b5cc_b5ccpe_after_right. fs_h_b5cc_b5ccpe_after_right + S (b5cc_right_b5ccpe_after) = S ((S (b5cc_index_b5ccpe_after)) * e)) /\ exists fs_q_b5cc_b5ccpe_after_right. d = fs_q_b5cc_b5ccpe_after_right * S ((S (b5cc_index_b5ccpe_after)) * e) + (b5cc_right_b5ccpe_after))) /\ ((((exists fs_h_b5cc_b5ccpe_after_bit. fs_h_b5cc_b5ccpe_after_bit + S (b5cc_bit_b5ccpe_after) = S ((S (b5cc_index_b5ccpe_after)) * h)) /\ exists fs_q_b5cc_b5ccpe_after_bit. z = fs_q_b5cc_b5ccpe_after_bit * S ((S (b5cc_index_b5ccpe_after)) * h) + (b5cc_bit_b5ccpe_after))) /\ (((b5cc_bit_b5ccpe_after = 0 /\ b5cc_right_b5ccpe_after = b5cc_left_b5ccpe_after + b5cc_left_b5ccpe_after) \/ (b5cc_bit_b5ccpe_after = 1 /\ b5cc_right_b5ccpe_after = S (b5cc_left_b5ccpe_after + b5cc_left_b5ccpe_after)))))))

Structural proof guide

A carry prefix extends by one freshly decoded carry bit.

Direct prerequisites: beta_prefix_extend, finite_lt_succ_eq_or_lt. The authored body proceeds by case analysis (15), intermediate claims (2), equality transport (6).

Proof neighborhood

Direct dependencies

Direct dependents

Formal native tactic body

Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.

  1. 0001intro b
  2. 0002intro c
  3. 0003intro d
  4. 0004intro e
  5. 0005intro f
  6. 0006intro g
  7. 0007intro l
  8. 0008intro hprefix
  9. 0009intro hlast
  10. 0010cases hlast
  11. 0011cases hlast_witness
  12. 0012cases hlast_witness_witness
  13. 0013cases hlast_witness_witness_witness
  14. 0014cases hlast_witness_witness_witness_right
  15. 0015specialize beta_prefix_extend l
  16. 0016specialize beta_prefix_extend f
  17. 0017specialize beta_prefix_extend g
  18. 0018specialize beta_prefix_extend x2
  19. 0019cases beta_prefix_extend
  20. 0020cases beta_prefix_extend_witness
  21. 0021cases beta_prefix_extend_witness_witness
  22. 0022exists x3
  23. 0023exists x4
  24. 0024intro i
  25. 0025intro hi
  26. 0026specialize finite_lt_succ_eq_or_lt l
  27. 0027specialize finite_lt_succ_eq_or_lt i
  28. 0028have hsplit : i = l \/ exists k. k + S i = l
  29. 0029apply finite_lt_succ_eq_or_lt
  30. 0030exact hi
  31. 0031cases hsplit
  32. 0032rewrite hsplit_left
  33. 0033rewrite hsplit_left
  34. 0034rewrite hsplit_left
  35. 0035rewrite hsplit_left
  36. 0036rewrite hsplit_left
  37. 0037rewrite hsplit_left
  38. 0038exists x
  39. 0039exists x1
  40. 0040exists x2
  41. 0041split
  42. 0042exact hlast_witness_witness_witness_left
  43. 0043split
  44. 0044exact hlast_witness_witness_witness_right_left
  45. 0045split
  46. 0046exact beta_prefix_extend_witness_witness_left
  47. 0047exact hlast_witness_witness_witness_right_right
  48. 0048have hold : exists q Q bit. (((exists fs_h_b5ccpe_old_left. fs_h_b5ccpe_old_left + S (q) = S ((S (i)) * c)) /\ exists fs_q_b5ccpe_old_left. b = fs_q_b5ccpe_old_left * S ((S (i)) * c) + (q))) /\ ((((exists fs_h_b5ccpe_old_right. fs_h_b5ccpe_old_right + S (Q) = S ((S (i)) * e)) /\ exists fs_q_b5ccpe_old_right. d = fs_q_b5ccpe_old_right * S ((S (i)) * e) + (Q))) /\ ((((exists fs_h_b5ccpe_old_bit. fs_h_b5ccpe_old_bit + S (bit) = S ((S (i)) * g)) /\ exists fs_q_b5ccpe_old_bit. f = fs_q_b5ccpe_old_bit * S ((S (i)) * g) + (bit))) /\ (((bit = 0 /\ Q = q + q) \/ (bit = 1 /\ Q = S (q + q))))))
  49. 0049specialize hprefix i
  50. 0050apply hprefix
  51. 0051exact hsplit_right
  52. 0052cases hold
  53. 0053cases hold_witness
  54. 0054cases hold_witness_witness
  55. 0055cases hold_witness_witness_witness
  56. 0056cases hold_witness_witness_witness_right
  57. 0057cases hold_witness_witness_witness_right_right
  58. 0058exists x5
  59. 0059exists x6
  60. 0060exists x7
  61. 0061split
  62. 0062exact hold_witness_witness_witness_left
  63. 0063split
  64. 0064exact hold_witness_witness_witness_right_left
  65. 0065split
  66. 0066specialize beta_prefix_extend_witness_witness_right i
  67. 0067specialize beta_prefix_extend_witness_witness_right x7
  68. 0068apply beta_prefix_extend_witness_witness_right
  69. 0069exact hsplit_right
  70. 0070exact hold_witness_witness_witness_right_right_left
  71. 0071exact hold_witness_witness_witness_right_right_right