GC0003

crt_pairwise_compatible_prefix_empty

The empty actual residue/modulus list is pairwise gcd-compatible.

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

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.

Historical partial components only: this chapter proves canonical solutions under successive-merge compatibility and in the pairwise-compatible dominating-last case. G011 is now closed in the separate Alpha-v27 generalized-crt branch for arbitrary pairwise-compatible finite lists, including noncoprime moduli. Full G011 proof · Alpha v27

Exact theorem in conservative defined notation

∀ r. ∀ s. ∀ b. ∀ c. ∀ l. l = 0 → CRTPairwiseCompatiblePrefix(r,s,b,c,l)

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

Definition DAG

Actual proof prerequisites

le_zero · checked external prerequisitesucc_ne_zero · checked external prerequisite
Original expanded first-order statement
forall r s b c l. l = 0 -> (forall gcomp_left_index_pairs_empty gcomp_right_index_pairs_empty gcomp_left_residue_pairs_empty gcomp_right_residue_pairs_empty gcomp_left_modulus_pairs_empty gcomp_right_modulus_pairs_empty gcomp_pair_gcd_pairs_empty. (exists ff_lt_gcrt_pairs_empty_left_bound. ff_lt_gcrt_pairs_empty_left_bound + S gcomp_left_index_pairs_empty = l) -> (exists ff_lt_gcrt_pairs_empty_right_bound. ff_lt_gcrt_pairs_empty_right_bound + S gcomp_right_index_pairs_empty = l) -> (((exists ff_h_gcrt_pairs_empty_left_residue. ff_h_gcrt_pairs_empty_left_residue + S (gcomp_left_residue_pairs_empty) = S ((S (gcomp_left_index_pairs_empty)) * s)) /\ exists ff_q_gcrt_pairs_empty_left_residue. r = ff_q_gcrt_pairs_empty_left_residue * S ((S (gcomp_left_index_pairs_empty)) * s) + (gcomp_left_residue_pairs_empty))) -> (((exists ff_h_gcrt_pairs_empty_right_residue. ff_h_gcrt_pairs_empty_right_residue + S (gcomp_right_residue_pairs_empty) = S ((S (gcomp_right_index_pairs_empty)) * s)) /\ exists ff_q_gcrt_pairs_empty_right_residue. r = ff_q_gcrt_pairs_empty_right_residue * S ((S (gcomp_right_index_pairs_empty)) * s) + (gcomp_right_residue_pairs_empty))) -> (((exists ff_h_gcrt_pairs_empty_left_modulus. ff_h_gcrt_pairs_empty_left_modulus + S (gcomp_left_modulus_pairs_empty) = S ((S (gcomp_left_index_pairs_empty)) * c)) /\ exists ff_q_gcrt_pairs_empty_left_modulus. b = ff_q_gcrt_pairs_empty_left_modulus * S ((S (gcomp_left_index_pairs_empty)) * c) + (gcomp_left_modulus_pairs_empty))) -> (((exists ff_h_gcrt_pairs_empty_right_modulus. ff_h_gcrt_pairs_empty_right_modulus + S (gcomp_right_modulus_pairs_empty) = S ((S (gcomp_right_index_pairs_empty)) * c)) /\ exists ff_q_gcrt_pairs_empty_right_modulus. b = ff_q_gcrt_pairs_empty_right_modulus * S ((S (gcomp_right_index_pairs_empty)) * c) + (gcomp_right_modulus_pairs_empty))) -> ((((exists hag_left_factor_gcomp_pairs_empty_gcd. gcomp_left_modulus_pairs_empty = gcomp_pair_gcd_pairs_empty * hag_left_factor_gcomp_pairs_empty_gcd) /\ (exists hag_right_factor_gcomp_pairs_empty_gcd. gcomp_right_modulus_pairs_empty = gcomp_pair_gcd_pairs_empty * hag_right_factor_gcomp_pairs_empty_gcd)) /\ forall hag_divisor_gcomp_pairs_empty_gcd. (exists hag_common_left_gcomp_pairs_empty_gcd. gcomp_left_modulus_pairs_empty = hag_divisor_gcomp_pairs_empty_gcd * hag_common_left_gcomp_pairs_empty_gcd) -> (exists hag_common_right_gcomp_pairs_empty_gcd. gcomp_right_modulus_pairs_empty = hag_divisor_gcomp_pairs_empty_gcd * hag_common_right_gcomp_pairs_empty_gcd) -> exists hag_greatest_factor_gcomp_pairs_empty_gcd. gcomp_pair_gcd_pairs_empty = hag_divisor_gcomp_pairs_empty_gcd * hag_greatest_factor_gcomp_pairs_empty_gcd)) -> (exists hgcrt_mod_left_gcrt_pairs_empty_result hgcrt_mod_right_gcrt_pairs_empty_result. gcomp_left_residue_pairs_empty + gcomp_pair_gcd_pairs_empty * hgcrt_mod_left_gcrt_pairs_empty_result = gcomp_right_residue_pairs_empty + gcomp_pair_gcd_pairs_empty * hgcrt_mod_right_gcrt_pairs_empty_result))

Complete unchanged native tactic proof

All 29 lines are the exact independently kernel-checked original script.

Read the argument

Proof checkpoints

29 script commands · 5 reading checkpoints · 1 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.

01Fix variables and assumptionsL1–10

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

  1. L1
    intro r
  2. L2
    intro s
  3. L3
    intro b
  4. L4
    intro c
  5. L5
    intro l
  6. L6
    intro hzero
  7. L7
    intro i
  8. L8
    intro j
  9. L9
    intro a
  10. L10
    intro d
02Fix variables and assumptionsL11–20

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

  1. L11
    intro m
  2. L12
    intro n
  3. L13
    intro g
  4. L14
    intro hi
  5. L15
    intro hj
  6. L16
    intro ha
  7. L17
    intro hd
  8. L18
    intro hm
  9. L19
    intro hn
  10. L20
    intro hg
03Separate the logical casesL21–21

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

  1. L21
    exfalso
04Calculate and transport equalitiesL22–22

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

  1. L22
    rewrite hzero at hi
05Establish hbadL23–29

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

  1. L23
    have hbad : S i = 0
  2. L24
    specialize le_zero (S i)
  3. L25
    apply le_zero
  4. L26
    exact hi
  5. L27
    specialize succ_ne_zero i
  6. L28
    apply succ_ne_zero
  7. L29
    exact hbad

Library-wide reading audit

Original defined command ledger · 29 lines
  1. 0001intro r
  2. 0002intro s
  3. 0003intro b
  4. 0004intro c
  5. 0005intro l
  6. 0006intro hzero
  7. 0007intro i
  8. 0008intro j
  9. 0009intro a
  10. 0010intro d
  11. 0011intro m
  12. 0012intro n
  13. 0013intro g
  14. 0014intro hi
  15. 0015intro hj
  16. 0016intro ha
  17. 0017intro hd
  18. 0018intro hm
  19. 0019intro hn
  20. 0020intro hg
  21. 0021exfalso
  22. 0022rewrite hzero at hi
  23. 0023have hbad : S i = 0
  24. 0024specialize le_zero (S i)
  25. 0025apply le_zero
  26. 0026exact hi
  27. 0027specialize succ_ne_zero i
  28. 0028apply succ_ne_zero
  29. 0029exact hbad