Theory Polynomial_Applications

theory Polynomial_Applications
  imports
    Nagata_Lemmas
    "HOL-Algebra.Polynomial_Divisibility"
begin

section ‹Polynomial applications›

text ‹
  This theory packages the first concrete application layer on top of the
  record-based Nagata descent theorem.  The present results isolate the
  abstract ``localize away X'' step for HOL-Algebra polynomial rings,
  together with the standard field-coefficient specialization in which
  X is prime by the degree-one irreducibility criterion.
›

context domain
begin

lemma polynomial_prime_X:
  assumes K: "subfield K R"
  shows "ring_primeK[X]X"
proof -
  have X_in: "X  carrier (K[X])"
    using var_closed(1)[OF subfieldE(1)[OF K]] .
  have X_irred: "pirreducible K X"
    using degree_one_imp_pirreducible[OF K X_in]
    by (simp add: var_def)
  show ?thesis
    using pprime_iff_pirreducible[OF K X_in] X_irred by simp
qed

lemma polynomial_prime_generated_powers_X:
  assumes K: "subring K R"
    and hX: "ring_primeK[X]X"
  shows "ring_prime_generated (K[X]) (ring_powers_set (K[X]) X)"
  using ring_prime_generated_powers_set[OF univ_poly_is_ring[OF K] var_closed(1)[OF K] hX] .

end

locale polynomial_away_X_localization =
  fixes R (structure) and P (structure) and S and K
  assumes poly_axioms: "nagata_localization P S"
    and base_axioms: "domain R"
    and P_eq: "P = K[X]"
    and S_eq: "S = ring_powers_set (K[X]) X"
begin

abbreviation loc_ring where "loc_ring  eq_obj_rng_of_frac.rec_rng_of_frac P S"

text ‹
  Once a localization of K[X] at the powers of X has been fixed, Nagata's
  theorem reduces factoriality of K[X] to factoriality of that localization,
  provided X is prime.
›

lemma polynomial_factorial_of_localized_X_factorial:
  assumes K: "subring K R"
    and noeth: "noetherian_domain (K[X])"
    and hX: "ring_primeK[X]X"
    and loc_fd: "factorial_domain loc_ring"
  shows "factorial_domain (K[X])"
proof -
  have noethP: "noetherian_domain P"
    using noeth unfolding P_eq .
  have hXP: "ring_primePX"
    using hX unfolding P_eq .
  have hS: "ring_prime_generated P S"
    unfolding P_eq S_eq
    by (rule domain.polynomial_prime_generated_powers_X[OF base_axioms K hX])
  have fdP: "factorial_domain P"
    by (rule nagata_localization.nagata_theorem[OF poly_axioms noethP hS loc_fd])
  show ?thesis
    using fdP unfolding P_eq .
qed

lemma polynomial_factorial_of_localized_X_factorial_field:
  assumes K: "subfield K R"
    and noeth: "noetherian_domain (K[X])"
    and loc_fd: "factorial_domain loc_ring"
  shows "factorial_domain (K[X])"
proof -
  have hX: "ring_primeK[X]X"
    by (rule domain.polynomial_prime_X[OF base_axioms K])
  show ?thesis
    by (rule polynomial_factorial_of_localized_X_factorial[
          OF subfieldE(1)[OF K] noeth hX loc_fd])
qed

end

end