EU0020

euler_coprime_totient_power

Construct the actual exponentiation witness for Euler's theorem at every positive modulus, without supplying a power, factor list, or permutation.

Alpha v34 checked-use · first admitted v31 · 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.

The exact G014 theorem covers m>1 and genuinely invertible a. Phi counts coprime residues independently of the conclusion. The broader coprime theorem handles m=1 by congruence, not by asserting that one is a canonical remainder. Multiplicative-order and RSA statements are not claimed.

Exact theorem in conservative defined notation

∀ a. ∀ m. ∀ t. ¬m = 0 → Coprime(a,m)Phi(m,t) → ∃ x. Pow(a,t,x)ModEq(m,x,1)

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

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall a m t. ~(m=0) -> (forall eut_divisor_eu_exists_coprime. (exists eut_left_eu_exists_coprime. (a) = eut_divisor_eu_exists_coprime * eut_left_eu_exists_coprime) -> (exists eut_right_eu_exists_coprime. (m) = eut_divisor_eu_exists_coprime * eut_right_eu_exists_coprime) -> eut_divisor_eu_exists_coprime = 1) -> ((~((m)=0) /\ (exists eut_code_eu_exists_phi_count eut_scale_eu_exists_phi_count. (forall eut_index_eu_exists_phi_count_mask. (exists eut_gap_eu_exists_phi_count_mask_bound. eut_gap_eu_exists_phi_count_mask_bound + S (eut_index_eu_exists_phi_count_mask) = (m)) -> exists eut_bit_eu_exists_phi_count_mask. (((exists fs_h_eut_eu_exists_phi_count_mask_entry. fs_h_eut_eu_exists_phi_count_mask_entry + S (eut_bit_eu_exists_phi_count_mask) = S ((S (eut_index_eu_exists_phi_count_mask)) * eut_scale_eu_exists_phi_count)) /\ exists fs_q_eut_eu_exists_phi_count_mask_entry. eut_code_eu_exists_phi_count = fs_q_eut_eu_exists_phi_count_mask_entry * S ((S (eut_index_eu_exists_phi_count_mask)) * eut_scale_eu_exists_phi_count) + (eut_bit_eu_exists_phi_count_mask))) /\ ((((forall eut_divisor_eu_exists_phi_count_mask_choice_coprime. (exists eut_left_eu_exists_phi_count_mask_choice_coprime. (eut_index_eu_exists_phi_count_mask) = eut_divisor_eu_exists_phi_count_mask_choice_coprime * eut_left_eu_exists_phi_count_mask_choice_coprime) -> (exists eut_right_eu_exists_phi_count_mask_choice_coprime. (m) = eut_divisor_eu_exists_phi_count_mask_choice_coprime * eut_right_eu_exists_phi_count_mask_choice_coprime) -> eut_divisor_eu_exists_phi_count_mask_choice_coprime = 1) /\ (eut_bit_eu_exists_phi_count_mask) = 1) \/ (~(forall eut_divisor_eu_exists_phi_count_mask_choice_coprime. (exists eut_left_eu_exists_phi_count_mask_choice_coprime. (eut_index_eu_exists_phi_count_mask) = eut_divisor_eu_exists_phi_count_mask_choice_coprime * eut_left_eu_exists_phi_count_mask_choice_coprime) -> (exists eut_right_eu_exists_phi_count_mask_choice_coprime. (m) = eut_divisor_eu_exists_phi_count_mask_choice_coprime * eut_right_eu_exists_phi_count_mask_choice_coprime) -> eut_divisor_eu_exists_phi_count_mask_choice_coprime = 1) /\ (eut_bit_eu_exists_phi_count_mask) = 0)))) /\ (exists fs_u_eut_eu_exists_phi_count_sum fs_v_eut_eu_exists_phi_count_sum. ((((exists fs_h_eut_eu_exists_phi_count_sum_body_start. fs_h_eut_eu_exists_phi_count_sum_body_start + S (0) = S ((S (0)) * fs_v_eut_eu_exists_phi_count_sum)) /\ exists fs_q_eut_eu_exists_phi_count_sum_body_start. fs_u_eut_eu_exists_phi_count_sum = fs_q_eut_eu_exists_phi_count_sum_body_start * S ((S (0)) * fs_v_eut_eu_exists_phi_count_sum) + (0))) /\ ((((exists fs_h_eut_eu_exists_phi_count_sum_body_terminal. fs_h_eut_eu_exists_phi_count_sum_body_terminal + S (t) = S ((S (m)) * fs_v_eut_eu_exists_phi_count_sum)) /\ exists fs_q_eut_eu_exists_phi_count_sum_body_terminal. fs_u_eut_eu_exists_phi_count_sum = fs_q_eut_eu_exists_phi_count_sum_body_terminal * S ((S (m)) * fs_v_eut_eu_exists_phi_count_sum) + (t))) /\ forall fs_i_eut_eu_exists_phi_count_sum_body_steps. (exists fs_lt_eut_eu_exists_phi_count_sum_body_steps_bound. fs_lt_eut_eu_exists_phi_count_sum_body_steps_bound + S fs_i_eut_eu_exists_phi_count_sum_body_steps = m) -> exists fs_a_eut_eu_exists_phi_count_sum_body_steps fs_r_eut_eu_exists_phi_count_sum_body_steps fs_s_eut_eu_exists_phi_count_sum_body_steps. ((((exists fs_h_eut_eu_exists_phi_count_sum_body_steps_summand. fs_h_eut_eu_exists_phi_count_sum_body_steps_summand + S (fs_a_eut_eu_exists_phi_count_sum_body_steps) = S ((S (fs_i_eut_eu_exists_phi_count_sum_body_steps)) * eut_scale_eu_exists_phi_count)) /\ exists fs_q_eut_eu_exists_phi_count_sum_body_steps_summand. eut_code_eu_exists_phi_count = fs_q_eut_eu_exists_phi_count_sum_body_steps_summand * S ((S (fs_i_eut_eu_exists_phi_count_sum_body_steps)) * eut_scale_eu_exists_phi_count) + (fs_a_eut_eu_exists_phi_count_sum_body_steps))) /\ ((((exists fs_h_eut_eu_exists_phi_count_sum_body_steps_partial. fs_h_eut_eu_exists_phi_count_sum_body_steps_partial + S (fs_r_eut_eu_exists_phi_count_sum_body_steps) = S ((S (fs_i_eut_eu_exists_phi_count_sum_body_steps)) * fs_v_eut_eu_exists_phi_count_sum)) /\ exists fs_q_eut_eu_exists_phi_count_sum_body_steps_partial. fs_u_eut_eu_exists_phi_count_sum = fs_q_eut_eu_exists_phi_count_sum_body_steps_partial * S ((S (fs_i_eut_eu_exists_phi_count_sum_body_steps)) * fs_v_eut_eu_exists_phi_count_sum) + (fs_r_eut_eu_exists_phi_count_sum_body_steps))) /\ ((((exists fs_h_eut_eu_exists_phi_count_sum_body_steps_successor. fs_h_eut_eu_exists_phi_count_sum_body_steps_successor + S (fs_s_eut_eu_exists_phi_count_sum_body_steps) = S ((S (S fs_i_eut_eu_exists_phi_count_sum_body_steps)) * fs_v_eut_eu_exists_phi_count_sum)) /\ exists fs_q_eut_eu_exists_phi_count_sum_body_steps_successor. fs_u_eut_eu_exists_phi_count_sum = fs_q_eut_eu_exists_phi_count_sum_body_steps_successor * S ((S (S fs_i_eut_eu_exists_phi_count_sum_body_steps)) * fs_v_eut_eu_exists_phi_count_sum) + (fs_s_eut_eu_exists_phi_count_sum_body_steps))) /\ fs_s_eut_eu_exists_phi_count_sum_body_steps = fs_r_eut_eu_exists_phi_count_sum_body_steps + fs_a_eut_eu_exists_phi_count_sum_body_steps))))))))) -> exists w. (exists pa_b_euta_eu_exists_power pa_c_euta_eu_exists_power. ((forall pa_i_euta_eu_exists_power_repeat. (exists pa_lt_euta_eu_exists_power_repeat_bound. pa_lt_euta_eu_exists_power_repeat_bound + S pa_i_euta_eu_exists_power_repeat = t) -> (((exists pa_h_euta_eu_exists_power_repeat_decoded. pa_h_euta_eu_exists_power_repeat_decoded + S (a) = S ((S (pa_i_euta_eu_exists_power_repeat)) * pa_c_euta_eu_exists_power)) /\ exists pa_q_euta_eu_exists_power_repeat_decoded. pa_b_euta_eu_exists_power = pa_q_euta_eu_exists_power_repeat_decoded * S ((S (pa_i_euta_eu_exists_power_repeat)) * pa_c_euta_eu_exists_power) + (a)))) /\ (exists pa_u_euta_eu_exists_power_product pa_v_euta_eu_exists_power_product. ((((exists pa_h_euta_eu_exists_power_product_start. pa_h_euta_eu_exists_power_product_start + S (1) = S ((S (0)) * pa_v_euta_eu_exists_power_product)) /\ exists pa_q_euta_eu_exists_power_product_start. pa_u_euta_eu_exists_power_product = pa_q_euta_eu_exists_power_product_start * S ((S (0)) * pa_v_euta_eu_exists_power_product) + (1))) /\ ((((exists pa_h_euta_eu_exists_power_product_terminal. pa_h_euta_eu_exists_power_product_terminal + S (w) = S ((S (t)) * pa_v_euta_eu_exists_power_product)) /\ exists pa_q_euta_eu_exists_power_product_terminal. pa_u_euta_eu_exists_power_product = pa_q_euta_eu_exists_power_product_terminal * S ((S (t)) * pa_v_euta_eu_exists_power_product) + (w))) /\ forall pa_i_euta_eu_exists_power_product. (exists pa_lt_euta_eu_exists_power_product_bound. pa_lt_euta_eu_exists_power_product_bound + S pa_i_euta_eu_exists_power_product = t) -> exists pa_p_euta_eu_exists_power_product pa_r_euta_eu_exists_power_product pa_s_euta_eu_exists_power_product. ((((exists pa_h_euta_eu_exists_power_product_factor. pa_h_euta_eu_exists_power_product_factor + S (pa_p_euta_eu_exists_power_product) = S ((S (pa_i_euta_eu_exists_power_product)) * pa_c_euta_eu_exists_power)) /\ exists pa_q_euta_eu_exists_power_product_factor. pa_b_euta_eu_exists_power = pa_q_euta_eu_exists_power_product_factor * S ((S (pa_i_euta_eu_exists_power_product)) * pa_c_euta_eu_exists_power) + (pa_p_euta_eu_exists_power_product))) /\ ((((exists pa_h_euta_eu_exists_power_product_partial. pa_h_euta_eu_exists_power_product_partial + S (pa_r_euta_eu_exists_power_product) = S ((S (pa_i_euta_eu_exists_power_product)) * pa_v_euta_eu_exists_power_product)) /\ exists pa_q_euta_eu_exists_power_product_partial. pa_u_euta_eu_exists_power_product = pa_q_euta_eu_exists_power_product_partial * S ((S (pa_i_euta_eu_exists_power_product)) * pa_v_euta_eu_exists_power_product) + (pa_r_euta_eu_exists_power_product))) /\ ((((exists pa_h_euta_eu_exists_power_product_successor. pa_h_euta_eu_exists_power_product_successor + S (pa_s_euta_eu_exists_power_product) = S ((S (S pa_i_euta_eu_exists_power_product)) * pa_v_euta_eu_exists_power_product)) /\ exists pa_q_euta_eu_exists_power_product_successor. pa_u_euta_eu_exists_power_product = pa_q_euta_eu_exists_power_product_successor * S ((S (S pa_i_euta_eu_exists_power_product)) * pa_v_euta_eu_exists_power_product) + (pa_s_euta_eu_exists_power_product))) /\ pa_s_euta_eu_exists_power_product = pa_r_euta_eu_exists_power_product * pa_p_euta_eu_exists_power_product)))))))) /\ (exists eu_mod_left_exists_result eu_mod_right_exists_result. (w) + (m) * eu_mod_left_exists_result = (1) + (m) * eu_mod_right_exists_result)

Complete tactic proof in conservative notation

All 23 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

23 script commands · 6 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.

Named ingredients (1)
01Fix variables and assumptionsL1–6

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

  1. L1
    intro a
  2. L2
    intro m
  3. L3
    intro t
  4. L4
    intro hm
  5. L5
    intro hc
  6. L6
    intro ht
02Establish hwL7–10

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

  1. L7
    have hw : ∃ w. Pow(a,t,w)Definitions: Pow(a,t,w)Original native command in the exact edition
  2. L8
    specialize pow_exists (a)
  3. L9
    specialize pow_exists (t)
  4. L10
    apply pow_exists
03Separate the logical casesL11–11

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

  1. L11
    cases hw
04Construct an explicit witnessL12–12

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

  1. L12
    exists x
05Separate the logical casesL13–13

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

  1. L13
    split
06Use earlier factsL14–23

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

  1. L14
    exact hw_witness
  2. L15
    specialize euler_coprime_totient_power_value (a)
  3. L16
    specialize euler_coprime_totient_power_value (m)
  4. L17
    specialize euler_coprime_totient_power_value (t)
  5. L18
    specialize euler_coprime_totient_power_value (x)
  6. L19
    apply euler_coprime_totient_power_value
  7. L20
    exact hm
  8. L21
    exact hc
  9. L22
    exact ht
  10. L23
    exact hw_witness

Library-wide reading audit

Original defined command ledger · 23 lines
  1. 0001intro a
  2. 0002intro m
  3. 0003intro t
  4. 0004intro hm
  5. 0005intro hc
  6. 0006intro ht
  7. 0007have hw : ∃ w. Pow(a,t,w)
  8. 0008specialize pow_exists (a)
  9. 0009specialize pow_exists (t)
  10. 0010apply pow_exists
  11. 0011cases hw
  12. 0012exists x
  13. 0013split
  14. 0014exact hw_witness
  15. 0015specialize euler_coprime_totient_power_value (a)
  16. 0016specialize euler_coprime_totient_power_value (m)
  17. 0017specialize euler_coprime_totient_power_value (t)
  18. 0018specialize euler_coprime_totient_power_value (x)
  19. 0019apply euler_coprime_totient_power_value
  20. 0020exact hm
  21. 0021exact hc
  22. 0022exact ht
  23. 0023exact hw_witness