EL001A

lte_valuation_from_exact_cofactor

An actual prime-power times a genuine nondivisor cofactor constructs its precise maximal valuation, including the unit boundary.

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

All displayed hypotheses are required. Powers and positive differences are actual existential outputs. The proof constructs second-order correction identities and iterates the prime step; no binomial expansion or LTE oracle is assumed. The 2-adic variants remain separate open targets.

Exact theorem in conservative defined notation

∀ p. ∀ e. ∀ P. ∀ u. ∀ X. ¬p = 1 ∧ (∀ x. ∀ y. p = x · y → x = 1 ∨ y = 1) → Pow(p,e,P) → X = P · u → ¬Dvd(p,u)BoundedPowerValuation(p,X,X,e)

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

Definition DAG

Actual proof prerequisites

power_valuation_value_eq_transport · checked external prerequisiteprime_valuation_exponent_eq_transport · checked external prerequisitelte_valuation_product_exactpow_nonzero_of_one_le · checked external prerequisiteone_le_of_ne_zero · checked external prerequisiteprime_nonzero · checked external prerequisitelte_nondivisor_nonzerolte_prime_power_valuation_exactprime_valuation_zero_of_nondivisor · checked external prerequisite
Original expanded first-order statement
forall p e P u X. (~((p) = 1) /\ forall pvs_left_cofactor_prime pvs_right_cofactor_prime. (p) = pvs_left_cofactor_prime * pvs_right_cofactor_prime -> pvs_left_cofactor_prime = 1 \/ pvs_right_cofactor_prime = 1) -> (exists pa_b_olte_cofactor_power pa_c_olte_cofactor_power. ((forall pa_i_olte_cofactor_power_repeat. (exists pa_lt_olte_cofactor_power_repeat_bound. pa_lt_olte_cofactor_power_repeat_bound + S pa_i_olte_cofactor_power_repeat = e) -> (((exists pa_h_olte_cofactor_power_repeat_decoded. pa_h_olte_cofactor_power_repeat_decoded + S (p) = S ((S (pa_i_olte_cofactor_power_repeat)) * pa_c_olte_cofactor_power)) /\ exists pa_q_olte_cofactor_power_repeat_decoded. pa_b_olte_cofactor_power = pa_q_olte_cofactor_power_repeat_decoded * S ((S (pa_i_olte_cofactor_power_repeat)) * pa_c_olte_cofactor_power) + (p)))) /\ (exists pa_u_olte_cofactor_power_product pa_v_olte_cofactor_power_product. ((((exists pa_h_olte_cofactor_power_product_start. pa_h_olte_cofactor_power_product_start + S (1) = S ((S (0)) * pa_v_olte_cofactor_power_product)) /\ exists pa_q_olte_cofactor_power_product_start. pa_u_olte_cofactor_power_product = pa_q_olte_cofactor_power_product_start * S ((S (0)) * pa_v_olte_cofactor_power_product) + (1))) /\ ((((exists pa_h_olte_cofactor_power_product_terminal. pa_h_olte_cofactor_power_product_terminal + S (P) = S ((S (e)) * pa_v_olte_cofactor_power_product)) /\ exists pa_q_olte_cofactor_power_product_terminal. pa_u_olte_cofactor_power_product = pa_q_olte_cofactor_power_product_terminal * S ((S (e)) * pa_v_olte_cofactor_power_product) + (P))) /\ forall pa_i_olte_cofactor_power_product. (exists pa_lt_olte_cofactor_power_product_bound. pa_lt_olte_cofactor_power_product_bound + S pa_i_olte_cofactor_power_product = e) -> exists pa_p_olte_cofactor_power_product pa_r_olte_cofactor_power_product pa_s_olte_cofactor_power_product. ((((exists pa_h_olte_cofactor_power_product_factor. pa_h_olte_cofactor_power_product_factor + S (pa_p_olte_cofactor_power_product) = S ((S (pa_i_olte_cofactor_power_product)) * pa_c_olte_cofactor_power)) /\ exists pa_q_olte_cofactor_power_product_factor. pa_b_olte_cofactor_power = pa_q_olte_cofactor_power_product_factor * S ((S (pa_i_olte_cofactor_power_product)) * pa_c_olte_cofactor_power) + (pa_p_olte_cofactor_power_product))) /\ ((((exists pa_h_olte_cofactor_power_product_partial. pa_h_olte_cofactor_power_product_partial + S (pa_r_olte_cofactor_power_product) = S ((S (pa_i_olte_cofactor_power_product)) * pa_v_olte_cofactor_power_product)) /\ exists pa_q_olte_cofactor_power_product_partial. pa_u_olte_cofactor_power_product = pa_q_olte_cofactor_power_product_partial * S ((S (pa_i_olte_cofactor_power_product)) * pa_v_olte_cofactor_power_product) + (pa_r_olte_cofactor_power_product))) /\ ((((exists pa_h_olte_cofactor_power_product_successor. pa_h_olte_cofactor_power_product_successor + S (pa_s_olte_cofactor_power_product) = S ((S (S pa_i_olte_cofactor_power_product)) * pa_v_olte_cofactor_power_product)) /\ exists pa_q_olte_cofactor_power_product_successor. pa_u_olte_cofactor_power_product = pa_q_olte_cofactor_power_product_successor * S ((S (S pa_i_olte_cofactor_power_product)) * pa_v_olte_cofactor_power_product) + (pa_s_olte_cofactor_power_product))) /\ pa_s_olte_cofactor_power_product = pa_r_olte_cofactor_power_product * pa_p_olte_cofactor_power_product)))))))) -> X = P * u -> ~(exists olte_factor_cofactor_unit. (u) = (p) * olte_factor_cofactor_unit) -> (((exists bpd_gap_pvs_cofactor_result_selected_bound. bpd_gap_pvs_cofactor_result_selected_bound + (e) = (X)) /\ (exists bpvi_result_pvs_cofactor_result_selected. ((exists bpvi_b_pvs_cofactor_result_selected_power bpvi_c_pvs_cofactor_result_selected_power. ((forall bpvi_i_pvs_cofactor_result_selected_power. (exists bpvi_repeat_gap_pvs_cofactor_result_selected_power. bpvi_repeat_gap_pvs_cofactor_result_selected_power + S bpvi_i_pvs_cofactor_result_selected_power = e) -> (((exists bpvi_h_pvs_cofactor_result_selected_power_repeat. bpvi_h_pvs_cofactor_result_selected_power_repeat + S (p) = S ((S (bpvi_i_pvs_cofactor_result_selected_power)) * bpvi_c_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_repeat. bpvi_b_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_repeat * S ((S (bpvi_i_pvs_cofactor_result_selected_power)) * bpvi_c_pvs_cofactor_result_selected_power) + (p)))) /\ (exists bpvi_u_pvs_cofactor_result_selected_power bpvi_v_pvs_cofactor_result_selected_power. ((((exists bpvi_h_pvs_cofactor_result_selected_power_start. bpvi_h_pvs_cofactor_result_selected_power_start + S (1) = S ((S (0)) * bpvi_v_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_start. bpvi_u_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_start * S ((S (0)) * bpvi_v_pvs_cofactor_result_selected_power) + (1))) /\ ((((exists bpvi_h_pvs_cofactor_result_selected_power_terminal. bpvi_h_pvs_cofactor_result_selected_power_terminal + S (bpvi_result_pvs_cofactor_result_selected) = S ((S (e)) * bpvi_v_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_terminal. bpvi_u_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_terminal * S ((S (e)) * bpvi_v_pvs_cofactor_result_selected_power) + (bpvi_result_pvs_cofactor_result_selected))) /\ forall bpvi_j_pvs_cofactor_result_selected_power. (exists bpvi_product_gap_pvs_cofactor_result_selected_power. bpvi_product_gap_pvs_cofactor_result_selected_power + S bpvi_j_pvs_cofactor_result_selected_power = e) -> exists bpvi_factor_pvs_cofactor_result_selected_power bpvi_partial_pvs_cofactor_result_selected_power bpvi_successor_pvs_cofactor_result_selected_power. ((((exists bpvi_h_pvs_cofactor_result_selected_power_factor. bpvi_h_pvs_cofactor_result_selected_power_factor + S (bpvi_factor_pvs_cofactor_result_selected_power) = S ((S (bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_c_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_factor. bpvi_b_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_factor * S ((S (bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_c_pvs_cofactor_result_selected_power) + (bpvi_factor_pvs_cofactor_result_selected_power))) /\ ((((exists bpvi_h_pvs_cofactor_result_selected_power_partial. bpvi_h_pvs_cofactor_result_selected_power_partial + S (bpvi_partial_pvs_cofactor_result_selected_power) = S ((S (bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_v_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_partial. bpvi_u_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_partial * S ((S (bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_v_pvs_cofactor_result_selected_power) + (bpvi_partial_pvs_cofactor_result_selected_power))) /\ ((((exists bpvi_h_pvs_cofactor_result_selected_power_successor. bpvi_h_pvs_cofactor_result_selected_power_successor + S (bpvi_successor_pvs_cofactor_result_selected_power) = S ((S (S bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_v_pvs_cofactor_result_selected_power)) /\ exists bpvi_q_pvs_cofactor_result_selected_power_successor. bpvi_u_pvs_cofactor_result_selected_power = bpvi_q_pvs_cofactor_result_selected_power_successor * S ((S (S bpvi_j_pvs_cofactor_result_selected_power)) * bpvi_v_pvs_cofactor_result_selected_power) + (bpvi_successor_pvs_cofactor_result_selected_power))) /\ bpvi_successor_pvs_cofactor_result_selected_power = bpvi_partial_pvs_cofactor_result_selected_power * bpvi_factor_pvs_cofactor_result_selected_power)))))))) /\ exists bpvi_divisor_factor_pvs_cofactor_result_selected. X = bpvi_result_pvs_cofactor_result_selected * bpvi_divisor_factor_pvs_cofactor_result_selected))) /\ forall bpd_candidate_pvs_cofactor_result. (exists bpd_gap_pvs_cofactor_result_candidate_bound. bpd_gap_pvs_cofactor_result_candidate_bound + (bpd_candidate_pvs_cofactor_result) = (X)) -> (exists bpvi_result_pvs_cofactor_result_candidate. ((exists bpvi_b_pvs_cofactor_result_candidate_power bpvi_c_pvs_cofactor_result_candidate_power. ((forall bpvi_i_pvs_cofactor_result_candidate_power. (exists bpvi_repeat_gap_pvs_cofactor_result_candidate_power. bpvi_repeat_gap_pvs_cofactor_result_candidate_power + S bpvi_i_pvs_cofactor_result_candidate_power = bpd_candidate_pvs_cofactor_result) -> (((exists bpvi_h_pvs_cofactor_result_candidate_power_repeat. bpvi_h_pvs_cofactor_result_candidate_power_repeat + S (p) = S ((S (bpvi_i_pvs_cofactor_result_candidate_power)) * bpvi_c_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_repeat. bpvi_b_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_repeat * S ((S (bpvi_i_pvs_cofactor_result_candidate_power)) * bpvi_c_pvs_cofactor_result_candidate_power) + (p)))) /\ (exists bpvi_u_pvs_cofactor_result_candidate_power bpvi_v_pvs_cofactor_result_candidate_power. ((((exists bpvi_h_pvs_cofactor_result_candidate_power_start. bpvi_h_pvs_cofactor_result_candidate_power_start + S (1) = S ((S (0)) * bpvi_v_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_start. bpvi_u_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_start * S ((S (0)) * bpvi_v_pvs_cofactor_result_candidate_power) + (1))) /\ ((((exists bpvi_h_pvs_cofactor_result_candidate_power_terminal. bpvi_h_pvs_cofactor_result_candidate_power_terminal + S (bpvi_result_pvs_cofactor_result_candidate) = S ((S (bpd_candidate_pvs_cofactor_result)) * bpvi_v_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_terminal. bpvi_u_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_terminal * S ((S (bpd_candidate_pvs_cofactor_result)) * bpvi_v_pvs_cofactor_result_candidate_power) + (bpvi_result_pvs_cofactor_result_candidate))) /\ forall bpvi_j_pvs_cofactor_result_candidate_power. (exists bpvi_product_gap_pvs_cofactor_result_candidate_power. bpvi_product_gap_pvs_cofactor_result_candidate_power + S bpvi_j_pvs_cofactor_result_candidate_power = bpd_candidate_pvs_cofactor_result) -> exists bpvi_factor_pvs_cofactor_result_candidate_power bpvi_partial_pvs_cofactor_result_candidate_power bpvi_successor_pvs_cofactor_result_candidate_power. ((((exists bpvi_h_pvs_cofactor_result_candidate_power_factor. bpvi_h_pvs_cofactor_result_candidate_power_factor + S (bpvi_factor_pvs_cofactor_result_candidate_power) = S ((S (bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_c_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_factor. bpvi_b_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_factor * S ((S (bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_c_pvs_cofactor_result_candidate_power) + (bpvi_factor_pvs_cofactor_result_candidate_power))) /\ ((((exists bpvi_h_pvs_cofactor_result_candidate_power_partial. bpvi_h_pvs_cofactor_result_candidate_power_partial + S (bpvi_partial_pvs_cofactor_result_candidate_power) = S ((S (bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_v_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_partial. bpvi_u_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_partial * S ((S (bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_v_pvs_cofactor_result_candidate_power) + (bpvi_partial_pvs_cofactor_result_candidate_power))) /\ ((((exists bpvi_h_pvs_cofactor_result_candidate_power_successor. bpvi_h_pvs_cofactor_result_candidate_power_successor + S (bpvi_successor_pvs_cofactor_result_candidate_power) = S ((S (S bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_v_pvs_cofactor_result_candidate_power)) /\ exists bpvi_q_pvs_cofactor_result_candidate_power_successor. bpvi_u_pvs_cofactor_result_candidate_power = bpvi_q_pvs_cofactor_result_candidate_power_successor * S ((S (S bpvi_j_pvs_cofactor_result_candidate_power)) * bpvi_v_pvs_cofactor_result_candidate_power) + (bpvi_successor_pvs_cofactor_result_candidate_power))) /\ bpvi_successor_pvs_cofactor_result_candidate_power = bpvi_partial_pvs_cofactor_result_candidate_power * bpvi_factor_pvs_cofactor_result_candidate_power)))))))) /\ exists bpvi_divisor_factor_pvs_cofactor_result_candidate. X = bpvi_result_pvs_cofactor_result_candidate * bpvi_divisor_factor_pvs_cofactor_result_candidate)) -> (exists bpd_gap_pvs_cofactor_result_maximal. bpd_gap_pvs_cofactor_result_maximal + (bpd_candidate_pvs_cofactor_result) = (e)))

Complete tactic proof in conservative notation

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

63 script commands · 11 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 (3)
01Fix variables and assumptionsL1–9

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

  1. L1
    intro p
  2. L2
    intro e
  3. L3
    intro P
  4. L4
    intro u
  5. L5
    intro X
  6. L6
    intro hp
  7. L7
    intro hpow
  8. L8
    intro hX
  9. L9
    intro hunit
02Establish huL10–19

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

  1. L10
    have hu : ~(u = 0)
  2. L11
    intro hz
  3. L12
    specialize lte_nondivisor_nonzero (p)
  4. L13
    specialize lte_nondivisor_nonzero (u)
  5. L14
    apply lte_nondivisor_nonzero
  6. L15
    exact hunit
  7. L16
    exact hz
  8. L17
    specialize power_valuation_value_eq_transport (p)
  9. L18
    specialize power_valuation_value_eq_transport (P * u)
  10. L19
    specialize power_valuation_value_eq_transport (X)
03Use earlier factsL20–21

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

  1. L20
    specialize power_valuation_value_eq_transport (e)
  2. L21
    apply power_valuation_value_eq_transport
04Calculate and transport equalitiesL22–22

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

  1. L22
    symm
05Use earlier factsL23–32

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

  1. L23
    exact hX
  2. L24
    specialize prime_valuation_exponent_eq_transport (p)
  3. L25
    specialize prime_valuation_exponent_eq_transport (P * u)
  4. L26
    specialize prime_valuation_exponent_eq_transport (e + 0)
  5. L27
    specialize prime_valuation_exponent_eq_transport (e)
  6. L28
    apply prime_valuation_exponent_eq_transport
  7. L29
    apply PA3
  8. L30
    specialize lte_valuation_product_exact (p)
  9. L31
    specialize lte_valuation_product_exact (P)
  10. L32
    specialize lte_valuation_product_exact (u)
06Use earlier factsL33–36

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

  1. L33
    specialize lte_valuation_product_exact (e)
  2. L34
    specialize lte_valuation_product_exact (0)
  3. L35
    apply lte_valuation_product_exact
  4. L36
    exact hp
07Fix variables and assumptionsL37–37

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

  1. L37
    intro hPzero
08Use earlier factsL38–43

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

  1. L38
    specialize pow_nonzero_of_one_le (p)
  2. L39
    specialize pow_nonzero_of_one_le (e)
  3. L40
    specialize pow_nonzero_of_one_le (P)
  4. L41
    apply pow_nonzero_of_one_le
  5. L42
    specialize one_le_of_ne_zero (p)
  6. L43
    apply one_le_of_ne_zero
09Fix variables and assumptionsL44–44

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

  1. L44
    intro hpzero
10Use earlier factsL45–54

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

  1. L45
    specialize prime_nonzero (p)
  2. L46
    apply prime_nonzero
  3. L47
    exact hp
  4. L48
    exact hpzero
  5. L49
    exact hpow
  6. L50
    exact hPzero
  7. L51
    exact hu
  8. L52
    specialize lte_prime_power_valuation_exact (p)
  9. L53
    specialize lte_prime_power_valuation_exact (e)
  10. L54
    specialize lte_prime_power_valuation_exact (P)
11Use earlier factsL55–63

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

  1. L55
    apply lte_prime_power_valuation_exact
  2. L56
    exact hp
  3. L57
    exact hpow
  4. L58
    specialize prime_valuation_zero_of_nondivisor (p)
  5. L59
    specialize prime_valuation_zero_of_nondivisor (u)
  6. L60
    apply prime_valuation_zero_of_nondivisor
  7. L61
    exact hp
  8. L62
    exact hu
  9. L63
    exact hunit

Library-wide reading audit

Original defined command ledger · 63 lines
  1. 0001intro p
  2. 0002intro e
  3. 0003intro P
  4. 0004intro u
  5. 0005intro X
  6. 0006intro hp
  7. 0007intro hpow
  8. 0008intro hX
  9. 0009intro hunit
  10. 0010have hu : ~(u = 0)
  11. 0011intro hz
  12. 0012specialize lte_nondivisor_nonzero (p)
  13. 0013specialize lte_nondivisor_nonzero (u)
  14. 0014apply lte_nondivisor_nonzero
  15. 0015exact hunit
  16. 0016exact hz
  17. 0017specialize power_valuation_value_eq_transport (p)
  18. 0018specialize power_valuation_value_eq_transport (P * u)
  19. 0019specialize power_valuation_value_eq_transport (X)
  20. 0020specialize power_valuation_value_eq_transport (e)
  21. 0021apply power_valuation_value_eq_transport
  22. 0022symm
  23. 0023exact hX
  24. 0024specialize prime_valuation_exponent_eq_transport (p)
  25. 0025specialize prime_valuation_exponent_eq_transport (P * u)
  26. 0026specialize prime_valuation_exponent_eq_transport (e + 0)
  27. 0027specialize prime_valuation_exponent_eq_transport (e)
  28. 0028apply prime_valuation_exponent_eq_transport
  29. 0029apply PA3
  30. 0030specialize lte_valuation_product_exact (p)
  31. 0031specialize lte_valuation_product_exact (P)
  32. 0032specialize lte_valuation_product_exact (u)
  33. 0033specialize lte_valuation_product_exact (e)
  34. 0034specialize lte_valuation_product_exact (0)
  35. 0035apply lte_valuation_product_exact
  36. 0036exact hp
  37. 0037intro hPzero
  38. 0038specialize pow_nonzero_of_one_le (p)
  39. 0039specialize pow_nonzero_of_one_le (e)
  40. 0040specialize pow_nonzero_of_one_le (P)
  41. 0041apply pow_nonzero_of_one_le
  42. 0042specialize one_le_of_ne_zero (p)
  43. 0043apply one_le_of_ne_zero
  44. 0044intro hpzero
  45. 0045specialize prime_nonzero (p)
  46. 0046apply prime_nonzero
  47. 0047exact hp
  48. 0048exact hpzero
  49. 0049exact hpow
  50. 0050exact hPzero
  51. 0051exact hu
  52. 0052specialize lte_prime_power_valuation_exact (p)
  53. 0053specialize lte_prime_power_valuation_exact (e)
  54. 0054specialize lte_prime_power_valuation_exact (P)
  55. 0055apply lte_prime_power_valuation_exact
  56. 0056exact hp
  57. 0057exact hpow
  58. 0058specialize prime_valuation_zero_of_nondivisor (p)
  59. 0059specialize prime_valuation_zero_of_nondivisor (u)
  60. 0060apply prime_valuation_zero_of_nondivisor
  61. 0061exact hp
  62. 0062exact hu
  63. 0063exact hunit