JT003C

jordan_canonical_crt_tuple_unique

The actual two-coordinate CRT output is unique below the product modulus.

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

95 new Alpha admissions come from 96 source lemmas: tuple equality reflexivity reuses an already-admitted theorem and is not counted twice. All counts use actual finite beta-coded enumerations. G008 multiplicativity is proved; the general prime-power count and distinct-prime product formula are further goals. General prime-power fields (G091) remain open. Stable is unchanged.

Exact theorem in conservative defined notation

∀ m. ∀ n. ∀ b. ∀ c. ∀ d. ∀ e. ∀ f. ∀ g. ∀ h. ∀ s. ∀ k. Coprime(m,n) → JordanCanonicalTupleCRT(m,n,b,c,d,e,f,g,k) → JordanCanonicalTupleCRT(m,n,b,c,d,e,h,s,k) → IntegerVectorZero(f,g,h,s,k)

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall m n b c d e f g h s k. (forall jt_divisor_uniquecrtcop. (exists jt_factor_uniquecrtcopa. (m)=(jt_divisor_uniquecrtcop)*jt_factor_uniquecrtcopa) -> (exists jt_factor_uniquecrtcopb. (n)=(jt_divisor_uniquecrtcop)*jt_factor_uniquecrtcopb) -> jt_divisor_uniquecrtcop=1) -> (((forall jt_index_uniquecrtfirstbound. (exists jt_gap_uniquecrtfirstboundindex. jt_gap_uniquecrtfirstboundindex+S (jt_index_uniquecrtfirstbound)=(k)) -> exists jt_value_uniquecrtfirstbound. ((((exists fs_h_jt_uniquecrtfirstboundat. fs_h_jt_uniquecrtfirstboundat + S (jt_value_uniquecrtfirstbound) = S ((S (jt_index_uniquecrtfirstbound)) * g)) /\ exists fs_q_jt_uniquecrtfirstboundat. f = fs_q_jt_uniquecrtfirstboundat * S ((S (jt_index_uniquecrtfirstbound)) * g) + (jt_value_uniquecrtfirstbound))) /\ (exists jt_gap_uniquecrtfirstboundvalue. jt_gap_uniquecrtfirstboundvalue+S (jt_value_uniquecrtfirstbound)=(m*n)))) /\ (((forall jt_index_uniquecrtfirstleft jt_left_uniquecrtfirstleft jt_right_uniquecrtfirstleft. (exists jt_gap_uniquecrtfirstleftindex. jt_gap_uniquecrtfirstleftindex+S (jt_index_uniquecrtfirstleft)=(k)) -> (((exists fs_h_jt_uniquecrtfirstleftleft. fs_h_jt_uniquecrtfirstleftleft + S (jt_left_uniquecrtfirstleft) = S ((S (jt_index_uniquecrtfirstleft)) * g)) /\ exists fs_q_jt_uniquecrtfirstleftleft. f = fs_q_jt_uniquecrtfirstleftleft * S ((S (jt_index_uniquecrtfirstleft)) * g) + (jt_left_uniquecrtfirstleft))) -> (((exists fs_h_jt_uniquecrtfirstleftright. fs_h_jt_uniquecrtfirstleftright + S (jt_right_uniquecrtfirstleft) = S ((S (jt_index_uniquecrtfirstleft)) * c)) /\ exists fs_q_jt_uniquecrtfirstleftright. b = fs_q_jt_uniquecrtfirstleftright * S ((S (jt_index_uniquecrtfirstleft)) * c) + (jt_right_uniquecrtfirstleft))) -> (exists jt_left_uniquecrtfirstleftmod jt_right_uniquecrtfirstleftmod. (jt_left_uniquecrtfirstleft)+(m)*jt_left_uniquecrtfirstleftmod=(jt_right_uniquecrtfirstleft)+(m)*jt_right_uniquecrtfirstleftmod)) /\ (forall jt_index_uniquecrtfirstright jt_left_uniquecrtfirstright jt_right_uniquecrtfirstright. (exists jt_gap_uniquecrtfirstrightindex. jt_gap_uniquecrtfirstrightindex+S (jt_index_uniquecrtfirstright)=(k)) -> (((exists fs_h_jt_uniquecrtfirstrightleft. fs_h_jt_uniquecrtfirstrightleft + S (jt_left_uniquecrtfirstright) = S ((S (jt_index_uniquecrtfirstright)) * g)) /\ exists fs_q_jt_uniquecrtfirstrightleft. f = fs_q_jt_uniquecrtfirstrightleft * S ((S (jt_index_uniquecrtfirstright)) * g) + (jt_left_uniquecrtfirstright))) -> (((exists fs_h_jt_uniquecrtfirstrightright. fs_h_jt_uniquecrtfirstrightright + S (jt_right_uniquecrtfirstright) = S ((S (jt_index_uniquecrtfirstright)) * e)) /\ exists fs_q_jt_uniquecrtfirstrightright. d = fs_q_jt_uniquecrtfirstrightright * S ((S (jt_index_uniquecrtfirstright)) * e) + (jt_right_uniquecrtfirstright))) -> (exists jt_left_uniquecrtfirstrightmod jt_right_uniquecrtfirstrightmod. (jt_left_uniquecrtfirstright)+(n)*jt_left_uniquecrtfirstrightmod=(jt_right_uniquecrtfirstright)+(n)*jt_right_uniquecrtfirstrightmod)))))) -> (((forall jt_index_uniquecrtsecondbound. (exists jt_gap_uniquecrtsecondboundindex. jt_gap_uniquecrtsecondboundindex+S (jt_index_uniquecrtsecondbound)=(k)) -> exists jt_value_uniquecrtsecondbound. ((((exists fs_h_jt_uniquecrtsecondboundat. fs_h_jt_uniquecrtsecondboundat + S (jt_value_uniquecrtsecondbound) = S ((S (jt_index_uniquecrtsecondbound)) * s)) /\ exists fs_q_jt_uniquecrtsecondboundat. h = fs_q_jt_uniquecrtsecondboundat * S ((S (jt_index_uniquecrtsecondbound)) * s) + (jt_value_uniquecrtsecondbound))) /\ (exists jt_gap_uniquecrtsecondboundvalue. jt_gap_uniquecrtsecondboundvalue+S (jt_value_uniquecrtsecondbound)=(m*n)))) /\ (((forall jt_index_uniquecrtsecondleft jt_left_uniquecrtsecondleft jt_right_uniquecrtsecondleft. (exists jt_gap_uniquecrtsecondleftindex. jt_gap_uniquecrtsecondleftindex+S (jt_index_uniquecrtsecondleft)=(k)) -> (((exists fs_h_jt_uniquecrtsecondleftleft. fs_h_jt_uniquecrtsecondleftleft + S (jt_left_uniquecrtsecondleft) = S ((S (jt_index_uniquecrtsecondleft)) * s)) /\ exists fs_q_jt_uniquecrtsecondleftleft. h = fs_q_jt_uniquecrtsecondleftleft * S ((S (jt_index_uniquecrtsecondleft)) * s) + (jt_left_uniquecrtsecondleft))) -> (((exists fs_h_jt_uniquecrtsecondleftright. fs_h_jt_uniquecrtsecondleftright + S (jt_right_uniquecrtsecondleft) = S ((S (jt_index_uniquecrtsecondleft)) * c)) /\ exists fs_q_jt_uniquecrtsecondleftright. b = fs_q_jt_uniquecrtsecondleftright * S ((S (jt_index_uniquecrtsecondleft)) * c) + (jt_right_uniquecrtsecondleft))) -> (exists jt_left_uniquecrtsecondleftmod jt_right_uniquecrtsecondleftmod. (jt_left_uniquecrtsecondleft)+(m)*jt_left_uniquecrtsecondleftmod=(jt_right_uniquecrtsecondleft)+(m)*jt_right_uniquecrtsecondleftmod)) /\ (forall jt_index_uniquecrtsecondright jt_left_uniquecrtsecondright jt_right_uniquecrtsecondright. (exists jt_gap_uniquecrtsecondrightindex. jt_gap_uniquecrtsecondrightindex+S (jt_index_uniquecrtsecondright)=(k)) -> (((exists fs_h_jt_uniquecrtsecondrightleft. fs_h_jt_uniquecrtsecondrightleft + S (jt_left_uniquecrtsecondright) = S ((S (jt_index_uniquecrtsecondright)) * s)) /\ exists fs_q_jt_uniquecrtsecondrightleft. h = fs_q_jt_uniquecrtsecondrightleft * S ((S (jt_index_uniquecrtsecondright)) * s) + (jt_left_uniquecrtsecondright))) -> (((exists fs_h_jt_uniquecrtsecondrightright. fs_h_jt_uniquecrtsecondrightright + S (jt_right_uniquecrtsecondright) = S ((S (jt_index_uniquecrtsecondright)) * e)) /\ exists fs_q_jt_uniquecrtsecondrightright. d = fs_q_jt_uniquecrtsecondrightright * S ((S (jt_index_uniquecrtsecondright)) * e) + (jt_right_uniquecrtsecondright))) -> (exists jt_left_uniquecrtsecondrightmod jt_right_uniquecrtsecondrightmod. (jt_left_uniquecrtsecondright)+(n)*jt_left_uniquecrtsecondrightmod=(jt_right_uniquecrtsecondright)+(n)*jt_right_uniquecrtsecondrightmod)))))) -> (forall jt_index_uniquecrtoutputs jt_left_uniquecrtoutputs jt_right_uniquecrtoutputs. (exists jt_gap_uniquecrtoutputsindex. jt_gap_uniquecrtoutputsindex+S (jt_index_uniquecrtoutputs)=(k)) -> (((exists fs_h_jt_uniquecrtoutputsleft. fs_h_jt_uniquecrtoutputsleft + S (jt_left_uniquecrtoutputs) = S ((S (jt_index_uniquecrtoutputs)) * g)) /\ exists fs_q_jt_uniquecrtoutputsleft. f = fs_q_jt_uniquecrtoutputsleft * S ((S (jt_index_uniquecrtoutputs)) * g) + (jt_left_uniquecrtoutputs))) -> (((exists fs_h_jt_uniquecrtoutputsright. fs_h_jt_uniquecrtoutputsright + S (jt_right_uniquecrtoutputs) = S ((S (jt_index_uniquecrtoutputs)) * s)) /\ exists fs_q_jt_uniquecrtoutputsright. h = fs_q_jt_uniquecrtoutputsright * S ((S (jt_index_uniquecrtoutputs)) * s) + (jt_right_uniquecrtoutputs))) -> jt_left_uniquecrtoutputs=jt_right_uniquecrtoutputs)

Complete tactic proof in conservative notation

All 72 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

72 script commands · 9 reading checkpoints · 0 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.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (4)
01Fix variables and assumptionsL1–10

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

  1. L1
    intro m
  2. L2
    intro n
  3. L3
    intro b
  4. L4
    intro c
  5. L5
    intro d
  6. L6
    intro e
  7. L7
    intro f
  8. L8
    intro g
  9. L9
    intro h
  10. L10
    intro s
02Fix variables and assumptionsL11–14

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

  1. L11
    intro k
  2. L12
    intro hcop
  3. L13
    intro hf
  4. L14
    intro hh
03Separate the logical casesL15–18

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

  1. L15
    cases hf
  2. L16
    cases hf_right
  3. L17
    cases hh
  4. L18
    cases hh_right
04Use earlier factsL19–28

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

  1. L19
    specialize jordan_tuple_bounded_congruence_equal (m*n)
  2. L20
    specialize jordan_tuple_bounded_congruence_equal (f)
  3. L21
    specialize jordan_tuple_bounded_congruence_equal (g)
  4. L22
    specialize jordan_tuple_bounded_congruence_equal (h)
  5. L23
    specialize jordan_tuple_bounded_congruence_equal (s)
  6. L24
    specialize jordan_tuple_bounded_congruence_equal (k)
  7. L25
    apply jordan_tuple_bounded_congruence_equal
  8. L26
    exact hf_left
  9. L27
    exact hh_left
  10. L28
    specialize jordan_tuple_congruence_coprime_product (m)
05Use earlier factsL29–38

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

  1. L29
    specialize jordan_tuple_congruence_coprime_product (n)
  2. L30
    specialize jordan_tuple_congruence_coprime_product (f)
  3. L31
    specialize jordan_tuple_congruence_coprime_product (g)
  4. L32
    specialize jordan_tuple_congruence_coprime_product (h)
  5. L33
    specialize jordan_tuple_congruence_coprime_product (s)
  6. L34
    specialize jordan_tuple_congruence_coprime_product (k)
  7. L35
    apply jordan_tuple_congruence_coprime_product
  8. L36
    exact hcop
  9. L37
    specialize jordan_tuple_congruence_trans (m)
  10. L38
    specialize jordan_tuple_congruence_trans (f)
06Use earlier factsL39–48

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

  1. L39
    specialize jordan_tuple_congruence_trans (g)
  2. L40
    specialize jordan_tuple_congruence_trans (b)
  3. L41
    specialize jordan_tuple_congruence_trans (c)
  4. L42
    specialize jordan_tuple_congruence_trans (h)
  5. L43
    specialize jordan_tuple_congruence_trans (s)
  6. L44
    specialize jordan_tuple_congruence_trans (k)
  7. L45
    apply jordan_tuple_congruence_trans
  8. L46
    exact hf_right_left
  9. L47
    specialize jordan_tuple_congruence_symm (m)
  10. L48
    specialize jordan_tuple_congruence_symm (h)
07Use earlier factsL49–58

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

  1. L49
    specialize jordan_tuple_congruence_symm (s)
  2. L50
    specialize jordan_tuple_congruence_symm (b)
  3. L51
    specialize jordan_tuple_congruence_symm (c)
  4. L52
    specialize jordan_tuple_congruence_symm (k)
  5. L53
    apply jordan_tuple_congruence_symm
  6. L54
    exact hh_right_left
  7. L55
    specialize jordan_tuple_congruence_trans (n)
  8. L56
    specialize jordan_tuple_congruence_trans (f)
  9. L57
    specialize jordan_tuple_congruence_trans (g)
  10. L58
    specialize jordan_tuple_congruence_trans (d)
08Use earlier factsL59–68

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

  1. L59
    specialize jordan_tuple_congruence_trans (e)
  2. L60
    specialize jordan_tuple_congruence_trans (h)
  3. L61
    specialize jordan_tuple_congruence_trans (s)
  4. L62
    specialize jordan_tuple_congruence_trans (k)
  5. L63
    apply jordan_tuple_congruence_trans
  6. L64
    exact hf_right_right
  7. L65
    specialize jordan_tuple_congruence_symm (n)
  8. L66
    specialize jordan_tuple_congruence_symm (h)
  9. L67
    specialize jordan_tuple_congruence_symm (s)
  10. L68
    specialize jordan_tuple_congruence_symm (d)
09Use earlier factsL69–72

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

  1. L69
    specialize jordan_tuple_congruence_symm (e)
  2. L70
    specialize jordan_tuple_congruence_symm (k)
  3. L71
    apply jordan_tuple_congruence_symm
  4. L72
    exact hh_right_right

Library-wide reading audit

Original defined command ledger · 72 lines
  1. 0001intro m
  2. 0002intro n
  3. 0003intro b
  4. 0004intro c
  5. 0005intro d
  6. 0006intro e
  7. 0007intro f
  8. 0008intro g
  9. 0009intro h
  10. 0010intro s
  11. 0011intro k
  12. 0012intro hcop
  13. 0013intro hf
  14. 0014intro hh
  15. 0015cases hf
  16. 0016cases hf_right
  17. 0017cases hh
  18. 0018cases hh_right
  19. 0019specialize jordan_tuple_bounded_congruence_equal (m*n)
  20. 0020specialize jordan_tuple_bounded_congruence_equal (f)
  21. 0021specialize jordan_tuple_bounded_congruence_equal (g)
  22. 0022specialize jordan_tuple_bounded_congruence_equal (h)
  23. 0023specialize jordan_tuple_bounded_congruence_equal (s)
  24. 0024specialize jordan_tuple_bounded_congruence_equal (k)
  25. 0025apply jordan_tuple_bounded_congruence_equal
  26. 0026exact hf_left
  27. 0027exact hh_left
  28. 0028specialize jordan_tuple_congruence_coprime_product (m)
  29. 0029specialize jordan_tuple_congruence_coprime_product (n)
  30. 0030specialize jordan_tuple_congruence_coprime_product (f)
  31. 0031specialize jordan_tuple_congruence_coprime_product (g)
  32. 0032specialize jordan_tuple_congruence_coprime_product (h)
  33. 0033specialize jordan_tuple_congruence_coprime_product (s)
  34. 0034specialize jordan_tuple_congruence_coprime_product (k)
  35. 0035apply jordan_tuple_congruence_coprime_product
  36. 0036exact hcop
  37. 0037specialize jordan_tuple_congruence_trans (m)
  38. 0038specialize jordan_tuple_congruence_trans (f)
  39. 0039specialize jordan_tuple_congruence_trans (g)
  40. 0040specialize jordan_tuple_congruence_trans (b)
  41. 0041specialize jordan_tuple_congruence_trans (c)
  42. 0042specialize jordan_tuple_congruence_trans (h)
  43. 0043specialize jordan_tuple_congruence_trans (s)
  44. 0044specialize jordan_tuple_congruence_trans (k)
  45. 0045apply jordan_tuple_congruence_trans
  46. 0046exact hf_right_left
  47. 0047specialize jordan_tuple_congruence_symm (m)
  48. 0048specialize jordan_tuple_congruence_symm (h)
  49. 0049specialize jordan_tuple_congruence_symm (s)
  50. 0050specialize jordan_tuple_congruence_symm (b)
  51. 0051specialize jordan_tuple_congruence_symm (c)
  52. 0052specialize jordan_tuple_congruence_symm (k)
  53. 0053apply jordan_tuple_congruence_symm
  54. 0054exact hh_right_left
  55. 0055specialize jordan_tuple_congruence_trans (n)
  56. 0056specialize jordan_tuple_congruence_trans (f)
  57. 0057specialize jordan_tuple_congruence_trans (g)
  58. 0058specialize jordan_tuple_congruence_trans (d)
  59. 0059specialize jordan_tuple_congruence_trans (e)
  60. 0060specialize jordan_tuple_congruence_trans (h)
  61. 0061specialize jordan_tuple_congruence_trans (s)
  62. 0062specialize jordan_tuple_congruence_trans (k)
  63. 0063apply jordan_tuple_congruence_trans
  64. 0064exact hf_right_right
  65. 0065specialize jordan_tuple_congruence_symm (n)
  66. 0066specialize jordan_tuple_congruence_symm (h)
  67. 0067specialize jordan_tuple_congruence_symm (s)
  68. 0068specialize jordan_tuple_congruence_symm (d)
  69. 0069specialize jordan_tuple_congruence_symm (e)
  70. 0070specialize jordan_tuple_congruence_symm (k)
  71. 0071apply jordan_tuple_congruence_symm
  72. 0072exact hh_right_right