Theory J3_Polynomial
theory J3_Polynomial
imports Main Algebra_Basics Polynomials.More_MPoly_Type "../MPoly_Utils/More_More_MPoly_Type"
"../Coding/Utils"
abbrevs pA1 = πβ©1
and pA2 = πβ©2
and pA3 = πβ©3
and pX3 = π³β©3
begin
subsection βΉThe $J_3$ polynomialβΊ
locale section5_given
begin
definition x :: "int mpoly" where "x β‘ Var 0"
definition πβ©1 :: "int mpoly" where "πβ©1 β‘ Var 1"
definition πβ©2 :: "int mpoly" where "πβ©2 β‘ Var 2"
definition πβ©3 :: "int mpoly" where "πβ©3 β‘ Var 3"
definition π³β©3 :: "int mpoly" where "π³β©3 β‘ Const 1 + πβ©1^2 + πβ©2^2 + πβ©3^2"
lemmas defs = x_def πβ©1_def πβ©2_def πβ©3_def π³β©3_def
text βΉFunctions on triplesβΊ
fun fst3:: "'aΓ'aΓ'a β 'a" where "fst3 (a, b, c) = a"
fun snd3:: "'aΓ'aΓ'a β 'a" where "snd3 (a, b, c) = b"
fun trd3:: "'aΓ'aΓ'a β 'a" where "trd3 (a, b, c) = c"
fun fun3:: "'aΓ'aΓ'aβnatβ'a::zero" where
"fun3 (a,b,c) k = (if k=1 then a else (if k=2 then b else (if k=3 then c else 0)))"
lemma fun3_1_eq_fst3: "fun3 a 1 = fst3 a" by (metis fst3.elims fun3.simps)
lemma fun3_2_eq_snd3: "fun3 a 2 = snd3 a" by (metis even_plus_one_iff fun3.simps one_dvd snd3.elims)
lemma fun3_3_eq_trd3: "fun3 a 3 = trd3 a"
by (metis Suc_eq_plus1 add_cancel_right_left eval_nat_numeral(3) even_plus_one_iff fun3.simps
numeral_eq_Suc trd3.elims zero_eq_add_iff_both_eq_0)
lemmas fun3_def = fun3_1_eq_fst3 fun3_2_eq_snd3 fun3_3_eq_trd3
definition J3 :: "int mpoly" where
"J3 = ((x^2+πβ©1+πβ©2*π³β©3^2-πβ©3*π³β©3^4)^2 + 4*x^2*πβ©1 - 4*x^2*πβ©2*π³β©3^2 - 4*πβ©1*πβ©2*π³β©3^2)^2
- πβ©1 * ((4*x*(x^2+πβ©1+πβ©2*π³β©3^2 - πβ©3*π³β©3^4) - 8*x*πβ©2*π³β©3^2))^2"
definition r where "r = MPoly_Type.degree J3 0"
lemma J3_vars: "vars J3 β {0, 1, 2, 3}"
unfolding J3_def defs diff_conv_add_uminus
by mpoly_vars
text βΉKey lemma about J3βΊ
definition "β° β‘ {-1, 1::int}Γ{-1, 1::int}Γ{-1, 1::int}"
lemma J3_fonction_eq_polynomial:
fixes f::"natβint"
defines "X β‘ 1 + (f 1)^2 + (f 2)^2 + (f 3)^2"
shows "of_int (insertion f J3) =
(βΞ΅ββ°. of_int (f 0)
+ fst3 Ξ΅ * cpx_sqrt(f 1)
+ snd3 Ξ΅ * cpx_sqrt(f 2) * of_int X
+ trd3 Ξ΅ * cpx_sqrt(f 3) * of_int (X^2))"
proof -
define inser where "inser = insertion f"
have inser_X: "inser π³β©3 = X"
unfolding inser_def X_def defs power2_eq_square by simp
have "β° = {(-1,-1,-1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,-1,-1), (1,-1,1), (1,1,-1), (1,1,1)}"
unfolding β°_def by force
hence "(βΞ΅ββ°.
(of_int(f 0) + fst3 Ξ΅ * cpx_sqrt(f 1) + snd3 Ξ΅ * cpx_sqrt(f 2) * of_int X
+ trd3 Ξ΅ * cpx_sqrt(f 3) * of_int (X^2)))
= (βΞ΅::intΓintΓintβ{(-1,-1,-1), (-1,-1,1), (-1,1,-1), (-1,1,1), (1,-1,-1), (1,-1,1), (1,1,-1), (1,1,1)}.
(of_int(f 0) + fst3 Ξ΅ * cpx_sqrt(f 1) + snd3 Ξ΅ * cpx_sqrt(f 2) * of_int X
+ trd3 Ξ΅ * cpx_sqrt(f 3) * of_int (X^2)))" by argo
also have "...
= (of_int(f 0) - cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X - cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) - cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X + cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) - cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X - cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) - cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X + cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) + cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X - cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) + cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X + cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) + cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X - cpx_sqrt(f 3) * of_int (X^2))
* (of_int(f 0) + cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X + cpx_sqrt(f 3) * of_int (X^2))"
by simp
also have "... = ((of_int(f 0) - cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - (cpx_sqrt(f 3) * of_int (X^2))^2)
* ((of_int(f 0) - cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - (cpx_sqrt(f 3) * of_int (X^2))^2)
* ((of_int(f 0) + cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - (cpx_sqrt(f 3) * of_int (X^2))^2)
* ((of_int(f 0) + cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - (cpx_sqrt(f 3) * of_int (X^2))^2)"
by algebra
also have "... = ((of_int(f 0) - cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3) * of_int (X^2)^2)
* ((of_int(f 0) - cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3) * of_int (X^2)^2)
* ((of_int(f 0) + cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3) * of_int (X^2)^2)
* ((of_int(f 0) + cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3) * of_int (X^2)^2)"
using square_sqrt[of "f 3"] power_mult_distrib[of _ _ 2] by (smt (verit, best))
also have "... = ((of_int(f 0) - cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3 * X^4))
* ((of_int(f 0) - cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3 * X^4))
* ((of_int(f 0) + cpx_sqrt(f 1) - cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3 * X^4))
* ((of_int(f 0) + cpx_sqrt(f 1) + cpx_sqrt(f 2) * of_int X)^2 - of_int (f 3 * X^4))"
using power2_eq_square of_int_mult by simp
also have "... = (of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 - f 3 * X^4
- 2 * of_int(f 0) * cpx_sqrt(f 1) - 2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
+ 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X )
* (of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 - f 3 * X^4
- 2 * of_int(f 0) * cpx_sqrt(f 1) + 2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
- 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X )
* (of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 - f 3 * X^4
+ 2 * of_int(f 0) * cpx_sqrt(f 1) - 2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
- 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X )
* (of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 - f 3 * X^4
+ 2 * of_int(f 0) * cpx_sqrt(f 1) + 2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
+ 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X )"
by algebra
also have "... = ((of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 -f 3 * X^4
- 2 * of_int(f 0) * cpx_sqrt(f 1))^2 - (2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
- 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)^2 )
* ((of_int(f 0)^2 + cpx_sqrt(f 1)^2 + cpx_sqrt(f 2)^2 * (of_int X)^2 - f 3 * X^4
+ 2 * of_int(f 0) * cpx_sqrt(f 1))^2 - (2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
+ 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)^2 )"
by algebra
also have "... = (((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4
- 2 * of_int(f 0) * cpx_sqrt(f 1))^2 - (2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
- 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)^2 )
* (((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4
+ 2 * of_int(f 0) * cpx_sqrt(f 1))^2 - (2 * of_int(f 0) * cpx_sqrt(f 2) * of_int X
+ 2 * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)^2 )"
using square_sqrt by simp
also have "... = (of_int((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4)^2
+ 4 * of_int(f 0)^2 * cpx_sqrt(f 1)^2
- 4 * of_int(f 0) * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4)
- 4 * of_int(f 0)^2 * cpx_sqrt(f 2)^2 * (of_int X)^2
- 4 * cpx_sqrt(f 1)^2 * cpx_sqrt(f 2)^2 * (of_int X)^2
+ 8 * of_int(f 0) * cpx_sqrt(f 2) * of_int X * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)
* (of_int((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4)^2
+ 4 * of_int(f 0)^2 * cpx_sqrt(f 1)^2
+ 4 * of_int(f 0) * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * (of_int X)^2 - f 3 * X^4)
- 4 * of_int(f 0)^2 * cpx_sqrt(f 2)^2 * (of_int X)^2
- 4 * cpx_sqrt(f 1)^2 * cpx_sqrt(f 2)^2 * (of_int X)^2
- 8 * of_int(f 0) * cpx_sqrt(f 2) * of_int X * cpx_sqrt(f 1) * cpx_sqrt(f 2) * of_int X)"
by algebra
also have "... = (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2
+ 4 * (f 0)^2 * f 1
- 4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 4 * (f 0)^2 * f 2 * X^2
- 4 * f 1 * f 2 * X^2
+ 8 * f 0 * f 2 * cpx_sqrt(f 1) * X * X)
* (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2
+ 4 * (f 0)^2 * f 1
+ 4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 4 * (f 0)^2 *f 2 * X^2
- 4 * f 1 * f 2 * X^2
- 8 * f 0 * cpx_sqrt(f 2) * X * cpx_sqrt(f 1) * cpx_sqrt(f 2) * X)"
using square_sqrt of_int_mult power2_eq_square[of "cpx_sqrt(f 2)"] by force
also have "... = (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
- 4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2
+ 8 * f 0 * f 2 * cpx_sqrt(f 1) * X^2)
* (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
+ 4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2
- 8 * f 0 * f 2 * cpx_sqrt(f 1) * X^2)"
using power2_eq_square square_sqrt mult.commute of_int_mult
by (smt (verit, del_insts) Groups.mult_ac(3))
also have "... = (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2
- (4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 8 * f 0 * f 2 * cpx_sqrt(f 1) * X^2))
* (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2
+ (4 * f 0 * cpx_sqrt(f 1) * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 8 * f 0 * f 2 * cpx_sqrt(f 1) * X^2))"
by (simp add:algebra_simps)
also have "... = (of_int(((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2))^2
- cpx_sqrt(f 1)^2 * (of_int (4 * f 0) * of_int((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- of_int(8 * f 0 * f 2) * of_int(X^2))^2"
by algebra
also have "... = (((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)^2 + 4 * (f 0)^2 * f 1
- 4 * (f 0)^2 * f 2 * X^2 - 4 * f 1 * f 2 * X^2)^2
- (f 1) * (4 * f 0 * ((f 0)^2 + f 1 + f 2 * X^2 - f 3 * X^4)
- 8 * f 0 * f 2 * X^2)^2"
using square_sqrt of_int_mult of_int_add by simp
also have "... = (((inser x)^2 + inser πβ©1 + inser πβ©2 * (inser π³β©3)^2 - inser πβ©3 * (inser π³β©3)^4)^2 + 4 * (inser x)^2 * inser πβ©1
- 4 * (inser x)^2 * inser πβ©2 * (inser π³β©3)^2 - 4 * inser πβ©1 * inser πβ©2 * (inser π³β©3)^2)^2
- inser πβ©1 * (4 * inser x * ((inser x)^2 + inser πβ©1 + inser πβ©2 * (inser π³β©3)^2 - inser πβ©3 * (inser π³β©3)^4)
- 8 * inser x * inser πβ©2 * (inser π³β©3)^2)^2"
using inser_X unfolding defs inser_def by simp
also have "... = ((inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) - inser (πβ©3 * π³β©3^4))^2 + 4 * inser (x^2) * inser πβ©1
- 4 * inser (x^2) * inser πβ©2 * inser (π³β©3^2) - 4 * inser πβ©1 * inser πβ©2 * inser (π³β©3^2))^2
- inser πβ©1 * (4 * inser x * (inser (x^2) + inser πβ©1 + inser πβ©2 * inser (π³β©3^2) - inser πβ©3 * inser (π³β©3^4))
- 8 * inser x * inser πβ©2 * inser (π³β©3^2))^2"
unfolding inser_def power2_eq_square power4_eq_xxxx using insertion_mult[of f] by presburger
also have "... = ((inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) - inser (πβ©3 * π³β©3^4))^2 + 4 * inser (x^2 * πβ©1)
- 4 * inser (x^2 * πβ©2 * π³β©3^2) - 4 * inser (πβ©1 * πβ©2 * π³β©3^2))^2
- inser πβ©1 * (4 * inser x * (inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) - inser (πβ©3 * π³β©3^4))
- 8 * inser (x * πβ©2 * π³β©3^2))^2"
unfolding inser_def using insertion_mult [of f] by (simp add: mult.assoc)
also have "... = ((inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))^2 + 4 * inser (x^2 * πβ©1)
+ 4 * inser (- (x^2 * πβ©2 * π³β©3^2)) + 4 * inser (- πβ©1 * πβ©2 * π³β©3^2))^2
+ inser (- πβ©1) * (4 * inser x * (inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))
+ 8 * inser (- x * πβ©2 * π³β©3^2))^2"
unfolding inser_def by simp
also have "... = ((inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))^2 + inser (4 * (x^2 * πβ©1))
+ inser (4 * (- (x^2 * πβ©2 * π³β©3^2))) + inser (4* (- πβ©1 * πβ©2 * π³β©3^2)))^2
+ inser (- πβ©1) * (inser (4 * x) * (inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))
+ inser (8 * (- x * πβ©2 * π³β©3^2)))^2"
unfolding inser_def by simp
also have "... = ((inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))^2 + inser (4 * x^2 * πβ©1)
+ inser (-4 *x^2 * πβ©2 * π³β©3^2) + inser (-4 * πβ©1 * πβ©2 * π³β©3^2))^2
+ inser (- πβ©1) * (inser (4 * x) * (inser (x^2) + inser πβ©1 + inser (πβ©2 * π³β©3^2) + inser (-πβ©3 * π³β©3^4))
+ inser (-8 * x * πβ©2 * π³β©3^2))^2"
by (simp add: mult.assoc)
also have "... = ((inser (x^2 + πβ©1 + πβ©2 * π³β©3^2 + (- πβ©3 * π³β©3^4)))^2 + inser (4 * x^2 * πβ©1
+ (-4 *x^2 * πβ©2 * π³β©3^2) + (-4 * πβ©1 * πβ©2 * π³β©3^2)))^2
+ inser (- πβ©1) * (inser (4 * x) * inser (x^2 + πβ©1 + πβ©2 * π³β©3^2 + (-πβ©3 * π³β©3^4))
+ inser (-8 * x * πβ©2 * π³β©3^2))^2"
unfolding inser_def using insertion_add[of f] by (smt (verit))
also have "... = (inser ((x^2 + πβ©1 + πβ©2 * π³β©3^2 - πβ©3 * π³β©3^4)^2
+ (4 * x^2 * πβ©1 - 4 *x^2 * πβ©2 * π³β©3^2 - 4 * πβ©1 * πβ©2 * π³β©3^2)))^2
+ inser (- πβ©1) * (inser (4 * x * (x^2 + πβ©1 + πβ©2 * π³β©3^2 - πβ©3 * π³β©3^4))
+ inser (-8 * x * πβ©2 * π³β©3^2))^2"
unfolding inser_def power2_eq_square using insertion_mult[of f] insertion_add[of f] by force
also have "... = inser ( (((x^2+πβ©1+πβ©2*π³β©3^2-πβ©3*π³β©3^4)^2 + (4*x^2*πβ©1 - 4*x^2*πβ©2*π³β©3^2 - 4*πβ©1*πβ©2*π³β©3^2)))^2
+ (-πβ©1)*(4*x*(x^2+πβ©1+πβ©2*π³β©3^2-πβ©3*π³β©3^4) + (-8*x*πβ©2*π³β©3^2))^2)"
unfolding inser_def power2_eq_square using insertion_mult[of f] insertion_add[of f] by presburger
also have "... = inser J3" unfolding J3_def by (simp add: add_diff_eq)
finally show ?thesis unfolding β°_def inser_def by presburger
qed
lemma J3_cancels_iff:
fixes f::"natβint"
defines "X β‘ 1 + (f 1)^2 + (f 2)^2 + (f 3)^2"
shows "(insertion f J3 = 0) = (βΞ΅ββ°.
of_int(f 0) + of_int (fst3 Ξ΅) * cpx_sqrt(f 1) + of_int (snd3 Ξ΅) * cpx_sqrt(f 2) * of_int(X)
+ of_int (trd3 Ξ΅) * cpx_sqrt(f 3) * of_int (X^2) = 0)"
proof -
have fin: "finite β°" unfolding β°_def by blast
thus ?thesis
unfolding X_def using J3_fonction_eq_polynomial prod_zero_iff
by (metis (no_types, lifting) of_int_0_eq_iff)
qed
lemma J3_zeros_bound:
fixes A1 A2 A3
defines "X β‘ 1 + A1^2 + A2^2 + A3^2"
defines "I β‘ X^3"
shows "(βx. insertion ((Ξ»_. 0)(0:=x, 1:=A1, 2:=A2, 3:=A3)) J3 = 0 βΆ x > -I)"
proof -
{
fix x :: int
define A :: "nat β int" where "A β‘ (Ξ»_. 0)(1:=A1, 2:=A2, 3:=A3)"
define f :: "nat β int" where "f β‘ (Ξ»_. 0)(0:=x, 1:=A1, 2:=A2, 3:=A3)"
have "X β₯ 0" unfolding X_def by simp
have "X > 0" unfolding X_def power2_eq_square
by (smt (verit, best) mult_eq_0_iff sum_squares_gt_zero_iff)
hence "I β₯ 0" unfolding I_def by simp
have aux0: "sqrt (abs (A j)) * norm (X^(j-1))
†¦A j¦ * norm (X^(j-1))" for j
apply (intro mult_right_mono)
apply (rule sqrt_int_smaller[of "Β¦A _Β¦"])
by auto
have sq_le: "x β€ x^2" for x::int
apply (cases "x = 0", auto)
by (smt (verit, del_insts) mult_cancel_left mult_left_mono numeral_2_eq_2
power2_eq_square power2_less_eq_zero_iff power_0 power_Suc)
have aux1: "¦A j¦ †(A j)^2" for j
using sq_le[of "¦A j¦"] by auto
assume "insertion f J3 = 0"
hence "of_int (insertion f J3) = 0"
by simp
hence "βΞ΅ββ°. 0 = of_int (f 0)
+ of_int (fst3 Ξ΅) * cpx_sqrt(f 1)
+ of_int (snd3 Ξ΅) * cpx_sqrt(f 2) * of_int (1 + (f 1)^2 + (f 2)^2 + (f 3)^2)
+ of_int (trd3 Ξ΅) * cpx_sqrt(f 3) * of_int ((1 + (f 1)^2 + (f 2)^2 + (f 3)^2)^2)"
by (subst (asm) J3_fonction_eq_polynomial β°_def) (simp add: β°_def)
then obtain Ξ΅ :: "intΓintΓint" where
Ξ΅_def: "Ξ΅ββ°" and
Ξ΅_form: "0 = of_int (f 0) + of_int (fst3 Ξ΅) * cpx_sqrt(f 1)
+ of_int (snd3 Ξ΅) * cpx_sqrt(f 2) * of_int (1 + (f 1)^2 + (f 2)^2 + (f 3)^2)
+ of_int (trd3 Ξ΅) * cpx_sqrt(f 3) * of_int ((1 + (f 1)^2 + (f 2)^2 + (f 3)^2)^2)"
by (auto simp only: prod_zero_iff)
have Ξ΅_abs: "βjβ{1,2,3}. norm (fun3 Ξ΅ j) = 1" using Ξ΅_def unfolding β°_def by auto
have "x > -I"
proof (cases "A1 = 0 β§ A2 = 0 β§ A3 = 0")
case True
then show ?thesis
using Ξ΅_form unfolding f_def cpx_sqrt_def I_def
by (simp add: `X > 0`)
next
case False
hence "X > 1" unfolding X_def power2_eq_square
by (smt (verit) not_sum_squares_lt_zero sum_squares_gt_zero_iff)
from Ξ΅_def Ξ΅_form have x_def:
"of_int x = - (βjβ{1,2,3}. fun3 Ξ΅ j * cpx_sqrt(A j) * X^(j-1))"
unfolding f_def A_def X_def apply (simp add: fun3_def del: One_nat_def)
by (smt (verit, ccfv_SIG) add.commute add_0 add_diff_cancel_right' add_uminus_conv_diff)
also have "norm (...) β€ (βjβ{1,2,3::nat}. norm (fun3 Ξ΅ j) * norm (cpx_sqrt (A j))
* norm X^(j-1))"
apply (subst norm_minus_cancel)
apply (intro sum_norm_le)
by (simp add: norm_mult norm_power)
also have "... β€ (βjβ{1,2,3::nat}. norm (cpx_sqrt (A j)) * norm X^(j-1))"
using Ξ΅_abs by auto
also have "... β€ (βjβ{1,2,3::nat}. sqrt (abs (A j)) * norm (X^(j-1)))"
by (auto simp: norm_cpx_sqrt)
also have "... β€ (βjβ{1,2,3::nat}. Β¦A jΒ¦ * norm (X^(j-1)))"
apply (intro sum_mono)
using aux0 by auto
also have "... = (βjβ{1,2,3::nat}. Β¦A jΒ¦ * X^(j-1))"
unfolding X_def by auto
also have "... β€ (βjβ{1,2,3::nat}. (A j)^2 * X^(j-1))"
proof -
have "(βjβ{1, 2, 3}. Β¦A jΒ¦ * X ^ (j - 1))
β€ (βjβ{1,2,3::nat}. (A j)^2 * X^(j-1))"
apply (intro sum_mono mult_right_mono)
by (auto simp: aux1 X_def)
thus ?thesis by linarith
qed
also have "... < abs I"
proof -
have "βj. (A j)β§2 < X"
unfolding A_def X_def power2_eq_square apply simp
by (smt (verit, del_insts) not_sum_power2_lt_zero power2_eq_square)
hence "βj. (A (Suc j))β§2 < X"
by auto
hence "(βj=0..2. (A (Suc j))β§2 * X ^ j) < I"
unfolding I_def
using digit_repr_lt[of X "power2 β A β Suc" 2] `X > 1`
by auto
moreover have "(βj=0..2. (A (Suc j))β§2 * X ^ j) = (βjβ{1..3}. (A j)β§2 * X ^ (j - 1)) "
apply (simp add: sum.atLeast1_atMost_eq)
apply (rule sum.cong)
by auto
moreover have "{1..3} = {1::nat, 2, 3}" by auto
ultimately have "(βjβ{1, 2, 3}. (A j)β§2 * X ^ (j - 1)) < I"
by auto
thus ?thesis
unfolding X_def by linarith
qed
finally have "abs x < abs I"
by auto
then show ?thesis
by (simp add: βΉ0 β€ IβΊ)
qed
}
thus ?thesis by auto
qed
declare single_numeral[simp del]
end
end