1 prioritize_overload `:real^N`;;
2 needs "tame/ssreflect/sort-compiled.hl";;
5 module Fnjlbxs = struct
17 let packing = Sections.section_proof ["V"]
18 `packing V <=> (!u v. u IN V /\ v IN V /\ ~(u = v) ==> &2 <= dist (u,v))`
20 (((((use_arg_then2 ("Sphere.packing", [Sphere.packing]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("IN", [IN])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
22 let inE = CONJUNCT2 IN_ELIM_THM;;
24 (* Section MoreList *)
25 Sections.begin_section "MoreList";;
28 let uniq_lift = Sections.section_proof ["l"]
29 `uniq (map lift l) <=> uniq l`
31 (((((use_arg_then2 ("map_inj_uniq", [map_inj_uniq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("LIFT_EQ", [LIFT_EQ]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
34 (* Lemma list_sum_continuous *)
35 let list_sum_continuous = Sections.section_proof ["f";"s";"s'";"net"]
36 `lift o f continuous_on (UNIV:real^N->bool) /\
37 (!k. LENGTH (s' k) = LENGTH s) /\
38 (!i. i < LENGTH s ==> ((\k. EL i (s' k)) --> EL i s) net) ==>
39 ((\k. list_sum (s' k) f) ---> list_sum s f) net`
41 ((BETA_TAC THEN (case THEN (move ["f_cont"]))) THEN (((THENL) (((use_arg_then2 ("s'", [])) (disch_tac [])) THEN (clear_assumption "s'") THEN ((use_arg_then2 ("s", [])) (disch_tac [])) THEN (clear_assumption "s") THEN elim) [ALL_TAC; ((move ["h"]) THEN (move ["t"]) THEN (move ["IH"]))]) THEN (move ["s'"])) THEN (repeat_tactic 1 9 (((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] []))))));
42 (((((use_arg_then2 ("LENGTH_EQ_NIL", [LENGTH_EQ_NIL]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["_"])) THEN (((use_arg_then2 ("REALLIM_CONST", [REALLIM_CONST]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
43 (BETA_TAC THEN (case THEN (move ["len_eq"])) THEN (move ["s'_to"]));
44 ((fun arg_tac -> arg_tac (Arg_term (`!k. s' k = EL 0 (s' k) :: TL (s' k)`))) (term_tac (have_gen_tac [](move ["s'_eq"]))));
45 ((BETA_TAC THEN (move ["k"])) THEN ((((use_arg_then2 ("EL", [EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CONS_HD_TL", [CONS_HD_TL]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LENGTH_EQ_NIL", [LENGTH_EQ_NIL]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_SUC", [NOT_SUC]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
46 ((THENL_ROT (-1)) (((((use_arg_then2 ("s'_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("list_sum_cons", [list_sum_cons]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REALLIM_ADD", [REALLIM_ADD]))(thm_tac (new_rewrite [] []))))) THEN (split_tac)));
47 ((THENL_FIRST) ((((use_arg_then2 ("IH", [])) (disch_tac [])) THEN (clear_assumption "IH") THEN (DISCH_THEN apply_tac)) THEN (split_tac)) ((BETA_TAC THEN (move ["k"])) THEN (((fun arg_tac -> (use_arg_then2 ("len_eq", [])) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("s'_eq", []))(thm_tac (new_rewrite [1] [])))) THEN (((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eqSS", [eqSS]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
48 ((BETA_TAC THEN (move ["i"]) THEN (move ["i_lt"])) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL EL_TL)))(thm_tac (new_rewrite [] [])))));
49 ((((fun arg_tac -> (use_arg_then2 ("s'_to", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`SUC i`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("ltSS", [ltSS]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("ADD1", [ADD1]))(thm_tac (new_rewrite [1] [])))) THEN (((use_arg_then2 ("EL", [EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("TL", [TL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
50 (((use_arg_then2 ("LIM_REAL_CONTINUOUS_FUNCTION", [LIM_REAL_CONTINUOUS_FUNCTION]))(thm_tac (new_rewrite [] []))));
51 ((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REAL_CONTINUOUS_CONTINUOUS1)))(thm_tac (new_rewrite [] [])))) THEN (split_tac));
52 (((use_arg_then2 ("CONTINUOUS_ON_INTERIOR", [CONTINUOUS_ON_INTERIOR])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`UNIV`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("INTERIOR_UNIV", [INTERIOR_UNIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNIV", [IN_UNIV]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
53 ((((fun arg_tac -> (use_arg_then2 ("s'_to", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("gtS0", [gtS0]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("EL", [EL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("HD", [HD]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
56 (* Lemma list_sum_continuous_alt *)
57 let list_sum_continuous_alt = Sections.section_proof ["f";"s";"v";"net"]
58 `lift o f continuous_on (UNIV:real^N->bool) /\
59 (!i. i < LENGTH s ==> ((\k. v k i) --> EL i s) net) ==>
60 ((\k. list_sum (mkseq (v k) (LENGTH s)) f) ---> list_sum s f) net`
62 (BETA_TAC THEN (case THEN ((move ["f_cont"]) THEN (move ["v_to"]))));
63 (((((use_arg_then2 ("list_sum_continuous", [list_sum_continuous]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_cont", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
64 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!k. EL i (mkseq (v k) (sizel s)) = v k i`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) (((((use_arg_then2 ("v_to", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
65 ((BETA_TAC THEN (move ["k"])) THEN ((((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
68 (* Finalization of the section MoreList *)
69 let uniq_lift = Sections.finalize_theorem uniq_lift;;
70 let list_sum_continuous = Sections.finalize_theorem list_sum_continuous;;
71 let list_sum_continuous_alt = Sections.finalize_theorem list_sum_continuous_alt;;
72 Sections.end_section "MoreList";;
74 (* Section MoreMinK *)
75 Sections.begin_section "MoreMinK";;
77 (* Lemma min_k_continuous *)
78 let min_k_continuous = Sections.section_proof ["k";"n";"f";"net"]
79 `(!i. i < n ==> f i real_continuous net) ==>
80 (\x. min_k k (mkseq (\i. f i x) n)) real_continuous net`
82 ((THENL_ROT (-1)) (((fun arg_tac -> arg_tac (Arg_term (`k < n:num`))) (disch_eq_tac "k_lt" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
83 ((((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] [])))) THEN ((fun arg_tac -> arg_tac (Arg_term (`\x. _ x`))) (term_tac (set_tac "r"))));
84 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`r = \x. EL k (nseq n ((@)UNIV))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("REAL_CONTINUOUS_CONST", [REAL_CONTINUOUS_CONST]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
85 ((((((use_arg_then2 ("r_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["m"]) THEN (simp_tac)) THEN ((use_arg_then2 ("ge_length_imp_EL_eq", [ge_length_imp_EL_eq])) (thm_tac apply_tac)));
86 (((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_merge_sort", [size_merge_sort]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_nseq", [size_nseq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leqNgt", [leqNgt]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
87 ((repeat_tactic 1 9 (((use_arg_then2 ("real_continuous", [real_continuous]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REALLIM)))(thm_tac (new_rewrite [] []))))));
88 (((fun arg_tac -> arg_tac (Arg_term (`trivial_limit net`))) (disch_tac [])) THEN case THEN (simp_tac) THEN (move ["f_cont"]) THEN (move ["e"]) THEN (move ["e_gt0"]));
89 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`?y. (?x. netord net x y) /\
90 (!x. netord net x y ==> (!i:num. i < n ==> abs (f i x - f i (netlimit net)) < e))`))) (term_tac (have_gen_tac []ALL_TAC))));
91 ((((use_arg_then2 ("MONO_EXISTS", [MONO_EXISTS])) (thm_tac apply_tac)) THEN (move ["y"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["all_f"])) THEN ((((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"]) THEN (move ["net_x"])));
92 (repeat_tactic 1 9 (((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] [])))));
93 (((fun arg_tac -> arg_tac (Arg_term (`merge_sort (<=) _`))) (term_tac (set_tac "s"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`merge_sort (<=) _`))) (term_tac (set_tac "s'"))));
94 ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("s'_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_merge_sort", [size_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
95 ((((use_arg_then2 ("s_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("sort_continuous", [sort_continuous])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. f i x) n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. f i (netlimit net)) n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
96 (((((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("s'_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("real_merge_sort", [real_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
97 (((repeat_tactic 1 9 (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("all_f", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
98 ((fun arg_tac -> arg_tac (Arg_term (`?y x. netord net x y`))) (term_tac (have_gen_tac [](move ["ord_xy"]))));
99 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f_cont", [])) (fun fst_arg -> (use_arg_then2 ("k_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["y"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["x"])) THEN (move ["h"]) THEN (move ["_"])) THEN (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac))) THEN (done_tac));
100 (((THENL) (((use_arg_then2 ("f_cont", [])) (disch_tac [])) THEN (clear_assumption "f_cont") THEN ((use_arg_then2 ("n", [])) (disch_tac [])) THEN (clear_assumption "n") THEN elim) [ALL_TAC; ((move ["m"]) THEN (move ["IH"]))]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("ltn0", [ltn0]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
101 ((((use_arg_then2 ("ord_xy", [])) (disch_tac [])) THEN (clear_assumption "ord_xy") THEN BETA_TAC THEN (case THEN (move ["y"])) THEN (case THEN (move ["x"])) THEN (move ["ord_xy"])) THEN (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac))) THEN (done_tac));
102 ((BETA_TAC THEN (move ["f_cont"])) THEN (((use_arg_then2 ("IH", [])) (disch_tac [])) THEN (clear_assumption "IH") THEN BETA_TAC) THEN ((THENL) (ANTS_TAC) [((move ["i"]) THEN (move ["i_lt_m"]) THEN (move ["e'"]) THEN (move ["e'_gt0"])); ALL_TAC]));
103 (((((use_arg_then2 ("f_cont", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("e'_gt0", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("i_lt_m", [])) (disch_tac [])) THEN (clear_assumption "i_lt_m") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
104 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f_cont", [])) (fun fst_arg -> (use_arg_then2 ("m", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("ltnSn", [ltnSn])) (fun fst_arg -> (use_arg_then2 ("m", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
105 ((((use_arg_then2 ("IMP_IMP", [IMP_IMP]))(fun arg -> ONCE_REWRITE_TAC[get_arg_thm arg]))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("NET_DILEMMA", [NET_DILEMMA])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (case THEN (move ["y"])) THEN (case THEN (move ["x_ord"])) THEN (move ["h"]));
106 (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN (((((use_arg_then2 ("x_ord", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `i < SUC m <=> i = m \/ i < m`)))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["ord_xy"]) THEN (move ["i"])));
107 ((THENL_FIRST) ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (move ["i_lt_m"])]) ((((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
108 ((((fun arg_tac -> (use_arg_then2 ("h", [])) (fun fst_arg -> (use_arg_then2 ("ord_xy", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
111 (* Lemma min_k_limit *)
112 let min_k_limit = Sections.section_proof ["k";"s";"s'";"net"]
113 `(!n. LENGTH (s' n) = LENGTH s) /\
114 (!i. i < LENGTH s ==> ((\n. EL i (s' n)) ---> EL i s) net) ==>
115 ((\n. min_k k (s' n)) ---> min_k k s) net`
117 (BETA_TAC THEN (case THEN ((move ["len_eq"]) THEN (move ["s'_to"]))));
118 ((THENL_ROT (-1)) (((fun arg_tac -> arg_tac (Arg_term (`k < LENGTH s`))) (disch_eq_tac "k_lt" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
119 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`(\n. min_k k (s' n)) = (\n. min_k k s)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("REALLIM_CONST", [REALLIM_CONST]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
120 ((((repeat_tactic 1 9 (((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["m"]) THEN (simp_tac)) THEN ((use_arg_then2 ("ge_length_imp_EL_eq", [ge_length_imp_EL_eq])) (thm_tac apply_tac)));
121 (((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("size_merge_sort", [size_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leqNgt", [leqNgt]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
122 ((((use_arg_then2 ("s'_to", [])) (disch_tac [])) THEN (clear_assumption "s'_to") THEN BETA_TAC) THEN (repeat_tactic 1 9 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REALLIM)))(thm_tac (new_rewrite [] []))))));
123 (((fun arg_tac -> arg_tac (Arg_term (`trivial_limit net`))) (disch_tac [])) THEN case THEN (simp_tac) THEN (move ["el_cont"]) THEN (move ["e"]) THEN (move ["e_gt0"]));
124 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`?y. (?x. netord net x y) /\
125 (!x. netord net x y ==> (!i. i < LENGTH s ==> abs (EL i (s' x) - EL i s) < e))`))) (term_tac (have_gen_tac []ALL_TAC))));
126 ((((use_arg_then2 ("MONO_EXISTS", [MONO_EXISTS])) (thm_tac apply_tac)) THEN (move ["y"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["all_el"])) THEN ((((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"]) THEN (move ["net_x"])));
127 (repeat_tactic 1 9 (((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] [])))));
128 (((fun arg_tac -> arg_tac (Arg_term (`merge_sort (<=) _`))) (term_tac (set_tac "l"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`merge_sort (<=) _`))) (term_tac (set_tac "l'"))));
129 ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("l_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("l'_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_merge_sort", [size_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
130 ((((use_arg_then2 ("l_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("l'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("sort_continuous", [sort_continuous])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`s' x`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
131 (((((use_arg_then2 ("l_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("l'_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("real_merge_sort", [real_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
132 (((repeat_tactic 1 9 (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("all_el", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
133 ((fun arg_tac -> arg_tac (Arg_term (`?y x. netord net x y`))) (term_tac (have_gen_tac [](move ["ord_xy"]))));
134 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("el_cont", [])) (fun fst_arg -> (use_arg_then2 ("k_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["y"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["x"])) THEN (move ["h"]) THEN (move ["_"])) THEN (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac))) THEN (done_tac));
135 (((THENL) (((use_arg_then2 ("el_cont", [])) (disch_tac [])) THEN (clear_assumption "el_cont") THEN ((use_arg_then2 ("len_eq", [])) (disch_tac [])) THEN (clear_assumption "len_eq") THEN ((use_arg_then2 ("s'", [])) (disch_tac [])) THEN (clear_assumption "s'") THEN ((use_arg_then2 ("s", [])) (disch_tac [])) THEN (clear_assumption "s") THEN elim) [ALL_TAC; ((move ["h"]) THEN (move ["t"]) THEN (move ["IH"]))]) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("ltn0", [ltn0]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["s'"]) THEN (move ["len_eq"]) THEN (move ["el_cont"])));
136 ((((fun arg_tac -> (use_arg_then2 ("IH", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\n. TL (s' n)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (repeat_tactic 1 9 ((ANTS_TAC))));
137 ((THENL_LAST) ((BETA_TAC THEN (move ["n"])) THEN ((((use_arg_then2 ("LENGTH_TL", [LENGTH_TL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))))) ((arith_tac) THEN (done_tac)));
138 ((((fun arg_tac -> (use_arg_then2 ("len_eq", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
139 (BETA_TAC THEN (move ["i"]) THEN (move ["i_lt"]) THEN (move ["e'"]) THEN (move ["e'_gt0"]));
140 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("el_cont", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`SUC i`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e'_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("ltSS", [ltSS]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("EL", [EL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("TL", [TL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
141 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("el_cont", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("gtS0", [gtS0]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
142 ((((use_arg_then2 ("IMP_IMP", [IMP_IMP]))(fun arg -> ONCE_REWRITE_TAC[get_arg_thm arg]))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("NET_DILEMMA", [NET_DILEMMA])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (case THEN (move ["y"])) THEN (case THEN (move ["x_ord"])) THEN (move ["h"]));
143 ((THENL_FIRST) (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN (((((use_arg_then2 ("x_ord", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["ord_xy"]) THEN ((THENL) case [(move ["_"]); (move ["i"])]))) ((((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
144 (((((use_arg_then2 ("ltSS", [ltSS]))(thm_tac (new_rewrite [] [])))) THEN (move ["i_lt"])) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("EL", [EL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("TL", [TL]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("h", [])) (fun fst_arg -> (use_arg_then2 ("ord_xy", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
146 let min_dist_k = new_definition
147 `min_dist_k k (l:(real^N)list) = min_k 0 (map (\v. dist (v, EL k l)) (delete_at k l))`;;
149 (* Lemma min_dist_k_limit *)
150 let min_dist_k_limit = Sections.section_proof ["k";"s";"s'";"net"]
151 `(!n. LENGTH (s' n) = LENGTH s) /\
152 (!i. i < LENGTH s ==> ((\n. EL i (s' n)) --> EL i s) net) ==>
153 ((\n. min_dist_k k (s' n)) ---> min_dist_k k s) net`
155 (BETA_TAC THEN (case THEN (move ["len_eq"])) THEN (move ["s'_to"]));
156 (repeat_tactic 1 9 (((use_arg_then2 ("min_dist_k", [min_dist_k]))(thm_tac (new_rewrite [] [])))));
157 (((use_arg_then2 ("min_k_limit", [min_k_limit])) (thm_tac apply_tac)) THEN ((THENL) (split_tac) [(move ["n"]); (move ["i"])]) THEN ((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))));
158 ((in_tac ["len_eq"] true (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (BETA_TAC THEN (move ["i_lt"])));
159 ((fun arg_tac -> arg_tac (Arg_term (`(\n. EL i (map (\v. dist (v, EL k (s' n))) (delete_at k (s' n)))) =
160 (\n. norm (EL i (delete_at k (s' n)) - EL k (s' n)))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
161 ((((((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] []))))) THEN (move ["n"]) THEN (simp_tac)) THEN ((((use_arg_then2 ("EL_map", [EL_map]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
162 ((((use_arg_then2 ("EL_map", [EL_map]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
163 (((use_arg_then2 ("LIM_REAL_CONTINUOUS_FUNCTION", [LIM_REAL_CONTINUOUS_FUNCTION])) (thm_tac apply_tac)) THEN ((((use_arg_then2 ("REAL_CONTINUOUS_NORM_AT", [REAL_CONTINUOUS_NORM_AT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LIM_SUB", [LIM_SUB]))(thm_tac (new_rewrite [] []))))));
164 ((THENL_ROT (-1)) (((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN ((fun arg_tac -> arg_tac (Arg_term (`k < sizel s`))) (disch_eq_tac "k_lt" [])) THEN case THEN (simp_tac) THEN (move ["i_lt"]) THEN (process_fst_eq_tac)));
165 ((fun arg_tac -> arg_tac (Arg_term (`!n. delete_at k (s' n) = s' n`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
166 ((BETA_TAC THEN (move ["n"])) THEN ((((use_arg_then2 ("delete_at_eq_imp", [delete_at_eq_imp]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
167 ((THENL_FIRST) ((((fun arg_tac -> (use_arg_then2 ("delete_at_eq_imp", [delete_at_eq_imp])) (fun fst_arg -> (use_arg_then2 ("k_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s'_to", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))))) ((((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
168 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!n. EL k (s' n) = EL k s`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("LIM_CONST", [LIM_CONST]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
169 ((BETA_TAC THEN (move ["n"])) THEN ((use_arg_then2 ("ge_length_imp_EL_eq", [ge_length_imp_EL_eq])) (thm_tac apply_tac)) THEN ((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leqNgt", [leqNgt]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
170 ((fun arg_tac -> arg_tac (Arg_term (`!n. EL i (delete_at k (s' n)) = EL (if i < k then i else SUC i) (s' n)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
171 ((BETA_TAC THEN (move ["n"])) THEN ((((use_arg_then2 ("EL_delete_at", [EL_delete_at]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
172 ((((use_arg_then2 ("EL_delete_at", [EL_delete_at]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
173 (((repeat_tactic 1 9 (((use_arg_then2 ("s'_to", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
176 (* Lemma min_dist_min *)
177 let min_dist_min = Sections.section_proof ["l";"k"]
178 `!i. i < sizel l /\ ~(i = k) ==> min_dist_k k l <= dist (EL i l, EL k l)`
180 ((BETA_TAC THEN (move ["i"]) THEN (case THEN ((move ["i_lt"]) THEN (move ["neq"])))) THEN ((((use_arg_then2 ("min_dist_k", [min_dist_k]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] []))))));
181 ((fun arg_tac -> arg_tac (Arg_term (`map _1 _2`))) (term_tac (set_tac "s")));
182 ((fun arg_tac -> (use_arg_then2 ("real_merge_sort", [real_merge_sort])) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["sort"])));
183 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))));
184 (((((use_arg_then2 ("size_merge_sort", [size_merge_sort]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN ((use_arg_then2 ("neq", [])) (disch_tac [])) THEN (clear_assumption "neq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
185 ((((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `!a b. a <= b <=> a <= b \/ b = a`)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_term (`_1 = _2`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
186 ((((fun arg_tac -> (use_arg_then2 ("nth0_sorted_imp", [nth0_sorted_imp])) (fun fst_arg -> (use_arg_then2 ("sort", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("mapP", [mapP]))(thm_tac (new_rewrite [] []))))));
187 ((((fun arg_tac -> arg_tac (Arg_term (`EL i l`))) (term_tac exists_tac)) THEN (simp_tac)) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))));
188 ((fun arg_tac -> arg_tac (Arg_term (`if i < k then i else i - 1`))) (term_tac (set_tac "j")));
189 ((fun arg_tac -> arg_tac (Arg_term (`j < sizel (delete_at k l)`))) (term_tac (have_gen_tac [](move ["j_lt"]))));
190 (((((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("j_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("neq", [])) (disch_tac [])) THEN (clear_assumption "neq") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
191 (((use_arg_then2 ("j", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("EL_delete_at", [EL_delete_at]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("j_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
192 (congr_tac (`EL _ l`));
193 ((((use_arg_then2 ("j_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("neq", [])) (disch_tac [])) THEN (clear_assumption "neq") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
196 (* Lemma min_dist_exists *)
197 let min_dist_exists = Sections.section_proof ["l";"k"]
199 ?m. m < sizel l /\ ~(m = k) /\ min_dist_k k l = dist (EL m l, EL k l)`
201 ((BETA_TAC THEN (move ["size_ge"])) THEN (((use_arg_then2 ("min_dist_k", [min_dist_k]))(thm_tac (new_rewrite [] [])))));
202 ((fun arg_tac -> arg_tac (Arg_term (`map _1 _2`))) (term_tac (set_tac "s")));
203 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("mem_min_k", [mem_min_k])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC));
204 (((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_ge", [])) (disch_tac [])) THEN (clear_assumption "size_ge") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
205 (((((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["i"])) THEN (case THEN (move ["i_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
206 ((fun arg_tac -> arg_tac (Arg_term (`if i < k then i else SUC i`))) (term_tac (set_tac "m")));
207 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`m < sizel l`))) (term_tac (have_gen_tac [](move ["m_lt"])))) ((((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
208 ((THENL_FIRST) (((use_arg_then2 ("m", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("m_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (split_tac)) ((((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac)));
209 ((((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EL_map", [EL_map]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)));
210 (((((use_arg_then2 ("EL_delete_at", [EL_delete_at]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("m_def", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size_delete_at", [size_delete_at]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
213 (* Lemma min_distP *)
214 let min_distP = Sections.section_proof ["l";"k";"x"]
215 `2 <= sizel l ==> (min_dist_k k l = x <=>
216 ?m. m < sizel l /\ ~(m = k) /\ dist (EL m l, EL k l) = x /\
217 (!i. i < sizel l /\ ~(i = k) ==> x <= dist (EL i l, EL k l)) )`
219 (BETA_TAC THEN (move ["size_ge"]));
220 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("size_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["r"])) THEN (case THEN (move ["r_lt"])) THEN (case THEN (move ["rnk"])) THEN (move ["r_dist_eq"]));
221 ((THENL) (split_tac) [(((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))); ((case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["mnk"])) THEN (case THEN (move ["dist_eq"])) THEN (move ["dist_le"]))]);
222 (((use_arg_then2 ("r", [])) (term_tac exists_tac)) THEN (((((use_arg_then2 ("r_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("rnk", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("r_dist_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["i"]) THEN (case THEN (move ["i_lt"])) THEN (move ["neq"])));
223 ((((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
224 ((((use_arg_then2 ("REAL_LE_ANTISYM", [REAL_LE_ANTISYM]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (split_tac));
225 (((((use_arg_then2 ("dist_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
226 (((((use_arg_then2 ("r_dist_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_le", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
229 (* Lemma min_dist_imp_packing *)
230 let min_dist_imp_packing = Sections.section_proof ["l"]
231 `(!i. i < sizel l ==> &2 <= min_dist_k i l) ==> packing (set_of_list l)`
233 (((((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))))) THEN (move ["h"]) THEN (move ["u"]) THEN (move ["v"]));
234 (((repeat_tactic 1 9 (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN ALL_TAC) THEN (case THEN (move ["i"])) THEN (case THEN (move ["i_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (case THEN ALL_TAC) THEN (case THEN (move ["j"])) THEN (case THEN (move ["j_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (move ["neq"]));
235 ((((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k j l`))) (term_tac exists_tac)));
236 ((((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
237 ((((use_arg_then2 ("neq", [])) (disch_tac [])) THEN (clear_assumption "neq") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
240 (* Lemma packing_eq_min_dist *)
241 let packing_eq_min_dist = Sections.section_proof ["l"]
242 `uniq l /\ 2 <= sizel l ==>
243 (packing (set_of_list l) <=> !i. i < sizel l ==> &2 <= min_dist_k i l)`
245 ((THENL_LAST) ((BETA_TAC THEN (case THEN ((move ["uniq_l"]) THEN (move ["size_ge"])))) THEN (split_tac)) (((use_arg_then2 ("min_dist_imp_packing", [min_dist_imp_packing])) (disch_tac [])) THEN (clear_assumption "min_dist_imp_packing") THEN (exact_tac)));
246 (((((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))))) THEN (move ["pack"]) THEN (move ["k"]) THEN (move ["k_lt"]));
247 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("size_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["n_mk"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
248 (((((use_arg_then2 ("pack", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("nth_uniq", [nth_uniq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
251 (* Lemma min_dist_imp_uniq *)
252 let min_dist_imp_uniq = Sections.section_proof ["l"]
253 `(!i. i < sizel l ==> &0 < min_dist_k i l) ==> uniq l`
255 ((THENL_FIRST) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`sizel l < 2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("uniq_small_size", [uniq_small_size])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
256 ((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (move ["size_ge"]) THEN (move ["n0"]));
257 ((((fun arg_tac -> (use_arg_then2 ("uniq_nthP", [uniq_nthP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (move ["i"]) THEN (move ["j"]) THEN (case THEN (move ["i_lt_j"])) THEN (move ["j_lt"]));
258 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < sizel l`))) (term_tac (have_gen_tac [](move ["i_lt"])))) ((((use_arg_then2 ("j_lt", [])) (disch_tac [])) THEN (clear_assumption "j_lt") THEN ((use_arg_then2 ("i_lt_j", [])) (disch_tac [])) THEN (clear_assumption "i_lt_j") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
259 ((((fun arg_tac -> (use_arg_then2 ("n0", [])) (fun fst_arg -> (use_arg_then2 ("j_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac)) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac))) THEN (move ["el_eq"])));
260 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("size_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("j", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["n_mj"])) THEN (move ["dist_eq"]));
261 ((((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] [])))));
262 ((THENL_FIRST) ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_min", [min_dist_min])) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("j", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC)) ((((use_arg_then2 ("i_lt_j", [])) (disch_tac [])) THEN (clear_assumption "i_lt_j") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
263 (((((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("el_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
266 (* Lemma uniq_min_distP *)
267 let uniq_min_distP = Sections.section_proof ["l"]
268 `uniq l <=> sizel l < 2 \/ (!i. i < sizel l ==> &0 < min_dist_k i l)`
270 ((THENL_LAST) (split_tac) (((THENL) case [(DISCH_THEN (fun snd_th -> (use_arg_then2 ("uniq_small_size", [uniq_small_size])) (thm_tac (match_mp_then snd_th MP_TAC)))); (DISCH_THEN (fun snd_th -> (use_arg_then2 ("min_dist_imp_uniq", [min_dist_imp_uniq])) (thm_tac (match_mp_then snd_th MP_TAC))))]) THEN (done_tac)));
271 ((BETA_TAC THEN (move ["uniq_l"])) THEN (((THENL) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`sizel l < 2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); ALL_TAC]) THEN ((TRY done_tac))));
272 (((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (move ["size_ge"])) THEN ((DISJ2_TAC) THEN (move ["k"]) THEN (move ["k_lt"])));
273 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("size_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["n_mk"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
274 (in_tac ["uniq_l"] false (((fun arg_tac -> (use_arg_then2 ("uniq_nthP", [uniq_nthP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
275 ((((use_arg_then2 ("k_lt", [])) (disch_tac [])) THEN (clear_assumption "k_lt") THEN ((use_arg_then2 ("m_lt", [])) (disch_tac [])) THEN (clear_assumption "m_lt") THEN ((use_arg_then2 ("n_mk", [])) (disch_tac [])) THEN (clear_assumption "n_mk") THEN BETA_TAC) THEN (((THENL) ((fun arg_tac -> arg_tac (Arg_term (`m < k:num`))) (term_tac (wlog_tac ALL_TAC[`m`; `k`]))) [(move ["h"]); (move ["m_lt_k"])]) THEN (move ["n_mk"]) THEN (move ["m_lt"]) THEN (move ["k_lt"])));
276 (((THENL) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`m < k:num`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [((DISCH_THEN (fun snd_th -> (use_arg_then2 ("h", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))); ALL_TAC]) THEN ((TRY done_tac)));
277 ((((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LE_LT", [LE_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_mk", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("orbF", [orbF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("h", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
278 ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_LT_LE", [REAL_LT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_POS_LE", [DIST_POS_LE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
279 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("uniq_l", [])) (fun fst_arg -> (use_arg_then2 ("m_lt_k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac));
280 (((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_EQ_0", [DIST_EQ_0]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
283 (* Lemma uniq_open *)
284 let uniq_open = Sections.section_proof ["l"]
285 `uniq l ==> ?e. &0 < e /\
286 (!s. sizel s = sizel l /\ (!i. i < sizel l ==> dist (EL i s, EL i l) < e) ==> uniq s)`
288 ((BETA_TAC THEN (move ["uniq_l"])) THEN (((use_arg_then2 ("uniq_l", [])) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("uniq_min_distP", [uniq_min_distP]))(thm_tac (new_rewrite [] [])))));
289 (((fun arg_tac -> arg_tac (Arg_term (`sizel l < 2`))) (disch_eq_tac "size_ge" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
290 (((fun arg_tac -> arg_tac (Arg_term (`&1`))) (term_tac exists_tac)) THEN (((((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["s"]) THEN (case THEN (move ["size_eq"])) THEN (move ["_"])));
291 (((((use_arg_then2 ("uniq_small_size", [uniq_small_size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
292 ((in_tac ["size_ge"] false (((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] []))))) THEN (BETA_TAC THEN (move ["h"])));
293 ((fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. min_dist_k i l) (sizel l)`))) (term_tac (set_tac "r")));
294 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`sizel r = sizel l`))) (term_tac (have_gen_tac [](move ["size_r"])))) (((((use_arg_then2 ("r_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
295 (((fun arg_tac -> arg_tac (Arg_term (`min_k 0 r / &2`))) (term_tac exists_tac)) THEN ((THENL) (split_tac) [ALL_TAC; ((move ["s"]) THEN (case THEN ((move ["size_eq"]) THEN (move ["dist_lt"]))))]));
296 ((THENL_FIRST) ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("mem_min_k", [mem_min_k])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("r", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC)) (((((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_r", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_ge", [])) (disch_tac [])) THEN (clear_assumption "size_ge") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
297 ((BETA_TAC THEN (move ["mem_r"])) THEN ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("nth_index", [nth_index])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("mem_r", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] []))))));
298 (((((use_arg_then2 ("r_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 0 10 (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_r", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("index_mem", [index_mem]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (arith_tac) THEN (done_tac));
299 ((((fun arg_tac -> (use_arg_then2 ("uniq_nthP", [uniq_nthP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (move ["i"]) THEN (move ["j"]) THEN (case THEN ((move ["i_lt_j"]) THEN (move ["j_lt"]))));
300 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < sizel s`))) (term_tac (have_gen_tac [](move ["i_lt"])))) ((((use_arg_then2 ("i_lt_j", [])) (disch_tac [])) THEN (clear_assumption "i_lt_j") THEN ((use_arg_then2 ("j_lt", [])) (disch_tac [])) THEN (clear_assumption "j_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
301 ((repeat_tactic 1 9 (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DIST_LE_0", [DIST_LE_0]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))));
302 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`min_k 0 r <= dist (EL i l, EL j l)`))) (term_tac (have_gen_tac []ALL_TAC))));
303 (in_tac ["dist_lt"] false (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))));
304 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL i l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL i s`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL j l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
305 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL i s`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL j s`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL j l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
306 ((((fun arg_tac -> (use_arg_then2 ("dist_lt", [])) (fun fst_arg -> (use_arg_then2 ("j_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (use_arg_then2 ("dist_lt", [])) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
307 ((((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k j l`))) (term_tac exists_tac)));
308 ((THENL_FIRST) ((((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))))) ((((use_arg_then2 ("i_lt_j", [])) (disch_tac [])) THEN (clear_assumption "i_lt_j") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
309 (((use_arg_then2 ("r_def", [])) (disch_tac [])) THEN (clear_assumption "r_def") THEN (DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("f_equal", [f_equal])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\x. nth (&0) x j`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC);
310 (((((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("BETA_THM", [BETA_THM]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
311 (((((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_r", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("min_k0_le_EL", [min_k0_le_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_r", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
314 (* Lemma uniq_real_open *)
315 let uniq_real_open = Sections.section_proof ["l"]
316 `uniq l ==> ?e. &0 < e /\
317 (!s. sizel s = sizel l /\ (!i. i < sizel l ==> abs (EL i s - EL i l) < e) ==> uniq s)`
319 ((repeat_tactic 1 9 (((use_arg_then2 ("uniq_lift", [uniq_lift]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("uniq_open", [uniq_open])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (case THEN (move ["e"])) THEN (case THEN (move ["e_gt0"])) THEN (move ["h"]));
320 (((use_arg_then2 ("e", [])) (term_tac exists_tac)) THEN (((((use_arg_then2 ("e_gt0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_LIFT", [DIST_LIFT]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["s"]) THEN (case THEN (move ["size_eq"])) THEN (move ["dist_lt"])));
321 ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN (DISCH_THEN apply_tac)) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"])));
322 (((repeat_tactic 1 9 (((use_arg_then2 ("EL_map", [EL_map]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dist_lt", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
325 (* Finalization of the section MoreMinK *)
326 let min_k_continuous = Sections.finalize_theorem min_k_continuous;;
327 let min_k_limit = Sections.finalize_theorem min_k_limit;;
328 let min_dist_k_limit = Sections.finalize_theorem min_dist_k_limit;;
329 let min_dist_min = Sections.finalize_theorem min_dist_min;;
330 let min_dist_exists = Sections.finalize_theorem min_dist_exists;;
331 let min_distP = Sections.finalize_theorem min_distP;;
332 let min_dist_imp_packing = Sections.finalize_theorem min_dist_imp_packing;;
333 let packing_eq_min_dist = Sections.finalize_theorem packing_eq_min_dist;;
334 let min_dist_imp_uniq = Sections.finalize_theorem min_dist_imp_uniq;;
335 let uniq_min_distP = Sections.finalize_theorem uniq_min_distP;;
336 let uniq_open = Sections.finalize_theorem uniq_open;;
337 let uniq_real_open = Sections.finalize_theorem uniq_real_open;;
338 Sections.end_section "MoreMinK";;
340 (* Section MoreSortedReal *)
341 Sections.begin_section "MoreSortedReal";;
343 (* Lemma real_sorted_lt2 *)
344 let real_sorted_lt2 = Sections.section_proof ["l";"l'";"s";"s'";"r"]
345 `sorted (<=) s l /\ sorted (<=) s' l' /\ sizel l' = sizel l /\
346 r < sizel l /\ EL r l < EL r l' /\
347 (!i. i < sizel l /\ EL i l <= EL r l ==> EL i l <= EL i l') /\
348 (!i. i < sizel l /\ EL r l < EL i l ==> EL r l < EL i l') ==>
349 ?k. k < sizel l /\ (!i. i < k ==> EL i s = EL i s') /\ EL k s < EL k s'`
351 (BETA_TAC THEN (case THEN (move ["sort_s"])) THEN (case THEN (move ["sort_s'"])) THEN (case THEN (move ["size_eq"])) THEN (case THEN (move ["r_lt"])) THEN (case THEN (move ["el_r_lt"])) THEN (case THEN (move ["el_le"])) THEN (move ["el_gt"]));
352 ((((use_arg_then2 ("sort_s'", [])) (disch_tac [])) THEN ((use_arg_then2 ("sort_s", [])) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("sorted", [sorted]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN ((move ["ord_s"]) THEN (move ["perm_s"]))) THEN (case THEN ((move ["ord_s'"]) THEN (move ["perm_s'"])))));
353 (((fun arg_tac -> arg_tac (Arg_term (`sizel l`))) (term_tac (set_tac "n"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`EL r l`))) (term_tac (set_tac "u"))));
354 ((fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. if EL i l <= u then EL i l else u) n`))) (term_tac (set_tac "m")));
355 ((fun arg_tac -> arg_tac (Arg_term (`merge_sort (<=) m`))) (term_tac (set_tac "t")));
356 ((((fun arg_tac -> (use_arg_then2 ("real_merge_sort", [real_merge_sort])) (fun fst_arg -> (use_arg_then2 ("m", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("t_def", []))(thm_tac (new_rewrite [] [])))) THEN (move ["sort_t"])));
357 ((fun arg_tac -> arg_tac (Arg_term (`sizel t = n /\ sizel m = n /\ sizel s' = n /\ sizel l' = n /\ sizel s = n`))) (term_tac (have_gen_tac [](move ["sizes"]))));
358 (((((fun arg_tac -> (use_arg_then2 ("sorted_size", [sorted_size])) (fun fst_arg -> (use_arg_then2 ("sort_t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("sorted_size", [sorted_size])) (fun fst_arg -> (use_arg_then2 ("sort_s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("sorted_size", [sorted_size])) (fun fst_arg -> (use_arg_then2 ("sort_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
359 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("real_sorted_lt", [real_sorted_lt])) (fun fst_arg -> (use_arg_then2 ("sort_t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("sort_s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN (ANTS_TAC));
360 ((THENL_ROT (-1)) (((repeat_tactic 1 9 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (split_tac)));
361 (((use_arg_then2 ("r", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("r_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))));
362 (((((use_arg_then2 ("u_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
363 ((BETA_TAC THEN (move ["i"]) THEN (move ["i_lt"])) THEN ((((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))));
364 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`EL i l <= u`))) (disch_eq_tac "neq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("el_le", [])) (disch_tac [])) THEN (clear_assumption "el_le") THEN (exact_tac)) THEN (done_tac)));
365 (((((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("el_gt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
366 ((((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["k"])) THEN (case THEN (move ["k_lt"])) THEN (case THEN (move ["el_eq"])) THEN (move ["el_k_lt"]));
367 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("perm_eq_filter", [perm_eq_filter])) (fun fst_arg -> (use_arg_then2 ("perm_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\x. x <= u`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["perm_l0"])));
368 ((fun arg_tac -> arg_tac (Arg_term (`\x. x <= u`))) (term_tac (set_tac "a")));
369 ((fun arg_tac -> arg_tac (Arg_term (`filter a l`))) (term_tac (set_tac "l0")));
370 ((fun arg_tac -> arg_tac (Arg_term (`sizel l0`))) (term_tac (set_tac "n0")));
371 ((fun arg_tac -> arg_tac (Arg_term (`n0 <= n:num`))) (term_tac (have_gen_tac [](move ["n0_le"]))));
372 (((((use_arg_then2 ("n0_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("l0_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("count_filter", [count_filter]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("count_size", [count_size]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
373 ((fun arg_tac -> arg_tac (Arg_term (`filter a s = take n0 s`))) (term_tac (have_gen_tac [](move ["take_eq"]))));
374 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ordered_cat_filter", [ordered_cat_filter])) (fun fst_arg -> (use_arg_then2 ("ord_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("u", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("f_equal", [f_equal])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`take n0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
375 (((((use_arg_then2 ("a_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("take_size_cat", [take_size_cat]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("count_filter", [count_filter]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("iffLR", [iffLR])) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("perm_eqP", [perm_eqP])) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("l", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("perm_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("count_filter", [count_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("l0_def", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
376 ((fun arg_tac -> arg_tac (Arg_term (`perm_eq l (l0 ++ filter (predC a) l)`))) (term_tac (have_gen_tac []ALL_TAC)));
377 (((((use_arg_then2 ("perm_eq_sym", [perm_eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("l0_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("perm_filterC", [perm_filterC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("perm_eq_refl", [perm_eq_refl]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
378 (((DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("perm_eq_bij", [perm_eq_bij])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN ((((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["p"])) THEN (case THEN (move ["p_perm"])) THEN (move ["nth_eq"])));
379 ((fun arg_tac -> arg_tac (Arg_term (` i < n ==> p i < n:num`))) (term_tac (have_gen_tac ["i"](move ["p_lt"]))));
380 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PERMUTES_IN_IMAGE", [PERMUTES_IN_IMAGE])) (fun fst_arg -> (use_arg_then2 ("p_perm", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (arith_tac) THEN (done_tac));
381 ((fun arg_tac -> arg_tac (Arg_term (`take n0 s = take n0 t`))) (term_tac (have_gen_tac [](move ["st_eq"]))));
382 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`perm_eq m (l0 ++ nseq (n - n0) u)`))) (term_tac (have_gen_tac [](move ["perm_m"])))));
383 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ordered_cat_filter", [ordered_cat_filter])) (fun fst_arg -> (use_arg_then2 ("ord_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("u", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(thm_tac (new_rewrite [] [])))));
384 ((((use_arg_then2 ("sort_t", [])) (disch_tac [])) THEN (clear_assumption "sort_t") THEN BETA_TAC) THEN ((((use_arg_then2 ("sorted", [sorted]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN ((move ["ord_t"]) THEN (move ["perm_t"])))));
385 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`t = filter a s ++ nseq (n - n0) u`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))));
386 (((repeat_tactic 1 9 (((use_arg_then2 ("take_size_cat", [take_size_cat]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("take_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_takel", [size_takel]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
387 (((fun arg_tac -> arg_tac (Arg_term (`_1 ++ _2`))) (term_tac (set_tac "t2"))) THEN ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ordered_eq", [ordered_eq])) (fun fst_arg -> (use_arg_then2 ("ord_t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("t2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))));
388 (((THENL) (split_tac) [((move ["x"]) THEN (move ["y"])); ALL_TAC]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("REAL_LE_ANTISYM", [REAL_LE_ANTISYM]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("t2_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (split_tac));
389 (((use_arg_then2 ("perm_eq_trans", [perm_eq_trans])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("m", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("perm_t", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
390 ((((fun arg_tac -> (use_arg_then2 ("perm_eq_trans", [perm_eq_trans])) (fun fst_arg -> (use_arg_then2 ("perm_m", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("perm_eq_cat", [perm_eq_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("perm_eq_refl", [perm_eq_refl]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("perm_eq_sym", [perm_eq_sym]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
391 ((((use_arg_then2 ("ordered_cat", [ordered_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ordered_filter", [ordered_filter]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("ordered_real_nseq", [ordered_real_nseq]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("allP", [allP]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (simp_tac));
392 (((((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("mem_nseq", [mem_nseq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (done_tac));
393 ((((fun arg_tac -> (use_arg_then2 ("perm_eq_permutesP", [perm_eq_permutesP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_cat", [size_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_nseq", [size_nseq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("subnKC", [subnKC])) (fun fst_arg -> (use_arg_then2 ("n0_le", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
394 (((use_arg_then2 ("p", [])) (term_tac exists_tac)) THEN (((((use_arg_then2 ("p_perm", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"])) THEN (((fun arg_tac -> (use_arg_then2 ("nth_eq", [])) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC));
395 (((fun arg_tac -> arg_tac (Arg_term (`i < n0:num`))) (disch_eq_tac "i_n0" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
396 (((repeat_tactic 1 9 (((use_arg_then2 ("nth_cat", [nth_cat]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_n0", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("COND_CLAUSES", [COND_CLAUSES]))(thm_tac (new_rewrite [] [])))))) THEN (move ["eq"]));
397 ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))));
398 ((((use_arg_then2 ("i_n0", [])) (disch_tac [])) THEN (clear_assumption "i_n0") THEN BETA_TAC) THEN ((((use_arg_then2 ("n0_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("mem_nth", [mem_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC))))));
399 (((((use_arg_then2 ("l0_def", []))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (done_tac));
400 ((repeat_tactic 1 9 (((use_arg_then2 ("nth_cat", [nth_cat]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_n0", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("COND_CLAUSES", [COND_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("nth_nseq", [nth_nseq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ltn_sub2r", [ltn_sub2r]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
401 ((((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN ((use_arg_then2 ("i_n0", [])) (disch_tac [])) THEN (clear_assumption "i_n0") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
402 (((((use_arg_then2 ("m_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["eq"]));
403 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("mem_nth", [mem_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`i - n0:num`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`filter (predC a) l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("count_filter", [count_filter]))(gsym_then (thm_tac (new_rewrite [] []))))));
404 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("count_predC", [count_predC])) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("l", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("count_filter", [count_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("l0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))));
405 (((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `!x. n0 <= n:num ==> (n0 + x = n <=> x = n - n0)`)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
406 ((THENL_FIRST) ((((use_arg_then2 ("ltn_sub2r", [ltn_sub2r]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) ((((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN ((use_arg_then2 ("i_n0", [])) (disch_tac [])) THEN (clear_assumption "i_n0") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
407 (((((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (done_tac));
408 (((use_arg_then2 ("k", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
409 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`k < n0:num`))) (term_tac (have_gen_tac [](move ["k_lt_n0"])))));
410 (((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("EL_take", [EL_take])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("st_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EL_take", [EL_take]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("el_k_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_lt"]));
411 (((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("EL_take", [EL_take])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("EL_take", [EL_take])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("st_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("EL_take", [EL_take]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))))) THEN (TRY (((((use_arg_then2 ("k_lt", [])) (disch_tac [])) THEN (clear_assumption "k_lt") THEN ((use_arg_then2 ("k_lt_n0", [])) (disch_tac [])) THEN (clear_assumption "k_lt_n0") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac)))));
412 ((((use_arg_then2 ("el_eq", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
413 ((((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (move ["n0_le_k"])));
414 ((fun arg_tac -> arg_tac (Arg_term (`count (predC a) s' <= n - n0`))) (term_tac (have_gen_tac []ALL_TAC)));
415 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("cat_take_drop", [cat_take_drop])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("count_cat", [count_cat]))(thm_tac (new_rewrite [] [])))));
416 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`count (predC a) (take n0 s') = 0`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))));
417 ((((use_arg_then2 ("add0n", [add0n]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq_trans", [leq_trans])) (disch_tac [])) THEN (clear_assumption "leq_trans") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`sizel (dropl n0 s')`))) (term_tac exists_tac)));
418 (((((use_arg_then2 ("count_size", [count_size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_drop", [size_drop]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leqnn", [leqnn]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
419 (((((use_arg_then2 ("count0", [count0]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("ETA_AX", [ETA_AX]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("all_EL_P", [all_EL_P]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_takel", [size_takel]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["i"]) THEN (move ["i_lt"]));
420 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < n:num /\ i < k`))) (term_tac (have_gen_tac [](move ["i_lt2"])))) ((((use_arg_then2 ("n0_le_k", [])) (disch_tac [])) THEN (clear_assumption "n0_le_k") THEN ((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
421 ((((use_arg_then2 ("EL_take", [EL_take]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("el_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("EL_take", [EL_take])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("st_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EL_take", [EL_take]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
422 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`EL i s <- filter a s`))) (term_tac (have_gen_tac []ALL_TAC)))) (((((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
423 (((((use_arg_then2 ("take_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("EL_take", [EL_take])) (fun fst_arg -> (use_arg_then2 ("n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_takel", [size_takel]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
424 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`count (predC a) l' >= (n - n0) + 1`))) (term_tac (have_gen_tac []ALL_TAC))));
425 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("iffLR", [iffLR])) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("perm_eqP", [perm_eqP])) (fun fst_arg -> (use_arg_then2 ("s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("l'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("perm_s'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
426 ((((use_arg_then2 ("REAL_OF_NUM_GE", [REAL_OF_NUM_GE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("count_eq_list_sum_iota", [count_eq_list_sum_iota])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
427 (((fun arg_tac -> (use_arg_then2 ("permutes_imp_perm_eq_iota", [permutes_imp_perm_eq_iota])) (fun fst_arg -> (use_arg_then2 ("p_perm", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
428 ((THENL_FIRST) ((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `0 < n ==> n - 1 + 1 = n`)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] [])))))) ((((use_arg_then2 ("k_lt", [])) (disch_tac [])) THEN (clear_assumption "k_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
429 ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("list_sum_perm_eq", [list_sum_perm_eq])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))));
430 ((((fun arg_tac -> (use_arg_then2 ("list_sum_nth", [list_sum_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("subnKC", [subnKC])) (fun fst_arg -> (use_arg_then2 ("n0_le", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("iota_add", [iota_add]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("list_sum_cat", [list_sum_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("add0n", [add0n]))(thm_tac (new_rewrite [] [])))));
431 (((fun arg_tac -> arg_tac (Arg_term (`list_sum _1 _2`))) (term_tac (set_tac "s1"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`list_sum _1 _2`))) (term_tac (set_tac "s2"))));
432 ((fun arg_tac -> arg_tac (Arg_term (`sizel (filter (predC a) l) = n - n0`))) (term_tac (have_gen_tac [](move ["C_size"]))));
433 ((((use_arg_then2 ("count_filter", [count_filter]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("count_predC", [count_predC])) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("l", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC));
434 (((((use_arg_then2 ("count_filter", [count_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("l0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
435 ((fun arg_tac -> arg_tac (Arg_term (`s2 = &(n - n0)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
436 ((((use_arg_then2 ("C_size", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("count_predT", [count_predT]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("count_eq_list_sum_iota", [count_eq_list_sum_iota])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("C_size", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("predT", [predT]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("s2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))));
437 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("list_sum_nth_eq", [list_sum_nth_eq])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac apply_tac));
438 (((repeat_tactic 1 9 (((use_arg_then2 ("size_iota", [size_iota]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
439 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`n0 + i < n:num`))) (term_tac (have_gen_tac [](move ["n0i"])))) ((((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
440 ((((use_arg_then2 ("nth_iota", [nth_iota]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
441 ((((fun arg_tac -> (use_arg_then2 ("nth_eq", [])) (fun fst_arg -> (use_arg_then2 ("n0i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("nth_cat", [nth_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `~(n0 + i < n0:num)`)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("addKn", [addKn]))(thm_tac (new_rewrite [] []))))) THEN (move ["eq"])));
442 (((fun arg_tac -> (use_arg_then2 ("el_gt", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`p (n0 + i:num)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
443 (((((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sizes", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
444 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("mem_nth", [mem_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`filter (predC a) l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("C_size", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
445 ((((((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("p_lt", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
446 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`s1 >= &1`))) (term_tac (have_gen_tac []ALL_TAC))));
447 (((((use_arg_then2 ("REAL_OF_NUM_ADD", [REAL_OF_NUM_ADD]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("REAL_OF_NUM_SUB", [REAL_OF_NUM_SUB])) (fun fst_arg -> (use_arg_then2 ("n0_le", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (arith_tac) THEN (done_tac));
448 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`?i:num. p i = r /\ i < n0`))) (term_tac (have_gen_tac []ALL_TAC))));
449 (BETA_TAC THEN (case THEN (move ["i"])) THEN (case THEN ((move ["pi_eq"]) THEN (move ["i_lt"]))));
450 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("count_uniq_mem", [count_uniq_mem])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`iota 0 n0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("iota_uniq", [iota_uniq]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("mem_iota", [mem_iota]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("add0n", [add0n]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
451 ((BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((((fun arg_tac -> (use_arg_then2 ("count_eq_list_sum_iota", [count_eq_list_sum_iota])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_iota", [size_iota]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_ge", [real_ge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s1_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))));
452 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("list_sum_nth_le2", [list_sum_nth_le2])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac apply_tac)) THEN (((((use_arg_then2 ("size_iota", [size_iota]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["j"]) THEN (move ["j_lt"])));
453 ((repeat_tactic 1 9 (((use_arg_then2 ("nth_iota", [nth_iota]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("add0n", [add0n]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("pred1", [pred1]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
454 ((THENL_LAST) (((fun arg_tac -> arg_tac (Arg_term (`j = i`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((arith_tac) THEN (done_tac)));
455 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < n:num`))) (term_tac (have_gen_tac [](move ["i_lt_n"])))) ((((use_arg_then2 ("n0_le", [])) (disch_tac [])) THEN (clear_assumption "n0_le") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
456 (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("nth_mkseq", [nth_mkseq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("pi_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("el_r_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
457 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PERMUTES_SURJECTIVE", [PERMUTES_SURJECTIVE])) (fun fst_arg -> (use_arg_then2 ("p_perm", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("r", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["i"])) THEN (move ["pi_eq"]));
458 (((use_arg_then2 ("i", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("pi_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (move ["n0_le_i"])));
459 ((fun arg_tac -> arg_tac (Arg_term (`i < n:num`))) (term_tac (have_gen_tac [](move ["i_lt"]))));
460 (((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac) THEN (move ["not_lt"]));
461 ((((use_arg_then2 ("p_perm", [])) (disch_tac [])) THEN (clear_assumption "p_perm") THEN BETA_TAC) THEN ((((use_arg_then2 ("permutes", [permutes]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)))));
462 ((THENL_FIRST) (((((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("NOT_LE", [NOT_LE]))(thm_tac (new_rewrite [] []))))) THEN (ANTS_TAC)) ((((use_arg_then2 ("r_lt", [])) (disch_tac [])) THEN (clear_assumption "r_lt") THEN ((use_arg_then2 ("not_lt", [])) (disch_tac [])) THEN (clear_assumption "not_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
463 (((((use_arg_then2 ("pi_eq", []))(thm_tac (new_rewrite [] [])))) THEN (move ["eq"])) THEN (((use_arg_then2 ("not_lt", [])) (disch_tac [])) THEN (clear_assumption "not_lt") THEN BETA_TAC) THEN ((((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("r_lt", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
464 ((((fun arg_tac -> (use_arg_then2 ("nth_eq", [])) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("pi_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("u_def", []))(thm_tac (new_rewrite [] []))))));
465 ((((use_arg_then2 ("nth_cat", [nth_cat]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n0_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_LE", [NOT_LE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n0_le_i", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
466 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("mem_nth", [mem_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`filter (predC a) l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`i - n0:num`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC));
467 ((((use_arg_then2 ("C_size", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN ((use_arg_then2 ("n0_le_i", [])) (disch_tac [])) THEN (clear_assumption "n0_le_i") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
468 (((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))));
469 (((((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
472 (* Finalization of the section MoreSortedReal *)
473 let real_sorted_lt2 = Sections.finalize_theorem real_sorted_lt2;;
474 Sections.end_section "MoreSortedReal";;
476 (* Section SomeResults *)
477 Sections.begin_section "SomeResults";;
479 (* Lemma packing_empty *)
480 let packing_empty = Sections.section_proof []
483 (((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Sphere.packing_lt)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
486 (* Lemma in_ball_annulus *)
487 let in_ball_annulus = Sections.section_proof ["v"]
488 `v IN ball_annulus <=> &2 <= norm v /\ norm v <= &2 * h0`
490 ((((use_arg_then2 ("Pack_defs.ball_annulus", [Pack_defs.ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_CBALL", [IN_CBALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_BALL", [IN_BALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))));
491 (((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL VECTOR_SUB_RZERO)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CONJ_SYM", [CONJ_SYM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
494 (* Lemma closed_ball_annulus *)
495 let closed_ball_annulus = Sections.section_proof []
496 `closed ball_annulus`
498 (((((use_arg_then2 ("Pack_defs.ball_annulus", [Pack_defs.ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CLOSED_DIFF", [CLOSED_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("OPEN_BALL", [OPEN_BALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CLOSED_CBALL", [CLOSED_CBALL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
501 (* Lemma finite_packing_ball_annulus *)
502 let finite_packing_ball_annulus = Sections.section_proof ["V"]
503 `packing V /\ V SUBSET ball_annulus ==> FINITE V`
505 (BETA_TAC THEN (case THEN ((move ["pack"]) THEN (move ["subV"]))));
506 ((fun arg_tac -> arg_tac (Arg_term (`?r. V SUBSET ball(vec 0, r)`))) (term_tac (have_gen_tac [](case THEN (move ["r"])))));
507 (((fun arg_tac -> arg_tac (Arg_term (`&5`))) (term_tac exists_tac)) THEN (((use_arg_then2 ("subV", [])) (disch_tac [])) THEN (clear_assumption "subV") THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Pack_defs.ball_annulus", [Pack_defs.ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_CBALL", [IN_CBALL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_BALL", [IN_BALL]))(thm_tac (new_rewrite [] [])))))));
508 ((BETA_TAC THEN (move ["h"]) THEN (move ["x"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("h", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (((use_arg_then2 ("Pack_defs.h0", [Pack_defs.h0]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
509 ((((use_arg_then2 ("SUBSET_INTER_ABSORPTION", [SUBSET_INTER_ABSORPTION]))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))));
510 (((use_arg_then2 ("Packing3.KIUMVTC", [Packing3.KIUMVTC])) (disch_tac [])) THEN (clear_assumption "Packing3.KIUMVTC") THEN (exact_tac));
513 (* Lemma ECTC_sub_ESTD *)
514 let ECTC_sub_ESTD = Sections.section_proof ["V"]
515 `ECTC V SUBSET ESTD V`
517 (((((use_arg_then2 ("ECTC", [ECTC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ESTD", [ESTD]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["x"]) THEN (case THEN (move ["v"])) THEN (case THEN (move ["w"])) THEN (case THEN (move ["h"])) THEN (move ["x_eq"]));
518 ((((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("w", [])) (term_tac exists_tac))) THEN ((((use_arg_then2 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (arith_tac) THEN (done_tac));
521 (* Lemma in_set_of_edge_ECTC *)
522 let in_set_of_edge_ECTC = Sections.section_proof ["V";"v"]
523 `v IN V ==> (!u. u IN set_of_edge v V (ECTC V) <=> u IN V /\ dist (u, v) = &2)`
525 (((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ECTC", [ECTC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["vV"]) THEN (move ["u"]));
526 ((THENL_ROT (-1)) (((THENL) (split_tac) [((case THEN ALL_TAC) THEN (case THEN (move ["x"])) THEN (case THEN (move ["y"])) THEN (case THEN (move ["h"])) THEN (move ["eq"]) THEN (move ["uV"])); (case THEN ((move ["uV"]) THEN (move ["d_eq"])))]) THEN ((((use_arg_then2 ("uV", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac ->(use_arg_then2 ("andTb", [andTb]))(fun tmp_arg1 -> (use_arg_then2 ("andbT", [andbT]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] [])))))));
527 ((THENL_LAST) ((((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("u", [])) (term_tac exists_tac))) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac)))))) ((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
528 ((((use_arg_then2 ("d_eq", [])) (disch_tac [])) THEN (clear_assumption "d_eq") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
529 (in_tac ["eq"] false (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PAIR_EQ_EXPAND)))(thm_tac (new_rewrite [] [])))));
530 ((((use_arg_then2 ("eq", [])) (disch_tac [])) THEN (clear_assumption "eq") THEN BETA_TAC THEN (case THEN ALL_TAC) THEN (case THEN ((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
533 (* Lemma vector_eq_neg *)
534 let vector_eq_neg = Sections.section_proof ["v"]
535 `(v:real^N = --v) <=> (v = vec 0)`
540 (* Lemma bij_scriptL *)
541 let bij_scriptL = Sections.section_proof ["f";"V";"W"]
542 `BIJ f V W /\ (!v. v IN V ==> norm v = norm (f v)) ==>
543 scriptL W = scriptL V`
545 (((((use_arg_then2 ("BIJ", [BIJ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("INJ", [INJ]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (case THEN ((case THEN ((move ["_"]) THEN (move ["inj_f"]))) THEN (move ["surj_f"])))) THEN (move ["norm_eq"]));
546 ((repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.scriptL", [Tame_defs.scriptL]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("Hypermap_iso.surj_image", [Hypermap_iso.surj_image])) (fun fst_arg -> (use_arg_then2 ("surj_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_IMAGE", [SUM_IMAGE]))(thm_tac (new_rewrite [] [])))));
547 ((BETA_TAC THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN (move ["x_in"])) THEN (case THEN (move ["y_in"])) THEN (move ["f_eq"])) THEN (((use_arg_then2 ("inj_f", [])) (disch_tac [])) THEN (clear_assumption "inj_f") THEN (DISCH_THEN apply_tac)) THEN (done_tac));
548 ((((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN (move ["v"]) THEN (move ["v_in"]) THEN (simp_tac)) THEN ((((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("norm_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
551 (* Lemma lmfun_ge0 *)
552 let lmfun_ge0 = Sections.section_proof ["h"]
555 (((((use_arg_then2 ("Sphere.lmfun", [Sphere.lmfun]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
558 (* Lemma lmfun_in_ball_annulus *)
559 let lmfun_in_ball_annulus = Sections.section_proof ["v"]
560 `v IN ball_annulus ==> lmfun (norm v / &2) <= &1`
562 (((((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.lmfun", [Sphere.lmfun]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
565 (* Lemma scriptL_le_card *)
566 let scriptL_le_card = Sections.section_proof ["V"]
567 `packing V /\ V SUBSET ball_annulus ==> scriptL V <= &(CARD V)`
569 ((BETA_TAC THEN (case THEN ((move ["packV"]) THEN (move ["subV"])))) THEN (((fun arg_tac -> (use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&(CARD V)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))));
570 (((((use_arg_then2 ("Tame_defs.scriptL", [Tame_defs.scriptL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUM_BOUND", [SUM_BOUND]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["v"]) THEN (move ["vV"]) THEN (simp_tac));
571 ((((use_arg_then2 ("lmfun_in_ball_annulus", [lmfun_in_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("subV", [])) (disch_tac [])) THEN (clear_assumption "subV") THEN BETA_TAC) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN apply_tac) THEN (done_tac));
574 (* Lemma card_counterexample_ge13 *)
575 let card_counterexample_ge13 = Sections.section_proof ["V"]
576 `packing V /\ V SUBSET ball_annulus /\ scriptL V > &12
579 (BETA_TAC THEN (case THEN (move ["packV"])) THEN (case THEN (move ["subV"])));
580 ((((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)) THEN (((((use_arg_then2 ("NOT_LE", [NOT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_gt", [real_gt]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] []))))) THEN (move ["card_lt"])));
581 ((((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`&(CARD V)`))) (term_tac exists_tac)));
582 (((((use_arg_then2 ("scriptL_le_card", [scriptL_le_card]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_OF_NUM_LE", [REAL_OF_NUM_LE]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("card_lt", [])) (disch_tac [])) THEN (clear_assumption "card_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
585 (* Lemma piecewise_real_continuous *)
586 let piecewise_real_continuous = Sections.section_proof ["a";"b";"t";"f1";"f2";"f"]
587 `f1 real_continuous_on (real_interval [a,t]) /\ f2 real_continuous_on (real_interval [t,b]) /\
588 f1 t = f2 t /\ f = (\x. if x <= t then f1 x else f2 x) ==>
589 f real_continuous_on (real_interval [a,b])`
591 (((repeat_tactic 1 9 (((use_arg_then2 ("real_continuous_on", [real_continuous_on]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_REAL_INTERVAL", [IN_REAL_INTERVAL]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["f1_cont"])) THEN (case THEN (move ["f2_cont"])) THEN (case THEN (move ["f12_eq"])) THEN (move ["f_eq"]) THEN (move ["x"]) THEN (move ["e"]) THEN (case THEN ((move ["x_in"]) THEN (move ["e_gt0"]))));
592 ((THENL) (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `x < t \/ t < x \/ x = t`))) (disch_tac [])) THEN case) [(move ["h"]); ALL_TAC]);
593 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f1_cont", [])) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE])) (fun fst_arg -> (use_arg_then2 ("h", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))) THEN ALL_TAC THEN (case THEN (move ["d"])) THEN (case THEN (move ["d_gt0"])) THEN (move ["ineq"])));
594 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`min d (t - x)`))) (term_tac exists_tac)) THEN (split_tac)) ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN ((use_arg_then2 ("d_gt0", [])) (disch_tac [])) THEN (clear_assumption "d_gt0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
595 (BETA_TAC THEN (move ["y"]) THEN (case THEN ((move ["y_ineq"]) THEN (move ["xy_lt"]))));
596 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`y < t`))) (term_tac (have_gen_tac [](move ["y_lt"])))) ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN ((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
597 (((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("ineq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN ((use_arg_then2 ("y_lt", [])) (disch_tac [])) THEN (clear_assumption "y_lt") THEN ((use_arg_then2 ("y_ineq", [])) (disch_tac [])) THEN (clear_assumption "y_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
598 (case THEN (move ["h"]));
599 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f2_cont", [])) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE])) (fun fst_arg -> (use_arg_then2 ("h", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))) THEN ALL_TAC THEN (case THEN (move ["d"])) THEN (case THEN (move ["d_gt0"])) THEN (move ["ineq"])));
600 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`min d (x - t)`))) (term_tac exists_tac)) THEN (split_tac)) ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN ((use_arg_then2 ("d_gt0", [])) (disch_tac [])) THEN (clear_assumption "d_gt0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
601 (BETA_TAC THEN (move ["y"]) THEN (case THEN ((move ["y_ineq"]) THEN (move ["xy_lt"]))));
602 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`t < y`))) (term_tac (have_gen_tac [](move ["y_lt"])))) ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN ((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
603 (((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("y_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("ineq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN ((use_arg_then2 ("y_lt", [])) (disch_tac [])) THEN (clear_assumption "y_lt") THEN ((use_arg_then2 ("y_ineq", [])) (disch_tac [])) THEN (clear_assumption "y_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
604 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f2_cont", [])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("f1_cont", [])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("h", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
605 (BETA_TAC THEN (case THEN (move ["d1"])) THEN (case THEN (move ["d1_gt0"])) THEN (move ["ineq1"]) THEN (case THEN (move ["d2"])) THEN (case THEN (move ["d2_gt0"])) THEN (move ["ineq2"]));
606 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`min d1 d2`))) (term_tac exists_tac)) THEN (split_tac)) ((((use_arg_then2 ("d2_gt0", [])) (disch_tac [])) THEN (clear_assumption "d2_gt0") THEN ((use_arg_then2 ("d1_gt0", [])) (disch_tac [])) THEN (clear_assumption "d1_gt0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
607 (BETA_TAC THEN (move ["y"]) THEN (case THEN ((move ["y_ineq"]) THEN (move ["xy_lt"]))));
608 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("REAL_LET_TOTAL", [REAL_LET_TOTAL])) (fun fst_arg -> (use_arg_then2 ("y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["xy_ineq"]));
609 (((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("h", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("xy_ineq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("ineq1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("xy_ineq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_ineq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
610 ((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("h", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("xy_ineq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f12_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(gsym_then (thm_tac (new_rewrite [] []))))));
611 ((((use_arg_then2 ("ineq2", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("xy_lt", [])) (disch_tac [])) THEN (clear_assumption "xy_lt") THEN ((use_arg_then2 ("y_ineq", [])) (disch_tac [])) THEN (clear_assumption "y_ineq") THEN ((use_arg_then2 ("xy_ineq", [])) (disch_tac [])) THEN (clear_assumption "xy_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
614 (* Lemma piecewise_real_continuous_univ *)
615 let piecewise_real_continuous_univ = Sections.section_proof ["t";"f1";"f2";"f"]
616 `f1 real_continuous_on UNIV /\ f2 real_continuous_on UNIV /\ f1 t = f2 t /\
617 f = (\x. if x <= t then f1 x else f2 x) ==>
618 f real_continuous_on UNIV`
620 (BETA_TAC THEN (case THEN (move ["f1_cont"])) THEN (case THEN (move ["f2_con"])) THEN (case THEN (move ["f12_eq"])) THEN (move ["f_eq"]));
621 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!a b. f real_continuous_on real_interval (a,b)`))) (term_tac (have_gen_tac [](move ["cont_int"])))));
622 (((((use_arg_then2 ("REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT", [REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_OPEN_UNIV", [REAL_OPEN_UNIV]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["x"]) THEN (move ["_"]));
623 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("cont_int", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`x - &1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`x + &1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
624 (((((use_arg_then2 ("REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT", [REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_OPEN_REAL_INTERVAL", [REAL_OPEN_REAL_INTERVAL]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (DISCH_THEN apply_tac));
625 ((((use_arg_then2 ("IN_REAL_INTERVAL", [IN_REAL_INTERVAL]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
626 ((BETA_TAC THEN (move ["a"]) THEN (move ["b"])) THEN (((use_arg_then2 ("REAL_CONTINUOUS_ON_SUBSET", [REAL_CONTINUOUS_ON_SUBSET])) (disch_tac [])) THEN (clear_assumption "REAL_CONTINUOUS_ON_SUBSET") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`real_interval [a,b]`))) (term_tac exists_tac)));
627 ((((use_arg_then2 ("REAL_INTERVAL_OPEN_SUBSET_CLOSED", [REAL_INTERVAL_OPEN_SUBSET_CLOSED]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("piecewise_real_continuous", [piecewise_real_continuous])) (fun fst_arg -> (use_arg_then2 ("f_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f12_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
628 ((split_tac) THEN ((((fun arg_tac -> (use_arg_then2 ("REAL_CONTINUOUS_ON_SUBSET", [REAL_CONTINUOUS_ON_SUBSET])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`(:real)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET_UNIV", [SUBSET_UNIV]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
631 (* Lemma lmfun_continuous *)
632 let lmfun_continuous = Sections.section_proof []
633 `lmfun real_continuous_on UNIV`
635 ((fun arg_tac -> arg_tac (Arg_term (`lmfun = (\x. if x <= h0 then (h0 - x) / (h0 - &1) else &0)`))) (term_tac (have_gen_tac [](move ["eq"]))));
636 (((((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Sphere.lmfun", [Sphere.lmfun]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
637 ((THENL_ROT (1)) ((((fun arg_tac -> (use_arg_then2 ("piecewise_real_continuous_univ", [piecewise_real_continuous_univ])) (fun fst_arg -> (use_arg_then2 ("eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (split_tac)));
638 ((((use_arg_then2 ("REAL_CONTINUOUS_ON_CONST", [REAL_CONTINUOUS_ON_CONST]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
639 ((((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_CONTINUOUS_ON_RMUL", [REAL_CONTINUOUS_ON_RMUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_CONTINUOUS_ON_SUB", [REAL_CONTINUOUS_ON_SUB]))(thm_tac (new_rewrite [] [])))));
640 (((((use_arg_then2 ("REAL_CONTINUOUS_ON_ID", [REAL_CONTINUOUS_ON_ID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_CONTINUOUS_ON_CONST", [REAL_CONTINUOUS_ON_CONST]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
643 (* Lemma lmfun_norm2_continuous *)
644 let lmfun_norm2_continuous = Sections.section_proof []
645 `lift o (\v:real^N. lmfun (norm v / &2)) continuous_on UNIV`
647 ((((use_arg_then2 ("CONTINUOUS_AT_IMP_CONTINUOUS_ON", [CONTINUOUS_AT_IMP_CONTINUOUS_ON]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"]) THEN (move ["_"]));
648 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REAL_CONTINUOUS_CONTINUOUS1)))(gsym_then (thm_tac (new_rewrite [] [])))));
649 ((fun arg_tac -> arg_tac (Arg_term (`(\v. lmfun (norm v / &2)) = lmfun o (\v:real^N. norm v / &2)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
650 (((((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
651 ((((use_arg_then2 ("REAL_CONTINUOUS_AT_COMPOSE", [REAL_CONTINUOUS_AT_COMPOSE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_CONTINUOUS_RMUL", [REAL_CONTINUOUS_RMUL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_CONTINUOUS_NORM_AT", [REAL_CONTINUOUS_NORM_AT]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
652 (((use_arg_then2 ("REAL_CONTINUOUS_ATREAL_WITHINREAL", [REAL_CONTINUOUS_ATREAL_WITHINREAL]))(thm_tac (new_rewrite [] []))));
653 ((((use_arg_then2 ("lmfun_continuous", [lmfun_continuous])) (disch_tac [])) THEN (clear_assumption "lmfun_continuous") THEN BETA_TAC) THEN ((((use_arg_then2 ("REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT", [REAL_CONTINUOUS_ON_EQ_REAL_CONTINUOUS_AT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_OPEN_UNIV", [REAL_OPEN_UNIV]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))));
654 ((DISCH_THEN apply_tac) THEN (((use_arg_then2 ("IN_UNIV", [IN_UNIV]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
657 (* Lemma simple_card_inequality *)
658 let simple_card_inequality = Sections.section_proof ["r";"s";"t"]
660 pairwise DISJOINT t /\ &0 < r /\
661 (!x. x IN t ==> measurable x /\ r <= measure x /\ x SUBSET s) ==>
662 FINITE t /\ &(CARD t) <= floor (measure s / r)`
664 (BETA_TAC THEN (case THEN (move ["vol_s"])) THEN (case THEN (move ["disjoint"])) THEN (case THEN (move ["r_gt0"])) THEN (move ["in_t"]));
665 ((fun arg_tac -> arg_tac (Arg_term (`!b. b SUBSET t /\ FINITE b ==> r * &(CARD b) <= measure (UNIONS b)`))) (term_tac (have_gen_tac [](move ["ineq"]))));
666 ((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (move ["b"]) THEN (case THEN ((move ["b_sub"]) THEN (move ["fin_b"]))));
667 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("HAS_MEASURE_DISJOINT_UNIONS", [HAS_MEASURE_DISJOINT_UNIONS])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\x. measure x`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin_b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
668 ((repeat_tactic 1 9 (((use_arg_then2 ("HAS_MEASURE_MEASURABLE_MEASURE", [HAS_MEASURE_MEASURABLE_MEASURE]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
669 ((THENL_FIRST) ((THENL) (split_tac) [((move ["y"]) THEN (move ["yb"])); ((move ["x"]) THEN (move ["y"]) THEN (move ["in_b"]))]) (((((use_arg_then2 ("in_t", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("b_sub", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
670 ((((use_arg_then2 ("disjoint", [])) (disch_tac [])) THEN (clear_assumption "disjoint") THEN BETA_TAC) THEN (((use_arg_then2 ("pairwise", [pairwise]))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN apply_tac) THEN ((((use_arg_then2 ("in_b", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("b_sub", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
671 (((((use_arg_then2 ("CARD_EQ_SUM", [CARD_EQ_SUM]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("SUM_LMUL", [SUM_LMUL]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_LE", [SUM_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fin_b", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("b_sub", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["xt"]) THEN (simp_tac));
672 (((((use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_t", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
673 ((fun arg_tac -> arg_tac (Arg_term (`!b. b SUBSET t /\ FINITE b ==> measure (UNIONS b) <= measure s`))) (term_tac (have_gen_tac [](move ["ineq2"]))));
674 ((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (move ["b"]) THEN (case THEN ((move ["b_sub"]) THEN (move ["fin_b"]))));
675 ((((use_arg_then2 ("MEASURE_SUBSET", [MEASURE_SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vol_s", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEASURABLE_UNIONS", [MEASURABLE_UNIONS]))(thm_tac (new_rewrite [] [])))));
676 ((((((use_arg_then2 ("fin_b", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("b_sub", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["xt"])) THEN (((use_arg_then2 ("in_t", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
677 ((((((use_arg_then2 ("UNIONS_SUBSET", [UNIONS_SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("b_sub", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["xt"])) THEN (((use_arg_then2 ("in_t", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
678 ((fun arg_tac -> arg_tac (Arg_term (`FINITE t`))) (term_tac (have_gen_tac [](move ["fin_t"]))));
679 (((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac) THEN (move ["inf_t"]));
680 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("REAL_ARCH", [REAL_ARCH])) (fun fst_arg -> (use_arg_then2 ("r_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`measure s`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["n"])) THEN (move ["ineq3"]));
681 ((THENL_FIRST) ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("CHOOSE_SUBSET_STRONG", [CHOOSE_SUBSET_STRONG])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("inf_t", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("HAS_SIZE", [HAS_SIZE]))(thm_tac (new_rewrite [] []))))) THEN (ANTS_TAC)) ((ALL_TAC) THEN (done_tac)));
682 (BETA_TAC THEN (case THEN (move ["b"])) THEN (case THEN (move ["b_sub"])) THEN (case THEN ((move ["fin_b"]) THEN (move ["card_b"]))));
683 (((use_arg_then2 ("ineq3", [])) (disch_tac [])) THEN (clear_assumption "ineq3") THEN ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ineq2", [])) (fun fst_arg -> (use_arg_then2 ("b_sub", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin_b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ineq", [])) (fun fst_arg -> (use_arg_then2 ("b_sub", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin_b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
684 ((((use_arg_then2 ("card_b", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
685 ((((use_arg_then2 ("fin_t", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
686 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ineq2", [])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin_t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ineq", [])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin_t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
687 ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (move ["h"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("h", [])) (thm_tac (match_mp_then snd_th MP_TAC)))));
688 ((((((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_RDIV_EQ", [REAL_LE_RDIV_EQ]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("FLOOR_MONO", [FLOOR_MONO])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (((use_arg_then2 ("FLOOR_NUM", [FLOOR_NUM]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
691 (* Lemma card_packing_ball_annulus *)
692 let card_packing_ball_annulus = Sections.section_proof ["V"]
693 `packing V /\ V SUBSET ball_annulus ==> CARD V <= 43`
695 (BETA_TAC THEN (case THEN ((move ["pack"]) THEN (move ["subV"]))));
696 ((fun arg_tac -> arg_tac (Arg_term (`IMAGE (\v. ball (v, &1)) V`))) (term_tac (set_tac "t")));
697 (((fun arg_tac -> (use_arg_then2 ("CARD_IMAGE_INJ", [CARD_IMAGE_INJ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\v. ball (v,&1)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))));
698 (((((use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN (move ["xV"])) THEN (case THEN (move ["yV"])) THEN (simp_tac) THEN (move ["ball_eq"]));
699 ((in_tac ["pack"] false (((use_arg_then2 ("Sphere.packing_lt", [Sphere.packing_lt]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("pack", [])) (disch_tac [])) THEN (clear_assumption "pack") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("yV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("xV", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))));
700 ((((fun arg_tac -> (use_arg_then2 ("ball_eq", [])) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("CENTRE_IN_BALL", [CENTRE_IN_BALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("IN_BALL", [IN_BALL]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
701 (((use_arg_then2 ("REAL_OF_NUM_LE", [REAL_OF_NUM_LE]))(gsym_then (thm_tac (new_rewrite [] [])))));
702 ((fun arg_tac -> arg_tac (Arg_term (`&43 = floor (measure (ball (vec 0:real^3, #3.52)) / measure (ball (vec 0:real^3, &1)))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
703 ((repeat_tactic 1 9 (((use_arg_then2 ("VOLUME_BALL", [VOLUME_BALL]))(thm_tac (new_rewrite [] []))))) THEN (TRY ((arith_tac))));
704 ((repeat_tactic 1 9 (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(thm_tac (new_rewrite [] []))))) THEN ((fun arg_tac -> arg_tac (Arg_term (`_ * pi`))) (term_tac (set_tac "a"))));
705 ((((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_INV_MUL", [REAL_INV_MUL]))(thm_tac (new_rewrite [] [])))));
706 (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `!x y. (a * x) * inv a * y = (a * inv a) * x * y`)))(thm_tac (new_rewrite [] []))));
707 ((THENL_FIRST) (((use_arg_then2 ("REAL_MUL_RINV", [REAL_MUL_RINV]))(thm_tac (new_rewrite [] [])))) ((((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("PI_POS", [PI_POS])) (disch_tac [])) THEN (clear_assumption "PI_POS") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
708 (((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FLOOR_UNIQUE", [FLOOR_UNIQUE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("INTEGER_CLOSED", [INTEGER_CLOSED]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
709 (((((use_arg_then2 ("simple_card_inequality", [simple_card_inequality]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEASURABLE_BALL", [MEASURABLE_BALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
710 (((((use_arg_then2 ("pairwise", [pairwise]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("DISJOINT", [DISJOINT]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN ALL_TAC) THEN (case THEN (move ["u"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["uV"]) THEN (case THEN ALL_TAC) THEN (case THEN (move ["v"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["vV"]));
711 ((((use_arg_then2 ("contraR", [contraR])) (disch_tac [])) THEN (clear_assumption "contraR") THEN (DISCH_THEN apply_tac)) THEN (((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INTER", [IN_INTER]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_BALL", [IN_BALL]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (case THEN ((move ["du"]) THEN (move ["dv"])))));
712 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`u = v`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
713 ((in_tac ["pack"] false (((use_arg_then2 ("Sphere.packing_lt", [Sphere.packing_lt]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("pack", [])) (disch_tac [])) THEN (clear_assumption "pack") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("uV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vV", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))));
714 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (use_arg_then2 ("u", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dv", [])) (disch_tac [])) THEN (clear_assumption "dv") THEN ((use_arg_then2 ("du", [])) (disch_tac [])) THEN (clear_assumption "du") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
715 ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("VOLUME_BALL", [VOLUME_BALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PI_POS", [PI_POS])) (disch_tac [])) THEN (clear_assumption "PI_POS") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
716 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["x"]) THEN (case THEN (move ["v"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["vV"]));
717 (((((use_arg_then2 ("MEASURABLE_BALL", [MEASURABLE_BALL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("VOLUME_BALL", [VOLUME_BALL]))(thm_tac (new_rewrite [] [])))))) THEN (TRY ((arith_tac))));
718 (((((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_BALL", [IN_BALL]))(thm_tac (new_rewrite [] [])))))) THEN (move ["x"]));
719 (in_tac ["subV"] false ((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Pack_defs.ball_annulus", [Pack_defs.ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_CBALL", [IN_CBALL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))));
720 ((((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
723 (* Lemma SIN_NEG_PI_2PI *)
724 let SIN_NEG_PI_2PI = Sections.section_proof ["x"]
725 `pi <= x /\ x <= &2 * pi ==> sin x <= &0`
727 (BETA_TAC THEN (move ["x_ineq"]));
728 ((((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `x = (x - pi) + pi`)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SIN_PERIODIC_PI", [SIN_PERIODIC_PI]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NEG_LE0", [REAL_NEG_LE0]))(thm_tac (new_rewrite [] [])))));
729 ((((use_arg_then2 ("SIN_POS_PI_LE", [SIN_POS_PI_LE])) (disch_tac [])) THEN (clear_assumption "SIN_POS_PI_LE") THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("x_ineq", [])) (disch_tac [])) THEN (clear_assumption "x_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
732 (* Lemma not_surrounded_imp_on_one_side_of_plane *)
733 let not_surrounded_imp_on_one_side_of_plane = Sections.section_proof ["V";"E";"v"]
734 `FAN (vec 0,V,E) ==> v IN V ==> ~(set_of_edge v V E = {}) ==> ~(surrounded_node (V,E) v) ==>
735 ?n. ~(n = vec 0) /\ v dot n = &0 /\ (!w. w IN set_of_edge v V E ==> w dot n <= &0)`
737 ((((use_arg_then2 ("surrounded_node", [surrounded_node]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] [])))));
738 ((BETA_TAC THEN (move ["fan"]) THEN (move ["vV"]) THEN (move ["not_isolated"]) THEN (case THEN ALL_TAC) THEN (case THEN ((move ["v1"]) THEN (move ["w"]))) THEN (simp_tac) THEN (case THEN ((case THEN (move ["in_vw"])) THEN (move ["v1_eq"]) THEN (move ["ge_pi"])))) THEN (in_tac ["ge_pi"; "in_vw"] false (((use_arg_then2 ("v1_eq", []))(thm_tac (new_rewrite [] []))))));
739 ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["in1_vw"]))));
740 ((((use_arg_then2 ("in_vw", [])) (disch_tac [])) THEN (clear_assumption "in_vw") THEN BETA_TAC) THEN ((((use_arg_then2 ("dart1_of_fan", [dart1_of_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart_of_fan", [dart_of_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_PAIR_THM", [IN_ELIM_PAIR_THM]))(thm_tac (new_rewrite [] []))))) THEN (case THEN ((TRY done_tac))));
741 ((((((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ALL_TAC THEN (case THEN (move ["v'"])) THEN (case THEN (move ["h1"]))) THEN ((((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (move ["eq"])));
742 ((((use_arg_then2 ("h1", [])) (disch_tac [])) THEN (clear_assumption "h1") THEN BETA_TAC) THEN ((((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("not_isolated", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
743 ((fun arg_tac -> arg_tac (Arg_term (`v cross w`))) (term_tac exists_tac));
744 (((((use_arg_then2 ("DOT_CROSS_SELF", [DOT_CROSS_SELF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CROSS_EQ_0", [CROSS_EQ_0]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (split_tac));
745 ((((fun arg_tac -> (use_arg_then2 ("Hypermap_and_fan.DART1_NOT_COLLINEAR", [Hypermap_and_fan.DART1_NOT_COLLINEAR])) (fun fst_arg -> (use_arg_then2 ("fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (done_tac));
746 (BETA_TAC THEN (move ["w2"]) THEN (move ["in_w2"]));
747 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`sin (azim (vec 0) v w w2) <= &0`))) (term_tac (have_gen_tac [](move ["sin_le0"])))));
748 ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Trigonometry.JBDNJJB", [Trigonometry.JBDNJJB])) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
749 ((((use_arg_then2 ("Trigonometry2.re_eqvl", [Trigonometry2.re_eqvl]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["t"])) THEN (case THEN (move ["t_gt0"])));
750 ((DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("f_equal", [f_equal])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`real_mul (inv t)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC);
751 ((THENL_FIRST) ((((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_MUL_LID", [REAL_MUL_LID]))(thm_tac (new_rewrite [] [])))))) ((((use_arg_then2 ("t_gt0", [])) (disch_tac [])) THEN (clear_assumption "t_gt0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
752 ((((use_arg_then2 ("DOT_SYM", [DOT_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))));
753 ((((use_arg_then2 ("REAL_LE_NEG", [REAL_LE_NEG]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_NEG_0", [REAL_NEG_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NEG_RMUL", [REAL_NEG_RMUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_MUL", [REAL_LE_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NEG_GE0", [REAL_NEG_GE0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sin_le0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))));
754 ((((use_arg_then2 ("REAL_LE_INV", [REAL_LE_INV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("t_gt0", [])) (disch_tac [])) THEN (clear_assumption "t_gt0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
755 ((THENL) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`w = w2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [(((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))); (move ["n_ww2"])]);
756 (((((use_arg_then2 ("AZIM_REFL", [AZIM_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SIN_0", [SIN_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
757 ((THENL_LAST) ((((use_arg_then2 ("SIN_NEG_PI_2PI", [SIN_NEG_PI_2PI])) (disch_tac [])) THEN (clear_assumption "SIN_NEG_PI_2PI") THEN (DISCH_THEN apply_tac)) THEN (split_tac)) (((((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("azim", [azim]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
758 ((((fun arg_tac -> (use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (fun fst_arg -> (use_arg_then2 ("ge_pi", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("real_ge", [real_ge]))(gsym_then (thm_tac (new_rewrite [] []))))));
759 (((fun arg_tac -> (use_arg_then2 ("Fatugpd.azim_ge_azim_dart", [Fatugpd.azim_ge_azim_dart])) (fun fst_arg -> (use_arg_then2 ("fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
760 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Hypermap_and_fan.PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ", [Hypermap_and_fan.PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ])) (fun fst_arg -> (use_arg_then2 ("fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("in1_vw", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_ww2", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_w2", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
761 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Hypermap_and_fan.PAIR_IN_DART1_OF_FAN", [Hypermap_and_fan.PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("in1_vw", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
764 (* Lemma perturbation_lemma *)
765 let perturbation_lemma = Sections.section_proof ["d";"S";"v";"n"]
766 `&0 < d /\ ~(n = vec 0) /\ v dot n = &0 /\ (!w. w IN S ==> w dot n <= &0 /\ &0 < w dot v) ==>
767 ?v2. norm v2 = norm v /\ (!w. w IN S ==> dist (v, w) < dist (v2, w)) /\ dist (v, v2) < d`
769 (BETA_TAC THEN (case THEN (move ["d_gt0"])) THEN (case THEN (move ["n_n0"])) THEN (case THEN (move ["vn0"])) THEN (move ["w_dot"]));
770 ((THENL) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`S = {}`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (move ["nS"])]);
771 (((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_gt0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
772 ((fun arg_tac -> arg_tac (Arg_term (`~(v = vec 0)`))) (term_tac (have_gen_tac [](move ["v_n0"]))));
773 ((((use_arg_then2 ("nS", [])) (disch_tac [])) THEN (clear_assumption "nS") THEN BETA_TAC) THEN ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (move ["xS"])));
774 (((fun arg_tac -> (use_arg_then2 ("w_dot", [])) (fun fst_arg -> (use_arg_then2 ("xS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["_"])));
775 ((((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((((use_arg_then2 ("DOT_RZERO", [DOT_RZERO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_REFL", [REAL_LT_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
776 ((fun arg_tac -> arg_tac (Arg_term (`max (&0) (&1 - (d * d) / (&4 * (v dot v)))`))) (term_tac (set_tac "a")));
777 ((fun arg_tac -> arg_tac (Arg_term (`sqrt ((v dot v) * (&1 - a * a) / (n dot n))`))) (term_tac (set_tac "b")));
778 ((fun arg_tac -> arg_tac (Arg_term (`&0 <= a /\ a < &1`))) (term_tac (have_gen_tac [](move ["a_ineq"]))));
779 ((((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MAX_MAX", [REAL_MAX_MAX]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MAX_LT", [REAL_MAX_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
780 (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `!x. &1 - x < &1 <=> &0 < x`)))(thm_tac (new_rewrite [] []))));
781 (((((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_LT_MUL", [REAL_LT_MUL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("d_gt0", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DOT_POS_LT", [DOT_POS_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("v_n0", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
782 ((fun arg_tac -> arg_tac (Arg_term (`a % v + b % n`))) (term_tac exists_tac));
783 ((fun arg_tac -> arg_tac (Arg_term (`&0 <= (v dot v) * (&1 - a * a) / (n dot n)`))) (term_tac (have_gen_tac [](move ["h1"]))));
784 ((((use_arg_then2 ("REAL_LE_MUL", [REAL_LE_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_DIV", [REAL_LE_DIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DOT_POS_LE", [DOT_POS_LE]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `&0 <= &1 - a * a <=> a * a <= &1`)))(thm_tac (new_rewrite [] [])))));
785 (((((use_arg_then2 ("REAL_POW_2", [REAL_POW_2]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ABS_SQUARE_LE_1", [ABS_SQUARE_LE_1]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("a_ineq", [])) (disch_tac [])) THEN (clear_assumption "a_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
786 ((fun arg_tac -> arg_tac (Arg_term (`b * b * (n dot n) = (&1 - a * a) * (v dot v)`))) (term_tac (have_gen_tac [](move ["bn_eq"]))));
787 ((((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_POW_2", [REAL_POW_2]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("b_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SQRT_POW_2", [SQRT_POW_2]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
788 (((((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DOT_EQ_0", [DOT_EQ_0]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
789 ((((use_arg_then2 ("NORM_EQ", [NORM_EQ]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RADD", [DOT_RADD]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LADD", [DOT_LADD]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RMUL", [DOT_RMUL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LMUL", [DOT_LMUL]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("DOT_SYM", [DOT_SYM])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vn0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("bn_eq", []))(thm_tac (new_rewrite [] [])))));
790 ((THENL_FIRST) (split_tac) ((arith_tac) THEN (done_tac)));
791 ((THENL_ROT (-1)) (split_tac));
792 ((((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL NORM_LT_SQUARE)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_gt0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
793 (((fun arg_tac -> arg_tac (Arg_theorem (VECTOR_ARITH `!v n a b. v - (a % v + b % n) = (&1 - a) % v - b % n`)))(thm_tac (new_rewrite [] []))));
794 ((repeat_tactic 1 9 (((use_arg_then2 ("DOT_RSUB", [DOT_RSUB]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LSUB", [DOT_LSUB]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RMUL", [DOT_RMUL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LMUL", [DOT_LMUL]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("DOT_SYM", [DOT_SYM])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vn0", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_MUL_RZERO", [REAL_MUL_RZERO]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("bn_eq", []))(thm_tac (new_rewrite [] [])))));
795 ((((use_arg_then2 ("REAL_SUB_RZERO", [REAL_SUB_RZERO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_SUB_LZERO", [REAL_SUB_LZERO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_LNEG", [REAL_MUL_LNEG]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_SUB_RDISTRIB", [REAL_SUB_RDISTRIB]))(gsym_then (thm_tac (new_rewrite [] []))))));
796 (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `(&1 - a) * (&1 - a) - --(&1 - a * a) = &2 * (&1 - a)`)))(thm_tac (new_rewrite [] []))));
797 ((THENL_FIRST) ((((use_arg_then2 ("REAL_LT_RDIV_EQ", [REAL_LT_RDIV_EQ]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DOT_POS_LT", [DOT_POS_LT]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_RDIV_EQ", [REAL_LT_RDIV_EQ]))(gsym_then (thm_tac (new_rewrite [] [])))))) ((arith_tac) THEN (done_tac)));
798 (((fun arg_tac -> arg_tac (Arg_theorem (REAL_ARITH `!x. &0 < x /\ &1 - x / &4 <= a ==> &1 - a < x / &2`)))(thm_tac (new_rewrite [] []))));
799 ((((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_POW_2", [REAL_POW_2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_LT_SQUARE", [REAL_LT_SQUARE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DOT_POS_LT", [DOT_POS_LT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("v_n0", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_POS_NZ", [REAL_POS_NZ]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
800 (((repeat_tactic 1 9 (((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_INV_MUL", [REAL_INV_MUL]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("real_div", [real_div]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] [(`_ * &4`)])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MAX_MAX", [REAL_MAX_MAX]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
801 (BETA_TAC THEN (move ["w"]) THEN (move ["wS"]));
802 ((repeat_tactic 1 9 (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NORM_LT", [NORM_LT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RSUB", [DOT_RSUB]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LSUB", [DOT_LSUB]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RADD", [DOT_RADD]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LADD", [DOT_LADD]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_RMUL", [DOT_RMUL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DOT_LMUL", [DOT_LMUL]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("DOT_SYM", [DOT_SYM])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vn0", []))(thm_tac (new_rewrite [] [])))));
803 ((repeat_tactic 1 9 (((use_arg_then2 ("REAL_MUL_RZERO", [REAL_MUL_RZERO]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_ADD_RID", [REAL_ADD_RID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ADD_LID", [REAL_ADD_LID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("bn_eq", []))(thm_tac (new_rewrite [] [])))));
804 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`a * a * (v dot v) + (&1 - a * a) * (v dot v) = v dot v`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((arith_tac) THEN (done_tac)));
805 ((repeat_tactic 1 9 (((use_arg_then2 ("real_sub", [real_sub]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_NEG_ADD", [REAL_NEG_ADD]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LT_RADD", [REAL_LT_RADD]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("REAL_LT_LADD", [REAL_LT_LADD]))(thm_tac (new_rewrite [] [])))));
806 ((((fun arg_tac -> (use_arg_then2 ("DOT_SYM", [DOT_SYM])) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("DOT_SYM", [DOT_SYM])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
807 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`!x y. --x + --x < --(a * x) + --(b * y) + --(a * x) + --(b * y) <=> (a - &1) * x < b * --y`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((arith_tac) THEN (done_tac)));
808 ((((use_arg_then2 ("REAL_LTE_TRANS", [REAL_LTE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LTE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`&0`))) (term_tac exists_tac)));
809 ((((use_arg_then2 ("REAL_LE_MUL", [REAL_LE_MUL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_NEG_GE0", [REAL_NEG_GE0]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("w_dot", [])) (fun fst_arg -> (use_arg_then2 ("wS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
810 (((((use_arg_then2 ("b_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SQRT_POS_LE", [SQRT_POS_LE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
811 ((((use_arg_then2 ("REAL_NEG_GT0", [REAL_NEG_GT0]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_NEG_LMUL", [REAL_NEG_LMUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_MUL", [REAL_LT_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("w_dot", [])) (fun fst_arg -> (use_arg_then2 ("wS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))));
812 ((((use_arg_then2 ("a_ineq", [])) (disch_tac [])) THEN (clear_assumption "a_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
815 (* Lemma COMPACT_SUP_SET *)
816 let COMPACT_SUP_SET = Sections.section_proof ["f";"s"]
817 `compact s /\ lift o f continuous_on s
818 ==> compact {x | x IN s /\ (!y. y IN s ==> f y <= f x)}`
820 ((fun arg_tac -> arg_tac (Arg_term (`GSPEC _`))) (term_tac (set_tac "c")));
821 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`c SUBSET s`))) (term_tac (have_gen_tac [](move ["cs"])))) (((((use_arg_then2 ("c_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
822 (((repeat_tactic 1 9 (((use_arg_then2 ("COMPACT_EQ_BOUNDED_CLOSED", [COMPACT_EQ_BOUNDED_CLOSED]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN ALL_TAC) THEN (case THEN ((move ["boundedS"]) THEN (move ["closedS"]))) THEN (move ["f_cont"])) THEN (split_tac));
823 ((((fun arg_tac -> (use_arg_then2 ("BOUNDED_SUBSET", [BOUNDED_SUBSET])) (fun fst_arg -> (use_arg_then2 ("boundedS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (done_tac));
824 (in_tac ["closedS"] true (repeat_tactic 1 9 (((use_arg_then2 ("CLOSED_SEQUENTIAL_LIMITS", [CLOSED_SEQUENTIAL_LIMITS]))(thm_tac (new_rewrite [] []))))));
825 ((BETA_TAC THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN ((move ["x_in_c"]) THEN (move ["x_to_y"])))) THEN ((((use_arg_then2 ("c_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))));
826 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`!n. x n IN s`))) (term_tac (have_gen_tac [](move ["x_in_s"])))) ((BETA_TAC THEN (move ["n"])) THEN (((use_arg_then2 ("cs", [])) (disch_tac [])) THEN (clear_assumption "cs") THEN BETA_TAC) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN apply_tac) THEN (done_tac)));
827 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`y IN s`))) (term_tac (have_gen_tac [](move ["ys"])))) ((((fun arg_tac -> (use_arg_then2 ("closedS", [])) (fun fst_arg -> (use_arg_then2 ("x_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (done_tac)));
828 (((((use_arg_then2 ("ys", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["a"]) THEN (move ["as"]));
829 ((((use_arg_then2 ("f_cont", [])) (disch_tac [])) THEN (clear_assumption "f_cont") THEN BETA_TAC) THEN ((((use_arg_then2 ("CONTINUOUS_ON_SEQUENTIALLY", [CONTINUOUS_ON_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("x_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ys", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x_in_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC))));
830 (((((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_ASSOC", [o_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL TENDSTO_REAL)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["lim"]));
831 (((fun arg_tac -> (use_arg_then2 ("REALLIM_LBOUND", [REALLIM_LBOUND])) (fun fst_arg -> (use_arg_then2 ("lim", [lim])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
832 (((((use_arg_then2 ("TRIVIAL_LIMIT_SEQUENTIALLY", [TRIVIAL_LIMIT_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL ALWAYS_EVENTUALLY)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (move ["n"]));
833 ((((fun arg_tac -> (use_arg_then2 ("x_in_c", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("c_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["_"]))) THEN (DISCH_THEN apply_tac) THEN (done_tac));
836 (* Finalization of the section SomeResults *)
837 let packing_empty = Sections.finalize_theorem packing_empty;;
838 let in_ball_annulus = Sections.finalize_theorem in_ball_annulus;;
839 let closed_ball_annulus = Sections.finalize_theorem closed_ball_annulus;;
840 let finite_packing_ball_annulus = Sections.finalize_theorem finite_packing_ball_annulus;;
841 let ECTC_sub_ESTD = Sections.finalize_theorem ECTC_sub_ESTD;;
842 let in_set_of_edge_ECTC = Sections.finalize_theorem in_set_of_edge_ECTC;;
843 let vector_eq_neg = Sections.finalize_theorem vector_eq_neg;;
844 let bij_scriptL = Sections.finalize_theorem bij_scriptL;;
845 let lmfun_ge0 = Sections.finalize_theorem lmfun_ge0;;
846 let lmfun_in_ball_annulus = Sections.finalize_theorem lmfun_in_ball_annulus;;
847 let scriptL_le_card = Sections.finalize_theorem scriptL_le_card;;
848 let card_counterexample_ge13 = Sections.finalize_theorem card_counterexample_ge13;;
849 let piecewise_real_continuous = Sections.finalize_theorem piecewise_real_continuous;;
850 let piecewise_real_continuous_univ = Sections.finalize_theorem piecewise_real_continuous_univ;;
851 let lmfun_continuous = Sections.finalize_theorem lmfun_continuous;;
852 let lmfun_norm2_continuous = Sections.finalize_theorem lmfun_norm2_continuous;;
853 let simple_card_inequality = Sections.finalize_theorem simple_card_inequality;;
854 let card_packing_ball_annulus = Sections.finalize_theorem card_packing_ball_annulus;;
855 let SIN_NEG_PI_2PI = Sections.finalize_theorem SIN_NEG_PI_2PI;;
856 let not_surrounded_imp_on_one_side_of_plane = Sections.finalize_theorem not_surrounded_imp_on_one_side_of_plane;;
857 let perturbation_lemma = Sections.finalize_theorem perturbation_lemma;;
858 let COMPACT_SUP_SET = Sections.finalize_theorem COMPACT_SUP_SET;;
859 Sections.end_section "SomeResults";;
861 (* Section VectorOfList *)
862 Sections.begin_section "VectorOfList";;
863 let vector_of_list = new_definition `vector_of_list d list =
864 lambda i. if (i - 1) DIV d < LENGTH list then (EL ((i - 1) DIV d) list)$((i - 1) MOD d + 1) else &0`;;
865 let list_of_vector = new_definition `list_of_vector d n v = TABLE (\k. lambda i. v$(k * d + i)) n`;;
866 let LAMBDA_BETA = GEN_ALL LAMBDA_BETA;;
868 (* Lemma vector_of_list_nil *)
869 let vector_of_list_nil = Sections.section_proof ["d"]
870 `vector_of_list d [] = vec 0`
872 ((((((use_arg_then2 ("vector_of_list", [vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LAMBDA_UNIQUE", [LAMBDA_UNIQUE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vec", [vec]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_ineq"])) THEN ((((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))));
873 ((((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
876 (* Lemma length_list_of_vector *)
877 let length_list_of_vector = Sections.section_proof ["d";"n";"v"]
878 `LENGTH (list_of_vector d n v) = n`
880 (((((use_arg_then2 ("list_of_vector", [list_of_vector]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Packing3.LENGTH_TABLE", [Packing3.LENGTH_TABLE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
883 (* Lemma sum_lemma *)
884 let sum_lemma = Sections.section_proof ["n";"k";"f"]
885 `sum (1..k * n) f = sum (1..n) (\j. sum (1..k) (\i. f ((j - 1) * k + i)))`
887 ((THENL_FIRST) (((THENL) (((use_arg_then2 ("n", [])) (disch_tac [])) THEN (clear_assumption "n") THEN elim) [ALL_TAC; ((move ["n"]) THEN (move ["IH"]))]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("muln0", [muln0]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL SUM_CLAUSES_NUMSEG)))(thm_tac (new_rewrite [] []))))))) ((arith_tac) THEN (done_tac)));
888 ((THENL_FIRST) ((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `1 <= SUC n`)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("mulnSr", [mulnSr]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_ADD_SPLIT", [SUM_ADD_SPLIT]))(thm_tac (new_rewrite [] []))))) ((arith_tac) THEN (done_tac)));
889 ((((use_arg_then2 ("REAL_EQ_ADD_LCANCEL", [REAL_EQ_ADD_LCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("addnC", [addnC])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`k * n:num`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_OFFSET", [SUM_OFFSET]))(thm_tac (new_rewrite [] [])))));
890 ((((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN (move ["i"])) THEN ((((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("succnK", [succnK]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("addnC", [addnC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("mulnC", [mulnC]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
892 (Sections.add_section_var (mk_var ("d", (`:num`))));;
893 (Sections.add_section_var (mk_var ("list", (`:(real^N)list`))));;
894 (Sections.add_section_hyp "d_eq" (`dimindex (:N) = d`));;
895 (Sections.add_section_hyp "dim_ge" (`d * LENGTH list <= dimindex (:M)`));;
897 (* Lemma vector_of_list_comp0 *)
898 let vector_of_list_comp0 = Sections.section_proof ["i"]
899 `d * LENGTH list + 1 <= i /\ i <= dimindex (:M) ==>
900 (vector_of_list d list:real^M)$i = &0`
902 (BETA_TAC THEN (move ["i_ineqs"]));
903 ((THENL_FIRST) ((((use_arg_then2 ("vector_of_list", [vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
904 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~((i - 1) DIV d < LENGTH list)`))) (term_tac (have_gen_tac []((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)))))));
905 ((fun arg_tac -> arg_tac (Arg_term (`~(d = 0)`))) (term_tac (have_gen_tac [](move ["dn0"]))));
906 ((((fun arg_tac -> (use_arg_then2 ("DIMINDEX_GE_1", [DIMINDEX_GE_1])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`(:N)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("d_eq", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
907 (((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("DIV_MULT", [DIV_MULT])) (fun fst_arg -> (use_arg_then2 ("dn0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("DIV_MONO", [DIV_MONO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dn0", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
910 (* Lemma vector_of_list_comp *)
911 let vector_of_list_comp = Sections.section_proof ["k";"i"]
912 `(1 <= i /\ i <= d) /\ k < LENGTH list ==>
913 (vector_of_list d list:real^M)$(k * d + i) = (EL k list)$i`
915 (BETA_TAC THEN (case THEN (move ["i_ineq"])) THEN (move ["k_lt"]));
916 ((((use_arg_then2 ("vector_of_list", [vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
917 ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
918 ((((use_arg_then2 ("LE_TRANS", [LE_TRANS])) (disch_tac [])) THEN (clear_assumption "LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`d * LENGTH list`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dim_ge", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
919 ((((use_arg_then2 ("LE_TRANS", [LE_TRANS])) (disch_tac [])) THEN (clear_assumption "LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`k * d + d:num`))) (term_tac exists_tac)));
920 ((((use_arg_then2 ("LE_ADD_LCANCEL", [LE_ADD_LCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_ineq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `k * d + d = d * SUC k`)))(thm_tac (new_rewrite [] [])))));
921 ((((use_arg_then2 ("LE_MULT_LCANCEL", [LE_MULT_LCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("k_lt", [])) (disch_tac [])) THEN (clear_assumption "k_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
922 ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIVMOD_UNIQ", [DIVMOD_UNIQ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`(k * d + i) - 1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`i - 1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["div_mod"])));
923 (((repeat_tactic 1 9 (((use_arg_then2 ("div_mod", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("k_lt", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (TRY (((((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN BETA_TAC) THEN (arith_tac)))));
924 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`i - 1 + 1 = i`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
925 ((((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
928 (* Lemma vector_of_list_left_inverse *)
929 let vector_of_list_left_inverse = Sections.section_proof []
930 `list_of_vector d (LENGTH list) ((vector_of_list d list):real^M) = list`
932 (((((use_arg_then2 ("Packing3.LIST_EL_EQ", [Packing3.LIST_EL_EQ]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("list_of_vector", [list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Packing3.LENGTH_TABLE", [Packing3.LENGTH_TABLE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["k"]) THEN (move ["k_lt"]));
933 (((((use_arg_then2 ("Packing3.EL_TABLE", [Packing3.EL_TABLE]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("LAMBDA_UNIQUE", [LAMBDA_UNIQUE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("d_eq", []))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_ineq"]));
934 ((((use_arg_then2 ("vector_of_list_comp", [vector_of_list_comp]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
937 (* Lemma dot_vector_of_list *)
938 let dot_vector_of_list = Sections.section_proof []
939 `(vector_of_list d list:real^M) dot (vector_of_list d list) =
940 sum (1..LENGTH list) (\i. (EL (i - 1) list) dot (EL (i - 1) list))`
942 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`~(d = 0)`))) (term_tac (have_gen_tac [](move ["d_n0"])))) ((((fun arg_tac -> (use_arg_then2 ("DIMINDEX_GE_1", [DIMINDEX_GE_1])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`(:N)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("d_eq", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac)));
943 ((fun arg_tac -> arg_tac (Arg_term (`LENGTH list <= dimindex (:M)`))) (term_tac (have_gen_tac [](move ["len_le"]))));
944 ((((use_arg_then2 ("LE_TRANS", [LE_TRANS])) (disch_tac [])) THEN (clear_assumption "LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`d * LENGTH list`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dim_ge", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
945 (((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `!a. a = 1 * a`)))(thm_tac (new_rewrite [1] [])))) THEN (((use_arg_then2 ("LE_MULT_RCANCEL", [LE_MULT_RCANCEL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("d_n0", [])) (disch_tac [])) THEN (clear_assumption "d_n0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
946 ((repeat_tactic 1 9 (((use_arg_then2 ("dot", [dot]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("subnKC", [subnKC])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_ADD_SPLIT", [SUM_ADD_SPLIT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("LE_ADDR", [LE_ADDR]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
947 (((use_arg_then2 ("REAL_ADD_RID", [REAL_ADD_RID]))(gsym_then (thm_tac (new_rewrite [] [(`sum (1..LENGTH list) _`)])))));
948 ((THENL_ROT (-1)) (congr_tac (`_1 + _2:real`)));
949 (((use_arg_then2 ("SUM_EQ_0_NUMSEG", [SUM_EQ_0_NUMSEG])) (thm_tac apply_tac)) THEN (move ["i"]) THEN (move ["i_ineq"]) THEN (simp_tac));
950 ((THENL_FIRST) ((((use_arg_then2 ("vector_of_list", [vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) ((((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN ((use_arg_then2 ("dim_ge", [])) (disch_tac [])) THEN (clear_assumption "dim_ge") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
951 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~((i - 1) DIV d < LENGTH list)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) (((simp_tac) THEN (((use_arg_then2 ("REAL_MUL_LZERO", [REAL_MUL_LZERO]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
952 (((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LE_RDIV_EQ", [LE_RDIV_EQ]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
953 (((((use_arg_then2 ("sum_lemma", [sum_lemma]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN (((((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_eq", []))(thm_tac (new_rewrite [] []))))) THEN (move ["k"]) THEN (move ["k_ineq"]) THEN (simp_tac)));
954 ((((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN (move ["i"])) THEN ((((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (move ["i_ineq"]) THEN (simp_tac)));
955 (((((use_arg_then2 ("vector_of_list_comp", [vector_of_list_comp]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("i_ineq", []))(thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("k_ineq", [])) (disch_tac [])) THEN (clear_assumption "k_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
958 (* Lemma vector_of_list_norm_bound *)
959 let vector_of_list_norm_bound = Sections.section_proof ["r"]
960 `(!x:real^N. MEM x list ==> norm x <= r) ==>
961 norm (vector_of_list d list:real^M) <= sqrt (&(LENGTH list)) * r`
963 (BETA_TAC THEN (move ["norm_le"]));
964 ((THENL) (((fun arg_tac -> (use_arg_then2 ("EXCLUDED_MIDDLE", [EXCLUDED_MIDDLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`list = []`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (move ["list_not_nil"])]);
965 (((((use_arg_then2 ("LENGTH", [LENGTH]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vector_of_list_nil", [vector_of_list_nil]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NORM_0", [NORM_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SQRT_0", [SQRT_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_LZERO", [REAL_MUL_LZERO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
966 ((fun arg_tac -> arg_tac (Arg_term (`&0 <= r`))) (term_tac (have_gen_tac [](move ["r_pos"]))));
967 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`0 < LENGTH list`))) (term_tac (have_gen_tac [](move ["len_pos"])))) ((((use_arg_then2 ("list_not_nil", [])) (disch_tac [])) THEN (clear_assumption "list_not_nil") THEN BETA_TAC) THEN (((use_arg_then2 ("LENGTH_EQ_NIL", [LENGTH_EQ_NIL]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac)));
968 ((fun arg_tac -> (use_arg_then2 ("norm_le", [])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("MEM_EL", [MEM_EL])) (fun fst_arg -> (use_arg_then2 ("len_pos", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
969 ((((fun arg_tac -> (use_arg_then2 ("NORM_POS_LE", [NORM_POS_LE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL 0 list`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
970 ((((use_arg_then2 ("vector_norm", [vector_norm]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dot_vector_of_list", [dot_vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
971 ((fun arg_tac -> arg_tac (Arg_term (`LENGTH list`))) (term_tac (set_tac "n")));
972 ((fun arg_tac -> arg_tac (Arg_term (`sqrt (&n) * r = sqrt (&n * r pow 2)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
973 (((((use_arg_then2 ("SQRT_MUL", [SQRT_MUL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_LE_POW_2", [REAL_LE_POW_2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_POS", [REAL_POS]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("POW_2_SQRT", [POW_2_SQRT]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
974 ((((use_arg_then2 ("SQRT_MONO_LE", [SQRT_MONO_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUM_POS_LE_NUMSEG", [SUM_POS_LE_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
975 ((BETA_TAC THEN (move ["i"]) THEN (move ["_"])) THEN (((use_arg_then2 ("DOT_POS_LE", [DOT_POS_LE]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
976 (((((fun arg_tac -> (use_arg_then2 ("CARD_NUMSEG_1", [CARD_NUMSEG_1])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((use_arg_then2 ("SUM_BOUND", [SUM_BOUND]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FINITE_NUMSEG", [FINITE_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_ineq"]) THEN (simp_tac));
977 ((((use_arg_then2 ("DOT_SQUARE_NORM", [DOT_SQUARE_NORM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_SQUARE_ABS", [REAL_LE_SQUARE_ABS]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_ABS_NORM", [REAL_ABS_NORM]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("iffRL", [iffRL])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("REAL_ABS_REFL", [REAL_ABS_REFL])) (fun fst_arg -> (use_arg_then2 ("r", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
978 (((((use_arg_then2 ("norm_le", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("i_ineq", [])) (disch_tac [])) THEN (clear_assumption "i_ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
981 (* Finalization of the section VectorOfList *)
982 let vector_of_list_nil = Sections.finalize_theorem vector_of_list_nil;;
983 let length_list_of_vector = Sections.finalize_theorem length_list_of_vector;;
984 let sum_lemma = Sections.finalize_theorem sum_lemma;;
985 let vector_of_list_comp0 = Sections.finalize_theorem vector_of_list_comp0;;
986 let vector_of_list_comp = Sections.finalize_theorem vector_of_list_comp;;
987 let vector_of_list_left_inverse = Sections.finalize_theorem vector_of_list_left_inverse;;
988 let dot_vector_of_list = Sections.finalize_theorem dot_vector_of_list;;
989 let vector_of_list_norm_bound = Sections.finalize_theorem vector_of_list_norm_bound;;
990 Sections.end_section "VectorOfList";;
992 (* Lemma infnorm_lt *)
993 let infnorm_lt = Sections.section_proof ["e"]
994 `!(v:real^N). (!i. 1 <= i /\ i <= dimindex (:N) ==> abs (v$i) < e) ==>
997 ((THENL_ROT (-1)) ((BETA_TAC THEN (move ["v"]) THEN (move ["ineqs"])) THEN ((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL infnorm)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REAL_SUP_LT_FINITE)))(thm_tac (new_rewrite [] [])))))));
998 ((BETA_TAC THEN (move ["x"])) THEN (((((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ALL_TAC THEN (case THEN (move ["i"])) THEN (case THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("ineqs", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (simp_tac)) THEN (done_tac));
1000 ((fun arg_tac -> arg_tac (Arg_term (`GSPEC _`))) (term_tac (set_tac "s")));
1001 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`s = IMAGE (\i. abs (v$i)) (1..dimindex (:N))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))));
1002 (((((use_arg_then2 ("FINITE_IMAGE", [FINITE_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FINITE_NUMSEG", [FINITE_NUMSEG]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1003 (((((use_arg_then2 ("s_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL CONJ_ACI)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1004 (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] [])))));
1005 (((fun arg_tac -> arg_tac (Arg_term (`abs (v$1)`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`1`))) (term_tac exists_tac)));
1006 (((((use_arg_then2 ("DIMINDEX_GE_1", [DIMINDEX_GE_1]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LE_REFL", [LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1009 (* Lemma lim_not_equal *)
1010 let lim_not_equal = Sections.section_proof ["a";"b";"f";"g"]
1011 `~(a = b) /\ (f --> a) sequentially /\ (g --> b) sequentially ==>
1012 ?N. !n. N <= n ==> ~(f n = g n)`
1014 (((repeat_tactic 1 9 (((use_arg_then2 ("LIM_SEQUENTIALLY", [LIM_SEQUENTIALLY]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("DIST_NZ", [DIST_NZ]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["n_ab"])) THEN (case THEN ((move ["f_to_a"]) THEN (move ["g_to_b"]))));
1015 ((fun arg_tac -> arg_tac (Arg_term (`dist (a, b) / &2`))) (term_tac (set_tac "e")));
1016 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`&0 < e`))) (term_tac (have_gen_tac [](move ["e_gt0"])))) (((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_ab", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac)));
1017 (((fun arg_tac -> (use_arg_then2 ("g_to_b", [])) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (use_arg_then2 ("f_to_a", [])) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN ((move ["n1"]) THEN (move ["ineq1"]))) THEN (case THEN ((move ["n2"]) THEN (move ["ineq2"]))));
1018 (((fun arg_tac -> arg_tac (Arg_term (`n1 + n2:num`))) (term_tac exists_tac)) THEN (move ["n"]) THEN (move ["le_n"]));
1019 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`n1 <= n /\ n2 <= n:num`))) (term_tac (have_gen_tac [](move ["n_ineqs"])))) ((((use_arg_then2 ("le_n", [])) (disch_tac [])) THEN (clear_assumption "le_n") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1020 ((((fun arg_tac -> (use_arg_then2 ("ineq2", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (use_arg_then2 ("ineq1", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("n_ineqs", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
1021 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`f n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`g n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`f n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1022 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`f n`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("e_def", [])) (disch_tac [])) THEN (clear_assumption "e_def") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1025 (* Section VectorOfList_Sets *)
1026 Sections.begin_section "VectorOfList_Sets";;
1027 (Sections.add_section_var (mk_var ("k", (`:num`))));;
1028 (Sections.add_section_hyp "dim_ge" (`3 * k <= dimindex (:M)`));;
1030 (* Section Lim_inS *)
1031 Sections.begin_section "Lim_inS";;
1032 (Sections.add_section_var (mk_var ("S", (`:(real^3)list -> bool`))));;
1034 (* Lemma lim_inS_EL *)
1035 let lim_inS_EL = Sections.section_proof ["v";"y"]
1036 `(!n. v n IN IMAGE (vector_of_list 3) S) /\ (v --> y:real^M) sequentially
1037 ==> !i. i < k ==> ((\n. EL i (list_of_vector 3 k (v n):(real^3)list))
1038 --> EL i (list_of_vector 3 k y:(real^3)list)) sequentially`
1040 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("LIM_SEQUENTIALLY", [LIM_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["vS"])) THEN (move ["v_to_y"]) THEN (move ["i"]) THEN (move ["i_lt_k"]) THEN (move ["e"]) THEN (move ["e_gt0"]) THEN (simp_tac));
1041 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`&0 < e / sqrt (&3)`))) (term_tac (have_gen_tac [](move ["e3_gt0"])))) (((((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("e_gt0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SQRT_POS_LT", [SQRT_POS_LT]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac)));
1042 (((fun arg_tac -> (use_arg_then2 ("v_to_y", [])) (fun fst_arg -> (use_arg_then2 ("e3_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["N"])) THEN (move ["d_lt"]));
1043 ((((use_arg_then2 ("N", [])) (term_tac exists_tac)) THEN (move ["n"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("d_lt", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("NORM_BOUND_COMPONENT_LT", [NORM_BOUND_COMPONENT_LT])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["bounds"])));
1044 ((repeat_tactic 1 9 (((use_arg_then2 ("list_of_vector", [list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Packing3.EL_TABLE", [Packing3.EL_TABLE]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)));
1045 ((fun arg_tac -> arg_tac (Arg_term (`_1 - _2:real^3`))) (term_tac (set_tac "z")));
1046 ((((fun arg_tac -> (use_arg_then2 ("NORM_LE_INFNORM", [NORM_LE_INFNORM])) (fun fst_arg -> (use_arg_then2 ("z", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("REAL_LET_TRANS", [REAL_LET_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (DISCH_THEN apply_tac));
1047 ((((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LTE_TRANS", [REAL_LTE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LTE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`sqrt (&3) * (e / sqrt (&3))`))) (term_tac exists_tac)));
1048 ((THENL_ROT (-1)) (split_tac));
1049 ((((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1050 ((((use_arg_then2 ("SQRT_EQ_0", [SQRT_EQ_0]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1051 ((THENL_FIRST) ((((use_arg_then2 ("REAL_LT_LMUL", [REAL_LT_LMUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SQRT_POS_LT", [SQRT_POS_LT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))) ((arith_tac) THEN (done_tac)));
1052 (((((use_arg_then2 ("infnorm_lt", [infnorm_lt]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (move ["j"]) THEN (move ["j_ineqs"]));
1053 ((((use_arg_then2 ("z_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("VECTOR_SUB_COMPONENT", [VECTOR_SUB_COMPONENT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)));
1054 (((((use_arg_then2 ("VECTOR_SUB_COMPONENT", [VECTOR_SUB_COMPONENT]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("bounds", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dim_ge", [])) (disch_tac [])) THEN (clear_assumption "dim_ge") THEN ((use_arg_then2 ("i_lt_k", [])) (disch_tac [])) THEN (clear_assumption "i_lt_k") THEN ((use_arg_then2 ("j_ineqs", [])) (disch_tac [])) THEN (clear_assumption "j_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1056 (Sections.add_section_hyp "inS_imp" (`!l. l IN S ==> LENGTH l <= k`));;
1058 (* Lemma lim_inS_eq *)
1059 let lim_inS_eq = Sections.section_proof ["v";"y"]
1060 `(!n. v n IN IMAGE (vector_of_list 3) S) /\ (v --> y) sequentially
1061 ==> vector_of_list 3 (list_of_vector 3 k y:(real^3)list):real^M = y`
1063 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LIM_SEQUENTIALLY", [LIM_SEQUENTIALLY]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN ((move ["vS"]) THEN (move ["v_to_y"]))));
1064 (((((use_arg_then2 ("vector_of_list", [vector_of_list]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LAMBDA_UNIQUE", [LAMBDA_UNIQUE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_ineqs"]));
1065 (((fun arg_tac -> arg_tac (Arg_term (`(i - 1) DIV 3 < k`))) (disch_eq_tac "h" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1066 ((THENL_FIRST) ((((use_arg_then2 ("list_of_vector", [list_of_vector]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Packing3.EL_TABLE", [Packing3.EL_TABLE]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("LAMBDA_BETA", [LAMBDA_BETA]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] [])))))) ((arith_tac) THEN (done_tac)));
1067 ((THENL_FIRST) ((((use_arg_then2 ("ADD_ASSOC", [ADD_ASSOC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIVISION", [DIVISION]))(gsym_then (thm_tac (new_rewrite [] [])))))) ((arith_tac) THEN (done_tac)));
1068 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`i - 1 + 1 = i`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
1069 ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1070 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!e. &0 < e ==> abs(y$i) < e`))) (term_tac (have_gen_tac []ALL_TAC))));
1071 ((((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)) THEN (((((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] []))))) THEN (move ["yn0"])));
1072 (((fun arg_tac -> arg_tac (Arg_term (`abs (y$i)`))) (term_tac exists_tac)) THEN (((use_arg_then2 ("yn0", [])) (disch_tac [])) THEN (clear_assumption "yn0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1073 ((BETA_TAC THEN (move ["e"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("v_to_y", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (case THEN (move ["N"])) THEN (move ["hh"])) THEN (((fun arg_tac -> (use_arg_then2 ("hh", [])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("LE_REFL", [LE_REFL])) (fun fst_arg -> (use_arg_then2 ("N", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC));
1074 (((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("NORM_BOUND_COMPONENT_LT", [NORM_BOUND_COMPONENT_LT])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("i_ineqs", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)));
1075 (((use_arg_then2 ("VECTOR_SUB_COMPONENT", [VECTOR_SUB_COMPONENT]))(thm_tac (new_rewrite [] []))));
1076 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`v N$i = &0`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("REAL_SUB_RZERO", [REAL_SUB_RZERO]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1077 (((fun arg_tac -> (use_arg_then2 ("vS", [])) (fun fst_arg -> (use_arg_then2 ("N", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["x"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("inS_imp", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["len_leq"]));
1078 (((((use_arg_then2 ("vector_of_list_comp0", [vector_of_list_comp0]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_ineqs", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (split_tac));
1079 ((((use_arg_then2 ("leq_trans", [leq_trans])) (disch_tac [])) THEN (clear_assumption "leq_trans") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`3 * k`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dim_ge", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq_mul2l", [leq_mul2l]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1080 ((THENL_FIRST) ((((use_arg_then2 ("leq_trans", [leq_trans])) (disch_tac [])) THEN (clear_assumption "leq_trans") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`3 * k + 1`))) (term_tac exists_tac)) THEN (split_tac)) ((((use_arg_then2 ("len_leq", [])) (disch_tac [])) THEN (clear_assumption "len_leq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1081 ((fun arg_tac -> arg_tac (Arg_term (`(a DIV d) * d <= a`))) (term_tac (have_gen_tac ["a"; "d"](move ["div"]))));
1082 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`d = 0`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("muln0", [muln0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1083 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIVISION", [DIVISION])) (fun fst_arg -> (use_arg_then2 ("eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [2] [])))) THEN (arith_tac) THEN (done_tac));
1084 ((THENL_FIRST) ((((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN BETA_TAC) THEN ((((use_arg_then2 ("leqNgt", [leqNgt]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("leq_pmul2r", [leq_pmul2r])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`3`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))))) ((arith_tac) THEN (done_tac)));
1085 ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("div", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`i - 1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`3`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1088 (* Finalization of the section Lim_inS *)
1089 let lim_inS_EL = Sections.finalize_theorem lim_inS_EL;;
1090 let lim_inS_eq = Sections.finalize_theorem lim_inS_eq;;
1091 Sections.end_section "Lim_inS";;
1093 (* Section ContinuousOnCompact *)
1094 Sections.begin_section "ContinuousOnCompact";;
1095 (Sections.add_section_var (mk_var ("S", (`:(real^3)list -> bool`))));;
1096 (Sections.add_section_hyp "inS" (`!l. l IN S ==> LENGTH l = k`));;
1097 (Sections.add_section_hyp "compactS" (`compact (IMAGE (vector_of_list 3) S:real^M->bool)`));;
1098 (Sections.add_section_hyp "n_S_empty" (`~(S = {})`));;
1101 let max_onS = Sections.section_proof ["f"]
1102 `(lift o f o set_of_list o (list_of_vector 3 k:real^M->(real^3)list))
1103 continuous_on (IMAGE (vector_of_list 3) S) ==>
1104 ?W. W IN IMAGE set_of_list S /\ (!V. V IN IMAGE set_of_list S ==> f V <= f W)`
1106 (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("CONTINUOUS_ATTAINS_SUP", [CONTINUOUS_ATTAINS_SUP])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN ((((use_arg_then2 ("compactS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IMAGE_EQ_EMPTY", [IMAGE_EQ_EMPTY]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_S_empty", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
1107 ((repeat_tactic 1 9 (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["v"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["lS"]) THEN (move ["le"]));
1108 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`set_of_list l`))) (term_tac exists_tac)) THEN (split_tac)) (((use_arg_then2 ("l", [])) (term_tac exists_tac)) THEN (done_tac)));
1109 (BETA_TAC THEN (move ["V"]) THEN (case THEN (move ["y"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["yS"]));
1110 ((THENL_FIRST) ((((fun arg_tac -> (use_arg_then2 ("le", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vector_of_list 3 y:real^M`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC)) (((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN (done_tac)));
1111 (((fun arg_tac -> (use_arg_then2 ("inS", [])) (fun fst_arg -> (use_arg_then2 ("lS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (use_arg_then2 ("inS", [])) (fun fst_arg -> (use_arg_then2 ("yS", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (move ["y_eq"]) THEN (move ["l_eq"]));
1112 (((repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("y_eq", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("l_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("l_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1115 (* Finalization of the section ContinuousOnCompact *)
1116 let max_onS = Sections.finalize_theorem max_onS;;
1117 Sections.end_section "ContinuousOnCompact";;
1118 (Sections.add_section_var (mk_var ("S", (`:(real^3)list -> bool`))));;
1120 (* Section NormSet *)
1121 Sections.begin_section "NormSet";;
1122 (Sections.add_section_var (mk_var ("g", (`:num -> real`))));;
1123 (Sections.add_section_hyp "inS" (`!l. l IN S <=> LENGTH l = k /\ (!i. i < k ==> norm (EL i l) = g i)`));;
1125 (* Lemma closedNormS *)
1126 let closedNormS = Sections.section_proof []
1127 `closed (IMAGE (vector_of_list 3) S:real^M->bool)`
1129 (((((use_arg_then2 ("CLOSED_SEQUENTIAL_LIMITS", [CLOSED_SEQUENTIAL_LIMITS]))(thm_tac (new_rewrite [] [])))) THEN (move ["v"]) THEN (move ["y"]) THEN (case THEN ((move ["vn_eq"]) THEN (move ["v_to_y"])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))));
1130 (((fun arg_tac -> arg_tac (Arg_term (`list_of_vector 3 k y`))) (term_tac exists_tac)) THEN (split_tac));
1131 ((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_eq", [lim_inS_eq])) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac) THEN (move ["l"])));
1132 (((((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("leqnn", [leqnn])) (disch_tac [])) THEN (clear_assumption "leqnn") THEN (exact_tac)) THEN (done_tac));
1133 (((((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt_k"]));
1134 ((fun arg_tac -> arg_tac (Arg_term (`EL i _`))) (term_tac (set_tac "x")));
1135 ((((fun arg_tac -> (use_arg_then2 ("CONTINUOUS_AT_LIFT_NORM", [CONTINUOUS_AT_LIFT_NORM])) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("CONTINUOUS_AT_SEQUENTIALLY", [CONTINUOUS_AT_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))));
1136 ((((use_arg_then2 ("x_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i_lt_k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)) THEN BETA_TAC));
1137 ((fun arg_tac -> arg_tac (Arg_term (`(lift o norm) o _`))) (term_tac (set_tac "r")));
1138 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`r = (\n. lift (g i))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))));
1139 (((((use_arg_then2 ("LIM_CONST_EQ", [LIM_CONST_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("TRIVIAL_LIMIT_SEQUENTIALLY", [TRIVIAL_LIMIT_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("LIFT_EQ", [LIFT_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac));
1140 (((((use_arg_then2 ("r_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))))) THEN (move ["n"]) THEN (simp_tac));
1141 ((((fun arg_tac -> (use_arg_then2 ("vn_eq", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["len_eq"])) THEN (move ["norm_eq"])));
1142 (((((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("norm_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1145 (* Finalization of the section NormSet *)
1146 let closedNormS = Sections.finalize_theorem closedNormS;;
1147 Sections.end_section "NormSet";;
1148 (Sections.add_section_hyp "inS" (`!l. l IN S <=> set_of_list l SUBSET ball_annulus /\
1149 packing (set_of_list l) /\ LENGTH l = k /\ uniq l`));;
1152 let closedS = Sections.section_proof []
1153 `closed (IMAGE (vector_of_list 3) S:real^M->bool)`
1155 (((((use_arg_then2 ("CLOSED_SEQUENTIAL_LIMITS", [CLOSED_SEQUENTIAL_LIMITS]))(thm_tac (new_rewrite [] [])))) THEN (move ["v"]) THEN (move ["y"]) THEN (case THEN ((move ["vn_eq"]) THEN (move ["v_to_y"])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))));
1156 (((fun arg_tac -> arg_tac (Arg_term (`list_of_vector 3 k y`))) (term_tac exists_tac)) THEN (split_tac));
1157 ((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_eq", [lim_inS_eq])) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac) THEN (move ["l"])));
1158 (((((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("leqnn", [leqnn])) (disch_tac [])) THEN (clear_assumption "leqnn") THEN (exact_tac)) THEN (done_tac));
1159 (((((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (split_tac));
1160 (((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (move ["a"]) THEN (case THEN (move ["i"])) THEN (case THEN ((move ["i_lt"]) THEN (move ["a_eq"]))));
1161 ((((use_arg_then2 ("closed_ball_annulus", [closed_ball_annulus])) (disch_tac [])) THEN (clear_assumption "closed_ball_annulus") THEN BETA_TAC) THEN (((use_arg_then2 ("CLOSED_SEQUENTIAL_LIMITS", [CLOSED_SEQUENTIAL_LIMITS]))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN apply_tac));
1162 ((fun arg_tac -> arg_tac (Arg_term (`\n. EL i (list_of_vector 3 k (v n))`))) (term_tac exists_tac));
1163 (((((use_arg_then2 ("a_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))) THEN (move ["n"]) THEN (simp_tac));
1164 ((((fun arg_tac -> (use_arg_then2 ("vn_eq", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["sub_l"])) THEN (case THEN (move ["_"])) THEN (move ["len_eq"])));
1165 ((((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1166 (((((use_arg_then2 ("sub_l", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1167 ((THENL_ROT (-1)) (split_tac));
1168 (((((fun arg_tac -> (use_arg_then2 ("uniq_nthP", [uniq_nthP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["j"]) THEN (case THEN ((move ["i_lt_j"]) THEN (move ["j_lt"]))));
1169 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < k:num`))) (term_tac (have_gen_tac [](move ["i_lt"])))) ((((use_arg_then2 ("i_lt_j", [])) (disch_tac [])) THEN (clear_assumption "i_lt_j") THEN ((use_arg_then2 ("j_lt", [])) (disch_tac [])) THEN (clear_assumption "j_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1170 ((repeat_tactic 1 9 (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1171 (((fun arg_tac -> arg_tac (Arg_term (`EL i _`))) (term_tac (set_tac "a"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`EL j _`))) (term_tac (set_tac "b"))));
1172 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1173 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("j_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1174 ((fun arg_tac -> arg_tac (Arg_term (`\n. _ n`))) (term_tac (set_tac "f2")));
1175 ((fun arg_tac -> arg_tac (Arg_term (`\n. _ n`))) (term_tac (set_tac "f1")));
1176 ((((use_arg_then2 ("a_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("b_def", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("LIM_SEQUENTIALLY", [LIM_SEQUENTIALLY]))(thm_tac (new_rewrite [] []))))));
1177 (BETA_TAC THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("REAL_LT_01", [REAL_LT_01])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)) THEN (case THEN (move ["n1"])) THEN (move ["d2b"]) THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("REAL_LT_01", [REAL_LT_01])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)) THEN (case THEN (move ["n2"])) THEN (move ["d1a"]));
1178 (((fun arg_tac -> (use_arg_then2 ("d2b", [])) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("leq_addr", [leq_addr])) (fun fst_arg -> (use_arg_then2 ("n2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((fun arg_tac -> (use_arg_then2 ("d1a", [])) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("leq_addl", [leq_addl])) (fun fst_arg -> (use_arg_then2 ("n1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1179 ((((use_arg_then2 ("f1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1180 ((((fun arg_tac -> (use_arg_then2 ("vn_eq", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`n1 + n2:num`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["_"])) THEN (case THEN (move ["pack"])) THEN (case THEN (move ["len_eq"])) THEN (move ["uniq_l"])));
1181 (((((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["da"]) THEN (move ["db"]));
1182 ((in_tac ["uniq_l"] false (((fun arg_tac -> (use_arg_then2 ("uniq_nthP", [uniq_nthP])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (in_tac ["pack"] false (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Sphere.packing_lt)))(thm_tac (new_rewrite [] []))))));
1183 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("uniq_l", [])) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("j", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("i_lt_j", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("j_lt", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("EL_nth", [EL_nth]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["neq"])));
1184 ((((use_arg_then2 ("neq", [])) (disch_tac [])) THEN (clear_assumption "neq") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac) THEN (move ["eq"])) THEN (((use_arg_then2 ("pack", [])) (disch_tac [])) THEN (clear_assumption "pack") THEN (DISCH_THEN apply_tac)));
1185 ((repeat_tactic 1 9 (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
1186 ((((use_arg_then2 ("da", [])) (disch_tac [])) THEN (clear_assumption "da") THEN ((use_arg_then2 ("db", [])) (disch_tac [])) THEN (clear_assumption "db") THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL i l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL j l`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (use_arg_then2 ("b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1187 ((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Sphere.packing)))(thm_tac (new_rewrite [] [])))) THEN (move ["a"]) THEN (move ["b"]));
1188 ((((use_arg_then2 ("IN", [IN]))(gsym_then (thm_tac (new_rewrite [] [(`set_of_list _ a`)]))))) THEN (((use_arg_then2 ("IN", [IN]))(gsym_then (thm_tac (new_rewrite [] [(`set_of_list _ b`)]))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))));
1189 ((repeat_tactic 1 9 (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))));
1190 (BETA_TAC THEN (case THEN ALL_TAC) THEN (case THEN (move ["i"])) THEN (case THEN ((move ["i_lt"]) THEN (move ["a_eq"]))) THEN (case THEN ALL_TAC) THEN (case THEN (move ["j"])) THEN (case THEN ((move ["j_lt"]) THEN (move ["b_eq"]))) THEN (move ["n_ab"]));
1191 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1192 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("vn_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_to_y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("j_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1193 ((fun arg_tac -> arg_tac (Arg_term (`\n. _ n`))) (term_tac (set_tac "f2")));
1194 ((fun arg_tac -> arg_tac (Arg_term (`\n. _ n`))) (term_tac (set_tac "f1")));
1195 (((((use_arg_then2 ("a_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("b_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["f2b"]) THEN (move ["f1a"]));
1196 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("LIM_NORM_LBOUND", [LIM_NORM_LBOUND])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`sequentially`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\n. f1 n - f2 n:real^3`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
1197 ((((use_arg_then2 ("TRIVIAL_LIMIT_SEQUENTIALLY", [TRIVIAL_LIMIT_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("LIM_SUB", [LIM_SUB]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EVENTUALLY_SEQUENTIALLY", [EVENTUALLY_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))));
1198 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("lim_not_equal", [lim_not_equal])) (fun fst_arg -> (use_arg_then2 ("n_ab", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f1a", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f2b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["N"])) THEN (move ["neq"]));
1199 ((((use_arg_then2 ("N", [])) (term_tac exists_tac)) THEN (move ["n"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("neq", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN ((((use_arg_then2 ("dist", [dist]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
1200 ((((fun arg_tac -> (use_arg_then2 ("vn_eq", [])) (fun fst_arg -> (use_arg_then2 ("n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.packing", [Sphere.packing]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["_"])) THEN (case THEN ((move ["pack"]) THEN (move ["len_eq"])))));
1201 (((((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["el_neq"]));
1202 (((((use_arg_then2 ("pack", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN", [IN]))(gsym_then (thm_tac (new_rewrite [] [(`set_of_list l _`)]))))) THEN (((use_arg_then2 ("IN", [IN]))(gsym_then (thm_tac (new_rewrite [] [(`set_of_list l _`)]))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1205 (* Lemma compactS *)
1206 let compactS = Sections.section_proof []
1207 `compact (IMAGE (vector_of_list 3) S:real^M->bool)`
1209 ((((use_arg_then2 ("COMPACT_EQ_BOUNDED_CLOSED", [COMPACT_EQ_BOUNDED_CLOSED]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("closedS", [closedS]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("bounded", [bounded]))(thm_tac (new_rewrite [] [])))));
1210 ((fun arg_tac -> arg_tac (Arg_term (`sqrt (&k) * (&2 * h0)`))) (term_tac exists_tac));
1211 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN (move ["v"]) THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["sub_l"])) THEN (case THEN (move ["_"])) THEN (move ["len_eq"]));
1212 (in_tac ["dim_ge"] true (((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))));
1213 (((((fun arg_tac -> (use_arg_then2 ("vector_of_list_norm_bound", [vector_of_list_norm_bound])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["x"]));
1214 (((((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("sub_l", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (((use_arg_then2 ("Pack_defs.ball_annulus", [Pack_defs.ball_annulus]))(thm_tac (new_rewrite [] [])))));
1215 (((((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_CBALL_0", [IN_CBALL_0]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac));
1218 (* Lemma set_of_listS *)
1219 let set_of_listS = Sections.section_proof ["V"]
1220 `V IN (IMAGE set_of_list S) <=>
1221 packing V /\ V SUBSET ball_annulus /\ CARD V = k`
1223 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] []))))) THEN ((THENL) (split_tac) [((case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN ((move ["len_eq"]) THEN (move ["uniq_l"])))); ((case THEN (move ["pack"])) THEN (case THEN (move ["sub"])) THEN (move ["card_eq"]))]));
1224 (((((use_arg_then2 ("card_set_of_list_uniq", [card_set_of_list_uniq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1225 ((fun arg_tac -> arg_tac (Arg_term (`list_of_set V`))) (term_tac exists_tac));
1226 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus])) (fun fst_arg -> (use_arg_then2 ("pack", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("sub", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["finV"])));
1227 (((((use_arg_then2 ("SET_OF_LIST_OF_SET", [SET_OF_LIST_OF_SET]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("sub", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("pack", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LENGTH_LIST_OF_SET", [LENGTH_LIST_OF_SET]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("card_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("uniq_list_of_set", [uniq_list_of_set]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1230 (* Lemma scriptL_eq *)
1231 let scriptL_eq = Sections.section_proof ["v"]
1232 `v:real^M IN IMAGE (vector_of_list 3) S ==>
1233 scriptL (set_of_list (list_of_vector 3 k v))
1234 = list_sum (list_of_vector 3 k v:(real^3)list) (\v. lmfun (norm v / &2))`
1236 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["l"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["_"])) THEN (case THEN (move ["_"])) THEN (case THEN ((move ["len_eq"]) THEN (move ["uniq_l"]))));
1237 ((((use_arg_then2 ("scriptL", [scriptL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("len_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)));
1238 ((((use_arg_then2 ("list_sum_set_of_list", [list_sum_set_of_list]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (done_tac));
1241 (* Lemma scriptL_continuous *)
1242 let scriptL_continuous = Sections.section_proof []
1243 `(lift o scriptL o set_of_list o (list_of_vector 3 k:real^M->(real^3)list))
1244 continuous_on (IMAGE (vector_of_list 3) S)`
1246 ((((use_arg_then2 ("CONTINUOUS_ON_SEQUENTIALLY", [CONTINUOUS_ON_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN (move ["v"]) THEN (move ["a"]) THEN (case THEN (move ["a_in"])) THEN (case THEN (move ["v_in"])) THEN (move ["v_to_a"]));
1247 ((fun arg_tac -> arg_tac (Arg_term (`_ o v`))) (term_tac (set_tac "f")));
1248 ((fun arg_tac -> arg_tac (Arg_term (`f = lift o (\n. list_sum (list_of_vector 3 k (v n)) (\v:real^3. lmfun (norm v / &2)))`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
1249 ((((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq_ext", [eq_ext]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))))) THEN (move ["n"])) THEN (((use_arg_then2 ("scriptL_eq", [scriptL_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1250 ((repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("scriptL_eq", [scriptL_eq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL TENDSTO_REAL)))(gsym_then (thm_tac (new_rewrite [] []))))));
1251 (((((use_arg_then2 ("list_sum_continuous", [list_sum_continuous]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("lmfun_norm2_continuous", [lmfun_norm2_continuous]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
1252 ((((fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1255 (* Lemma min_dist_k_continuous *)
1256 let min_dist_k_continuous = Sections.section_proof ["j"]
1257 `(lift o min_dist_k j o (list_of_vector 3 k:real^M->(real^3)list))
1258 continuous_on (IMAGE (vector_of_list 3) S)`
1260 ((((use_arg_then2 ("CONTINUOUS_ON_SEQUENTIALLY", [CONTINUOUS_ON_SEQUENTIALLY]))(thm_tac (new_rewrite [] [])))) THEN (move ["v"]) THEN (move ["a"]) THEN (case THEN (move ["a_in"])) THEN (case THEN (move ["v_in"])) THEN (move ["v_to_a"]));
1261 ((repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("o_ASSOC", [o_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL TENDSTO_REAL)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("o_ASSOC", [o_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))));
1262 ((((fun arg_tac -> (use_arg_then2 ("ETA_AX", [ETA_AX])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`min_dist_k j o _`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("min_dist_k_limit", [min_dist_k_limit]))(thm_tac (new_rewrite [] [])))));
1263 (((repeat_tactic 1 9 (((use_arg_then2 ("length_list_of_vector", [length_list_of_vector]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
1264 ((((fun arg_tac -> (use_arg_then2 ("lim_inS_EL", [lim_inS_EL])) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1267 (* Finalization of the section VectorOfList_Sets *)
1268 let lim_inS_EL = Sections.finalize_theorem lim_inS_EL;;
1269 let lim_inS_eq = Sections.finalize_theorem lim_inS_eq;;
1270 let max_onS = Sections.finalize_theorem max_onS;;
1271 let closedNormS = Sections.finalize_theorem closedNormS;;
1272 let closedS = Sections.finalize_theorem closedS;;
1273 let compactS = Sections.finalize_theorem compactS;;
1274 let set_of_listS = Sections.finalize_theorem set_of_listS;;
1275 let scriptL_eq = Sections.finalize_theorem scriptL_eq;;
1276 let scriptL_continuous = Sections.finalize_theorem scriptL_continuous;;
1277 let min_dist_k_continuous = Sections.finalize_theorem min_dist_k_continuous;;
1278 Sections.end_section "VectorOfList_Sets";;
1280 (* Section FNJLBXS *)
1281 Sections.begin_section "FNJLBXS";;
1283 (* Lemma sup_in_unions *)
1284 let sup_in_unions = Sections.section_proof ["f";"S"]
1285 `FINITE S ==> ~(UNIONS S = {}) /\
1286 (!s. s IN S ==> s = {} \/ ?u. u IN s /\ (!y. y IN s ==> f y <= f u)) ==>
1287 ?v. v IN UNIONS S /\ (!y. y IN UNIONS S ==> f y <= f v)`
1289 ((((use_arg_then2 ("S", [])) (disch_tac [])) THEN (clear_assumption "S") THEN ((use_arg_then2 ("FINITE_INDUCT_STRONG", [FINITE_INDUCT_STRONG])) (thm_tac apply_tac))) THEN (((repeat_tactic 0 10 (((use_arg_then2 ("UNIONS_0", [UNIONS_0]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["t"]) THEN (move ["S"]) THEN (case THEN (move ["IH"])) THEN (case THEN (move ["tnS"])) THEN (move ["finS"])));
1290 (((repeat_tactic 1 9 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL UNIONS_INSERT)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["not_empty"])) THEN (move ["h"]));
1291 (((use_arg_then2 ("IH", [])) (disch_tac [])) THEN (clear_assumption "IH") THEN ((fun arg_tac -> arg_tac (Arg_term (`UNIONS S = {}`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1292 ((fun arg_tac -> arg_tac (Arg_term (`~(t = {})`))) (term_tac (have_gen_tac [](move ["t_not_empty"]))));
1293 ((((use_arg_then2 ("not_empty", [])) (disch_tac [])) THEN (clear_assumption "not_empty") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("UNION_EMPTY", [UNION_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1294 ((((fun arg_tac -> (use_arg_then2 ("h", [])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("t_not_empty", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (done_tac));
1295 ((THENL_FIRST) (ANTS_TAC) ((BETA_TAC THEN (move ["s"]) THEN (move ["sS"])) THEN (((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN (DISCH_THEN apply_tac)) THEN (done_tac)));
1296 ((BETA_TAC THEN (case THEN (move ["u1"])) THEN (case THEN (move ["u1_in"])) THEN (move ["u1_ineq"])) THEN (((fun arg_tac -> (use_arg_then2 ("h", [])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (simp_tac)));
1297 (((fun arg_tac -> arg_tac (Arg_term (`t = {}`))) (disch_eq_tac "t_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1298 (((use_arg_then2 ("u1", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("u1_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("t_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (done_tac));
1299 ((((fun arg_tac -> (use_arg_then2 ("h", [])) (fun fst_arg -> (use_arg_then2 ("t", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (simp_tac)) THEN (((((use_arg_then2 ("t_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ALL_TAC THEN (case THEN (move ["u0"])) THEN (case THEN (move ["u0t"])) THEN (move ["u0_ineq"])));
1300 ((THENL) (((fun arg_tac -> arg_tac (Arg_term (`f u1 <= f u0`))) (disch_eq_tac "ineq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) [((use_arg_then2 ("u0", [])) (term_tac exists_tac)); ((use_arg_then2 ("u1", [])) (term_tac exists_tac))]);
1301 (((((use_arg_then2 ("u0t", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["y"]));
1302 ((((THENL) case [(DISCH_THEN (fun snd_th -> (use_arg_then2 ("u0_ineq", [])) (thm_tac (match_mp_then snd_th MP_TAC)))); (DISCH_THEN (fun snd_th -> (use_arg_then2 ("u1_ineq", [])) (thm_tac (match_mp_then snd_th MP_TAC))))]) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("ineq", [])) (disch_tac [])) THEN (clear_assumption "ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1303 (((((use_arg_then2 ("u1_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["y"]));
1304 ((((THENL) case [(DISCH_THEN (fun snd_th -> (use_arg_then2 ("u0_ineq", [])) (thm_tac (match_mp_then snd_th MP_TAC)))); (DISCH_THEN (fun snd_th -> (use_arg_then2 ("u1_ineq", [])) (thm_tac (match_mp_then snd_th MP_TAC))))]) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("ineq", [])) (disch_tac [])) THEN (clear_assumption "ineq") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1306 let type150 = define_finite_type 150;;
1308 (* Lemma type150_ineq *)
1309 let type150_ineq = Sections.section_proof []
1310 `!k. k <= 43 ==> 3 * k <= dimindex (:150)`
1312 ((((fun arg_tac -> (use_arg_then2 ("DIMINDEX_UNIQUE", [DIMINDEX_UNIQUE])) (fun fst_arg -> (use_arg_then2 ("type150", [type150])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1315 (* Lemma scriptL_attains_max_in_ball_annulus *)
1316 let scriptL_attains_max_in_ball_annulus = Sections.section_proof []
1317 `?W. packing W /\ W SUBSET ball_annulus /\
1318 (!V. packing V /\ V SUBSET ball_annulus ==> scriptL V <= scriptL W)`
1320 ((fun arg_tac -> arg_tac (Arg_term (`\k. {V | packing V /\ V SUBSET ball_annulus /\ CARD V = k}`))) (term_tac (set_tac "G")));
1321 ((fun arg_tac -> arg_tac (Arg_term (`packing V /\ V SUBSET ball_annulus <=> V IN UNIONS (IMAGE G (0..43))`))) (term_tac (have_gen_tac ["V"](move ["in_eq"]))));
1322 (((((use_arg_then2 ("UNIONS_IMAGE", [UNIONS_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("G_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN ((THENL) (split_tac) [(case THEN ((move ["packV"]) THEN (move ["subV"]))); ((case THEN (move ["k"])) THEN (simp_tac))]));
1323 (((fun arg_tac -> arg_tac (Arg_term (`CARD V`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("subV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("packV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("card_packing_ball_annulus", [card_packing_ball_annulus]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1324 (((((use_arg_then2 ("CONJ_ASSOC", [CONJ_ASSOC]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("sup_in_unions", [sup_in_unions]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FINITE_IMAGE", [FINITE_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_NUMSEG", [FINITE_NUMSEG]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
1325 (((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("UNIONS_IMAGE", [UNIONS_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("G_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (((fun arg_tac -> arg_tac (Arg_term (`{}`))) (term_tac exists_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`0`))) (term_tac exists_tac))));
1326 ((THENL_FIRST) (split_tac) ((arith_tac) THEN (done_tac)));
1327 (((((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("packing_empty", [packing_empty]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EMPTY_SUBSET", [EMPTY_SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1328 (((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_NUMSEG", [IN_NUMSEG]))(thm_tac (new_rewrite [] []))))) THEN (move ["s"]) THEN (case THEN (move ["k"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["k_ineq"]));
1329 (((fun arg_tac -> arg_tac (Arg_term (`G k = {}`))) (disch_eq_tac "Gk_n_empty" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1330 ((((fun arg_tac -> (use_arg_then2 ("type150_ineq", [type150_ineq])) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("k_ineq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["dim_ge"])));
1331 ((fun arg_tac -> arg_tac (Arg_term (`{l | set_of_list l SUBSET ball_annulus /\ packing (set_of_list l) /\
1332 LENGTH l = k /\ uniq l}`))) (term_tac (set_tac "S")));
1333 ((THENL_FIRST) ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("set_of_listS", [set_of_listS])) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((THENL) (ANTS_TAC) [ALL_TAC; (move ["inS"])])) (((((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
1334 ((fun arg_tac -> arg_tac (Arg_term (`G k = IMAGE set_of_list S`))) (term_tac (have_gen_tac [](move ["Gk_eq"]))));
1335 (((((use_arg_then2 ("G_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inS", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1336 ((THENL_FIRST) ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("max_onS", [max_onS])) (fun fst_arg -> (use_arg_then2 ("S", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC)) (((((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
1337 ((THENL_FIRST) (ANTS_TAC) (((((fun arg_tac -> (use_arg_then2 ("compactS", [compactS])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
1338 ((THENL_FIRST) (ANTS_TAC) (((((fun arg_tac -> (use_arg_then2 ("IMAGE_EQ_EMPTY", [IMAGE_EQ_EMPTY])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`set_of_list`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Gk_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
1339 ((((use_arg_then2 ("Gk_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (DISCH_THEN apply_tac) THEN ((((fun arg_tac -> (use_arg_then2 ("scriptL_continuous", [scriptL_continuous])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1343 let FNJLBXS = Sections.section_proof ["V"]
1344 `packing V /\ V SUBSET ball_annulus ==>
1345 (?W phi. BIJ phi V W /\ packing W /\ W SUBSET ball_annulus /\ (!v. v IN V ==> norm(v) = norm(phi v)) /\
1346 (!w. w IN W ==> (set_of_edge w W (ESTD W) = {}) \/ (surrounded_node (W,(ESTD W)) w)))`
1348 (BETA_TAC THEN (case THEN ((move ["packV"]) THEN (move ["subV"]))));
1349 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("card_packing_ball_annulus", [card_packing_ball_annulus])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("type150_ineq", [type150_ineq])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["dim_ge"]));
1350 ((fun arg_tac -> arg_tac (Arg_term (`CARD V`))) (term_tac (set_tac "k")));
1351 ((fun arg_tac -> arg_tac (Arg_term (`{l | set_of_list l SUBSET ball_annulus /\ packing (set_of_list l) /\ LENGTH l = k /\ uniq l}`))) (term_tac (set_tac "S")));
1352 ((fun arg_tac -> arg_tac (Arg_term (`{l | LENGTH l = k /\ (!i. i < k ==> norm (EL i l:real^3) = norm (EL i (list_of_set V)))}`))) (term_tac (set_tac "N")));
1353 ((fun arg_tac -> arg_tac (Arg_term (`IMAGE (vector_of_list 3) S INTER IMAGE (vector_of_list 3) N:real^150->bool`))) (term_tac (set_tac "R")));
1354 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["finV"])));
1355 ((fun arg_tac -> arg_tac (Arg_term (`compact R`))) (term_tac (have_gen_tac [](move ["compactR"]))));
1356 ((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("INTER_COMM", [INTER_COMM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CLOSED_INTER_COMPACT", [CLOSED_INTER_COMPACT]))(thm_tac (new_rewrite [] [])))));
1357 ((((fun arg_tac -> (use_arg_then2 ("compactS", [compactS])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1358 (((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("closedNormS", [closedNormS])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`\i. norm (EL i (list_of_set V))`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("N_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1359 ((fun arg_tac -> arg_tac (Arg_term (`~(R = {})`))) (term_tac (have_gen_tac [](move ["R_n_empty"]))));
1360 ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((fun arg_tac -> arg_tac (Arg_term (`vector_of_list 3 (list_of_set V)`))) (term_tac exists_tac)));
1361 ((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INTER", [IN_INTER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("N_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("FUN_IN_IMAGE", [FUN_IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LENGTH_LIST_OF_SET", [LENGTH_LIST_OF_SET]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1362 (((((use_arg_then2 ("SET_OF_LIST_OF_SET", [SET_OF_LIST_OF_SET]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("uniq_list_of_set", [uniq_list_of_set]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1363 ((fun arg_tac -> arg_tac (Arg_term (`\j. min_dist_k j o (list_of_vector 3 k:real^150 -> (real^3)list)`))) (term_tac (set_tac "f")));
1364 ((fun arg_tac -> arg_tac (Arg_term (`\j x. min_k j (mkseq (\i. f i x) k)`))) (term_tac (set_tac "c")));
1365 ((fun arg_tac -> arg_tac (Arg_term (`(lift o c j) continuous_on R`))) (term_tac (have_gen_tac ["j"](move ["c_cont"]))));
1366 (((((use_arg_then2 ("CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN", [CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REAL_CONTINUOUS_CONTINUOUS1)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["x"]) THEN (move ["xR"]));
1367 (((((use_arg_then2 ("c_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("min_k_continuous", [min_k_continuous]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_lt_k"]));
1368 (((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL REAL_CONTINUOUS_CONTINUOUS1)))(thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("CONTINUOUS_WITHIN_SUBSET", [CONTINUOUS_WITHIN_SUBSET])) (thm_tac apply_tac)));
1369 (((fun arg_tac -> arg_tac (Arg_term (`IMAGE (vector_of_list 3) S`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("INTER_SUBSET", [INTER_SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
1370 ((((use_arg_then2 ("xR", [])) (disch_tac [])) THEN (clear_assumption "xR") THEN BETA_TAC) THEN (((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INTER", [IN_INTER]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN ((move ["xS"]) THEN (move ["_"])))));
1371 ((((use_arg_then2 ("xS", [])) (disch_tac [])) THEN (clear_assumption "xS") THEN ((use_arg_then2 ("x", [])) (disch_tac [])) THEN (clear_assumption "x") THEN BETA_TAC) THEN (((use_arg_then2 ("CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN", [CONTINUOUS_ON_EQ_CONTINUOUS_WITHIN]))(gsym_then (thm_tac (new_rewrite [] []))))));
1372 (((((fun arg_tac -> (use_arg_then2 ("min_dist_k_continuous", [min_dist_k_continuous])) (fun fst_arg -> (use_arg_then2 ("dim_ge", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1373 ((fun arg_tac -> arg_tac (Arg_term (`\f s. {x:real^150 | x IN s /\ (!y. y IN s ==> f y <= f x)}`))) (term_tac (set_tac "sup_set")));
1374 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`sup_set f s SUBSET s`))) (term_tac (have_gen_tac ["f"; "s"](move ["sup_sub"])))) (((((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
1375 ((fun arg_tac -> arg_tac (Arg_term (`compact s /\ s SUBSET R ==> compact (sup_set (c j) s)`))) (term_tac (have_gen_tac ["j"; "s"](move ["sup_comp"]))));
1376 ((BETA_TAC THEN (case THEN ((move ["comp_s"]) THEN (move ["s_sub"])))) THEN ((((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
1377 (((((use_arg_then2 ("COMPACT_SUP_SET", [COMPACT_SUP_SET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("comp_s", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("CONTINUOUS_ON_SUBSET", [CONTINUOUS_ON_SUBSET])) (fun fst_arg -> (use_arg_then2 ("R", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s_sub", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ETA_AX", [ETA_AX]))(fun arg -> ONCE_REWRITE_TAC[get_arg_thm arg])))) THEN (done_tac));
1378 ((fun arg_tac -> arg_tac (Arg_term (`compact s /\ s SUBSET R /\ ~(s = {}) ==> ~(sup_set (c j) s = {})`))) (term_tac (have_gen_tac ["j"; "s"](move ["sup_n_empty"]))));
1379 (BETA_TAC THEN (case THEN (move ["comp_s"])) THEN (case THEN ((move ["s_sub"]) THEN (move ["s_n"]))));
1380 ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CONTINUOUS_ATTAINS_SUP", [CONTINUOUS_ATTAINS_SUP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("s_n", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("comp_s", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1381 ((repeat_tactic 1 9 (((use_arg_then2 ("ETA_AX", [ETA_AX]))(fun arg -> ONCE_REWRITE_TAC[get_arg_thm arg])))) THEN (((fun arg_tac -> (use_arg_then2 ("CONTINUOUS_ON_SUBSET", [CONTINUOUS_ON_SUBSET])) (fun fst_arg -> (use_arg_then2 ("R", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1382 ((fun arg_tac -> arg_tac (Arg_term (`?C. C 0 = sup_set (c 0) R /\ !i. C (SUC i) = sup_set (c i) (C i)`))) (term_tac (have_gen_tac [](case THEN ((move ["C"]) THEN (case THEN ((move ["C0"]) THEN (move ["CS"]))))))));
1383 ((general_rec_exists_tac) THEN (done_tac));
1384 ((fun arg_tac -> arg_tac (Arg_term (`compact (C i) /\ C i SUBSET R /\ ~(C i = {})`))) (term_tac (have_gen_tac ["i"](move ["C_props"]))));
1385 (((THENL) (((use_arg_then2 ("i", [])) (disch_tac [])) THEN (clear_assumption "i") THEN elim) [ALL_TAC; ALL_TAC; ALL_TAC; ((move ["i"]) THEN (move ["IH"]))]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("C0", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("CS", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sup_sub", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("sup_comp", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))));
1386 (((((use_arg_then2 ("sup_n_empty", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1387 (((((use_arg_then2 ("sup_n_empty", []))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))) THEN ((use_arg_then2 ("SUBSET_TRANS", [SUBSET_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`C i`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("IH", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_sub", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1388 ((fun arg_tac -> arg_tac (Arg_term (`i <= j:num ==> C j SUBSET C i`))) (term_tac (have_gen_tac ["i"; "j"](move ["C_sub"]))));
1389 (((THENL) (((use_arg_then2 ("j", [])) (disch_tac [])) THEN (clear_assumption "j") THEN ((use_arg_then2 ("i", [])) (disch_tac [])) THEN (clear_assumption "i") THEN case) [ALL_TAC; (move ["i"])]) THEN ((THENL) elim [ALL_TAC; ((move ["j"]) THEN (move ["jH"]))]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (TRY ((arith_tac))));
1390 ((BETA_TAC THEN (move ["_"])) THEN ((use_arg_then2 ("SUBSET_TRANS", [SUBSET_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`C j`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("CS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("jH", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("leq0n", [leq0n]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1391 ((THENL_FIRST) (((((use_arg_then2 ("leqSS", [leqSS]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq_eqVlt", [leq_eqVlt]))(thm_tac (new_rewrite [] []))))) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (move ["i_lt_j"])])) ((((use_arg_then2 ("SUBSET_REFL", [SUBSET_REFL]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1392 (((use_arg_then2 ("SUBSET_TRANS", [SUBSET_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`C j`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("CS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_sub", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("jH", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("ltE", [ltE]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1393 ((((fun arg_tac -> (use_arg_then2 ("C_props", [])) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["_"])) THEN (case THEN (move ["Ck_sub"])) THEN (case THEN (move ["w"])) THEN (move ["w_in"])));
1394 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Packing3.IN_TRANS", [Packing3.IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("w_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("Ck_sub", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
1395 (((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INTER", [IN_INTER]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("N_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN ALL_TAC) THEN (case THEN (move ["wl"])) THEN (case THEN (move ["w_eq"])) THEN (move ["wl_props"]) THEN (case THEN (move ["wl'"])) THEN (case THEN (move ["w_eq'"])) THEN (move ["wl'_props"]));
1396 ((fun arg_tac -> arg_tac (Arg_term (`wl' = wl`))) (term_tac (have_gen_tac [](move ["eq"]))));
1397 ((((use_arg_then2 ("w_eq", [])) (disch_tac [])) THEN (clear_assumption "w_eq") THEN BETA_TAC) THEN ((((use_arg_then2 ("w_eq'", []))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("f_equal", [f_equal])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`list_of_vector 3 k:real^150->(real^3)list`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac (match_mp_then snd_th MP_TAC))))));
1398 (((((use_arg_then2 ("wl'_props", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("wl_props", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("wl'_props", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1399 ((in_tac ["wl'_props"] false (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("w_eq'", [])) (disch_tac [])) THEN (clear_assumption "w_eq'") THEN ((use_arg_then2 ("eq", [])) (disch_tac [])) THEN (clear_assumption "eq") THEN BETA_TAC THEN (move ["_"]) THEN (move ["_"])));
1400 ((((fun arg_tac -> arg_tac (Arg_term (`set_of_list wl`))) (term_tac exists_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`\x. EL (indexl x (list_of_set V)) wl`))) (term_tac exists_tac))) THEN (split_tac));
1401 ((((fun arg_tac -> (use_arg_then2 ("SET_OF_LIST_OF_SET", [SET_OF_LIST_OF_SET])) (fun fst_arg -> (use_arg_then2 ("finV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((use_arg_then2 ("BIJ_from_lists", [BIJ_from_lists]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("uniq_list_of_set", [uniq_list_of_set]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1402 (((((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("LENGTH_LIST_OF_SET", [LENGTH_LIST_OF_SET]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1403 (((repeat_tactic 1 9 (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))) THEN ((THENL) (split_tac) [((move ["v"]) THEN (move ["vV"])); ((move ["y"]) THEN (move ["y_wl"]))]));
1404 ((simp_tac) THEN (((use_arg_then2 ("wl'_props", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("EL_index", [EL_index]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("MEM_LIST_OF_SET", [MEM_LIST_OF_SET]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1405 (((((use_arg_then2 ("k_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("LENGTH_LIST_OF_SET", [LENGTH_LIST_OF_SET]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("index_mem", [index_mem]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_LIST_OF_SET", [MEM_LIST_OF_SET]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1406 ((fun arg_tac -> arg_tac (Arg_term (`i <= k:num ==> w IN C i`))) (term_tac (have_gen_tac ["i"](move ["w_in_all"]))));
1407 ((BETA_TAC THEN (move ["i_le"])) THEN ((((fun arg_tac -> (use_arg_then2 ("Packing3.IN_TRANS", [Packing3.IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("w_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("C_sub", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1408 ((((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN ((move ["not_iso"]) THEN (move ["not_surr"])))));
1409 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`?wl'. wl' IN N /\ wl' IN S /\ (?n. n < k:num /\
1410 (!i. i < n ==> c i (vector_of_list 3 wl') = c i w) /\ c n w < c n (vector_of_list 3 wl'))`))) (term_tac (have_gen_tac []ALL_TAC))));
1411 (((((use_arg_then2 ("implybF", [implybF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_EXISTS_THM", [NOT_EXISTS_THM]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NOT_EXISTS_THM", [NOT_EXISTS_THM]))(thm_tac (new_rewrite [] []))))) THEN (move ["wl'"]));
1412 ((((fun arg_tac -> arg_tac (Arg_term (`wl' IN N`))) (disch_eq_tac "w'N" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) THEN (((fun arg_tac -> arg_tac (Arg_term (`wl' IN S`))) (disch_eq_tac "w'S" [])) THEN case THEN (simp_tac) THEN (move ["n"]) THEN (process_fst_eq_tac)));
1413 ((((use_arg_then2 ("implybF", [implybF]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["n_lt"])) THEN (case THEN (move ["ci_eq"])) THEN (move ["cn_lt"]));
1414 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`i <= n:num ==> vector_of_list 3 wl' IN C i`))) (term_tac (have_gen_tac ["i"](move ["w'C"])))));
1415 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`w IN C (SUC n)`))) (term_tac (have_gen_tac []ALL_TAC))) (((((fun arg_tac -> (use_arg_then2 ("Packing3.IN_TRANS", [Packing3.IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("w_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("C_sub", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ltE", [ltE]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
1416 ((((use_arg_then2 ("CS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))));
1417 ((DISJ2_TAC) THEN ((fun arg_tac -> arg_tac (Arg_term (`vector_of_list 3 wl'`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("w'C", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("leqnn", [leqnn]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1418 ((THENL_ROT (-1)) ((((THENL) (((use_arg_then2 ("i", [])) (disch_tac [])) THEN (clear_assumption "i") THEN elim) [ALL_TAC; ((move ["i"]) THEN (move ["IH"]))]) THEN (move ["i_le"])) THEN ((((fun arg_tac ->(use_arg_then2 ("C0", []))(fun tmp_arg1 -> (use_arg_then2 ("CS", []))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))))));
1419 ((THENL_FIRST) ((((use_arg_then2 ("IH", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))) ((((use_arg_then2 ("i_le", [])) (disch_tac [])) THEN (clear_assumption "i_le") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1420 ((THENL_FIRST) ((BETA_TAC THEN (move ["y"]) THEN (move ["y_in"])) THEN (((fun arg_tac -> (use_arg_then2 ("w_in_all", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`SUC i`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC)) ((((use_arg_then2 ("n_lt", [])) (disch_tac [])) THEN (clear_assumption "n_lt") THEN ((use_arg_then2 ("i_le", [])) (disch_tac [])) THEN (clear_assumption "i_le") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1421 (((((use_arg_then2 ("CS", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["_"])) THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("y_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)));
1422 (((((use_arg_then2 ("ci_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("ltE", [ltE]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1423 (((((use_arg_then2 ("R_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("IN_INTER", [IN_INTER]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("FUN_IN_IMAGE", [FUN_IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))))) THEN (move ["y"]) THEN (move ["yR"]));
1424 ((((fun arg_tac -> (use_arg_then2 ("w_in_all", [])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("leq0n", [leq0n])) (fun fst_arg -> (use_arg_then2 ("k", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("C0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sup_set_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["_"])) THEN ((fun arg_tac -> (conv_thm_tac DISCH_THEN) (fun fst_arg -> (use_arg_then2 ("yR", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC))));
1425 ((THENL_LAST) (((fun arg_tac -> arg_tac (Arg_term (`n = 0`))) (disch_eq_tac "n_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) (((((use_arg_then2 ("ci_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("lt0n", [lt0n]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1426 ((((use_arg_then2 ("cn_lt", [])) (disch_tac [])) THEN (clear_assumption "cn_lt") THEN BETA_TAC) THEN (((use_arg_then2 ("n_eq", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1427 ((((use_arg_then2 ("y_wl", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["r"])) THEN (case THEN (move ["r_lt"])) THEN (move ["y_eq"])));
1428 ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k r wl`))) (term_tac (set_tac "dy")));
1429 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`sizel wl = k`))) (term_tac (have_gen_tac [](move ["size_eq"])))) (((((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1430 ((fun arg_tac -> arg_tac (Arg_term (`?e. &0 < e /\ (!i. i < k /\ ~(i = r) ==> dist (EL i wl, y) = dy \/ dy + e <= dist (EL i wl, y))`))) (term_tac (have_gen_tac [](case THEN ((move ["e"]) THEN (case THEN ((move ["e_gt0"]) THEN (move ["e_cond"]))))))));
1431 ((fun arg_tac -> arg_tac (Arg_term (`map (\v. dist (v, y)) wl`))) (term_tac (set_tac "dl")));
1432 ((fun arg_tac -> arg_tac (Arg_term (`\x. x = &0 \/ x = dy`))) (term_tac (set_tac "a")));
1433 ((fun arg_tac -> arg_tac (Arg_term (`if all a dl then &1 else min_k 0 (filter (predC a) dl) - dy`))) (term_tac (set_tac "e")));
1434 ((use_arg_then2 ("e", [])) (term_tac exists_tac));
1435 ((fun arg_tac -> arg_tac (Arg_term (`!i. i < k ==> dist (EL i wl, y) <- dl`))) (term_tac (have_gen_tac [](move ["in_dl"]))));
1436 ((BETA_TAC THEN (move ["i"]) THEN (move ["i_ineqs"])) THEN ((((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dl_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_map", [size_map]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))));
1437 (((use_arg_then2 ("i", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("EL_map", [EL_map]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
1438 ((fun arg_tac -> arg_tac (Arg_term (`!i. i < k ==> (dist (EL i wl, y) = &0 <=> i = r)`))) (term_tac (have_gen_tac [](move ["dist_n0"]))));
1439 ((THENL_LAST) ((BETA_TAC THEN (move ["i"]) THEN (move ["i_lt"])) THEN ((THENL) (split_tac) [ALL_TAC; (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))])) (((((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1440 (((((use_arg_then2 ("DIST_EQ_0", [DIST_EQ_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("EL_nth", [EL_nth])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("nth_uniq", [nth_uniq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1441 (((use_arg_then2 ("e_def", [])) (disch_tac [])) THEN (clear_assumption "e_def") THEN ((fun arg_tac -> arg_tac (Arg_term (`all a dl`))) (disch_eq_tac "all_dl" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1442 ((BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (move ["i_lt"])) THEN (DISJ1_TAC));
1443 ((in_tac ["all_dl"] false ((((use_arg_then2 ("allP", [allP]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac))) THEN (((fun arg_tac -> (use_arg_then2 ("all_dl", [])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dist (EL i wl, y)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC));
1444 (((((use_arg_then2 ("in_dl", []))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("dist_n0", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1445 (in_tac ["all_dl"] false ((((use_arg_then2 ("has_predC", [has_predC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("has_count", [has_count]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("count_filter", [count_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))));
1446 (((fun arg_tac -> arg_tac (Arg_term (`filter _1 _2`))) (term_tac (set_tac "dl2"))) THEN (BETA_TAC THEN (move ["e_eq"])) THEN (split_tac));
1447 ((((fun arg_tac -> (use_arg_then2 ("mem_min_k", [mem_min_k])) (fun fst_arg -> (use_arg_then2 ("all_dl", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("dl2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dl2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))));
1448 (((((use_arg_then2 ("dl_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("mapP", [mapP]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["neq"])) THEN (case THEN (move ["v"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["i"])) THEN (case THEN (move ["i_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (move ["eq"]));
1449 ((((use_arg_then2 ("e_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_SUB_LT", [REAL_SUB_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_LE", [REAL_LT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("neq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("dy_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))));
1450 (((((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("i_lt", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_n0", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1451 ((BETA_TAC THEN (move ["i"]) THEN (case THEN ((move ["i_lt"]) THEN (move ["n_ir"])))) THEN (((fun arg_tac -> arg_tac (Arg_term (`_1 = _2`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
1452 ((fun arg_tac -> arg_tac (Arg_term (`dist (EL i wl, y) <- dl2`))) (term_tac (have_gen_tac []ALL_TAC)));
1453 (((((use_arg_then2 ("dl2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("mem_filter", [mem_filter]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_dl", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("predC", [predC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_n0", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1454 (((((use_arg_then2 ("e_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_SUB_ADD2", [REAL_SUB_ADD2]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["j"])) THEN (case THEN (move ["j_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
1455 ((((use_arg_then2 ("min_k0_le_EL", [min_k0_le_EL]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1456 ((fun arg_tac -> arg_tac (Arg_term (`set_of_list wl`))) (term_tac (set_tac "W")));
1457 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`y IN W`))) (term_tac (have_gen_tac [](move ["yW"])))) (((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1458 ((((fun arg_tac -> (use_arg_then2 ("Ckqowsa.CKQOWSA", [Ckqowsa.CKQOWSA])) (fun fst_arg -> (use_arg_then2 ("W", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN ((THENL) (ANTS_TAC) [ALL_TAC; (move ["fanW"])]));
1459 ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN (done_tac));
1460 ((fun arg_tac -> arg_tac (Arg_term (`2 <= k`))) (term_tac (have_gen_tac [](move ["k_ge2"]))));
1461 ((((use_arg_then2 ("not_iso", [])) (disch_tac [])) THEN (clear_assumption "not_iso") THEN BETA_TAC) THEN ((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ESTD", [ESTD]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)));
1462 (BETA_TAC THEN (case THEN (move ["u"])) THEN (case THEN (move ["v"])) THEN (case THEN ALL_TAC) THEN (case THEN ALL_TAC) THEN (case THEN (move ["u'"])) THEN (case THEN (move ["v'"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["u'W"])) THEN (case THEN (move ["v'W"])) THEN (case THEN (move ["neq_uv'"])) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]));
1463 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`2 <= CARD W`))) (term_tac (have_gen_tac []ALL_TAC)))) (((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("card_set_of_list_uniq", [card_set_of_list_uniq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1464 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Hypermap.CARD_TWO_ELEMENTS", [Hypermap.CARD_TWO_ELEMENTS])) (fun fst_arg -> (use_arg_then2 ("v'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("u'", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("CARD_SUBSET", [CARD_SUBSET]))(thm_tac (new_rewrite [] [])))));
1465 ((((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((use_arg_then2 ("FINITE_SET_OF_LIST", [FINITE_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["x"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1466 ((THENL_FIRST) (((fun arg_tac -> (use_arg_then2 ("packing_eq_min_dist", [packing_eq_min_dist])) (fun fst_arg -> (use_arg_then2 ("wl", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN (ANTS_TAC)) ((((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1467 (((((use_arg_then2 ("W_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN (move ["min_dist_ge"]));
1468 ((fun arg_tac -> arg_tac (Arg_term (`dy <= &2 * h0`))) (term_tac (have_gen_tac [](move ["dy_le"]))));
1469 ((((use_arg_then2 ("not_iso", [])) (disch_tac [])) THEN (clear_assumption "not_iso") THEN BETA_TAC) THEN ((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ESTD", [ESTD]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("dy_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))));
1470 (BETA_TAC THEN (case THEN (move ["u"])) THEN (case THEN (move ["v"])) THEN (case THEN ALL_TAC) THEN (case THEN ALL_TAC) THEN (case THEN (move ["u'"])) THEN (case THEN (move ["v'"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["u'W"])) THEN (case THEN (move ["v'W"])) THEN (case THEN (move ["neq_uv'"])) THEN (move ["dist_le"]));
1471 ((((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Geomdetail.PAIR_EQ_EXPAND)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))));
1472 (BETA_TAC THEN (move ["eq_cases"]) THEN (case THEN (move ["i"])) THEN (case THEN (move ["i_lt"])) THEN (move ["v_eq"]) THEN (move ["_"]));
1473 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "ir" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("neq_uv'", [])) (disch_tac [])) THEN (clear_assumption "neq_uv'") THEN ((use_arg_then2 ("eq_cases", [])) (disch_tac [])) THEN (clear_assumption "eq_cases") THEN case THEN (move ["eq"])) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("v_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ir", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1474 ((((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`dist (u',v')`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dist_le", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
1475 ((((use_arg_then2 ("eq_cases", [])) (disch_tac [])) THEN (clear_assumption "eq_cases") THEN case THEN (move ["eq"])) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (use_arg_then2 ("y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("v_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1476 ((fun arg_tac -> arg_tac (Arg_term (`{w | w IN W /\ dist (w, y) = dy}`))) (term_tac (set_tac "X")));
1477 (in_tac ["r_lt"] false (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] [])))));
1478 ((fun arg_tac -> arg_tac (Arg_term (`w IN X ==> w IN set_of_edge y W (ESTD W)`))) (term_tac (have_gen_tac ["w"](move ["subX"]))));
1479 (((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ESTD", [ESTD]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN ALL_TAC THEN (case THEN (move ["v"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["vW"])) THEN (move ["dist_eq"]) THEN (move ["eq"]));
1480 (((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
1481 ((((use_arg_then2 ("y", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("v", [])) (term_tac exists_tac))) THEN ((((use_arg_then2 ("vW", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("yW", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dy_le", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("DIST_EQ_0", [DIST_EQ_0]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] []))))));
1482 ((((fun arg_tac -> (use_arg_then2 ("min_dist_ge", [])) (fun fst_arg -> (use_arg_then2 ("r_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("dy_def", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1483 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`w IN X ==> dist (w, y) = dy /\ w IN W`))) (term_tac (have_gen_tac ["w"](move ["inX"])))) (((((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac)));
1484 ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("not_surrounded_imp_on_one_side_of_plane", [not_surrounded_imp_on_one_side_of_plane])) (fun fst_arg -> (use_arg_then2 ("fanW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("yW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("not_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("not_iso", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1485 (BETA_TAC THEN (case THEN (move ["b"])) THEN (case THEN (move ["b_n0"])) THEN (case THEN (move ["y_dot_b"])) THEN (move ["b_cond"]));
1486 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("perturbation_lemma", [perturbation_lemma])) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("b_n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("y_dot_b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("X", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN ((THENL) (ANTS_TAC) [((move ["w"]) THEN (move ["wX"])); ALL_TAC]));
1487 ((((use_arg_then2 ("b_cond", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("subX", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_gt", [real_gt]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Ckqowsa_3_points.dot_pos_lemma", [Ckqowsa_3_points.dot_pos_lemma]))(thm_tac (new_rewrite [] [])))));
1488 ((((use_arg_then2 ("inX", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dy_le", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))));
1489 ((in_tac ["wl_props"] false (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("wl_props", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("yW", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("inX", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1490 (((use_arg_then2 ("b_n0", [])) (disch_tac [])) THEN (clear_assumption "b_n0") THEN ((use_arg_then2 ("y_dot_b", [])) (disch_tac [])) THEN (clear_assumption "y_dot_b") THEN ((use_arg_then2 ("b_cond", [])) (disch_tac [])) THEN (clear_assumption "b_cond") THEN BETA_TAC THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]));
1491 (BETA_TAC THEN (case THEN (move ["u"])) THEN (case THEN (move ["norm_u"])) THEN (case THEN (move ["dist_uX"])) THEN (move ["dist_yu"]));
1492 ((fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. if i = r then u else EL i wl) k`))) (term_tac (set_tac "ul")));
1493 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`sizel ul = k`))) (term_tac (have_gen_tac [](move ["size_ul"])))) (((((use_arg_then2 ("ul_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1494 ((fun arg_tac -> arg_tac (Arg_term (`EL r ul = u /\ (!i. i < k /\ ~(i = r) ==> EL i ul = EL i wl)`))) (term_tac (have_gen_tac [](move ["el_ul"]))));
1495 ((((((use_arg_then2 ("ul_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac))) THEN (move ["i"]) THEN (move ["i_ineqs"])) THEN (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1496 (((use_arg_then2 ("sup_comp", [])) (disch_tac [])) THEN (clear_assumption "sup_comp") THEN ((use_arg_then2 ("sup_sub", [])) (disch_tac [])) THEN (clear_assumption "sup_sub") THEN ((use_arg_then2 ("sup_set_def", [])) (disch_tac [])) THEN (clear_assumption "sup_set_def") THEN ((use_arg_then2 ("R_n_empty", [])) (disch_tac [])) THEN (clear_assumption "R_n_empty") THEN ((use_arg_then2 ("compactR", [])) (disch_tac [])) THEN (clear_assumption "compactR") THEN ((use_arg_then2 ("R_def", [])) (disch_tac [])) THEN (clear_assumption "R_def") THEN ((use_arg_then2 ("subV", [])) (disch_tac [])) THEN (clear_assumption "subV") THEN ((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN BETA_TAC THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]));
1497 (((use_arg_then2 ("ul", [])) (term_tac exists_tac)) THEN (split_tac));
1498 (((((use_arg_then2 ("N_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["i"]) THEN (move ["i_lt"]));
1499 (((use_arg_then2 ("wl'_props", [])) (disch_tac [])) THEN (clear_assumption "wl'_props") THEN BETA_TAC THEN (case THEN (move ["_"])) THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1500 ((((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "ir" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("ir", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("y_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
1501 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k r wl < min_dist_k r ul /\
1502 (!i. i < k /\ ~(i = r) /\ min_dist_k i wl <= dy ==> min_dist_k i wl <= min_dist_k i ul) /\
1503 (!i. i < k /\ ~(i = r) /\ dy < min_dist_k i wl ==> dy < min_dist_k i ul)`))) (term_tac (have_gen_tac []ALL_TAC))));
1504 (BETA_TAC THEN (case THEN (move ["dist_r"])) THEN (case THEN (move ["dist_le"])) THEN (move ["dist_gt"]));
1505 ((THENL_ROT (-1)) (split_tac));
1506 ((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("c_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("min_k", [min_k]))(thm_tac (new_rewrite [] []))))));
1507 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`k = sizel (mkseq (\i. f i w) k)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [1] []))))))) ((((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1508 ((((use_arg_then2 ("real_sorted_lt2", [real_sorted_lt2])) (disch_tac [])) THEN (clear_assumption "real_sorted_lt2") THEN (DISCH_THEN apply_tac)) THEN (((fun arg_tac -> arg_tac (Arg_term (`mkseq (\i. f i (vector_of_list 3 ul)) k`))) (term_tac exists_tac)) THEN ((use_arg_then2 ("r", [])) (term_tac exists_tac))));
1509 ((repeat_tactic 1 9 (((use_arg_then2 ("real_merge_sort", [real_merge_sort]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("size_mkseq", [size_mkseq]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("r_lt", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)));
1510 (((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("w_eq", []))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
1511 (((((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("size_ul", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("size_ul", []))(fun tmp_arg1 -> (use_arg_then2 ("size_eq", []))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1512 (((split_tac) THEN (move ["i"]) THEN (case THEN (move ["i_lt"]))) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("EL_mkseq", [EL_mkseq]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac)) THEN (((use_arg_then2 ("size_eq", []))(gsym_then (thm_tac (new_rewrite [1; 2; 3] []))))) THEN (((use_arg_then2 ("size_ul", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size", [size]))(thm_tac (new_rewrite [] []))))) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("vector_of_list_left_inverse", [vector_of_list_left_inverse]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("DIMINDEX_3", [DIMINDEX_3]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("size_ul", []))(fun tmp_arg1 -> (use_arg_then2 ("size_eq", []))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dy_def", []))(thm_tac (new_rewrite [] []))))) THEN (move ["h"])));
1513 ((THENL_LAST) (((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("dist_le", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1514 (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1515 ((THENL_LAST) (((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("dist_gt", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1516 (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dy_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1517 (((((use_arg_then2 ("S_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] []))))) THEN ((THENL) (split_tac) [(move ["v"]); ALL_TAC]));
1518 (((((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EXISTS_EL", [MEM_EXISTS_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["i"])) THEN (case THEN (move ["i_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
1519 ((((use_arg_then2 ("wl_props", [])) (disch_tac [])) THEN (clear_assumption "wl_props") THEN BETA_TAC) THEN (((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["in_ba"])) THEN (move ["_"])));
1520 ((THENL_LAST) (((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) (((repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_ba", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1521 (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_u", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_ba", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1522 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!i. i < sizel ul ==> &2 <= min_dist_k i ul`))) (term_tac (have_gen_tac [](move ["ge2"])))));
1523 ((((((fun arg_tac -> (use_arg_then2 ("min_dist_imp_packing", [min_dist_imp_packing])) (fun fst_arg -> (use_arg_then2 ("ge2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("min_dist_imp_uniq", [min_dist_imp_uniq]))(thm_tac (new_rewrite [] []))))) THEN (move ["i"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("ge2", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (arith_tac) THEN (done_tac));
1524 ((((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] [])))) THEN (move ["i"]) THEN (move ["i_lt"]));
1525 (((fun arg_tac -> arg_tac (Arg_term (`i = r`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1526 ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN ((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("dy", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dy_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("min_dist_ge", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1527 (((fun arg_tac -> arg_tac (Arg_term (`dy < min_dist_k i wl`))) (disch_eq_tac "neq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1528 (((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("dy", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("dy_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("min_dist_ge", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dist_gt", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1529 (((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k i wl`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("min_dist_ge", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dist_le", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1530 (((use_arg_then2 ("C0", [])) (disch_tac [])) THEN (clear_assumption "C0") THEN ((use_arg_then2 ("sup_n_empty", [])) (disch_tac [])) THEN (clear_assumption "sup_n_empty") THEN ((use_arg_then2 ("c_cont", [])) (disch_tac [])) THEN (clear_assumption "c_cont") THEN ((use_arg_then2 ("c_def", [])) (disch_tac [])) THEN (clear_assumption "c_def") THEN ((use_arg_then2 ("f_def", [])) (disch_tac [])) THEN (clear_assumption "f_def") THEN ((use_arg_then2 ("finV", [])) (disch_tac [])) THEN (clear_assumption "finV") THEN ((use_arg_then2 ("N_def", [])) (disch_tac [])) THEN (clear_assumption "N_def") THEN ((use_arg_then2 ("S_def", [])) (disch_tac [])) THEN (clear_assumption "S_def") THEN ((use_arg_then2 ("k_def", [])) (disch_tac [])) THEN (clear_assumption "k_def") THEN ((use_arg_then2 ("dim_ge", [])) (disch_tac [])) THEN (clear_assumption "dim_ge") THEN BETA_TAC THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]));
1531 (((use_arg_then2 ("not_surr", [])) (disch_tac [])) THEN (clear_assumption "not_surr") THEN ((use_arg_then2 ("not_iso", [])) (disch_tac [])) THEN (clear_assumption "not_iso") THEN ((use_arg_then2 ("w_in_all", [])) (disch_tac [])) THEN (clear_assumption "w_in_all") THEN ((use_arg_then2 ("wl'_props", [])) (disch_tac [])) THEN (clear_assumption "wl'_props") THEN ((use_arg_then2 ("wl_props", [])) (disch_tac [])) THEN (clear_assumption "wl_props") THEN ((use_arg_then2 ("w_eq", [])) (disch_tac [])) THEN (clear_assumption "w_eq") THEN ((use_arg_then2 ("w_in", [])) (disch_tac [])) THEN (clear_assumption "w_in") THEN ((use_arg_then2 ("Ck_sub", [])) (disch_tac [])) THEN (clear_assumption "Ck_sub") THEN ((use_arg_then2 ("C_sub", [])) (disch_tac [])) THEN (clear_assumption "C_sub") THEN ((use_arg_then2 ("C_props", [])) (disch_tac [])) THEN (clear_assumption "C_props") THEN ((use_arg_then2 ("CS", [])) (disch_tac [])) THEN (clear_assumption "CS") THEN BETA_TAC THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]) THEN (move ["_"]));
1532 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`2 <= sizel ul /\ 2 <= sizel wl`))) (term_tac (have_gen_tac [](case THEN ((move ["ul_ge2"]) THEN (move ["wl_ge2"])))))) ((ALL_TAC) THEN (done_tac)));
1533 ((fun arg_tac -> arg_tac (Arg_term (`m < k /\ ~(m = r) ==> dy < dist (EL m wl, u)`))) (term_tac (have_gen_tac ["m"](move ["dist_m_u"]))));
1534 (BETA_TAC THEN (case THEN ((move ["m_lt"]) THEN (move ["m_neq"]))));
1535 (((fun arg_tac -> arg_tac (Arg_term (`EL m wl IN X`))) (disch_eq_tac "el_inX" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1536 ((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LET_TRANS", [REAL_LET_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LET_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`dist (y, EL m wl)`))) (term_tac exists_tac)));
1537 (((((use_arg_then2 ("dist_uX", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inX", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1538 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`EL m wl`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("u", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("y", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("dist_yu", [])) (disch_tac [])) THEN (clear_assumption "dist_yu") THEN BETA_TAC) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))));
1539 ((THENL_LAST) (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("e_cond", [])) (fun fst_arg -> (use_arg_then2 ("m_lt", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("m_neq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) ((arith_tac) THEN (done_tac)));
1540 ((((use_arg_then2 ("el_inX", [])) (disch_tac [])) THEN (clear_assumption "el_inX") THEN ((use_arg_then2 ("contraR", [contraR])) (disch_tac [])) THEN (clear_assumption "contraR") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN ((move ["dist_eq"]) THEN (move ["_"])))));
1541 (((((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_SET_OF_LIST", [IN_SET_OF_LIST]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("MEM_EL", [MEM_EL]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("size", [size]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1543 ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("ul_ge2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("r", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["m_neq"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))));
1544 (((repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dy_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_m_u", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1545 ((THENL_ROT (-1)) (((split_tac) THEN (move ["i"]) THEN (case THEN (move ["i_lt"])) THEN (case THEN (move ["i_neq"])) THEN (move ["ineq"])) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("min_dist_exists", [min_dist_exists])) (fun fst_arg -> (use_arg_then2 ("ul_ge2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("i", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("size_ul", []))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["m"])) THEN (case THEN (move ["m_lt"])) THEN (case THEN (move ["m_neq"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
1546 ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`m = r`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_m_u", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1547 (((repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN ((use_arg_then2 ("REAL_LTE_TRANS", [REAL_LTE_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`min_dist_k i wl`))) (term_tac exists_tac)));
1548 (((((use_arg_then2 ("ineq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1549 (((fun arg_tac -> arg_tac (Arg_term (`m = r`))) (disch_eq_tac "mr" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1550 (((((use_arg_then2 ("mr", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("dy", [])) (term_tac exists_tac)));
1551 (((((use_arg_then2 ("ineq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dist_m_u", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1552 (((repeat_tactic 1 9 (((use_arg_then2 ("el_ul", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("min_dist_min", [min_dist_min]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("size_eq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1555 (* Finalization of the section FNJLBXS *)
1556 let sup_in_unions = Sections.finalize_theorem sup_in_unions;;
1557 let type150_ineq = Sections.finalize_theorem type150_ineq;;
1558 let scriptL_attains_max_in_ball_annulus = Sections.finalize_theorem scriptL_attains_max_in_ball_annulus;;
1559 let FNJLBXS = Sections.finalize_theorem FNJLBXS;;
1560 Sections.end_section "FNJLBXS";;
1562 (* Section FCDJDOT *)
1563 Sections.begin_section "FCDJDOT";;
1565 (* Lemma not_surrounded_ECTC *)
1566 let not_surrounded_ECTC = Sections.section_proof ["V";"v"]
1567 `packing V /\ V SUBSET ball_annulus /\
1568 v IN V /\ ~(surrounded_node (V, ECTC V) v) ==>
1569 (?W f. BIJ f V W /\ packing W /\ W SUBSET ball_annulus /\
1570 (!u. u IN V ==> norm u = norm (f u)) /\
1571 set_of_edge (f v) W (ECTC W) = {})`
1573 (BETA_TAC THEN (case THEN (move ["packV"])) THEN (case THEN (move ["subV"])) THEN (case THEN (move ["vV"])) THEN (move ["n_surr"]));
1574 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["finV"])));
1575 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Tame_general.UBHDEUU2", [Tame_general.UBHDEUU2])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN ((THENL) (ANTS_TAC) [ALL_TAC; (move ["fanV"])]));
1576 ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN (done_tac));
1577 (((fun arg_tac -> arg_tac (Arg_term (`set_of_edge v V (ECTC V) = {}`))) (disch_eq_tac "n_iso" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1578 ((((use_arg_then2 ("V", [])) (term_tac exists_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`I`))) (term_tac exists_tac))) THEN ((((use_arg_then2 ("Hypermap.I_BIJ", [Hypermap.I_BIJ]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1579 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("not_surrounded_imp_on_one_side_of_plane", [not_surrounded_imp_on_one_side_of_plane])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n_iso", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["n"])) THEN (case THEN (move ["n_n0"])) THEN (case THEN (move ["v_dot_n"])) THEN (move ["w_dot_n"]));
1580 ((fun arg_tac -> arg_tac (Arg_term (`set_of_edge v V (ECTC V)`))) (term_tac (set_tac "X")));
1581 ((fun arg_tac -> arg_tac (Arg_term (`(V DELETE v) DIFF X`))) (term_tac (set_tac "Y")));
1582 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`FINITE Y`))) (term_tac (have_gen_tac [](move ["finY"])))) (((((use_arg_then2 ("Y_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("FINITE_DIFF", [FINITE_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1583 ((fun arg_tac -> arg_tac (Arg_term (`y IN Y <=> y IN V /\ &2 < dist (y, v)`))) (term_tac (have_gen_tac ["y"](move ["inY"]))));
1584 ((THENL_ROT (-1)) (((((use_arg_then2 ("Y_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_set_of_edge_ECTC", [in_set_of_edge_ECTC]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] []))))) THEN (split_tac)));
1585 ((THENL_LAST) ((BETA_TAC THEN (case THEN ((move ["yV"]) THEN (move ["dist_gt"])))) THEN ((((use_arg_then2 ("yV", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (split_tac)) ((((use_arg_then2 ("dist_gt", [])) (disch_tac [])) THEN (clear_assumption "dist_gt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1586 ((((use_arg_then2 ("dist_gt", [])) (disch_tac [])) THEN (clear_assumption "dist_gt") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1587 ((BETA_TAC THEN (case THEN ALL_TAC) THEN (case THEN (move ["yV"])) THEN (move ["ynv"])) THEN (((((use_arg_then2 ("yV", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_LT_LE", [REAL_LT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
1588 ((in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN (DISCH_THEN apply_tac)) THEN (done_tac));
1589 ((fun arg_tac -> arg_tac (Arg_term (`x IN X <=> x IN V /\ dist (x, v) = &2`))) (term_tac (have_gen_tac ["x"](move ["inX"]))));
1590 (((((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_set_of_edge_ECTC", [in_set_of_edge_ECTC]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1591 ((fun arg_tac -> arg_tac (Arg_term (`y IN V /\ ~(y = v) /\ ~(y IN Y) ==> y IN X`))) (term_tac (have_gen_tac ["y"](move ["not_inY"]))));
1592 ((((((use_arg_then2 ("Y_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1593 ((fun arg_tac -> arg_tac (Arg_term (`if Y = {} then &1 else min (&1) (inf (IMAGE (\x. dist (x,v) - &2) Y))`))) (term_tac (set_tac "e")));
1594 ((fun arg_tac -> arg_tac (Arg_term (`&0 < e`))) (term_tac (have_gen_tac [](move ["e_gt0"]))));
1595 ((THENL_FIRST) ((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_term (`Y = {}`))) (disch_eq_tac "Y0" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac))) (((use_arg_then2 ("REAL_LT_01", [REAL_LT_01])) (disch_tac [])) THEN (clear_assumption "REAL_LT_01") THEN (exact_tac)));
1596 ((((use_arg_then2 ("REAL_LT_MIN", [REAL_LT_MIN]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
1597 (((((use_arg_then2 ("REAL_LT_INF_FINITE", [REAL_LT_INF_FINITE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_IMAGE", [FINITE_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IMAGE_EQ_EMPTY", [IMAGE_EQ_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["x"]) THEN (case THEN (move ["y"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))));
1598 ((((use_arg_then2 ("inY", []))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1599 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`e <= &1`))) (term_tac (have_gen_tac [](move ["e_le1"])))) ((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac)));
1600 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("perturbation_lemma", [perturbation_lemma])) (fun fst_arg -> (use_arg_then2 ("X", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n_n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v_dot_n", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (ANTS_TAC));
1601 ((BETA_TAC THEN (move ["w"]) THEN (move ["wX"])) THEN ((((use_arg_then2 ("w_dot_n", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
1602 ((((use_arg_then2 ("wX", [])) (disch_tac [])) THEN (clear_assumption "wX") THEN ((use_arg_then2 ("subV", [])) (disch_tac [])) THEN (clear_assumption "subV") THEN BETA_TAC) THEN (((((use_arg_then2 ("X_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_set_of_edge_ECTC", [in_set_of_edge_ECTC]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_gt", [real_gt]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["subV"]) THEN (case THEN ((move ["wV"]) THEN (move ["dist_eq"])))));
1603 ((((use_arg_then2 ("Ckqowsa_3_points.dot_pos_lemma", [Ckqowsa_3_points.dot_pos_lemma])) (disch_tac [])) THEN (clear_assumption "Ckqowsa_3_points.dot_pos_lemma") THEN (DISCH_THEN apply_tac)) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("subV", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_eq", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1604 (BETA_TAC THEN (case THEN (move ["u"])) THEN (case THEN (move ["norm_eq"])) THEN (case THEN (move ["dist_lt"])) THEN (move ["dist_vu"]));
1605 ((fun arg_tac -> arg_tac (Arg_term (`~(v = u)`))) (term_tac (have_gen_tac [](move ["n_vu"]))));
1606 ((((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] [])))) THEN (move ["v_eq_u"])));
1607 ((((use_arg_then2 ("n_iso", [])) (disch_tac [])) THEN (clear_assumption "n_iso") THEN BETA_TAC) THEN ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("dist_lt", [])) (thm_tac (match_mp_then snd_th MP_TAC))))));
1608 (((((use_arg_then2 ("v_eq_u", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_REFL", [REAL_LT_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1609 ((fun arg_tac -> arg_tac (Arg_term (`~(u IN V)`))) (term_tac (have_gen_tac [](move ["nuV"]))));
1610 ((((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] [])))) THEN (move ["uV"])) THEN (in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))));
1611 ((((use_arg_then2 ("e_le1", [])) (disch_tac [])) THEN (clear_assumption "e_le1") THEN ((use_arg_then2 ("dist_vu", [])) (disch_tac [])) THEN (clear_assumption "dist_vu") THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("packV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("uV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n_vu", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1612 ((fun arg_tac -> arg_tac (Arg_term (`u INSERT (V DELETE v)`))) (term_tac (set_tac "W")));
1613 ((fun arg_tac -> arg_tac (Arg_term (`\x. if x = v then u else x`))) (term_tac (set_tac "f")));
1614 ((((use_arg_then2 ("W", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("f", [])) (term_tac exists_tac))) THEN (split_tac));
1615 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`~(CARD V = 0)`))) (term_tac (have_gen_tac [](move ["card_n0"])))) (((((use_arg_then2 ("CARD_EQ_0", [CARD_EQ_0]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN (done_tac)));
1616 ((((use_arg_then2 ("Hypermap_iso.finite_surj_eq_bij", [Hypermap_iso.finite_surj_eq_bij]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_INSERT", [FINITE_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("finV", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1617 (((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("nuV", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("CARD_DELETE", [CARD_DELETE]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("vV", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (((use_arg_then2 ("card_n0", [])) (disch_tac [])) THEN (clear_assumption "card_n0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1618 (((((use_arg_then2 ("SURJ", [SURJ]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN ((THENL) (split_tac) [((move ["x"]) THEN (move ["xV"])); ALL_TAC]));
1619 ((((fun arg_tac -> arg_tac (Arg_term (`x = v`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) THEN ((((use_arg_then2 ("xV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1620 (((THENL) (BETA_TAC THEN (move ["x"]) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["xV"]) THEN (move ["xnv"])))])) [((use_arg_then2 ("v", [])) (term_tac exists_tac)); ((use_arg_then2 ("x", [])) (term_tac exists_tac))]) THEN (done_tac));
1621 ((fun arg_tac -> arg_tac (Arg_term (`x IN V ==> norm x = norm (f x)`))) (term_tac (have_gen_tac ["x"](move ["norm_eqV"]))));
1622 ((BETA_TAC THEN (move ["xV"])) THEN ((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (((fun arg_tac -> arg_tac (Arg_term (`x = v`))) (disch_eq_tac "eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) THEN ((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1623 ((fun arg_tac -> arg_tac (Arg_term (`!x. x IN V /\ ~(x = v) ==> &2 < dist (x, u)`))) (term_tac (have_gen_tac [](move ["dist_gt2"]))));
1624 ((BETA_TAC THEN (move ["x"]) THEN (case THEN ((move ["xV"]) THEN (move ["xnv"])))) THEN (in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))));
1625 ((THENL_ROT (-1)) (((fun arg_tac -> arg_tac (Arg_term (`x IN Y`))) (disch_eq_tac "xY" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
1626 (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] []))));
1627 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("not_inY", [])) (fun fst_arg -> (use_arg_then2 ("xY", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("xV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("xnv", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("dist_lt", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("REAL_LET_TRANS", [REAL_LET_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN (DISCH_THEN apply_tac)) THEN (done_tac));
1628 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`~(Y = {})`))) (term_tac (have_gen_tac [](move ["Yn0"])))) ((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac)) THEN (done_tac)));
1629 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("packV", [])) (fun fst_arg -> (use_arg_then2 ("xV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("xnv", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("dist_vu", [])) (disch_tac [])) THEN (clear_assumption "dist_vu") THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("u", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
1630 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`e <= dist (x, v) - &2`))) (term_tac (have_gen_tac []ALL_TAC)))) ((arith_tac) THEN (done_tac)));
1631 (((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Yn0", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_MIN_LE", [REAL_MIN_LE]))(thm_tac (new_rewrite [] []))))) THEN (DISJ2_TAC));
1632 ((((use_arg_then2 ("REAL_INF_LE_FINITE", [REAL_INF_LE_FINITE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_IMAGE", [FINITE_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IMAGE_EQ_EMPTY", [IMAGE_EQ_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1633 (((fun arg_tac -> arg_tac (Arg_term (`dist (x, v) - &2`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac)) THEN (done_tac));
1634 ((((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] [])))) THEN ((THENL) (split_tac) [((move ["x"]) THEN (move ["y"])); ALL_TAC]));
1635 (((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))))) THEN (in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))));
1636 ((THENL_LAST) (BETA_TAC THEN (case THEN ALL_TAC) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["xV"]) THEN (move ["xnv"])))]) THEN (case THEN ALL_TAC) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["yV"]) THEN (move ["ynv"])))]) THEN ((TRY done_tac)) THEN (move ["neq"])) ((((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN (DISCH_THEN apply_tac)) THEN (done_tac)));
1637 (((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_gt2", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1638 (((((use_arg_then2 ("REAL_LT_IMP_LE", [REAL_LT_IMP_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist_gt2", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1639 ((in_tac ["subV"] true ((repeat_tactic 1 9 (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] []))))))) THEN ((THENL) (split_tac) [(move ["x"]); ALL_TAC]));
1640 ((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))));
1641 (((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["xV"]) THEN (move ["xnv"])))]) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("norm_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("subV", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1642 (((THENL) (split_tac) [((move ["x"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("norm_eqV", [])) (thm_tac (match_mp_then snd_th MP_TAC))))); ALL_TAC]) THEN ((TRY done_tac)));
1643 (((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"])) THEN ((((use_arg_then2 ("in_set_of_edge_ECTC", [in_set_of_edge_ECTC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))));
1644 ((((use_arg_then2 ("dist_gt2", [])) (disch_tac [])) THEN (clear_assumption "dist_gt2") THEN ((use_arg_then2 ("contraTF", [contraTF])) (disch_tac [])) THEN (clear_assumption "contraTF") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] []))))));
1645 ((THENL_FIRST) (BETA_TAC THEN (case THEN ALL_TAC) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [1] [])))); (case THEN ((move ["xV"]) THEN (move ["xnv"]) THEN (move ["dist_eq2"])))])) ((((use_arg_then2 ("DIST_REFL", [DIST_REFL]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac)));
1646 (((use_arg_then2 ("x", [])) (term_tac exists_tac)) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))) THEN ((((use_arg_then2 ("dist_eq2", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_REFL", [REAL_LT_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1649 (* Lemma isolated_node_norm_ECTC *)
1650 let isolated_node_norm_ECTC = Sections.section_proof ["V";"v"]
1651 `packing V /\ V SUBSET ball_annulus /\
1652 (!W. packing W /\ W SUBSET ball_annulus ==> scriptL W <= scriptL V) /\
1653 v IN V /\ set_of_edge v V (ECTC V) = {}
1656 (BETA_TAC THEN (case THEN (move ["packV"])) THEN (case THEN (move ["subV"])) THEN (case THEN (move ["maxV"])) THEN (case THEN (move ["vV"])) THEN (move ["edges0"]));
1657 ((THENL) (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("REAL_LET_TOTAL", [REAL_LET_TOTAL])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`norm v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case) [ALL_TAC; (move ["norm_gt2"])]);
1658 ((in_tac ["subV"] false (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1659 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("finite_packing_ball_annulus", [finite_packing_ball_annulus])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["finV"])));
1660 ((fun arg_tac -> arg_tac (Arg_term (`{dist (u, v) - &2 | u | u IN V /\ ~(u = v)}`))) (term_tac (set_tac "D")));
1661 ((fun arg_tac -> arg_tac (Arg_term (`FINITE D`))) (term_tac (have_gen_tac [](move ["finD"]))));
1662 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`D = IMAGE (\x. dist (x,v) - &2) (V DELETE v)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) (((((use_arg_then2 ("FINITE_IMAGE", [FINITE_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1663 (((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("D_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]));
1664 (((THENL) (split_tac) [((case THEN (move ["u"])) THEN (case THEN (move ["h"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))); ((case THEN (move ["u"])) THEN (case THEN (move ["x_eq"])) THEN (move ["h"]))]) THEN ((use_arg_then2 ("u", [])) (term_tac exists_tac)) THEN (done_tac));
1665 ((fun arg_tac -> arg_tac (Arg_term (`~(D = {})`))) (term_tac (have_gen_tac [](move ["D_n0"]))));
1666 (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~(V DELETE v = {})`))) (term_tac (have_gen_tac []ALL_TAC))));
1667 (((repeat_tactic 1 9 (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["u"])) THEN (case THEN ((move ["uV"]) THEN (move ["unv"]))));
1668 (((fun arg_tac -> arg_tac (Arg_term (`dist (u, v) - &2`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("D_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ((use_arg_then2 ("u", [])) (term_tac exists_tac)) THEN (done_tac));
1669 ((((use_arg_then2 ("maxV", [])) (disch_tac [])) THEN (clear_assumption "maxV") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac)) THEN (((((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] []))))) THEN (move ["inV"])));
1670 ((fun arg_tac -> arg_tac (Arg_term (`(&2 / norm v) % v`))) (term_tac (set_tac "w")));
1671 ((fun arg_tac -> arg_tac (Arg_term (`norm w = &2`))) (term_tac (have_gen_tac [](move ["norm_w"]))));
1672 ((((use_arg_then2 ("w_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_MUL", [REAL_ABS_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_INV", [REAL_ABS_INV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_NORM", [REAL_ABS_NORM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))));
1673 ((((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1674 ((fun arg_tac -> arg_tac (Arg_term (`~(w = --w:real^3)`))) (term_tac (have_gen_tac [](move ["neg_w"]))));
1675 ((((use_arg_then2 ("norm_w", [])) (disch_tac [])) THEN (clear_assumption "norm_w") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("vector_eq_neg", [vector_eq_neg]))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NORM_0", [NORM_0]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1676 (((fun arg_tac -> arg_tac (Arg_term (`{w:real^3, --w}`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] []))))));
1677 ((fun arg_tac -> arg_tac (Arg_term (`V = {v}`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
1678 ((((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"])) THEN ((THENL) (split_tac) [(move ["xV"]); ((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)))]));
1679 ((((fun arg_tac -> (use_arg_then2 ("inV", [])) (fun fst_arg -> (use_arg_then2 ("x", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("xV", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac));
1680 ((THENL_ROT (-1)) (split_tac));
1681 ((repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.scriptL", [Tame_defs.scriptL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_SING", [SUM_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_SING", [FINITE_SING]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_SING", [SUM_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("neg_w", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1682 ((((use_arg_then2 ("NORM_NEG", [NORM_NEG]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_w", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("Sphere.lmfun", [Sphere.lmfun])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&2 / &2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] [])))));
1683 ((in_tac ["subV"] false (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("lmfun_in_ball_annulus", [lmfun_in_ball_annulus])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1684 (((((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
1685 ((BETA_TAC THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN ALL_TAC) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (case THEN ALL_TAC) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN ((repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`--w:real^3`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] []))))) THEN ((((fun arg_tac -> arg_tac (Arg_theorem (VECTOR_ARITH `w - --w = &2 % w:real^3`)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_w", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1686 ((BETA_TAC THEN (move ["x"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN ((repeat_tactic 0 10 (((use_arg_then2 ("NORM_NEG", [NORM_NEG]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("norm_w", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1687 ((fun arg_tac -> arg_tac (Arg_term (`min (inf D) (norm v - &2) / norm v`))) (term_tac (set_tac "e")));
1688 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`&0 < norm v`))) (term_tac (have_gen_tac [](move ["norm_gt0"])))) ((((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1689 ((fun arg_tac -> arg_tac (Arg_term (`&0 < inf D`))) (term_tac (have_gen_tac [](move ["inf_gt0"]))));
1690 (((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("REAL_LT_INF_FINITE", [REAL_LT_INF_FINITE])) (fun fst_arg -> (use_arg_then2 ("finD", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("D_n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("D_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["x"]) THEN (case THEN (move ["u"])) THEN (case THEN (case THEN ((move ["uV"]) THEN (move ["nuv"])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
1691 ((((use_arg_then2 ("edges0", [])) (disch_tac [])) THEN (clear_assumption "edges0") THEN ((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)) THEN (((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_SUB_LT", [REAL_SUB_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] []))))) THEN (move ["dist_le"])));
1692 (((use_arg_then2 ("u", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ECTC", [ECTC]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("uV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))));
1693 ((((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("u", [])) (term_tac exists_tac))) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
1694 ((in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))) THEN ((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_ANTISYM", [REAL_LE_ANTISYM]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dist_le", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("packV", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1695 ((fun arg_tac -> arg_tac (Arg_term (`&0 < e`))) (term_tac (have_gen_tac [](move ["e_gt0"]))));
1696 ((((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LT_DIV", [REAL_LT_DIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LT_MIN", [REAL_LT_MIN]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inf_gt0", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)) THEN (done_tac));
1697 ((fun arg_tac -> arg_tac (Arg_term (`e < &1`))) (term_tac (have_gen_tac [](move ["e_lt1"]))));
1698 (((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Arc_properties.REAL_LT_ONE_LDIV", [Arc_properties.REAL_LT_ONE_LDIV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MIN_LT", [REAL_MIN_LT]))(thm_tac (new_rewrite [] []))))) THEN (split_tac) THEN (((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1699 ((fun arg_tac -> arg_tac (Arg_term (`(&1 - e) % v`))) (term_tac (set_tac "w")));
1700 ((fun arg_tac -> arg_tac (Arg_term (`norm w < norm v`))) (term_tac (have_gen_tac [](move ["norm_w_lt"]))));
1701 ((((use_arg_then2 ("w_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("REAL_MUL_LID", [REAL_MUL_LID])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`norm v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [2] []))))));
1702 (((((use_arg_then2 ("REAL_LT_RMUL", [REAL_LT_RMUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("norm_gt0", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("e_gt0", [])) (disch_tac [])) THEN (clear_assumption "e_gt0") THEN ((use_arg_then2 ("e_lt1", [])) (disch_tac [])) THEN (clear_assumption "e_lt1") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1703 ((fun arg_tac -> arg_tac (Arg_term (`&2 <= norm w`))) (term_tac (have_gen_tac [](move ["norm_w_ge2"]))));
1704 ((((use_arg_then2 ("w_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("REAL_DIV_1", [REAL_DIV_1])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`&1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL RAT_LEMMA3)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("norm_gt0", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("REAL_LT_01", [REAL_LT_01]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1705 ((((use_arg_then2 ("REAL_INV_1", [REAL_INV_1]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("REAL_MUL_LID", [REAL_MUL_LID]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_MUL", [REAL_ABS_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_INV", [REAL_ABS_INV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_NORM", [REAL_ABS_NORM]))(thm_tac (new_rewrite [] [])))));
1706 (((((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("REAL_POS_NZ", [REAL_POS_NZ])) (fun fst_arg -> (use_arg_then2 ("norm_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (arith_tac) THEN (done_tac));
1707 (in_tac ["subV"] false ((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))));
1708 ((fun arg_tac -> arg_tac (Arg_term (`dist (v, w) = min (inf D) (norm v - &2)`))) (term_tac (have_gen_tac [](move ["d_vw"]))));
1709 ((((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (VECTOR_ARITH `!v. v - (&1 - e) % v = e % v`)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))));
1710 ((((use_arg_then2 ("e_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_MUL", [REAL_ABS_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_INV", [REAL_ABS_INV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_NORM", [REAL_ABS_NORM]))(thm_tac (new_rewrite [] [])))));
1711 ((((use_arg_then2 ("REAL_MUL_ASSOC", [REAL_MUL_ASSOC]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_MUL_LINV", [REAL_MUL_LINV]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((fun arg_tac -> (use_arg_then2 ("REAL_POS_NZ", [REAL_POS_NZ])) (fun fst_arg -> (use_arg_then2 ("norm_gt0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("REAL_MUL_RID", [REAL_MUL_RID]))(thm_tac (new_rewrite [] [])))));
1712 ((((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN ((use_arg_then2 ("inf_gt0", [])) (disch_tac [])) THEN (clear_assumption "inf_gt0") THEN ((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1713 ((fun arg_tac -> arg_tac (Arg_term (`~(w IN V DELETE v)`))) (term_tac (have_gen_tac [](move ["in_w"]))));
1714 (((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] []))))) THEN (DISJ1_TAC));
1715 ((((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (move ["wV"])) THEN ((((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] []))))));
1716 ((((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("w", [])) (term_tac exists_tac))) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
1717 ((((use_arg_then2 ("norm_w_lt", [])) (disch_tac [])) THEN (clear_assumption "norm_w_lt") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_LT_REFL", [REAL_LT_REFL]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1718 ((((use_arg_then2 ("d_vw", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inf_gt0", [])) (disch_tac [])) THEN (clear_assumption "inf_gt0") THEN ((use_arg_then2 ("norm_gt2", [])) (disch_tac [])) THEN (clear_assumption "norm_gt2") THEN ((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1719 ((fun arg_tac -> arg_tac (Arg_term (`w INSERT (V DELETE v)`))) (term_tac (set_tac "W")));
1720 ((((use_arg_then2 ("maxV", [])) (disch_tac [])) THEN (clear_assumption "maxV") THEN ((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac) THEN (move ["_"])) THEN ((((use_arg_then2 ("NOT_FORALL_THM", [NOT_FORALL_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] []))))));
1721 ((THENL_ROT (-1)) (((use_arg_then2 ("W", [])) (term_tac exists_tac)) THEN (split_tac)));
1722 ((repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.scriptL", [Tame_defs.scriptL]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1723 ((((use_arg_then2 ("in_w", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("SUM_DELETE", [SUM_DELETE]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac)));
1724 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`lmfun (norm v / &2) < lmfun (norm w / &2)`))) (term_tac (have_gen_tac []ALL_TAC)))) ((arith_tac) THEN (done_tac)));
1725 ((((use_arg_then2 ("norm_w_lt", [])) (disch_tac [])) THEN (clear_assumption "norm_w_lt") THEN ((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("Sphere.lmfun", [Sphere.lmfun]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1726 ((THENL_ROT (-1)) (((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))) THEN ((THENL) (split_tac) [((move ["x"]) THEN (move ["y"])); (move ["x"])])));
1727 ((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("in_ball_annulus", [in_ball_annulus]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Sphere.h0", [Sphere.h0]))(thm_tac (new_rewrite [] [])))));
1728 ((THENL_FIRST) ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); ALL_TAC]) ((((fun arg_tac -> (use_arg_then2 ("subV", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("norm_w_lt", [])) (disch_tac [])) THEN (clear_assumption "norm_w_lt") THEN ((use_arg_then2 ("norm_w_ge2", [])) (disch_tac [])) THEN (clear_assumption "norm_w_ge2") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1729 ((BETA_TAC THEN (case THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("subV", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1730 (((((use_arg_then2 ("W_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))))) THEN (in_tac ["packV"] false (((use_arg_then2 ("packing", [packing]))(thm_tac (new_rewrite [] []))))));
1731 ((fun arg_tac -> arg_tac (Arg_term (`z IN V /\ ~(z = v) ==> &2 <= dist (z, w)`))) (term_tac (have_gen_tac ["z"](move ["h"]))));
1732 ((THENL_ROT (-1)) ((BETA_TAC THEN (case THEN ((move ["zV"]) THEN (move ["znv"])))) THEN (((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`dist (z, v) - dist (v, w)`))) (term_tac exists_tac)) THEN (split_tac)));
1733 ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DIST_TRIANGLE", [DIST_TRIANGLE])) (fun fst_arg -> (use_arg_then2 ("z", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("v", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (((fun arg_tac -> (use_arg_then2 ("DIST_SYM", [DIST_SYM])) (fun fst_arg -> (use_arg_then2 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
1734 ((((use_arg_then2 ("REAL_LE_TRANS", [REAL_LE_TRANS])) (disch_tac [])) THEN (clear_assumption "REAL_LE_TRANS") THEN (DISCH_THEN apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`dist (z, v) - inf D`))) (term_tac exists_tac)));
1735 ((THENL_LAST) ((((use_arg_then2 ("d_vw", []))(thm_tac (new_rewrite [] [])))) THEN (split_tac)) ((arith_tac) THEN (done_tac)));
1736 ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`inf D <= dist (z,v) - &2`))) (term_tac (have_gen_tac []ALL_TAC)))) ((arith_tac) THEN (done_tac)));
1737 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("REAL_INF_LE_FINITE", [REAL_INF_LE_FINITE])) (fun fst_arg -> (use_arg_then2 ("finD", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("D_n0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))));
1738 (((fun arg_tac -> arg_tac (Arg_term (`dist (z,v) - &2`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("D_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
1739 (((use_arg_then2 ("z", [])) (term_tac exists_tac)) THEN (done_tac));
1740 ((THENL_LAST) (BETA_TAC THEN (case THEN ALL_TAC) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["xV"]) THEN (move ["xnv"])))]) THEN (case THEN ALL_TAC) THEN ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (case THEN ((move ["yV"]) THEN (move ["ynv"])))]) THEN ((TRY done_tac)) THEN (move ["neq"])) ((((use_arg_then2 ("packV", [])) (disch_tac [])) THEN (clear_assumption "packV") THEN (DISCH_THEN apply_tac)) THEN (done_tac)));
1741 (((((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1742 ((((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1745 (* Lemma not_surrounded_node_norm_ECTC *)
1746 let not_surrounded_node_norm_ECTC = Sections.section_proof ["V";"v"]
1747 `packing V /\ V SUBSET ball_annulus /\
1748 (!W. packing W /\ W SUBSET ball_annulus ==> scriptL W <= scriptL V) /\
1749 v IN V /\ ~(surrounded_node (V, ECTC V) v)
1752 (BETA_TAC THEN (case THEN (move ["packV"])) THEN (case THEN (move ["subV"])) THEN (case THEN (move ["maxV"])) THEN (case THEN (move ["vV"])) THEN (move ["n_surr"]));
1753 ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("not_surrounded_ECTC", [not_surrounded_ECTC])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("n_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["W"]) THEN (case THEN (move ["f"])) THEN (case THEN (move ["bij_f"])) THEN (case THEN (move ["packW"])) THEN (case THEN (move ["subW"])) THEN (case THEN (move ["normW"])) THEN (move ["isoW"])))));
1754 ((fun arg_tac -> arg_tac (Arg_term (`packing U /\ U SUBSET ball_annulus ==> scriptL U <= scriptL W`))) (term_tac (have_gen_tac ["U"](move ["maxW"]))));
1755 (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("maxV", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN (((fun arg_tac -> (use_arg_then2 ("bij_scriptL", [bij_scriptL])) (fun fst_arg -> (use_arg_then2 ("bij_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1756 ((THENL_LAST) (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("isolated_node_norm_ECTC", [isolated_node_norm_ECTC])) (fun fst_arg -> (use_arg_then2 ("packW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("maxW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("isoW", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN (ANTS_TAC)) ((((use_arg_then2 ("normW", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1757 ((((use_arg_then2 ("bij_f", [])) (disch_tac [])) THEN (clear_assumption "bij_f") THEN BETA_TAC) THEN (((((use_arg_then2 ("BIJ", [BIJ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("INJ", [INJ]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1761 let radV_2 = Sections.section_proof ["a";"b"]
1762 `radV {a,b} = norm (b - a) / &2`
1764 ((((fun arg_tac -> (use_arg_then2 ("Rogers.OAPVION2", [Rogers.OAPVION2])) (fun fst_arg -> (use_arg_then2 ("b", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("AFFINE_INDEPENDENT_2", [AFFINE_INDEPENDENT_2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1765 ((((use_arg_then2 ("Rogers.CIRCUMCENTER_2", [Rogers.CIRCUMCENTER_2]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("midpoint", [midpoint]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dist", [dist]))(thm_tac (new_rewrite [] [])))));
1766 ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`inv(&2) % (a + b) - b = inv (&2) % (a - b)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((VECTOR_ARITH_TAC) THEN (done_tac)));
1767 (((((use_arg_then2 ("NORM_MUL", [NORM_MUL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_INV", [REAL_ABS_INV]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_ABS_NUM", [REAL_ABS_NUM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NORM_SUB", [NORM_SUB]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_MUL_SYM", [REAL_MUL_SYM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_div", [real_div]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1771 let hl2 = Sections.section_proof ["a";"b"]
1772 `hl [a;b] = norm (b - a) / &2`
1774 (((((use_arg_then2 ("Pack_defs.HL", [Pack_defs.HL]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL set_of_list)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("radV_2", [radV_2]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1777 (* Lemma lmfun_ineq_center_scriptL *)
1778 let lmfun_ineq_center_scriptL = Sections.section_proof ["V"]
1779 `lmfun_ineq_center V <=> scriptL V <= &12`
1781 (((((use_arg_then2 ("Pack_defs.lmfun_ineq_center", [Pack_defs.lmfun_ineq_center]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("scriptL", [scriptL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("hl2", [hl2]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL VECTOR_SUB_RZERO)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1785 let FCDJDOT = Sections.section_proof []
1786 `pack_ineq_def_a ==>
1787 (?W. packing W /\ W SUBSET ball_annulus /\ scriptL W > &12) ==>
1788 (?V. contravening V)`
1790 (BETA_TAC THEN (move ["ineqs"]) THEN (case THEN (move ["W0"])) THEN (move ["W0_props"]));
1791 (((use_arg_then2 ("scriptL_attains_max_in_ball_annulus", [scriptL_attains_max_in_ball_annulus])) (disch_tac [])) THEN (clear_assumption "scriptL_attains_max_in_ball_annulus") THEN BETA_TAC THEN (case THEN (move ["W1"])) THEN (case THEN (move ["packW1"])) THEN (case THEN (move ["subW1"])) THEN (move ["W1max"]));
1792 ((fun arg_tac -> arg_tac (Arg_term (`scriptL W1 > &12`))) (term_tac (have_gen_tac [](move ["W1_gt12"]))));
1793 ((((fun arg_tac -> (use_arg_then2 ("W1max", [])) (fun fst_arg -> (use_arg_then2 ("W0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("W0_props", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("real_gt", [real_gt]))(thm_tac (new_rewrite [] []))))) THEN ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("REAL_LTE_TRANS", [REAL_LTE_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("real_gt", [real_gt]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (done_tac));
1794 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FNJLBXS", [FNJLBXS])) (fun fst_arg -> (use_arg_then2 ("packW1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subW1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC THEN (case THEN (move ["V"])) THEN (case THEN (move ["f"])) THEN (case THEN (move ["bij_f"])) THEN (case THEN (move ["packV"])) THEN (case THEN (move ["subV"])) THEN (case THEN (move ["norm_eq"])) THEN (move ["V_ESTD"]));
1795 ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("bij_scriptL", [bij_scriptL])) (fun fst_arg -> (use_arg_then2 ("bij_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("norm_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["LV_eq"])));
1796 (((use_arg_then2 ("V", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("contravening", [contravening]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("packV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("subV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LV_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("W1_gt12", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
1797 (((split_tac) THEN ((TRY done_tac))) THEN (split_tac));
1798 (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Counting_spheres.DLWCHEM", [Counting_spheres.DLWCHEM])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ineqs", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
1799 (((((use_arg_then2 ("lmfun_ineq_center_scriptL", [lmfun_ineq_center_scriptL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LV_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_gt", [real_gt]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1800 ((THENL_ROT (-1)) ((split_tac) THEN (move ["v"]) THEN (move ["vV"])));
1801 (((fun arg_tac -> arg_tac (Arg_term (`surrounded_node _1 v`))) (disch_eq_tac "h" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1802 ((((fun arg_tac -> (use_arg_then2 ("not_surrounded_node_norm_ECTC", [not_surrounded_node_norm_ECTC])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (done_tac));
1803 ((((fun arg_tac -> (use_arg_then2 ("V_ESTD", [])) (fun fst_arg -> (use_arg_then2 ("vV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN (case THEN ((TRY done_tac)) THEN (move ["set0"])) THEN (((use_arg_then2 ("contraT", [contraT])) (disch_tac [])) THEN (clear_assumption "contraT") THEN (DISCH_THEN apply_tac) THEN (move ["_"])));
1804 ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Counting_spheres.XULJEPR", [Counting_spheres.XULJEPR])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("subV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ineqs", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1805 ((((use_arg_then2 ("implybF", [implybF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IMP", [NOT_IMP]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("lmfun_ineq_center_scriptL", [lmfun_ineq_center_scriptL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("LV_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("real_gt", [real_gt]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("W1_gt12", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1806 (((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
1807 ((((fun arg_tac -> (use_arg_then2 ("isolated_node_norm_ECTC", [isolated_node_norm_ECTC])) (fun fst_arg -> (use_arg_then2 ("packV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
1808 ((((use_arg_then2 ("set0", [])) (disch_tac [])) THEN (clear_assumption "set0") THEN ((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ALL_TAC THEN (case THEN (move ["x"]))));
1809 (((repeat_tactic 1 9 (((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))))) THEN (((fun arg_tac -> (use_arg_then2 ("ECTC_sub_ESTD", [ECTC_sub_ESTD])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (move ["subCS"])));
1810 ((BETA_TAC THEN (case THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("subCS", [])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (move ["inS"]) THEN (move ["xV"])) THEN ((use_arg_then2 ("x", [])) (term_tac exists_tac)) THEN (done_tac));
1811 ((BETA_TAC THEN (move ["u"]) THEN (case THEN (move ["uV"])) THEN (move ["nuv"])) THEN (((use_arg_then2 ("set0", [])) (disch_tac [])) THEN (clear_assumption "set0") THEN ((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)));
1812 (((((use_arg_then2 ("MEMBER_NOT_EMPTY", [MEMBER_NOT_EMPTY]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_NOT_LE", [REAL_NOT_LE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Pack_defs.h0", [Pack_defs.h0]))(thm_tac (new_rewrite [] []))))) THEN (move ["dist_lt"]));
1813 (((use_arg_then2 ("u", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("set_of_edge", [set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Tame_general.IN_ESTD", [Tame_general.IN_ESTD]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("uV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("nuv", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("DIST_SYM", [DIST_SYM]))(thm_tac (new_rewrite [] []))))));
1814 ((((use_arg_then2 ("dist_lt", [])) (disch_tac [])) THEN (clear_assumption "dist_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1817 (* Finalization of the section FCDJDOT *)
1818 let not_surrounded_ECTC = Sections.finalize_theorem not_surrounded_ECTC;;
1819 let isolated_node_norm_ECTC = Sections.finalize_theorem isolated_node_norm_ECTC;;
1820 let not_surrounded_node_norm_ECTC = Sections.finalize_theorem not_surrounded_node_norm_ECTC;;
1821 let radV_2 = Sections.finalize_theorem radV_2;;
1822 let hl2 = Sections.finalize_theorem hl2;;
1823 let lmfun_ineq_center_scriptL = Sections.finalize_theorem lmfun_ineq_center_scriptL;;
1824 let FCDJDOT = Sections.finalize_theorem FCDJDOT;;
1825 Sections.end_section "FCDJDOT";;
1827 (* Close the module *)