Theory Universal_Pairs
theory Universal_Pairs
imports Eleven_Unknowns_Z
begin
definition universal_pair_N ("'(_, _')⇩ℕ" [1000]) where
"universal_pair_N ν δ ≡ (∀A::nat set. is_diophantine_over_N A ⟶
(∃P::int mpoly. max_vars P ≤ ν ∧ total_degree P ≤ δ ∧
is_diophantine_over_N_with A P))"
definition universal_pair_Z ("'(_, _')⇩ℤ" [1000]) where
"universal_pair_Z ν δ ≡ (∀A::nat set. is_diophantine_over_N A ⟶
(∃P::int mpoly. max_vars P ≤ ν ∧ total_degree P ≤ δ ∧
is_diophantine_over_Z_with A P))"
theorem universal_pairs_Z_from_N:
assumes "(ν, δ)⇩ℕ"
shows "(11, η ν δ)⇩ℤ"
proof (unfold universal_pair_Z_def, (rule allI impI)+)
fix A
assume "is_diophantine_over_N A"
then obtain P where P1: "max_vars P ≤ ν" and
P2: "total_degree P ≤ δ" and
P3: "is_diophantine_over_N_with A P"
using assms unfolding universal_pair_N_def by auto
show "∃Q. max_vars Q ≤ 11 ∧ total_degree Q ≤ η ν δ ∧ is_diophantine_over_Z_with A Q"
proof (cases "total_degree P > 0")
case True
define Q where "Q ≡ Q_tilde_poly P"
have 1: "max_vars Q ≤ 11"
using max_vars_Q_tilde
unfolding Q_def by auto
have 2: "total_degree Q ≤ η ν δ"
using Q_tilde_degree[OF True P2 P1] Q_tilde_poly_degree_correct Q_def le_trans by blast
have 3: "is_diophantine_over_Z_with A Q"
unfolding is_diophantine_over_Z_with_def Q_def
unfolding eleven_unknowns_over_Z_polynomial[OF P3]
apply (auto, metis fun_upd_triv nth_Cons_0)
using Q_tilde_correct by force
then show ?thesis
using 1 2 3 by auto
next
case False
then obtain c where c: "P ≡ Const c"
using Total_Degree.total_degree_zero by blast
have 1: "max_vars P ≤ 11" unfolding c by simp
have 2: "total_degree P ≤ η ν δ" unfolding c by simp
have 3: "is_diophantine_over_Z_with A P"
using P3 unfolding is_diophantine_over_N_with_def
unfolding is_diophantine_over_Z_with_def
unfolding c using is_nonnegative_def by auto
show ?thesis
by (rule exI[of _ P], auto simp: 1 2 3)
qed
qed
theorem universal_pair_1:
assumes "(58, 4)⇩ℕ"
shows "(11, 1681043235226619916301182624511918527834137733707408448335539840)⇩ℤ"
using universal_pairs_Z_from_N[of 58 4] assms unfolding η_def
by (simp add: algebra_simps)
theorem universal_pair_2:
assumes "(32, 12)⇩ℕ"
shows "(11, 950817549694171759711025515571236610412597656252821888)⇩ℤ"
using universal_pairs_Z_from_N[of 32 12] assms unfolding η_def
by (simp add: algebra_simps)
end