Update from HH
[Flyspeck/.git] / text_formalization / tame / ssreflect / FNJLBXS-compiled.hl
1 prioritize_overload `:real^N`;;
2 needs "tame/ssreflect/sort-compiled.hl";;
3
4 (* Module Fnjlbxs*)
5 module Fnjlbxs = struct
6
7 open Ssrfun;;
8 open Ssrbool;;
9 open Ssrnat;;
10 open Seq;;
11 open Seq2;;
12 open Sort;;
13 open Tame_defs;;
14 open Fan_defs;;
15
16 (* Lemma packing *)
17 let packing = Sections.section_proof ["V"]
18 `packing V <=> (!u v. u IN V /\ v IN V /\ ~(u = v) ==> &2 <= dist (u,v))`
19 [
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));
21 ];;
22 let inE = CONJUNCT2 IN_ELIM_THM;;
23
24 (* Section MoreList *)
25 Sections.begin_section "MoreList";;
26
27 (* Lemma uniq_lift *)
28 let uniq_lift = Sections.section_proof ["l"]
29 `uniq (map lift l) <=> uniq l`
30 [
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));
32 ];;
33
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`
40 [
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));
54 ];;
55
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`
61 [
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));
66 ];;
67
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";;
73
74 (* Section MoreMinK *)
75 Sections.begin_section "MoreMinK";;
76
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`
81 [
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));
109 ];;
110
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`
116 [
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));
145 ];;
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))`;;
148
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`
154 [
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));
174 ];;
175
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)`
179 [
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));
194 ];;
195
196 (* Lemma min_dist_exists *)
197 let min_dist_exists = Sections.section_proof ["l";"k"]
198 `2 <= sizel l ==>
199         ?m. m < sizel l /\ ~(m = k) /\ min_dist_k k l = dist (EL m l, EL k l)`
200 [
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));
211 ];;
212
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)) )`
218 [
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));
227 ];;
228
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)`
232 [
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));
238 ];;
239
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)`
244 [
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));
249 ];;
250
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`
254 [
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));
264 ];;
265
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)`
269 [
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));
281 ];;
282
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)`
287 [
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));
312 ];;
313
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)`
318 [
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));
323 ];;
324
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";;
339
340 (* Section MoreSortedReal *)
341 Sections.begin_section "MoreSortedReal";;
342
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'`
350 [
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));
470 ];;
471
472 (* Finalization of the section MoreSortedReal *)
473 let real_sorted_lt2 = Sections.finalize_theorem real_sorted_lt2;;
474 Sections.end_section "MoreSortedReal";;
475
476 (* Section SomeResults *)
477 Sections.begin_section "SomeResults";;
478
479 (* Lemma packing_empty *)
480 let packing_empty = Sections.section_proof []
481 `packing {}`
482 [
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));
484 ];;
485
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`
489 [
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));
492 ];;
493
494 (* Lemma closed_ball_annulus *)
495 let closed_ball_annulus = Sections.section_proof []
496 `closed ball_annulus`
497 [
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));
499 ];;
500
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`
504 [
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));
511 ];;
512
513 (* Lemma ECTC_sub_ESTD *)
514 let ECTC_sub_ESTD = Sections.section_proof ["V"]
515 `ECTC V SUBSET ESTD V`
516 [
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));
519 ];;
520
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)`
524 [
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));
531 ];;
532
533 (* Lemma vector_eq_neg *)
534 let vector_eq_neg = Sections.section_proof ["v"]
535 `(v:real^N = --v) <=> (v = vec 0)`
536 [
537    (VECTOR_ARITH_TAC);
538 ];;
539
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`
544 [
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));
549 ];;
550
551 (* Lemma lmfun_ge0 *)
552 let lmfun_ge0 = Sections.section_proof ["h"]
553 `&0 <= lmfun h`
554 [
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));
556 ];;
557
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`
561 [
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));
563 ];;
564
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)`
568 [
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));
572 ];;
573
574 (* Lemma card_counterexample_ge13 *)
575 let card_counterexample_ge13 = Sections.section_proof ["V"]
576 `packing V /\ V SUBSET ball_annulus /\ scriptL V > &12
577         ==> 13 <= CARD V`
578 [
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));
583 ];;
584
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])`
590 [
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));
612 ];;
613
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`
619 [
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));
629 ];;
630
631 (* Lemma lmfun_continuous *)
632 let lmfun_continuous = Sections.section_proof []
633 `lmfun real_continuous_on UNIV`
634 [
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));
641 ];;
642
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`
646 [
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));
655 ];;
656
657 (* Lemma simple_card_inequality *)
658 let simple_card_inequality = Sections.section_proof ["r";"s";"t"]
659 `measurable s /\
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)`
663 [
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));
689 ];;
690
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`
694 [
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));
721 ];;
722
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`
726 [
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));
730 ];;
731
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)`
736 [
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));
762 ];;
763
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`
768 [
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));
813 ];;
814
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)}`
819 [
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));
834 ];;
835
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";;
860
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;;
867
868 (* Lemma vector_of_list_nil *)
869 let vector_of_list_nil = Sections.section_proof ["d"]
870 `vector_of_list d [] = vec 0`
871 [
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));
874 ];;
875
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`
879 [
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));
881 ];;
882
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)))`
886 [
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));
891 ];;
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)`));;
896
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`
901 [
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));
908 ];;
909
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`
914 [
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));
926 ];;
927
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`
931 [
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));
935 ];;
936
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))`
941 [
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));
956 ];;
957
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`
962 [
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));
979 ];;
980
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";;
991
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) ==>
995         infnorm v < e`
996 [
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));
999    (split_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));
1007 ];;
1008
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)`
1013 [
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));
1023 ];;
1024
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)`));;
1029
1030 (* Section Lim_inS *)
1031 Sections.begin_section "Lim_inS";;
1032 (Sections.add_section_var (mk_var ("S", (`:(real^3)list -> bool`))));;
1033
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`
1039 [
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));
1055 ];;
1056 (Sections.add_section_hyp "inS_imp" (`!l. l IN S ==> LENGTH l <= k`));;
1057
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`
1062 [
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));
1086 ];;
1087
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";;
1092
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 = {})`));;
1099
1100 (* Lemma max_onS *)
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)`
1105 [
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));
1113 ];;
1114
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`))));;
1119
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)`));;
1124
1125 (* Lemma closedNormS *)
1126 let closedNormS = Sections.section_proof []
1127 `closed (IMAGE (vector_of_list 3) S:real^M->bool)`
1128 [
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));
1143 ];;
1144
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`));;
1150
1151 (* Lemma closedS *)
1152 let closedS = Sections.section_proof []
1153 `closed (IMAGE (vector_of_list 3) S:real^M->bool)`
1154 [
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));
1203 ];;
1204
1205 (* Lemma compactS *)
1206 let compactS = Sections.section_proof []
1207 `compact (IMAGE (vector_of_list 3) S:real^M->bool)`
1208 [
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));
1216 ];;
1217
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`
1222 [
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));
1228 ];;
1229
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))`
1235 [
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));
1239 ];;
1240
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)`
1245 [
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));
1253 ];;
1254
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)`
1259 [
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));
1265 ];;
1266
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";;
1279
1280 (* Section FNJLBXS *)
1281 Sections.begin_section "FNJLBXS";;
1282
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)`
1288 [
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));
1305 ];;
1306 let type150 = define_finite_type 150;;
1307
1308 (* Lemma type150_ineq *)
1309 let type150_ineq = Sections.section_proof []
1310 `!k. k <= 43 ==> 3 * k <= dimindex (:150)`
1311 [
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));
1313 ];;
1314
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)`
1319 [
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));
1340 ];;
1341
1342 (* Lemma FNJLBXS *)
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)))`
1347 [
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));
1542    (split_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));
1553 ];;
1554
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";;
1561
1562 (* Section FCDJDOT *)
1563 Sections.begin_section "FCDJDOT";;
1564
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) = {})`
1572 [
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));
1647 ];;
1648
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) = {}
1654         ==> norm v = &2`
1655 [
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));
1743 ];;
1744
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)
1750         ==> norm v = &2`
1751 [
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));
1758 ];;
1759
1760 (* Lemma radV_2 *)
1761 let radV_2 = Sections.section_proof ["a";"b"]
1762 `radV {a,b} = norm (b - a) / &2`
1763 [
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));
1768 ];;
1769
1770 (* Lemma hl2 *)
1771 let hl2 = Sections.section_proof ["a";"b"]
1772 `hl [a;b] = norm (b - a) / &2`
1773 [
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));
1775 ];;
1776
1777 (* Lemma lmfun_ineq_center_scriptL *)
1778 let lmfun_ineq_center_scriptL = Sections.section_proof ["V"]
1779 `lmfun_ineq_center V <=> scriptL V <= &12`
1780 [
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));
1782 ];;
1783
1784 (* Lemma FCDJDOT *)
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)`
1789 [
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));
1815 ];;
1816
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";;
1826
1827 (* Close the module *)
1828 end;;