CD0020

finite_modular_composition_all_bits

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

The actual modular pullback of a characteristic prefix remains an actual characteristic prefix.

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 p t r s b c z d. (forall fms_i_indices. (exists fms_gap_indices. fms_gap_indices + S (fms_i_indices) = (p)) -> exists fms_j_indices. (((exists fs_h_fms_indices_entry. fs_h_fms_indices_entry + S (fms_j_indices) = S ((S (fms_i_indices)) * s)) /\ exists fs_q_fms_indices_entry. r = fs_q_fms_indices_entry * S ((S (fms_i_indices)) * s) + (fms_j_indices))) /\ ((exists fms_gap_indices_bound. fms_gap_indices_bound + S (fms_j_indices) = (p)) /\ (exists fms_u_indices fms_v_indices. (fms_i_indices+t) + (p) * fms_u_indices = (fms_j_indices) + (p) * fms_v_indices))) -> (forall fms_i_compose fms_j_compose fms_v_compose. (exists fms_gap_compose. fms_gap_compose + S (fms_i_compose) = (p)) -> (((exists fs_h_fms_compose_index. fs_h_fms_compose_index + S (fms_j_compose) = S ((S (fms_i_compose)) * s)) /\ exists fs_q_fms_compose_index. r = fs_q_fms_compose_index * S ((S (fms_i_compose)) * s) + (fms_j_compose))) -> (((exists fs_h_fms_compose_source. fs_h_fms_compose_source + S (fms_v_compose) = S ((S (fms_j_compose)) * c)) /\ exists fs_q_fms_compose_source. b = fs_q_fms_compose_source * S ((S (fms_j_compose)) * c) + (fms_v_compose))) -> (((exists fs_h_fms_compose_target. fs_h_fms_compose_target + S (fms_v_compose) = S ((S (fms_i_compose)) * d)) /\ exists fs_q_fms_compose_target. z = fs_q_fms_compose_target * S ((S (fms_i_compose)) * d) + (fms_v_compose)))) -> (forall ff_i_fms_bits. (exists ff_lt_fms_bits_bound. ff_lt_fms_bits_bound + S ff_i_fms_bits = (p)) -> exists ff_bit_fms_bits. ((((exists ff_h_fms_bits_decoded. ff_h_fms_bits_decoded + S (ff_bit_fms_bits) = S ((S (ff_i_fms_bits)) * (c))) /\ exists ff_q_fms_bits_decoded. (b) = ff_q_fms_bits_decoded * S ((S (ff_i_fms_bits)) * (c)) + (ff_bit_fms_bits))) /\ (ff_bit_fms_bits = 0 \/ ff_bit_fms_bits = 1))) -> (forall ff_i_fms_bits. (exists ff_lt_fms_bits_bound. ff_lt_fms_bits_bound + S ff_i_fms_bits = (p)) -> exists ff_bit_fms_bits. ((((exists ff_h_fms_bits_decoded. ff_h_fms_bits_decoded + S (ff_bit_fms_bits) = S ((S (ff_i_fms_bits)) * (d))) /\ exists ff_q_fms_bits_decoded. (z) = ff_q_fms_bits_decoded * S ((S (ff_i_fms_bits)) * (d)) + (ff_bit_fms_bits))) /\ (ff_bit_fms_bits = 0 \/ ff_bit_fms_bits = 1)))

Constructive proof overview

Generated structural guide

The actual modular pullback of a characteristic prefix remains an actual characteristic prefix.

The unchanged tactic script uses 0 declared prerequisites and contains 36 exact native proof lines.

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

Proof neighborhood

Direct dependencies

none

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

36 script commands · 9 reading checkpoints · 2 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.

01Fix variables and assumptionsL1–10

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

  1. L1
    intro p
  2. L2
    intro t
  3. L3
    intro r
  4. L4
    intro s
  5. L5
    intro b
  6. L6
    intro c
  7. L7
    intro z
  8. L8
    intro d
  9. L9
    intro hindices
  10. L10
    intro hcompose
02Fix variables and assumptionsL11–13

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

  1. L11
    intro hbits
  2. L12
    intro i
  3. L13
    intro hi
03Establish hjL14–17

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

  1. L14
    have hj : exists j. (((exists fs_h_fms_comp_bits_index. fs_h_fms_comp_bits_index + S (j) = S ((S (i)) * s)) /\ exists fs_q_fms_comp_bits_index. r = fs_q_fms_comp_bits_index * S ((S (i)) * s) + (j))) /\ ((exists fms_gap_lt. fms_gap_lt + S (j) = (p)) /\ (exists fms_u_mod fms_v_mod. (i+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod))
  2. L15
    specialize hindices i
  3. L16
    apply hindices
  4. L17
    exact hi
04Separate the logical casesL18–20

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

  1. L18
    cases hj
  2. L19
    cases hj_witness
  3. L20
    cases hj_witness_right
05Establish hvL21–24

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

  1. L21
    have hv : exists v. (((exists fs_h_fms_comp_bits_source. fs_h_fms_comp_bits_source + S (v) = S ((S (x)) * c)) /\ exists fs_q_fms_comp_bits_source. b = fs_q_fms_comp_bits_source * S ((S (x)) * c) + (v))) /\ (v=0 \/ v=1)
  2. L22
    specialize hbits x
  3. L23
    apply hbits
  4. L24
    exact hj_witness_right_left
06Separate the logical casesL25–26

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

  1. L25
    cases hv
  2. L26
    cases hv_witness
07Construct an explicit witnessL27–27

Supply the displayed value, then prove that it has the required property.

  1. L27
    exists x1
08Separate the logical casesL28–28

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

  1. L28
    split
09Use earlier factsL29–36

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

  1. L29
    specialize hcompose i
  2. L30
    specialize hcompose x
  3. L31
    specialize hcompose x1
  4. L32
    apply hcompose
  5. L33
    exact hi
  6. L34
    exact hj_witness_left
  7. L35
    exact hv_witness_left
  8. L36
    exact hv_witness_right

Library-wide reading audit

Original exact command ledger · 36 lines
  1. 0001intro p
  2. 0002intro t
  3. 0003intro r
  4. 0004intro s
  5. 0005intro b
  6. 0006intro c
  7. 0007intro z
  8. 0008intro d
  9. 0009intro hindices
  10. 0010intro hcompose
  11. 0011intro hbits
  12. 0012intro i
  13. 0013intro hi
  14. 0014have hj : exists j. (((exists fs_h_fms_comp_bits_index. fs_h_fms_comp_bits_index + S (j) = S ((S (i)) * s)) /\ exists fs_q_fms_comp_bits_index. r = fs_q_fms_comp_bits_index * S ((S (i)) * s) + (j))) /\ ((exists fms_gap_lt. fms_gap_lt + S (j) = (p)) /\ (exists fms_u_mod fms_v_mod. (i+t) + (p) * fms_u_mod = (j) + (p) * fms_v_mod))
  15. 0015specialize hindices i
  16. 0016apply hindices
  17. 0017exact hi
  18. 0018cases hj
  19. 0019cases hj_witness
  20. 0020cases hj_witness_right
  21. 0021have hv : exists v. (((exists fs_h_fms_comp_bits_source. fs_h_fms_comp_bits_source + S (v) = S ((S (x)) * c)) /\ exists fs_q_fms_comp_bits_source. b = fs_q_fms_comp_bits_source * S ((S (x)) * c) + (v))) /\ (v=0 \/ v=1)
  22. 0022specialize hbits x
  23. 0023apply hbits
  24. 0024exact hj_witness_right_left
  25. 0025cases hv
  26. 0026cases hv_witness
  27. 0027exists x1
  28. 0028split
  29. 0029specialize hcompose i
  30. 0030specialize hcompose x
  31. 0031specialize hcompose x1
  32. 0032apply hcompose
  33. 0033exact hi
  34. 0034exact hj_witness_left
  35. 0035exact hv_witness_left
  36. 0036exact hv_witness_right