CD003D

finite_modular_dyson_sum_cover

Alpha v34 independently verified · alpha_closed; checked-use authorized; not Stable

Every actual sum from the Dyson pair remains in every coded upper set of the original sumset.

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 b c d e ub uc vb vc sb sc p t. (((forall cd_output_dyson_upper. (exists fms_gap_cd_dyson_upper_bound. fms_gap_cd_dyson_upper_bound + S (cd_output_dyson_upper) = (p)) -> ((((((exists fs_h_cd_dyson_upper_result. fs_h_cd_dyson_upper_result + S (1) = S ((S (cd_output_dyson_upper)) * uc)) /\ exists fs_q_cd_dyson_upper_result. ub = fs_q_cd_dyson_upper_result * S ((S (cd_output_dyson_upper)) * uc) + (1))) -> ((((exists fs_h_cd_dyson_upper_old. fs_h_cd_dyson_upper_old + S (1) = S ((S (cd_output_dyson_upper)) * c)) /\ exists fs_q_cd_dyson_upper_old. b = fs_q_cd_dyson_upper_old * S ((S (cd_output_dyson_upper)) * c) + (1))) \/ (exists cd_source_dyson_upper. (((exists fms_gap_cd_dyson_upper_member. fms_gap_cd_dyson_upper_member + S (cd_source_dyson_upper) = (p)) /\ (((exists fs_h_fms_cd_dyson_upper_member. fs_h_fms_cd_dyson_upper_member + S (1) = S ((S (cd_source_dyson_upper)) * e)) /\ exists fs_q_fms_cd_dyson_upper_member. d = fs_q_fms_cd_dyson_upper_member * S ((S (cd_source_dyson_upper)) * e) + (1))))) /\ (exists fms_u_cd_dyson_upper_mod fms_v_cd_dyson_upper_mod. (cd_source_dyson_upper+t) + (p) * fms_u_cd_dyson_upper_mod = (cd_output_dyson_upper) + (p) * fms_v_cd_dyson_upper_mod)))) /\ (((((exists fs_h_cd_dyson_upper_old. fs_h_cd_dyson_upper_old + S (1) = S ((S (cd_output_dyson_upper)) * c)) /\ exists fs_q_cd_dyson_upper_old. b = fs_q_cd_dyson_upper_old * S ((S (cd_output_dyson_upper)) * c) + (1))) \/ (exists cd_source_dyson_upper. (((exists fms_gap_cd_dyson_upper_member. fms_gap_cd_dyson_upper_member + S (cd_source_dyson_upper) = (p)) /\ (((exists fs_h_fms_cd_dyson_upper_member. fs_h_fms_cd_dyson_upper_member + S (1) = S ((S (cd_source_dyson_upper)) * e)) /\ exists fs_q_fms_cd_dyson_upper_member. d = fs_q_fms_cd_dyson_upper_member * S ((S (cd_source_dyson_upper)) * e) + (1))))) /\ (exists fms_u_cd_dyson_upper_mod fms_v_cd_dyson_upper_mod. (cd_source_dyson_upper+t) + (p) * fms_u_cd_dyson_upper_mod = (cd_output_dyson_upper) + (p) * fms_v_cd_dyson_upper_mod))) -> (((exists fs_h_cd_dyson_upper_result. fs_h_cd_dyson_upper_result + S (1) = S ((S (cd_output_dyson_upper)) * uc)) /\ exists fs_q_cd_dyson_upper_result. ub = fs_q_cd_dyson_upper_result * S ((S (cd_output_dyson_upper)) * uc) + (1))))))) /\ (forall cd_output_dyson_lower. (exists fms_gap_cd_dyson_lower_bound. fms_gap_cd_dyson_lower_bound + S (cd_output_dyson_lower) = (p)) -> ((((((exists fs_h_cd_dyson_lower_result. fs_h_cd_dyson_lower_result + S (1) = S ((S (cd_output_dyson_lower)) * vc)) /\ exists fs_q_cd_dyson_lower_result. vb = fs_q_cd_dyson_lower_result * S ((S (cd_output_dyson_lower)) * vc) + (1))) -> ((((exists fs_h_cd_dyson_lower_old. fs_h_cd_dyson_lower_old + S (1) = S ((S (cd_output_dyson_lower)) * e)) /\ exists fs_q_cd_dyson_lower_old. d = fs_q_cd_dyson_lower_old * S ((S (cd_output_dyson_lower)) * e) + (1))) /\ (exists cd_source_dyson_lower. (((exists fms_gap_cd_dyson_lower_member. fms_gap_cd_dyson_lower_member + S (cd_source_dyson_lower) = (p)) /\ (((exists fs_h_fms_cd_dyson_lower_member. fs_h_fms_cd_dyson_lower_member + S (1) = S ((S (cd_source_dyson_lower)) * c)) /\ exists fs_q_fms_cd_dyson_lower_member. b = fs_q_fms_cd_dyson_lower_member * S ((S (cd_source_dyson_lower)) * c) + (1))))) /\ (exists fms_u_cd_dyson_lower_mod fms_v_cd_dyson_lower_mod. (cd_output_dyson_lower+t) + (p) * fms_u_cd_dyson_lower_mod = (cd_source_dyson_lower) + (p) * fms_v_cd_dyson_lower_mod)))) /\ (((((exists fs_h_cd_dyson_lower_old. fs_h_cd_dyson_lower_old + S (1) = S ((S (cd_output_dyson_lower)) * e)) /\ exists fs_q_cd_dyson_lower_old. d = fs_q_cd_dyson_lower_old * S ((S (cd_output_dyson_lower)) * e) + (1))) /\ (exists cd_source_dyson_lower. (((exists fms_gap_cd_dyson_lower_member. fms_gap_cd_dyson_lower_member + S (cd_source_dyson_lower) = (p)) /\ (((exists fs_h_fms_cd_dyson_lower_member. fs_h_fms_cd_dyson_lower_member + S (1) = S ((S (cd_source_dyson_lower)) * c)) /\ exists fs_q_fms_cd_dyson_lower_member. b = fs_q_fms_cd_dyson_lower_member * S ((S (cd_source_dyson_lower)) * c) + (1))))) /\ (exists fms_u_cd_dyson_lower_mod fms_v_cd_dyson_lower_mod. (cd_output_dyson_lower+t) + (p) * fms_u_cd_dyson_lower_mod = (cd_source_dyson_lower) + (p) * fms_v_cd_dyson_lower_mod))) -> (((exists fs_h_cd_dyson_lower_result. fs_h_cd_dyson_lower_result + S (1) = S ((S (cd_output_dyson_lower)) * vc)) /\ exists fs_q_cd_dyson_lower_result. vb = fs_q_cd_dyson_lower_result * S ((S (cd_output_dyson_lower)) * vc) + (1))))))))) -> (forall fms_i_cover fms_j_cover fms_s_cover. (exists fms_gap_cover_i. fms_gap_cover_i + S (fms_i_cover) = (p)) -> (exists fms_gap_cover_j. fms_gap_cover_j + S (fms_j_cover) = (p)) -> (exists fms_gap_cover_s. fms_gap_cover_s + S (fms_s_cover) = (p)) -> (((exists fs_h_fms_cover_left. fs_h_fms_cover_left + S (1) = S ((S (fms_i_cover)) * c)) /\ exists fs_q_fms_cover_left. b = fs_q_fms_cover_left * S ((S (fms_i_cover)) * c) + (1))) -> (((exists fs_h_fms_cover_right. fs_h_fms_cover_right + S (1) = S ((S (fms_j_cover)) * e)) /\ exists fs_q_fms_cover_right. d = fs_q_fms_cover_right * S ((S (fms_j_cover)) * e) + (1))) -> (exists fms_u_cover fms_v_cover. (fms_i_cover + fms_j_cover) + (p) * fms_u_cover = (fms_s_cover) + (p) * fms_v_cover) -> (((exists fs_h_fms_cover_result. fs_h_fms_cover_result + S (1) = S ((S (fms_s_cover)) * sc)) /\ exists fs_q_fms_cover_result. sb = fs_q_fms_cover_result * S ((S (fms_s_cover)) * sc) + (1)))) -> (forall fms_i_cover fms_j_cover fms_s_cover. (exists fms_gap_cover_i. fms_gap_cover_i + S (fms_i_cover) = (p)) -> (exists fms_gap_cover_j. fms_gap_cover_j + S (fms_j_cover) = (p)) -> (exists fms_gap_cover_s. fms_gap_cover_s + S (fms_s_cover) = (p)) -> (((exists fs_h_fms_cover_left. fs_h_fms_cover_left + S (1) = S ((S (fms_i_cover)) * uc)) /\ exists fs_q_fms_cover_left. ub = fs_q_fms_cover_left * S ((S (fms_i_cover)) * uc) + (1))) -> (((exists fs_h_fms_cover_right. fs_h_fms_cover_right + S (1) = S ((S (fms_j_cover)) * vc)) /\ exists fs_q_fms_cover_right. vb = fs_q_fms_cover_right * S ((S (fms_j_cover)) * vc) + (1))) -> (exists fms_u_cover fms_v_cover. (fms_i_cover + fms_j_cover) + (p) * fms_u_cover = (fms_s_cover) + (p) * fms_v_cover) -> (((exists fs_h_fms_cover_result. fs_h_fms_cover_result + S (1) = S ((S (fms_s_cover)) * sc)) /\ exists fs_q_fms_cover_result. sb = fs_q_fms_cover_result * S ((S (fms_s_cover)) * sc) + (1))))

Constructive proof overview

Generated structural guide

Every actual sum from the Dyson pair remains in every coded upper set of the original sumset.

The unchanged tactic script uses 3 declared prerequisites and contains 87 exact native proof lines.

Alpha v34 checked-use · first admitted v27 · independently kernel and Lean verified; not Stable

Proof neighborhood

Direct dependencies

CD0029 finite_modular_shifted_sum_congruence mod_eq_trans Stable theorem; checked-use authorized add_comm Stable theorem; checked-use authorized

Direct 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

87 script commands · 17 reading checkpoints · 5 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 (1)

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–10

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

  1. L1
    intro b
  2. L2
    intro c
  3. L3
    intro d
  4. L4
    intro e
  5. L5
    intro ub
  6. L6
    intro uc
  7. L7
    intro vb
  8. L8
    intro vc
  9. L9
    intro sb
  10. L10
    intro sc
02Fix variables and assumptionsL11–14

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

  1. L11
    intro p
  2. L12
    intro t
  3. L13
    intro hdyson
  4. L14
    intro hcover
03Separate the logical casesL15–15

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

  1. L15
    cases hdyson
04Fix variables and assumptionsL16–24

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

  1. L16
    intro a
  2. L17
    intro z
  3. L18
    intro w
  4. L19
    intro ha
  5. L20
    intro hz
  6. L21
    intro hw
  7. L22
    intro hU
  8. L23
    intro hV
  9. L24
    intro hmod
05Establish hupperL25–28

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

  1. L25
    have hupper : (BetaAt(ub,uc,a,1) → BetaAt(b,c,a,1) ∨ (∃ x. ModularSetMember(d,e,p,x) ∧ ModEq(p,x + t,a))) ∧ (BetaAt(b,c,a,1) ∨ (∃ x. ModularSetMember(d,e,p,x) ∧ ModEq(p,x + t,a)) → BetaAt(ub,uc,a,1))Definitions: ModularSetMemberModEqBetaAt
  2. L26
    specialize hdyson_left a
  3. L27
    apply hdyson_left
  4. L28
    exact ha
06Separate the logical casesL29–29

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

  1. L29
    cases hupper
07Establish hlowerL30–33

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

  1. L30
    have hlower : (BetaAt(vb,vc,z,1) → BetaAt(d,e,z,1) ∧ (∃ x. ModularSetMember(b,c,p,x) ∧ ModEq(p,z + t,x))) ∧ (BetaAt(d,e,z,1) ∧ (∃ x. ModularSetMember(b,c,p,x) ∧ ModEq(p,z + t,x)) → BetaAt(vb,vc,z,1))Definitions: ModularSetMemberModEqBetaAt
  2. L31
    specialize hdyson_right z
  3. L32
    apply hdyson_right
  4. L33
    exact hz
08Separate the logical casesL34–34

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

  1. L34
    cases hlower
09Establish hbothL35–37

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

  1. L35
    have hboth : (((exists fs_h_cd_cover_B. fs_h_cd_cover_B + S (1) = S ((S (z)) * e)) /\ exists fs_q_cd_cover_B. d = fs_q_cd_cover_B * S ((S (z)) * e) + (1))) /\ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * c)) /\ exists fs_q_fms_member. b = fs_q_fms_member * S ((S (j)) * c) + (1))))) /\ (exists fms_u_mod fms_v_mod. (z+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod)
  2. L36
    apply hlower_left
  3. L37
    exact hV
10Separate the logical casesL38–38

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

  1. L38
    cases hboth
11Establish hcaseL39–41

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

  1. L39
    have hcase : (((exists fs_h_cd_cover_A. fs_h_cd_cover_A + S (1) = S ((S (a)) * c)) /\ exists fs_q_cd_cover_A. b = fs_q_cd_cover_A * S ((S (a)) * c) + (1))) \/ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * e)) /\ exists fs_q_fms_member. d = fs_q_fms_member * S ((S (j)) * e) + (1))))) /\ (exists fms_u_mod fms_v_mod. (j+t) + (p) * fms_u_mod = (a) + (p) * fms_v_mod)
  2. L40
    apply hupper_left
  3. L41
    exact hU
12Separate the logical casesL42–42

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

  1. L42
    cases hcase
13Use earlier factsL43–52

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

  1. L43
    specialize hcover a
  2. L44
    specialize hcover z
  3. L45
    specialize hcover w
  4. L46
    apply hcover
  5. L47
    exact ha
  6. L48
    exact hz
  7. L49
    exact hw
  8. L50
    exact hcase_left
  9. L51
    exact hboth_left
  10. L52
    exact hmod
14Separate the logical casesL53–58

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

  1. L53
    cases hcase_right
  2. L54
    cases hcase_right_witness
  3. L55
    cases hcase_right_witness_left
  4. L56
    cases hboth_right
  5. L57
    cases hboth_right_witness
  6. L58
    cases hboth_right_witness_left
15Use earlier factsL59–67

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

  1. L59
    specialize hcover x1
  2. L60
    specialize hcover x
  3. L61
    specialize hcover w
  4. L62
    apply hcover
  5. L63
    exact hboth_right_witness_left_left
  6. L64
    exact hcase_right_witness_left_left
  7. L65
    exact hw
  8. L66
    exact hboth_right_witness_left_right
  9. L67
    exact hcase_right_witness_left_right
16Establish hcommL68–77

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

  1. L68
    have hcomm : x1+x=x+x1
  2. L69
    specialize add_comm x1
  3. L70
    specialize add_comm x
  4. L71
    apply add_comm
  5. L72
    rewrite hcomm
  6. L73
    specialize mod_eq_trans p
  7. L74
    specialize mod_eq_trans x+x1
  8. L75
    specialize mod_eq_trans a+z
  9. L76
    specialize mod_eq_trans w
  10. L77
    apply mod_eq_trans
17Use earlier factsL78–87

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

  1. L78
    specialize finite_modular_shifted_sum_congruence p
  2. L79
    specialize finite_modular_shifted_sum_congruence x
  3. L80
    specialize finite_modular_shifted_sum_congruence x1
  4. L81
    specialize finite_modular_shifted_sum_congruence a
  5. L82
    specialize finite_modular_shifted_sum_congruence z
  6. L83
    specialize finite_modular_shifted_sum_congruence t
  7. L84
    apply finite_modular_shifted_sum_congruence
  8. L85
    exact hcase_right_witness_right
  9. L86
    exact hboth_right_witness_right
  10. L87
    exact hmod

Library-wide reading audit

Original exact command ledger · 87 lines
  1. 0001intro b
  2. 0002intro c
  3. 0003intro d
  4. 0004intro e
  5. 0005intro ub
  6. 0006intro uc
  7. 0007intro vb
  8. 0008intro vc
  9. 0009intro sb
  10. 0010intro sc
  11. 0011intro p
  12. 0012intro t
  13. 0013intro hdyson
  14. 0014intro hcover
  15. 0015cases hdyson
  16. 0016intro a
  17. 0017intro z
  18. 0018intro w
  19. 0019intro ha
  20. 0020intro hz
  21. 0021intro hw
  22. 0022intro hU
  23. 0023intro hV
  24. 0024intro hmod
  25. 0025have hupper : (((((exists fs_h_cd_cover_U. fs_h_cd_cover_U + S (1) = S ((S (a)) * uc)) /\ exists fs_q_cd_cover_U. ub = fs_q_cd_cover_U * S ((S (a)) * uc) + (1))) -> ((((exists fs_h_cd_cover_A. fs_h_cd_cover_A + S (1) = S ((S (a)) * c)) /\ exists fs_q_cd_cover_A. b = fs_q_cd_cover_A * S ((S (a)) * c) + (1))) \/ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * e)) /\ exists fs_q_fms_member. d = fs_q_fms_member * S ((S (j)) * e) + (1))))) /\ (exists fms_u_mod fms_v_mod. (j+t) + (p) * fms_u_mod = (a) + (p) * fms_v_mod))) /\ (((((exists fs_h_cd_cover_A. fs_h_cd_cover_A + S (1) = S ((S (a)) * c)) /\ exists fs_q_cd_cover_A. b = fs_q_cd_cover_A * S ((S (a)) * c) + (1))) \/ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * e)) /\ exists fs_q_fms_member. d = fs_q_fms_member * S ((S (j)) * e) + (1))))) /\ (exists fms_u_mod fms_v_mod. (j+t) + (p) * fms_u_mod = (a) + (p) * fms_v_mod)) -> (((exists fs_h_cd_cover_U. fs_h_cd_cover_U + S (1) = S ((S (a)) * uc)) /\ exists fs_q_cd_cover_U. ub = fs_q_cd_cover_U * S ((S (a)) * uc) + (1)))))
  26. 0026specialize hdyson_left a
  27. 0027apply hdyson_left
  28. 0028exact ha
  29. 0029cases hupper
  30. 0030have hlower : (((((exists fs_h_cd_cover_V. fs_h_cd_cover_V + S (1) = S ((S (z)) * vc)) /\ exists fs_q_cd_cover_V. vb = fs_q_cd_cover_V * S ((S (z)) * vc) + (1))) -> ((((exists fs_h_cd_cover_B. fs_h_cd_cover_B + S (1) = S ((S (z)) * e)) /\ exists fs_q_cd_cover_B. d = fs_q_cd_cover_B * S ((S (z)) * e) + (1))) /\ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * c)) /\ exists fs_q_fms_member. b = fs_q_fms_member * S ((S (j)) * c) + (1))))) /\ (exists fms_u_mod fms_v_mod. (z+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod))) /\ (((((exists fs_h_cd_cover_B. fs_h_cd_cover_B + S (1) = S ((S (z)) * e)) /\ exists fs_q_cd_cover_B. d = fs_q_cd_cover_B * S ((S (z)) * e) + (1))) /\ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * c)) /\ exists fs_q_fms_member. b = fs_q_fms_member * S ((S (j)) * c) + (1))))) /\ (exists fms_u_mod fms_v_mod. (z+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod)) -> (((exists fs_h_cd_cover_V. fs_h_cd_cover_V + S (1) = S ((S (z)) * vc)) /\ exists fs_q_cd_cover_V. vb = fs_q_cd_cover_V * S ((S (z)) * vc) + (1)))))
  31. 0031specialize hdyson_right z
  32. 0032apply hdyson_right
  33. 0033exact hz
  34. 0034cases hlower
  35. 0035have hboth : (((exists fs_h_cd_cover_B. fs_h_cd_cover_B + S (1) = S ((S (z)) * e)) /\ exists fs_q_cd_cover_B. d = fs_q_cd_cover_B * S ((S (z)) * e) + (1))) /\ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * c)) /\ exists fs_q_fms_member. b = fs_q_fms_member * S ((S (j)) * c) + (1))))) /\ (exists fms_u_mod fms_v_mod. (z+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod)
  36. 0036apply hlower_left
  37. 0037exact hV
  38. 0038cases hboth
  39. 0039have hcase : (((exists fs_h_cd_cover_A. fs_h_cd_cover_A + S (1) = S ((S (a)) * c)) /\ exists fs_q_cd_cover_A. b = fs_q_cd_cover_A * S ((S (a)) * c) + (1))) \/ exists j. (((exists fms_gap_member. fms_gap_member + S (j) = (p)) /\ (((exists fs_h_fms_member. fs_h_fms_member + S (1) = S ((S (j)) * e)) /\ exists fs_q_fms_member. d = fs_q_fms_member * S ((S (j)) * e) + (1))))) /\ (exists fms_u_mod fms_v_mod. (j+t) + (p) * fms_u_mod = (a) + (p) * fms_v_mod)
  40. 0040apply hupper_left
  41. 0041exact hU
  42. 0042cases hcase
  43. 0043specialize hcover a
  44. 0044specialize hcover z
  45. 0045specialize hcover w
  46. 0046apply hcover
  47. 0047exact ha
  48. 0048exact hz
  49. 0049exact hw
  50. 0050exact hcase_left
  51. 0051exact hboth_left
  52. 0052exact hmod
  53. 0053cases hcase_right
  54. 0054cases hcase_right_witness
  55. 0055cases hcase_right_witness_left
  56. 0056cases hboth_right
  57. 0057cases hboth_right_witness
  58. 0058cases hboth_right_witness_left
  59. 0059specialize hcover x1
  60. 0060specialize hcover x
  61. 0061specialize hcover w
  62. 0062apply hcover
  63. 0063exact hboth_right_witness_left_left
  64. 0064exact hcase_right_witness_left_left
  65. 0065exact hw
  66. 0066exact hboth_right_witness_left_right
  67. 0067exact hcase_right_witness_left_right
  68. 0068have hcomm : x1+x=x+x1
  69. 0069specialize add_comm x1
  70. 0070specialize add_comm x
  71. 0071apply add_comm
  72. 0072rewrite hcomm
  73. 0073specialize mod_eq_trans p
  74. 0074specialize mod_eq_trans x+x1
  75. 0075specialize mod_eq_trans a+z
  76. 0076specialize mod_eq_trans w
  77. 0077apply mod_eq_trans
  78. 0078specialize finite_modular_shifted_sum_congruence p
  79. 0079specialize finite_modular_shifted_sum_congruence x
  80. 0080specialize finite_modular_shifted_sum_congruence x1
  81. 0081specialize finite_modular_shifted_sum_congruence a
  82. 0082specialize finite_modular_shifted_sum_congruence z
  83. 0083specialize finite_modular_shifted_sum_congruence t
  84. 0084apply finite_modular_shifted_sum_congruence
  85. 0085exact hcase_right_witness_right
  86. 0086exact hboth_right_witness_right
  87. 0087exact hmod