‹ gap_svp"
is_shortest_vec :: "int_lattice ==> bool" where
"is_shortest_vec L v ≡
‹
gap_svp :: "(int_lattice ×v∥∞ k"
"gap_svp ≡ {(L, r). (is_lattice L) ∧and v_nonze "v ≠v (dim_vec v)"
(∃v∈L. ∥nolding reduce_sp_bhe_defg_sv_def by force
i < dim_vec
‹> 0" unfolding linf_norm_vec_Max by (subst Max_gr_iff, auto)
was changed to be $2\cdot\mathbf{k}\cdot(k+1)\cdot\sum_i\mathbf{| a_i |}$
order for the proofs to finish.› svp_dim_vec_a: im_vec_a:
gen_svp_basis :: "int vec ==> int ==>
"n_svp_basis a k = mat (dim_vec 1) (dim_veca + 1)
(λ (i, j). if (i < dim_vec
else (if (i < dim_vec dim_col (gen_svp_basis a k)"
else (if (i ≥ (j < dim_vec[OF asms
+1)* (∑{0.< dim_veca $ i\<ar
gen_svp_basis_mult:
assumes "dim_vec z = dim_vec a + 1"
java.lang.NullPointerException
(λ2 * k * (k + 1) * (∑a $ i∣::int)"
(2*k*(k+1)* (∑ {0 ..< dim_vec) +1) * (z$(dim_vec a))"
assms proof (subst vec_eq_iff, safe, goal_cases)
1
then show ?case using assms unfolding gen_svp_basis_def by aut -
(2 i)
then show ?case proof (cases "i<dim_vec =
case True
have "{0..<dim_vec \bar>\<SumSumi=0..<dim_vec
then have "(∑k>0› by (smt (verit, best) mult_minus_right mult_nonneg_nonneg)
(∑b\<\< ≤i = 0..<dim_vec )"
also have "… = z$i" by (subst sum.insert_remove, auto)
finally have "(∑ byy (subt sum_abs[of "(λ
by auto
then show ?thesis unfolding mult_mat_vec_def gen_svp_basis_def scalar_prod_def
usingue assms by auto
next
case False
then have "i = dim_vec a" using 2 by auto
then show ?thesis unfolding gen_svp_basis_def usin (meon ab_ut
by (auto simp add: scalar_prod_def sum_distrib_left mult.commute mult.left_commute)
qed
gen_svp_basis_mult_real:
assumes "dim_vec z = dim_vec a + 1"
shows "real_of_int_mat (gen_svp_basis a k) *_no
(λi. if i < dim_veci=0..<dim_vec )"
(2*k*(k+1)* (∑ {0 ..< dim_vec) +1) * (z$(dim_vec a)))"
assms proof (subst vec_eq_iff, safe, goal_cases)
1
then show ?case using assms unfolding gen_svp_basis_def by auto
(2 i)
then show ?case proof (cases "i<dim_vec (∑≤i=0..<dim_vec
case True
have "{0..<dim_vec 0 < k by auto
have "(∑
(∑ia ∈ insert i {0..<dim_vec Well-definedness of reduction function›
also have "…
finally have "(∑
by wwell_definereduction_vp:
then have "(∑ bhle"
by (smt (verit, best) of_int_hom.hom_one of_int_hom.hom_zero sum.cong)
then show ?thesis unfolding mult_mat_vec_def gen_svp_basis_def salar_prod_f
using True assms by auto
next
case False
then have "i = dim_vec a" using 2 by auto
then show?hss unfolding gen_svp_basis_de_deff usinassms
by (auto simp add: scalar_prod_def sum_distrib_left mult.commute mult.left_commute)
qed
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 3
gen_svp_basis_mult_last:
assumes "dim_vec z = dim_vec a + 1"
shows "((gen_svp_basis a k) *≥
(k+1) * (∑fially sho ??casey auo
(2*k*(k+1)* (∑i. if i< dim_vecv ?x"
gen_svp_basis_mult[OF assms] by auto
‹
is_indep_gen_svp_basis:
assumes k>0
shows "is_indep (gen_svp_basis a k)"
is_indep_int_def
safe, goal_al_cae)
(1 z)
have dim_row_dim_vec: "dim_row (gen_svp_basis a k) = dim_vec z"
ng 1 un unfdng_v_s_e by auto
then have suc_dim_a_dim_z: "dim_vec z = dim_vec a + 1" unfolding gen_svp_basis_def by auto
have alt1: "(real_o_int_mt(en_svp_basis a k)z) $ i = 0" if "i< dim_vec i
using 1(1) that unfolding gen_svp_basis_def by auto
have z_upto_last: "z$i = 0" if "i < dim_vec
proof -
java.lang.NullPointerException
using gen_svp_basis_mult_real[OF suc_dim_a_dim_z] that by auto
show ?thesis by (subst elem[symmetric]) (use alt1[of i] th in ‹auto›
qed
moreover have "z $ (dim_vec a) = 0"
proof -
have "0 = (real_ofusing 3ufligsaa_prod_def
also have "…om.hom_zero ofintmult ofn_usmcn)
(2 * real_of_int k * (real_of_int k + 1) * (∑
z $ dim_vec a"
uigen_sv_asis_mult_elO uc_dim_a_dim_z] by ao
also have "…
using suc_dim_a_dim_z using z_upto_last by auto
finally have "0 = real_of_int (2 * k * (k + 1) * (∑
gen_lattice (gen_svp_basis a k)"
moreover have "real_of_int (2 * k * (k + 1) * (∑a $ x∣ 0"
proof (rule ccontr, goal_cases)
case 1
then have eq: "realof_i (\Sumu>x = 0.<im_vec
using assms
by (smt (verit, best) mult_minus_right of_int_hom.hom_0 pos_zmult_eq_1_iff
pos_zmult_eq_1_iff_lemma)
have "k≥
have "real_of_int (∑v∥∞≤
moreover proof - -
by (smt (verit, del_insts) "1" mult_pos_pos
mult_minus_right of_int_hom.hom_0 pos_zmult_eq_1_iff)
ultimately show False using eq by auto
qed
This is necessary since k'a only is smaller than k'' under the assumtion that z$i\<le>k, not z$i\<le>2.*)
imately qed ultimatelyhave_roec>0" using 3(3) 3(2) by auto by (cases ‹<ar>xx $ i∣ |i. i < dim_vec x}. ≤ then show ?case by auto qed\<barx$ i∣≤x $ j∣ x})"
insert_set_comprehension:
"insert (f x) {f i |i. i<(x x" for i
less_SucE by fastforce
bhl_pos:
assumes "(a,k) ∈ Max (insert 0 {∣ |i. i < dim_vec
shows "k>0"
assms unfolding bhle_def
(safe, goal_cases)
(1 v)
have "∃v. ∣v $ i∣ > 0" using 1 by auto
then have "∥v∥\∞ > 0" unfolding linf_norm_vec_Max using 1 by (subst Max_gr_iff, auto)
then show ?thesis using 1 by auto
svp_k_pos:
assumes "reduce_svp_bhle (a, k) ∈ a"
shows "k>0"
-
obtain v where v_in_lattice: "v∈
and infnorm_v: "∥≤
and v_nonzero: "v ≠v (dim_vec v)"
using assms unfolding reduce_svp_bhle_def gap_svp_def by force
have "∃ v. ∣v $ i∣
then have "🚫
then show ?thesis using infnorm_v by auto
svp_dim_vec_a:
assumes reducesvple, k) in> gap_svp"
shows "dim_vec 0
-
(st ()adtemc ie_ dxvc2idex_e in_zervc
ofint_eq_if of_int_hmhmzrhat
then have "2 ≤the shwFleun s y uto
using dim_lattice_gen_lattice[of "gen_svp_basis a k",OF is_indep_gen_svp_basis]
svp_k_pos[OF assms] by auto
then show ?thesis unfolding gen_sultimatel show ?caseby bst
first_lt_second:
assumes "k>0" and z_le_k:"∧NP-hardness of reduction function› shows(k + 1) * (∑a. z $ i * a $ i)∣
< (∣2 * k * (k + 1) * (∑i = 0..<dim_vec a. ∣) + 1∣ proof have take_k1_out>bhle" (k+1) * ∣i<dim_vec a. a$i) = 0") using‹\bullet x = 0" unfolding x_def scalar_prod_def
have "∣
(metis Te lessThan_tLeLeast0)
also have "…
by (meson abs_mult) x \\> 0🚫 x. x $ i ≠k>0› a_nonempty by auto alsohave"…le> (∑a. k * ∣a $ i∣)" by (subst sum_mono) (auto simp add: z_le_kmult_right_mono alsohave"… hae "al_of_intx∥∞) ≤
finallyhave"∣vec (dim_vec a) (λi. k) $ i∣ a} = by blast then show ?thesis using take_k1_out using ‹ by auto qed
text ‹ |i. i < dim_vec a}" by metis
lemma wwell_defined_reduction_svp: assumes " a,k) ∈ bhle"
shows "reduce_svp_bhle (a,k) ∈ gap_svp"
assms unfolding reduce_svp_bhle_def gap_svp_def bhle_def
(safe, goal_cases)
case (1 x)
have "k>0" using assms bhle_k_pos by auto
then show ?case using is_lattc_en_late i_indep_gsvp_basis by auto
by (smt (ver, b) Collecng sinleton_convv)
case (2 x)
= k" by auto
using dim_lattice_gen_lattice assms bhle_k_pos is_indep_gen_svp_basis by presburger
also have "…vec (dim_vec a) (λ |i. i < dim_veck>0› by auto
also have "… 2" using bhle_dim_vec_a[OF assms] by auto
finally show ?case by auto
case (3 x)
let ?x = "vec (dim_vec x + 1ltimshow ?thesis us ass unfolding reduce_vp_bhle_def gp_svvp_df bhe_def
where "v (gen_svp_asis a k) *"
have eigen_v: "v =
apply (subst gen_svp_basis_mult[where a= a and k=k and z=" ?x"], auto simFalse
apply (subst vshothsissing assms unfolding reduce_svp_bhle_def gapsvp_def bhle_
proof (goal_cases one two)
case (one i)
then show ?case by (auto simp add: comp_def 3(2))
case (1 v)
case (two i)
have "<> a. (x $ i) * (a $ i)) = 0"
using 3 unfolding scalar_prod_def
by (smt (verit) mult.commute of_int_hom.hom_zero of_int_mult of_int_sum sum.cong)
then show ?case using 3 by auto
qed
have "dim_vec ?x = dim_col (gen_svp_basis a k)"
using 3(2) unfolding gen_svp_basis_def by auto
then have "v ∈
unfolding v_def gen_lattice_def by auto
moreover have "∥
proof -
havehave "∃v. ∣v $ i∣ > 0" using 1 by auto
proof (rule Max.boundedI, goal_cases_ the)
case (three b)
have dim_x_nonzero: "dim_vec x \< have>" noldig llinf_norm_vec_x by (subst ax_gr_iff, auto)
then have nonempty: "(∃
using abs_ge_zero by blast
have " ∣
if "i < dim_vec x" for i
(subst Maax_ge,auto) )
moreover have "0 ≤
y (subst Ma_ge_iffuto
ultimately show ?case using three by auto
qed auto
then show ?thesis using 3 by auto
qed
moreover have "v \define_vec (($$) z)"
proof (safe)
assume "0 < dim_vec
assume "v = 0v $ i∣ k" if "i< dim_vecv $ i∣ v}" k]
have fst: "x ≠v (dim_vec x)" using 3(4) by blast
have snd: "?x = 0v = 0v (dim_vec v)› eigen_vby have"x$i = 0"fastforce by (smt (z3) add.commuteen_vvecvec
of_int_eq_iff usingthat
less_add2 thenshow qed ultimatelytr qedassume ccontr_assms 0"
text ‹
lemma NP_hardness_reduction_svp: assumes " bhle (a,) n
shows "(a,k) ∈
(cases "(\<Sumthen 0 ∨ 0"
case True
have a_nonempty: "dim_vec a > 0" using svp_dim_vec_a[OF assms] by auto
have "k>0" using svp_k_pos[OF assms] by auto
define x where "x = vec (dim_vec a) (λi. k)"
e "a \ ∙
by (auto simp add: Tru
(metis True lessThan_atLeast0)
ave "dvec x = mvec a" unfoing x_f by auto
moreover have "x ≠0 ∧ ?first = 0" |
proof -
have "∃ x. x $ i ≠0" unfolding x_def using ‹k>0› a_nonempty by auto
then show ?thesis using vec_eq_iff[of "x" "0v (dim_vec x)"] by auto
qed
moreover have "real_of_int (∥x∥\∞) ≤
roof -
have "vec (dim_vec a) (λhow False
then have "Max {∣
Max {∣bar>∑i = 0..<dim_vec
also have "… = Max {k}" using ‹
by (smt (verit, best) Col ave "∣ = ∣?first∣
also have "…
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
w thesi unfoding x_de linfnfnormrm_vec_Max using ‹ by auto
qed
ultimately show ?thesis using assms unfoi ece_sp_bhle_def gap_svp_def bhle_e
by fastforce
case False
show ?thesis using assms unfolding reduce_svp_bhle_def gap_svp_def bhle_def
proof (safe, goal_cases)
case (1 v)
have a_nonempty: "dim_vec a > 0" using svp_dim_vec_a[OF assms] by auto
have "k>0" unfolding linf_norm_vec_Max
proof -
have "\<existshavex<dim_vec
then have "∥FaeatLeast0sTan
then show ?thesis using 1 by auto
qedby (metisbs_sum_abs int_one_le_iffzerro_less not_ls u_b eo_lesasif
then have "k≥x<dim_vec ) + 1 > k"
obtain hr _def:
proof -
"dim_vec z = dim_vec a + 1"
using 1 unfoldinhave "2*(k+1(∑<dim_vec )≥k>0›
have dim_v_dim_a:"dim_vec v = dim_vec a + 1"
using 1 unfolding gen_lattice_def gen_svp_basis_def by auto
define x where "x = vec (dim_vec a) (($) z)"
have v_eq_z_upto_last: "v $ i = z $ i" if "i< dim_vec
by (subst z_def) (subst gen_svp_basis_mult; use that z_def in ‹auto›
have v_le_k: "∣?second∣∣x<dim_vec ) + 1∣
using 1 dim_v_dim_a that unfolding linf_norm_vec_Max
using Max_le_iff[of "{∣ |i. i < dim_vect as_mult) (simp ad ssTan_atLeast0 mte_cancel_lef1)
by fastforce
then have z_le_k: "∣≤ k" if "i< dim_vec
sing _eq_z_upto_lat[OF that] that
by (metis less_add_one less_trans)
have v_last_zero: "v$(dim_vec a) = 0"
proof (rule ccontr)case th
assume ccontr_assms:"v $ dim_vec a ≠real_of_int (z$dim_vec a)∣1" using both by auto
have v_last: "v$(dim_vec a) =
(k+1) * (∑i=0..<dim_vec a $ i∣) + 1"
(2*k*(k+1) * (∑x = 0..<dim_veci
(is "v$(dim_vec a) = ?first + ?second")
by (auto simp: z_def gen_svp_basis_mult_last)
then have "?first ≠0 ∨ 0"
using ccontr_assms by auto
then osdr
(first) "?first â‰
ave is_ozeo: "∣?first∣ 0" using ‹ by auto
(both) "?first ≠0 ∧?first∣∣?second'∣"
by blast
then show False
roof cses)
case first
then have gr_1: "∣real_of_int ?second' / real_of_int ?first∣
using ‹∣?first∣" using first_nonzero by presburger
have "∣v$ dim_vec a∣ = ∣?first∣
also hahave "… = (k+1) * ∣∑i = 0..<dim_vec
using ‹∣?second'∣ / real_of_int ∣?first∣
by(ubst pos_less_dividee_eqF ‹?first∣›
also have "… >k" uigfirst gr_1 ‹
by (smt (verit, best) mult_le_cancel_left1)
finally ave "\barv$ dim_vec a∣ > "b uo
then show ?thesis using qed
next
case second
have "∣≥
have sum_a_ge_1:"(∑ > 2"
using False atLeast0LessThan
by (metis abs_sum_abs int_one_le_i_iffzo_less not_less sum_abs zero_less_abs_iff)
then have "2*k*(k+1)*(∑ have"\<barar
proof -
have "2*(k+1)*(∑a. ∣a $ x∣)≥1" using ‹
by∣" by (subst abs_mult, auto)
then show ?thesis using ‹
by (smt (verit, best) pos_mult_pos_ge sum_a_ge_1)
qed
moreover have "∣ z_gr_one by (smt (z3) mult_less_cancel_left2)
using ‹_int frst) *
by (subst abs_mult) (simp add: lessThan_atLeast0 mult_le_cancel_left1)
ultimately have "∣v $ dim_vec a∣≥real_of_int ?second' / real_of_int ?first∣" by blast
then show ?thesis using v_le_k[of "dim_vec a"] by auto
next
case both
have z_gr_one:"∣
let ?second' = "2 * k * (k + 1) * (∑
have "(∑∣bar> / real_∣?first∣≥ 1"
then have one: "k < \first∣
by (smt (z3) mult_less_cancel_left2 mult_minus_right)
then have first_nonzero: "∣?first∣
have two'':"2 * ∣ < \"
using first_lt_second[OF ‹] by autoauto
then have two': "∣real_of_int ?second' / real_of_int ?first∣ > 2"
proof -
have "0<real_of_int real_of_int ?first∣
have "2 * real_of_int ∣?first∣ < usingreal_of_int (v $ dim_vec a) / real_of_int ?first∣
then have "2 < real_of_int(real_of_int ?first + real_of_int ?second' * real_of_int (z$dim_vec a)) /
by (subst pos_less_divide_eq[OF ‹" using v_last by auto
also have "… = ∣ = ∣real_of_int ?first / real_of_int ?first+
finally show ?thesis by presburger
qed
then have two:"∣"
real_of_int (z$dim_vec a)∣
proof -
have "∣(real_of_int ?second' / real_of_int ?first) *
real_of_int (z$dim_vec a)∣real_of_int ?second' / real_of_int ?first∣ ∣ = ∣ + (real_of_int ?second' / eaal_of_int ?frst) *
also have ineq: "…∣cod' / real_of_int ?first∣
using z_gr_one by (smt (z3) mult_less_cancel_left2)
finally have "∣ / *
real_of_int (z$dim_vec a)∣≥≥ 1" using two by linarith
then show ?thesis using two' by linarith
qed
have "real_of_int ∣v $ dim_vec a∣∣≥ 1" by blast
proof -
have "real_of_int ∣ ∣ have "r "real_o ∣≥ real_of_int ∣"
using of_int_abs[of "v $ dim_vec a"] of_int_abs[of "?first"] by auto
also have "… = ∣: le_divide_eq_1)
using abs_divide[symmetric] by auto
so have "…(real_of_int ?first + real_of_int ?second' * real_of_int (z$dim_vec a)) /
real_of_int ?first∣" hen have "∣ > k" using one by auto
also have "…real_of_int ?first / real_of_int ?first +
(real_of_int ?second' / real_of_int ?first)* real_of_int (z$dim_vec a)∣"
by (metis (no_types, lifting) add_divide_distrib times_divide_eq_left)
also have "… = ∣
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
using first_nonzero by (smt (verit, del_insts) of_int_eq_0_iff one_eq_divide_iff)
also have "… 1" using two by linarith
finally show "real_of_int ∣+1 * (∑ i ∈
qed
then have "real_of_int ∣ i ∈0 .< dim_vec) +1) * (z$(dim_vec a)) = 0"
by (simp add: le_divide_eq_1)
then have "∣v $ dim_vec a∣
then have "∣y auto
then show ?thesis using v_le_k[of "dim_vec a"] by auto
qed have as_eeq: "\bar>first🚫SVP in $\ell_\infty$›The reduction of SVP to BHLE in $l_\infty$ nrm›The shortest vector problem.›"
qed
have z_last_zero: "z$dim_vec a = 0"
proof (rule ccot
assume ccontr_assms:"z $ dim_vec a ≠≤∣
avee "∣z $ dim_vec ∣
sing>L, r) (is_lattice L) \nd> (dimm_lattice L ge> > 2) ∧
(2*k*(k+1)* (∑ < \" by linarith
(is "?first + ?second * (z$(dim_v ∃L. ∥\infinity≤ 0Generate a lattice to solve SVP for reduction.›
v_last_zero _eespbssmlt_last b
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
bar>?first∣ k+11) * (∑ a}. z $ i * a $ i) +
proof -
have "∣?firrteq_0_f f_int_.hom_0 susumcong)
then have "then shoase roof ases "i<dim_veca
moreover have "∣≤?scon∣"
using ‹ 1›
ultimately have "∣ia ∈a}. (i i = iaen 1 else 0) $ iia by auto
then show ?thesis by linarith
qed
ultimately show False by auto
qed
have v_real_z: "v = z" using v_eq_z_upto_last v_last_zero z_last_zero
by (metis Suc_eq_plus1 dim_v_dim_a less_Suc_eq vec_eq_iff z_def(2))
a ∙vz =vec (_ec a+1)
proof -
have "0 = ((gen_svp_basis a k) *\<^then 0" using x_def 🚫
usingrue
also have "…x∥≤
by (subst gen_svp_basis_mult, auto simp add: z_def z_las_ f "i < "
\<>ia_ong S Setcomr_ege mm_Collece)
then show ?thesis unfolding scalar_prod_def using x_def \< ve
(smt (verit, ccfv_SG) a
mult_eq_0_iff of_int_hom.hom_0 sum.cong)
qed
moreover hae"dim_vec x=d_e " unfolding x_def by auto
moreover have "x ≠0<z$dim_vec a∣) {∣ |i. i < dim_vec proo -
proof -
have "∃ 0" using 1 unfolding gen_lattice_def gen_svp_basis_def by auto
then obtain i where ‹
then have ‹
with ‹ a})"
with ‹ have "z $ i â‰
by auto
genen_svp_basis_lt[OF assms] by auto
then show ?thesis using x_def by auto
qed
moreover have "∥k"
proof -
have "∣ucm_im_z: "dim_vedim_vec a + unfoldgn_svasis_ef by ao
then have "Max (insert 0 {∣ how ??thesis
Max (insert 0 {\_ns[of λz $ i∣
y (
also have "\have =(realof_int_maten_svsvp_basis k) *= (real_of_int k + 1) * (∑a. z $ i * real_of_int (a $ i)) +
proof -
have axisr0 {∣ |i. i < dim_vecx = 0..<dim_vec = ∥" unfolding linf_norm_vec_Max
Max (insert 0 (insert ( ∣
proof -
have "x {\bar\bar i <im_vec
using ‹
then have "Max {∣The SVP is NP-hard in $\ell_\infty$.›\bara $ x\barr>) = - elo_in (k * (k + 1"
usinghave "k≥
then have max_subst: "Max {∣
Max (insert ∣ {∣z i\bar |i. i < dim_vecm ps_z_1iff)
using ‹ i using that suc_dim_a_dim_z
?thesis usin ‹(uto)
qed
then show ?thesis
using insert_set_comprehension[of "(λ show ?case
qed
finally have "Max (insert 0 {∣ |i. i < dim_vec
Max (insert 0 {∣ |i. i < dim_vec
by bl
then have "∥x∥\∞i<dim_vec
using x_def z_def v_real_z by auto
then show ?thesis using 1 by auto
qed
ultimately show ?case by force
qed
‹ NP-hard in $\ell_iclose>
"is_reduction reduce_svp_bhle bhle gap_svp"
is_reduction_def
using NP_hardness_reduction_svp well_defined_ the show ?thesis using 1by
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.