Update from HH
[Flyspeck/.git] / formal_lp / hypermap / ssreflect / add_triangle-compiled.hl
1 needs "fan/hypermap_iso-compiled.hl";;
2 needs "tame/tame_defs.hl";;
3
4 (* Module Add_triangle*)
5 module Add_triangle = struct
6
7 open Ssrbool;;
8 open Ssrnat;;
9 open Fan_defs;;
10 open Hypermap_and_fan;;
11 open Conforming;;
12 open Hypermap;;
13 open Hypermap_iso;;
14 let split_fan_face = new_definition
15         `split_fan_face (V,E) (v,w) = (V, {w, sigma_fan (vec 0) V E v w} INSERT E)`;;
16
17 (* Lemma BIJ_IMAGE *)
18 let BIJ_IMAGE = Sections.section_proof ["f";"s";"t"]
19 `BIJ f s t ==> t = IMAGE f s`
20 [
21    (((((use_arg_then2 ("BIJ", [BIJ]))(thm_tac (new_rewrite [] [])))) THEN (move ["h"])) THEN ((use_arg_then2 ("Misc_defs_and_lemmas.SURJ_IMAGE", [Misc_defs_and_lemmas.SURJ_IMAGE])) (thm_tac apply_tac)) THEN (done_tac));
22 ];;
23 let FACE_NODE_EDGE_ORBIT_INVERSE =
24         prove(`face (H:(A) hypermap) x = orbit_map ( inverse (face_map H )) x /\
25                 node H x = orbit_map (inverse ( node_map H)) x /\
26                 edge H x = orbit_map (inverse ( edge_map H )) x `,
27         MP_TAC (SPEC_ALL hypermap_lemma) THEN
28         SIMP_TAC[face;node;edge] THEN
29         MESON_TAC[lemma_card_inverse_map_eq]);;
30 let SING_UNION_EQ_INSERT = prove(`!s x:A. {x} UNION s = x INSERT s`, SET_TAC[]);;
31
32 (* Section FanMisc *)
33 Sections.begin_section "FanMisc";;
34 (Sections.add_section_var (mk_var ("V", (`:real^3->bool`))));;
35 (Sections.add_section_var (mk_var ("E", (`:(real^3->bool)->bool`))));;
36
37 (* Lemma orbit_map_le3 *)
38 let orbit_map_le3 = Sections.section_proof ["f";"x"]
39 `f (f (f x)) = x ==> orbit_map f x = {x, f x, f (f x)}`
40 [
41    (BETA_TAC THEN (move ["fff_eq"]));
42    ((fun arg_tac -> arg_tac (Arg_term (`(f POWER 3) x = x`))) (term_tac (have_gen_tac [](move ["power_eq"]))));
43    (((((use_arg_then2 ("THREE", [THREE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("TWO", [TWO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ONE", [ONE]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
44    ((THENL_FIRST) (((fun arg_tac -> (use_arg_then2 ("orbit_cyclic", [orbit_cyclic])) (fun fst_arg -> (use_arg_then2 ("power_eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) ((arith_tac) THEN (done_tac)));
45    (((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(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 ["y"]));
46    ((THENL) (split_tac) [((case THEN (move ["k"])) THEN (case THEN (move ["k_lt"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))); ALL_TAC]);
47    (((THENL) (((use_arg_then2 ("k_lt", [])) (disch_tac [])) THEN (clear_assumption "k_lt") THEN ((use_arg_then2 ("k", [])) (disch_tac [])) THEN (clear_assumption "k") THEN case) [ALL_TAC; ((THENL) case [ALL_TAC; ((THENL) case [ALL_TAC; (move ["k"])])])]) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("o_THM", [o_THM]))(fun tmp_arg1 -> (use_arg_then2 ("I_THM", [I_THM]))(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 (arith_tac) THEN (done_tac));
48    (((THENL) ((repeat_tactic 1 9 (case)) THEN (BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) [((fun arg_tac -> arg_tac (Arg_term (`0`))) (term_tac exists_tac)); ((fun arg_tac -> arg_tac (Arg_term (`SUC 0`))) (term_tac exists_tac)); ((fun arg_tac -> arg_tac (Arg_term (`SUC (SUC 0)`))) (term_tac exists_tac))]) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("o_THM", [o_THM]))(fun tmp_arg1 -> (use_arg_then2 ("I_THM", [I_THM]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] [])))))) THEN (arith_tac) THEN (done_tac));
49 ];;
50
51 (* Lemma power_res *)
52 let power_res = Sections.section_proof ["f";"s";"i";"x"]
53 `x IN s /\ (!y. y IN s ==> f y IN s)
54         ==> (res f s POWER i) x = (f POWER i) x`
55 [
56    (BETA_TAC THEN (case THEN ((move ["xs"]) THEN (move ["f_in_s"]))));
57    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ORBIT_SUBSET_LEMMA", [ORBIT_SUBSET_LEMMA])) (fun fst_arg -> (use_arg_then2 ("xs", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f_in_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["orbit_s"])));
58    (((THENL) (((use_arg_then2 ("i", [])) (disch_tac [])) THEN (clear_assumption "i") THEN elim) [ALL_TAC; ((move ["i"]) THEN (move ["Ih"]))]) THEN ((repeat_tactic 1 9 (((fun arg_tac ->(use_arg_then2 ("POWER_0", [POWER_0]))(fun tmp_arg1 -> (use_arg_then2 ("COM_POWER", [COM_POWER]))(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 (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Ih", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("res", [res]))(thm_tac (new_rewrite [] []))))));
59    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`_ IN s`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
60    (((((fun arg_tac -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("orbit_s", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("lemma_in_orbit", [lemma_in_orbit]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
61 ];;
62
63 (* Lemma contracted_ext *)
64 let contracted_ext = Sections.section_proof ["d"]
65 `contracted_dart (ext_dart (V,E) d) = d`
66 [
67    ((((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN case THEN (move ["v"]) THEN (move ["w"])) THEN ((((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("contracted_dart", [contracted_dart]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
68 ];;
69
70 (* Lemma in_dart1_in_dart *)
71 let in_dart1_in_dart = Sections.section_proof ["d"]
72 `d IN dart1_of_fan (V,E) ==> d IN dart_of_fan (V,E)`
73 [
74    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DART1_OF_FAN_SUBSET_DART_OF_FAN", [DART1_OF_FAN_SUBSET_DART_OF_FAN])) (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 ("E", [])) (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 (exact_tac) THEN (done_tac));
75 ];;
76
77 (* Lemma in_d1_in_d *)
78 let in_d1_in_d = Sections.section_proof ["d"]
79 `d IN d1_fan (vec 0,V,E) ==> d IN d_fan (vec 0,V,E)`
80 [
81    ((BETA_TAC THEN (move ["d_in"])) THEN (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Fan.subset_d_fan", [Fan.subset_d_fan])) (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 ("E", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC));
82    (((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
83 ];;
84
85 (* Lemma inE_eq_in_dart1 *)
86 let inE_eq_in_dart1 = Sections.section_proof ["v";"w"]
87 `{v,w} IN E <=> v,w IN dart1_of_fan (V,E)`
88 [
89    (((((use_arg_then2 ("dart1_of_fan", [dart1_of_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ((THENL) (split_tac) [(move ["inE"]); ((case THEN (move ["v'"])) THEN (case THEN (move ["w'"])) THEN (case THEN (move ["inE"])))]));
90    ((((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("w", [])) (term_tac exists_tac))) THEN (done_tac));
91    (((((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) 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 (done_tac));
92 ];;
93
94 (* Lemma inE_imp_in_dart *)
95 let inE_imp_in_dart = Sections.section_proof ["v";"w"]
96 `{v,w} IN E ==> v,w IN dart_of_fan (V,E)`
97 [
98    (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(thm_tac (new_rewrite [] []))));
99    ((((fun arg_tac -> arg_tac (Arg_term (`(v,w)`))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("SUBSET", [SUBSET]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("DART1_OF_FAN_SUBSET_DART_OF_FAN", [DART1_OF_FAN_SUBSET_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
100 ];;
101
102 (* Lemma dart1_switch *)
103 let dart1_switch = Sections.section_proof ["v";"w"]
104 `v,w IN dart1_of_fan (V,E) <=> w,v IN dart1_of_fan (V,E)`
105 [
106    (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!v w. v,w IN dart1_of_fan (V,E) ==> w,v IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["h"])))));
107    (((split_tac) THEN (move ["c"])) THEN (((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN (exact_tac)) THEN (done_tac));
108    ((BETA_TAC THEN (move ["v"]) THEN (move ["w"])) THEN ((((use_arg_then2 ("dart1_of_fan", [dart1_of_fan]))(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 (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))))));
109    (BETA_TAC THEN (case THEN (move ["v'"])) THEN (case THEN (move ["w'"])) THEN (case THEN (move ["h"])) THEN (move ["eq"]));
110    ((((use_arg_then2 ("w'", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("v'", [])) (term_tac exists_tac))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
111 ];;
112
113 (* Lemma dart_switch *)
114 let dart_switch = Sections.section_proof ["v";"w"]
115 `v,w IN dart_of_fan (V,E) <=> w,v IN dart_of_fan (V,E)`
116 [
117    (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`!v w. v,w IN dart_of_fan (V,E) ==> w,v IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["h"])))));
118    (((split_tac) THEN (move ["c"])) THEN (((use_arg_then2 ("h", [])) (disch_tac [])) THEN (clear_assumption "h") THEN (exact_tac)) THEN (done_tac));
119    ((BETA_TAC THEN (move ["v"]) THEN (move ["w"])) THEN ((((use_arg_then2 ("dart_of_fan", [dart_of_fan]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(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 (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))))));
120    ((THENL) case [((case THEN (move ["v'"])) THEN (case THEN (move ["h"])) THEN (move ["eq"])); ((case THEN (move ["v'"])) THEN (case THEN (move ["w'"])) THEN (case THEN (move ["h"])) THEN (move ["eq"]))]);
121    ((DISJ1_TAC) THEN ((use_arg_then2 ("v'", [])) (term_tac exists_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
122    ((DISJ2_TAC) THEN (((use_arg_then2 ("w'", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("v'", [])) (term_tac exists_tac))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
123 ];;
124 (Sections.add_section_hyp "fanV" (`FAN (vec 0, V, E)`));;
125
126 (* Lemma finite_dart1 *)
127 let finite_dart1 = Sections.section_proof []
128 `FINITE (dart1_of_fan (V,E))`
129 [
130    (((fun arg_tac -> (use_arg_then2 ("FINITE_SUBSET", [FINITE_SUBSET])) (fun fst_arg -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DART1_OF_FAN_SUBSET_DART_OF_FAN", [DART1_OF_FAN_SUBSET_DART_OF_FAN])) (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 ("E", [])) (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 (DISCH_THEN apply_tac));
131    ((((fun arg_tac -> (use_arg_then2 ("FINITE_DART_OF_FAN", [FINITE_DART_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
132 ];;
133
134 (* Lemma f_fan_pair_power *)
135 let f_fan_pair_power = Sections.section_proof ["d";"i"]
136 `d IN dart1_of_fan (V,E)
137         ==> (f_fan_pair (V,E) POWER i) d = (f_fan_pair_ext (V,E) POWER i) d`
138 [
139    (BETA_TAC THEN (move ["d_in"]));
140    (((((use_arg_then2 ("F_FAN_PAIR_EXT", [F_FAN_PAIR_EXT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("power_res", [power_res]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (move ["y"]) THEN (move ["y_in"]));
141    ((((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
142 ];;
143
144 (* Lemma fst_node_hypermap_of_fan *)
145 let fst_node_hypermap_of_fan = Sections.section_proof ["x";"y"]
146 `x IN node (hypermap_of_fan (V,E)) y
147         ==> FST x = FST y`
148 [
149    (BETA_TAC THEN (move ["x_in"]));
150    (((fun arg_tac -> (use_arg_then2 ("FAN_NODE_EQ_lemma", [FAN_NODE_EQ_lemma])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
151    ((((use_arg_then2 ("EQ_SYM_EQ", [EQ_SYM_EQ]))(thm_tac (new_rewrite [] [])))) THEN ((use_arg_then2 ("Hypermap.lemma_node_identity", [Hypermap.lemma_node_identity])) (thm_tac apply_tac)) THEN (done_tac));
152 ];;
153
154 (* Lemma fan_node_eq_fst *)
155 let fan_node_eq_fst = Sections.section_proof ["d"]
156 `d IN dart_of_fan (V,E)
157         ==> node (hypermap_of_fan (V,E)) d = {x | x IN dart_of_fan (V,E) /\ FST x = FST d}`
158 [
159    ((((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN (move ["d_in"]) THEN (move ["y"])) THEN ((THENL) (split_tac) [(move ["y_in"]); (case THEN ((move ["y_in"]) THEN (move ["fst_eq"])))]));
160    ((((fun arg_tac -> (use_arg_then2 ("fst_node_hypermap_of_fan", [fst_node_hypermap_of_fan])) (fun fst_arg -> (use_arg_then2 ("y_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("y_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
161    ((((use_arg_then2 ("NODE_SUBSET_DART_OF_FAN", [NODE_SUBSET_DART_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
162    (((((fun arg_tac -> (use_arg_then2 ("HYPERMAP_OF_FAN_NODE_EQ", [HYPERMAP_OF_FAN_NODE_EQ])) (fun fst_arg -> (use_arg_then2 ("fst_eq", [])) (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 ("node_refl", [node_refl]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
163 ];;
164
165 (* Lemma finite_set_of_edge *)
166 let finite_set_of_edge = Sections.section_proof ["v"]
167 `FINITE (set_of_edge v V E)`
168 [
169    (((use_arg_then2 ("Fan.remark_finite_fan1", [Fan.remark_finite_fan1]))(thm_tac (new_rewrite [] []))));
170    ((in_tac ["fanV"] false ((((use_arg_then2 ("FAN", [FAN]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fan1", [fan1]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
171 ];;
172
173 (* Lemma azim_dart1_eq_azim_fan *)
174 let azim_dart1_eq_azim_fan = Sections.section_proof ["v";"w"]
175 `v,w IN dart1_of_fan (V,E)
176         ==> azim_dart (V,E) (v,w) = azim_fan (vec 0) V E v w`
177 [
178    ((((use_arg_then2 ("azim_dart", [azim_dart]))(thm_tac (new_rewrite [] [])))) THEN (move ["vw_in"]));
179    (((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ", [PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (done_tac));
180 ];;
181
182 (* Lemma azim_dart_eq_azim_fan *)
183 let azim_dart_eq_azim_fan = Sections.section_proof ["v";"w"]
184 `v,w IN dart_of_fan (V,E)
185         ==> azim_dart (V,E) (v,w) = azim_fan (vec 0) V E v w`
186 [
187    (((((use_arg_then2 ("Hypermap_iso.dart_of_fan_eq", [Hypermap_iso.dart_of_fan_eq]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN ((THENL) case [(move ["vw_in"]); ALL_TAC]));
188    ((((use_arg_then2 ("azim_dart1_eq_azim_fan", [azim_dart1_eq_azim_fan]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
189    ((((((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN ALL_TAC THEN (case THEN (move ["y"])) THEN (case THEN ALL_TAC) THEN (case THEN (move ["yV"])) THEN (move ["h"])) THEN ((((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (move ["eq"])));
190    (((repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("azim_dart", [azim_dart]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("azim_fan", [azim_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
191 ];;
192
193 (* Lemma azim_dart1_eq_azim *)
194 let azim_dart1_eq_azim = Sections.section_proof ["v";"w"]
195 `v,w IN dart1_of_fan (V,E) /\ CARD (set_of_edge v V E) > 1
196         ==> azim_dart (V,E) (v,w) = azim (vec 0) v w (sigma_fan (vec 0) V E v w)`
197 [
198    (BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["c_gt1"]))));
199    (((((use_arg_then2 ("azim_dart1_eq_azim_fan", [azim_dart1_eq_azim_fan]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("azim_fan", [azim_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("c_gt1", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
200 ];;
201
202 (* Lemma fully_surrounded_dart_of_fan_eq *)
203 let fully_surrounded_dart_of_fan_eq = Sections.section_proof []
204 `fully_surrounded (V,E) ==> dart_of_fan (V,E) = dart1_of_fan (V,E)`
205 [
206    (((((use_arg_then2 ("FULLY_SURROUNDED", [FULLY_SURROUNDED]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("SUBSET_ANTISYM_EQ", [SUBSET_ANTISYM_EQ]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (move ["h"]));
207    ((((use_arg_then2 ("DART1_OF_FAN_SUBSET_DART_OF_FAN", [DART1_OF_FAN_SUBSET_DART_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))));
208    ((case THEN (move ["v"]) THEN (move ["w"]) THEN (move ["in_dart"])) THEN (((use_arg_then2 ("SURROUNDED_IMP_IN_DART1_OF_FAN", [SURROUNDED_IMP_IN_DART1_OF_FAN])) (disch_tac [])) THEN (clear_assumption "SURROUNDED_IMP_IN_DART1_OF_FAN") THEN (DISCH_THEN apply_tac)));
209    (((((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART_OF_FAN", [PAIR_IN_DART_OF_FAN])) (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 ("in_dart", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
210 ];;
211
212 (* Lemma fully_surrounded_card_set_of_edge *)
213 let fully_surrounded_card_set_of_edge = Sections.section_proof ["v"]
214 `fully_surrounded (V,E) /\ v IN V ==> CARD (set_of_edge v V E) >= 3`
215 [
216    (((((use_arg_then2 ("FULLY_SURROUNDED", [FULLY_SURROUNDED]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN ALL_TAC THEN (case THEN ((move ["h"]) THEN (move ["vV"]))));
217    (((use_arg_then2 ("SURROUNDED_IMP_CARD_SET_OF_EDGE_GE_3", [SURROUNDED_IMP_CARD_SET_OF_EDGE_GE_3])) (disch_tac [])) THEN (clear_assumption "SURROUNDED_IMP_CARD_SET_OF_EDGE_GE_3") THEN (DISCH_THEN apply_tac));
218    (((((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
219 ];;
220
221 (* Lemma fully_surrounded_card_set_of_edge1 *)
222 let fully_surrounded_card_set_of_edge1 = Sections.section_proof ["v"]
223 `fully_surrounded (V,E) /\ v IN V ==> CARD (set_of_edge v V E) > 1`
224 [
225    (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("fully_surrounded_card_set_of_edge", [fully_surrounded_card_set_of_edge])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
226 ];;
227
228 (* Lemma fully_surrounded_azim_dart_eq_azim *)
229 let fully_surrounded_azim_dart_eq_azim = Sections.section_proof ["v";"w"]
230 `fully_surrounded (V,E) /\ (v,w) IN dart_of_fan (V,E)
231         ==> azim_dart (V,E) (v,w) = azim (vec 0) v w (sigma_fan (vec 0) V E v w)`
232 [
233    (BETA_TAC THEN (case THEN ((move ["f_surr"]) THEN (move ["vw_in"]))));
234    ((((use_arg_then2 ("azim_dart1_eq_azim", [azim_dart1_eq_azim]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("vw_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
235    (((((use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART_OF_FAN", [PAIR_IN_DART_OF_FAN])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
236 ];;
237
238 (* Lemma azim_gt0_card_set_of_edge *)
239 let azim_gt0_card_set_of_edge = Sections.section_proof ["v";"w"]
240 `{v,w} IN E /\ &0 < azim (vec 0) v w (sigma_fan (vec 0) V E v w)
241         ==> CARD (set_of_edge v V E) > 1`
242 [
243    ((((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["vw_in"])));
244    ((((use_arg_then2 ("contraLR", [contraLR])) (disch_tac [])) THEN (clear_assumption "contraLR") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("REAL_NOT_LT", [REAL_NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("GT", [GT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] []))))));
245    ((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `!x. x <= 1 <=> x = 0 \/ x = 1`)))(thm_tac (new_rewrite [] [])))) THEN case);
246    (((((use_arg_then2 ("CARD_EQ_0", [CARD_EQ_0]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("finite_set_of_edge", [finite_set_of_edge]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["h"]));
247    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
248    ((BETA_TAC THEN (move ["c1"])) THEN (((use_arg_then2 ("sigma_fan", [sigma_fan]))(thm_tac (new_rewrite [] [])))));
249    (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`set_of_edge v V E = {w}`))) (term_tac (have_gen_tac []((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (simp_tac))))));
250    (((((use_arg_then2 ("AZIM_REFL", [AZIM_REFL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("REAL_LE_REFL", [REAL_LE_REFL]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
251    ((use_arg_then2 ("Hypermap.set_one_point", [Hypermap.set_one_point])) (thm_tac apply_tac));
252    (((((use_arg_then2 ("finite_set_of_edge", [finite_set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
253 ];;
254
255 (* Lemma fully_surrounded_imp_fan80 *)
256 let fully_surrounded_imp_fan80 = Sections.section_proof []
257 `fully_surrounded (V,E) ==> fan80 (vec 0,V,E)`
258 [
259    ((((use_arg_then2 ("Planarity.fan80", [Planarity.fan80]))(thm_tac (new_rewrite [] [])))) THEN (move ["h"]) THEN (move ["v"]) THEN (move ["u"]) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("inE_imp_in_dart", [inE_imp_in_dart])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (move ["vu_in"]));
260    ((((use_arg_then2 ("fully_surrounded_azim_dart_eq_azim", [fully_surrounded_azim_dart_eq_azim]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("AZIM_DART_POS", [AZIM_DART_POS]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
261    ((in_tac ["h"] false (((use_arg_then2 ("fully_surrounded", [fully_surrounded]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("h", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
262 ];;
263
264 (* Lemma sigma_fan_inV *)
265 let sigma_fan_inV = Sections.section_proof ["v";"w"]
266 `v,w IN dart1_of_fan (V,E)
267         ==> sigma_fan (vec 0) V E v w IN V`
268 [
269    ((DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (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 (move ["h"]));
270    (((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`set_of_edge v V E`))) (term_tac exists_tac)));
271    (((((use_arg_then2 ("Fan.sigma_fan_in_set_of_edge", [Fan.sigma_fan_in_set_of_edge]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("Planarity.set_of_edge_subset_edges", [Planarity.set_of_edge_subset_edges]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
272 ];;
273
274 (* Lemma sigma_fan_not_fixed *)
275 let sigma_fan_not_fixed = Sections.section_proof ["v";"w"]
276 `v,w IN dart_of_fan (V,E) /\ fully_surrounded (V,E)
277         ==> ~(sigma_fan (vec 0) V E v w = w)`
278 [
279    (BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["f_surr"]))));
280    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Fan.SIGMA_FAN", [Fan.SIGMA_FAN])) (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 ("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)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
281    ((((fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))));
282    (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (fun fst_arg -> (use_arg_then2 ("f_surr", [])) (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 arg -> thm_tac MP_TAC arg THEN ALL_TAC)) THEN (ANTS_TAC));
283    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART_OF_FAN", [PAIR_IN_DART_OF_FAN])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
284    (((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 [] [])))));
285    ((((use_arg_then2 ("Hypermap.CARD_SINGLETON", [Hypermap.CARD_SINGLETON]))(thm_tac (new_rewrite [] [])))) THEN (arith_tac) THEN (done_tac));
286 ];;
287
288 (* Section Hypermap1 *)
289 Sections.begin_section "Hypermap1";;
290
291 (* Lemma inv_e_fan_pair_ext *)
292 let inv_e_fan_pair_ext = Sections.section_proof []
293 `inverse (e_fan_pair_ext (V,E)) = e_fan_pair_ext (V,E)`
294 [
295    ((((use_arg_then2 ("FUN_EQ_THM", [FUN_EQ_THM]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN ((move ["a"]) THEN (move ["b"]))));
296    ((((fun arg_tac -> (use_arg_then2 ("PERMUTES_INVERSE_EQ", [PERMUTES_INVERSE_EQ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("E_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [E_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
297    (((fun arg_tac -> arg_tac (Arg_term (`a,b IN dart1_of_fan (V,E)`))) (disch_eq_tac "ab_in" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
298    (((repeat_tactic 1 9 (((use_arg_then2 ("e_fan_pair_ext", [e_fan_pair_ext]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ab_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("e_fan_pair", [e_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
299    (((repeat_tactic 1 9 (((use_arg_then2 ("e_fan_pair_ext", [e_fan_pair_ext]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ab_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("ab_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
300 ];;
301
302 (* Lemma bij_ext_dart *)
303 let bij_ext_dart = Sections.section_proof []
304 `BIJ (ext_dart (V,E)) (dart_of_fan (V,E)) (d_fan (vec 0,V,E))`
305 [
306    (((fun arg_tac -> (use_arg_then2 ("bij_ext", [bij_ext])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`res_inv contracted_dart (d_fan (vec 0,V,E))`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac apply_tac)) THEN (split_tac));
307    ((BETA_TAC THEN (move ["x"]) THEN (move ["x_in"])) THEN (((use_arg_then2 ("ext_dart_eq_inv_contracted_dart", [ext_dart_eq_inv_contracted_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
308    (((use_arg_then2 ("bij_res_inv", [bij_res_inv])) (thm_tac apply_tac)) THEN (((use_arg_then2 ("bij_contracted_dart", [bij_contracted_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
309 ];;
310
311 (* Lemma d_fan_eq_image *)
312 let d_fan_eq_image = Sections.section_proof []
313 `d_fan (vec 0,V,E) = IMAGE (ext_dart (V,E)) (dart_of_fan (V,E))`
314 [
315    ((((fun arg_tac -> (use_arg_then2 ("BIJ_IMAGE", [BIJ_IMAGE])) (fun fst_arg -> (use_arg_then2 ("bij_ext_dart", [bij_ext_dart])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
316 ];;
317
318 (* Lemma contracted_in_dart *)
319 let contracted_in_dart = Sections.section_proof ["d"]
320 `d IN d_fan (vec 0,V,E)
321         ==> contracted_dart d IN dart_of_fan (V,E)`
322 [
323    (((((use_arg_then2 ("d_fan_eq_image", [d_fan_eq_image]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["x_in"]));
324    ((((use_arg_then2 ("contracted_ext", [contracted_ext]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
325 ];;
326
327 (* Lemma ext_contracted *)
328 let ext_contracted = Sections.section_proof ["d"]
329 `d IN d_fan (vec 0,V,E)
330         ==> ext_dart (V,E) (contracted_dart d) = d`
331 [
332    (BETA_TAC THEN (move ["d_in"]));
333    ((((fun arg_tac -> (use_arg_then2 ("ext_dart_eq_inv_contracted_dart", [ext_dart_eq_inv_contracted_dart])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("contracted_in_dart", [contracted_in_dart]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
334    (((((use_arg_then2 ("res_inv_left", [res_inv_left]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["y"]) THEN (case THEN (move ["x_in"])) THEN (case THEN (move ["y_in"])) THEN (move ["eq"]));
335    (((fun arg_tac -> (use_arg_then2 ("bij_contracted_dart", [bij_contracted_dart])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
336    ((((((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 ALL_TAC) THEN (case THEN (move ["_"])) THEN ((fun arg_tac -> (fun arg_tac -> (fun arg_tac ->  (conv_thm_tac DISCH_THEN)  (fun fst_arg -> (use_arg_then2 ("x_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("y_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("eq", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac MP_TAC)) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
337 ];;
338
339 (* Lemma ext_dart_eq_inv_contracted_dart1 *)
340 let ext_dart_eq_inv_contracted_dart1 = Sections.section_proof ["d"]
341 `d IN dart1_of_fan (V,E)
342         ==> ext_dart (V,E) d = res_inv contracted_dart (d1_fan (vec 0,V,E)) d`
343 [
344    ((((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN case THEN (move ["v"]) THEN (move ["w"])) THEN ((((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] [])))) THEN (move ["vw_in"])));
345    ((fun arg_tac -> arg_tac (Arg_term (`extension_sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
346    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`(v,w) = contracted_dart (vec 0:real^3,v,w,w1:real^3)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((((use_arg_then2 ("contracted_dart", [contracted_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
347    (((((use_arg_then2 ("res_inv_left", [res_inv_left]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN ((THENL) (split_tac) [((move ["x"]) THEN (move ["y"]) THEN (move ["h"])); ALL_TAC]));
348    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("bij_contracted_dart1", [bij_contracted_dart1])) (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 ("E", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
349    ((((((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 ALL_TAC) THEN (case THEN (move ["_"])) THEN (move ["h2"]) THEN (move ["_"])) THEN (((use_arg_then2 ("h2", [])) (disch_tac [])) THEN (clear_assumption "h2") THEN (DISCH_THEN apply_tac)) THEN (done_tac));
350    ((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("extension_sigma_fan", [extension_sigma_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Fan.d1_fan", [Fan.d1_fan]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
351    (((fun arg_tac -> arg_tac (Arg_term (`w IN set_of_edge v V E`))) (disch_eq_tac "w_in" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
352    ((((fun arg_tac -> arg_tac (Arg_term (`vec 0`))) (term_tac exists_tac)) THEN ((use_arg_then2 ("v", [])) (term_tac exists_tac)) THEN ((use_arg_then2 ("w", [])) (term_tac exists_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan (vec 0) V E v w`))) (term_tac exists_tac))) THEN (simp_tac));
353    ((((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
354    ((((use_arg_then2 ("w_in", [])) (disch_tac [])) THEN (clear_assumption "w_in") THEN BETA_TAC) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
355 ];;
356
357 (* Lemma bij_ext_dart1 *)
358 let bij_ext_dart1 = Sections.section_proof []
359 `BIJ (ext_dart (V,E)) (dart1_of_fan (V,E)) (d1_fan (vec 0,V,E))`
360 [
361    (((fun arg_tac -> (use_arg_then2 ("bij_ext", [bij_ext])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`res_inv contracted_dart (d1_fan (vec 0,V,E))`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (thm_tac apply_tac)) THEN (split_tac));
362    ((BETA_TAC THEN (move ["x"]) THEN (move ["x_in"])) THEN (((use_arg_then2 ("ext_dart_eq_inv_contracted_dart1", [ext_dart_eq_inv_contracted_dart1]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
363    (((use_arg_then2 ("bij_res_inv", [bij_res_inv])) (thm_tac apply_tac)) THEN (((use_arg_then2 ("bij_contracted_dart1", [bij_contracted_dart1]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
364 ];;
365
366 (* Lemma d1_fan_eq_image *)
367 let d1_fan_eq_image = Sections.section_proof []
368 `d1_fan (vec 0,V,E) = IMAGE (ext_dart (V,E)) (dart1_of_fan (V,E))`
369 [
370    ((((fun arg_tac -> (use_arg_then2 ("BIJ_IMAGE", [BIJ_IMAGE])) (fun fst_arg -> (use_arg_then2 ("bij_ext_dart1", [bij_ext_dart1])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
371 ];;
372
373 (* Lemma contracted_in_dart1 *)
374 let contracted_in_dart1 = Sections.section_proof ["d"]
375 `d IN d1_fan (vec 0,V,E)
376         ==> contracted_dart d IN dart1_of_fan (V,E)`
377 [
378    (((((use_arg_then2 ("d1_fan_eq_image", [d1_fan_eq_image]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["x_in"]));
379    ((((use_arg_then2 ("contracted_ext", [contracted_ext]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
380 ];;
381
382 (* Lemma dart_of_fan_eq_image *)
383 let dart_of_fan_eq_image = Sections.section_proof []
384 `dart_of_fan (V,E) = IMAGE contracted_dart (d_fan (vec 0,V,E))`
385 [
386    ((((fun arg_tac -> (use_arg_then2 ("BIJ_IMAGE", [BIJ_IMAGE])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("bij_contracted_dart", [bij_contracted_dart])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (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 (done_tac));
387 ];;
388
389 (* Lemma ext_in_dart *)
390 let ext_in_dart = Sections.section_proof ["d"]
391 `d IN dart_of_fan (V,E)
392         ==> ext_dart (V,E) d IN d_fan (vec 0,V,E)`
393 [
394    (((((use_arg_then2 ("dart_of_fan_eq_image", [dart_of_fan_eq_image]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["x_in"]));
395    ((((use_arg_then2 ("ext_contracted", [ext_contracted]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
396 ];;
397
398 (* Lemma ext_in_dart1 *)
399 let ext_in_dart1 = Sections.section_proof ["d"]
400 `d IN dart1_of_fan (V,E)
401         ==> ext_dart (V,E) d IN d1_fan (vec 0,V,E)`
402 [
403    (((((use_arg_then2 ("dart1_of_fan_eq_image", [dart1_of_fan_eq_image]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN ALL_TAC THEN (case THEN (move ["x"])) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (move ["x_in"]));
404    (((((use_arg_then2 ("ext_contracted", [ext_contracted]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("in_d1_in_d", [in_d1_in_d]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
405 ];;
406
407 (* Section Dart1 *)
408 Sections.begin_section "Dart1";;
409
410 (* Lemma fan_hypermap_map2 *)
411 let fan_hypermap_map2 = Sections.section_proof ["d"]
412 `d IN d1_fan (vec 0,V,E)
413         ==> face_map (hypermap1_of_fanx (vec 0,V,E)) d = f1_fan (vec 0) V E d /\
414             node_map (hypermap1_of_fanx (vec 0,V,E)) d = n_fan (vec 0) V E d /\
415             edge_map (hypermap1_of_fanx (vec 0,V,E)) d = e_fan (vec 0) V E d`
416 [
417    ((BETA_TAC THEN (move ["d_in"])) THEN ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("hypermap_of_fan_rep_alt", [hypermap_of_fan_rep_alt])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("res", [res]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (done_tac));
418 ];;
419
420 (* Lemma fan_hypermap_map1 *)
421 let fan_hypermap_map1 = Sections.section_proof ["d"]
422 `d IN dart1_of_fan (V,E) ==>
423         face_map (hypermap_of_fan (V,E)) d = f_fan_pair (V,E) d /\
424         node_map (hypermap_of_fan (V,E)) d = n_fan_pair (V,E) d /\
425         edge_map (hypermap_of_fan (V,E)) d = e_fan_pair (V,E) d`
426 [
427    ((BETA_TAC THEN (move ["d_in"])) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))));
428    (((((use_arg_then2 ("f_fan_pair_ext", [f_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("e_fan_pair_ext", [e_fan_pair_ext]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
429 ];;
430
431 (* Lemma f_fan_pair_eq_inv_n_o_e *)
432 let f_fan_pair_eq_inv_n_o_e = Sections.section_proof ["d"]
433 `d IN dart1_of_fan (V,E)
434         ==> f_fan_pair (V,E) d = inverse (n_fan_pair_ext (V,E)) (e_fan_pair (V,E) d)`
435 [
436    (BETA_TAC THEN (move ["d_in"]));
437    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair (V,E) d = f_fan_pair_ext (V,E) d`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((((use_arg_then2 ("f_fan_pair_ext", [f_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
438    (((fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL PERMUTES_INVERSE_INVERSE))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))));
439    ((((use_arg_then2 ("F_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [F_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
440    ((THENL_ROT (-1)) ((((use_arg_then2 ("INVERSE_F_FAN_PAIR_EXT", [INVERSE_F_FAN_PAIR_EXT]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("PERMUTATION_INVERSE_COMPOSE", [PERMUTATION_INVERSE_COMPOSE]))(thm_tac (new_rewrite [] []))))));
441    (((((use_arg_then2 ("inv_e_fan_pair_ext", [inv_e_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("e_fan_pair_ext", [e_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
442    (repeat_tactic 1 9 (((use_arg_then2 ("PERMUTATION_PERMUTES", [PERMUTATION_PERMUTES]))(thm_tac (new_rewrite [] [])))));
443    ((split_tac) THEN ((fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E)`))) (term_tac exists_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("FINITE_DART_OF_FAN", [FINITE_DART_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac ->(use_arg_then2 ("E_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [E_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(fun tmp_arg1 -> (use_arg_then2 ("N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(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));
444 ];;
445
446 (* Lemma fan_map_contracted *)
447 let fan_map_contracted = Sections.section_proof ["d"]
448 `d IN d1_fan (vec 0,V,E) ==>
449         f_fan_pair (V,E) (contracted_dart d) = contracted_dart (f1_fan (vec 0) V E d) /\
450         n_fan_pair (V,E) (contracted_dart d) = contracted_dart (n_fan (vec 0) V E d) /\
451         e_fan_pair (V,E) (contracted_dart d) = contracted_dart (e_fan (vec 0) V E d)`
452 [
453    (BETA_TAC THEN (move ["d_in"]));
454    (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("hyp_iso_comm", [hyp_iso_comm])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit", [fan_hypermaps_iso_explicit])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (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 ("d", [])) (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));
455    (((((fun arg_tac -> (use_arg_then2 ("hypermap_of_fan_rep_alt", [hypermap_of_fan_rep_alt])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_d1_in_d", [in_d1_in_d]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
456    (((repeat_tactic 1 9 (((use_arg_then2 ("fan_hypermap_map2", [fan_hypermap_map2]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("contracted_in_dart1", [contracted_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac))) THEN (done_tac));
457 ];;
458
459 (* Lemma fan_map_ext *)
460 let fan_map_ext = Sections.section_proof ["d"]
461 `d IN dart1_of_fan (V,E) ==>
462         f1_fan (vec 0) V E (ext_dart (V,E) d) = ext_dart (V,E) (f_fan_pair (V,E) d) /\
463         n_fan (vec 0) V E (ext_dart (V,E) d) = ext_dart (V,E) (n_fan_pair (V,E) d) /\
464         e_fan (vec 0) V E (ext_dart (V,E) d) = ext_dart (V,E) (e_fan_pair (V,E) d)`
465 [
466    (BETA_TAC THEN (move ["d_in"]));
467    (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("hyp_iso_comm", [hyp_iso_comm])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit2", [fan_hypermaps_iso_explicit2])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (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 ("d", [])) (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));
468    (((((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("in_dart1_in_dart", [in_dart1_in_dart]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
469    (((repeat_tactic 1 9 (((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("fan_hypermap_map2", [fan_hypermap_map2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("ext_in_dart1", [ext_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN ((simp_tac THEN TRY done_tac))) THEN (done_tac));
470 ];;
471
472 (* Finalization of the section Dart1 *)
473 let fan_hypermap_map2 = Sections.finalize_theorem fan_hypermap_map2;;
474 let fan_hypermap_map1 = Sections.finalize_theorem fan_hypermap_map1;;
475 let f_fan_pair_eq_inv_n_o_e = Sections.finalize_theorem f_fan_pair_eq_inv_n_o_e;;
476 let fan_map_contracted = Sections.finalize_theorem fan_map_contracted;;
477 let fan_map_ext = Sections.finalize_theorem fan_map_ext;;
478 Sections.end_section "Dart1";;
479
480 (* Finalization of the section Hypermap1 *)
481 let inv_e_fan_pair_ext = Sections.finalize_theorem inv_e_fan_pair_ext;;
482 let bij_ext_dart = Sections.finalize_theorem bij_ext_dart;;
483 let d_fan_eq_image = Sections.finalize_theorem d_fan_eq_image;;
484 let contracted_in_dart = Sections.finalize_theorem contracted_in_dart;;
485 let ext_contracted = Sections.finalize_theorem ext_contracted;;
486 let ext_dart_eq_inv_contracted_dart1 = Sections.finalize_theorem ext_dart_eq_inv_contracted_dart1;;
487 let bij_ext_dart1 = Sections.finalize_theorem bij_ext_dart1;;
488 let d1_fan_eq_image = Sections.finalize_theorem d1_fan_eq_image;;
489 let contracted_in_dart1 = Sections.finalize_theorem contracted_in_dart1;;
490 let dart_of_fan_eq_image = Sections.finalize_theorem dart_of_fan_eq_image;;
491 let ext_in_dart = Sections.finalize_theorem ext_in_dart;;
492 let ext_in_dart1 = Sections.finalize_theorem ext_in_dart1;;
493 let fan_hypermap_map2 = Sections.finalize_theorem fan_hypermap_map2;;
494 let fan_hypermap_map1 = Sections.finalize_theorem fan_hypermap_map1;;
495 let f_fan_pair_eq_inv_n_o_e = Sections.finalize_theorem f_fan_pair_eq_inv_n_o_e;;
496 let fan_map_contracted = Sections.finalize_theorem fan_map_contracted;;
497 let fan_map_ext = Sections.finalize_theorem fan_map_ext;;
498 Sections.end_section "Hypermap1";;
499
500 (* Finalization of the section FanMisc *)
501 let orbit_map_le3 = Sections.finalize_theorem orbit_map_le3;;
502 let power_res = Sections.finalize_theorem power_res;;
503 let contracted_ext = Sections.finalize_theorem contracted_ext;;
504 let in_dart1_in_dart = Sections.finalize_theorem in_dart1_in_dart;;
505 let in_d1_in_d = Sections.finalize_theorem in_d1_in_d;;
506 let inE_eq_in_dart1 = Sections.finalize_theorem inE_eq_in_dart1;;
507 let inE_imp_in_dart = Sections.finalize_theorem inE_imp_in_dart;;
508 let dart1_switch = Sections.finalize_theorem dart1_switch;;
509 let dart_switch = Sections.finalize_theorem dart_switch;;
510 let finite_dart1 = Sections.finalize_theorem finite_dart1;;
511 let f_fan_pair_power = Sections.finalize_theorem f_fan_pair_power;;
512 let fst_node_hypermap_of_fan = Sections.finalize_theorem fst_node_hypermap_of_fan;;
513 let fan_node_eq_fst = Sections.finalize_theorem fan_node_eq_fst;;
514 let finite_set_of_edge = Sections.finalize_theorem finite_set_of_edge;;
515 let azim_dart1_eq_azim_fan = Sections.finalize_theorem azim_dart1_eq_azim_fan;;
516 let azim_dart_eq_azim_fan = Sections.finalize_theorem azim_dart_eq_azim_fan;;
517 let azim_dart1_eq_azim = Sections.finalize_theorem azim_dart1_eq_azim;;
518 let fully_surrounded_dart_of_fan_eq = Sections.finalize_theorem fully_surrounded_dart_of_fan_eq;;
519 let fully_surrounded_card_set_of_edge = Sections.finalize_theorem fully_surrounded_card_set_of_edge;;
520 let fully_surrounded_card_set_of_edge1 = Sections.finalize_theorem fully_surrounded_card_set_of_edge1;;
521 let fully_surrounded_azim_dart_eq_azim = Sections.finalize_theorem fully_surrounded_azim_dart_eq_azim;;
522 let azim_gt0_card_set_of_edge = Sections.finalize_theorem azim_gt0_card_set_of_edge;;
523 let fully_surrounded_imp_fan80 = Sections.finalize_theorem fully_surrounded_imp_fan80;;
524 let sigma_fan_inV = Sections.finalize_theorem sigma_fan_inV;;
525 let sigma_fan_not_fixed = Sections.finalize_theorem sigma_fan_not_fixed;;
526 let inv_e_fan_pair_ext = Sections.finalize_theorem inv_e_fan_pair_ext;;
527 let bij_ext_dart = Sections.finalize_theorem bij_ext_dart;;
528 let d_fan_eq_image = Sections.finalize_theorem d_fan_eq_image;;
529 let contracted_in_dart = Sections.finalize_theorem contracted_in_dart;;
530 let ext_contracted = Sections.finalize_theorem ext_contracted;;
531 let ext_dart_eq_inv_contracted_dart1 = Sections.finalize_theorem ext_dart_eq_inv_contracted_dart1;;
532 let bij_ext_dart1 = Sections.finalize_theorem bij_ext_dart1;;
533 let d1_fan_eq_image = Sections.finalize_theorem d1_fan_eq_image;;
534 let contracted_in_dart1 = Sections.finalize_theorem contracted_in_dart1;;
535 let dart_of_fan_eq_image = Sections.finalize_theorem dart_of_fan_eq_image;;
536 let ext_in_dart = Sections.finalize_theorem ext_in_dart;;
537 let ext_in_dart1 = Sections.finalize_theorem ext_in_dart1;;
538 let fan_hypermap_map2 = Sections.finalize_theorem fan_hypermap_map2;;
539 let fan_hypermap_map1 = Sections.finalize_theorem fan_hypermap_map1;;
540 let f_fan_pair_eq_inv_n_o_e = Sections.finalize_theorem f_fan_pair_eq_inv_n_o_e;;
541 let fan_map_contracted = Sections.finalize_theorem fan_map_contracted;;
542 let fan_map_ext = Sections.finalize_theorem fan_map_ext;;
543 Sections.end_section "FanMisc";;
544
545 (* Lemma pair_expand *)
546 let pair_expand = Sections.section_proof ["p"]
547 `p = FST p,SND p`
548 [
549    ((ALL_TAC) THEN (done_tac));
550 ];;
551
552 (* Section AddTriangle *)
553 Sections.begin_section "AddTriangle";;
554 (Sections.add_section_var (mk_var ("V", (`:real^3->bool`))));;
555 (Sections.add_section_var (mk_var ("E", (`:(real^3->bool)->bool`))));;
556 (Sections.add_section_hyp "fanV" (`FAN (vec 0, V, E)`));;
557
558 (* Lemma split_fan_face_eq *)
559 let split_fan_face_eq = Sections.section_proof ["d"]
560 `d IN dart_of_fan (V,E)
561         /\ CARD (face (hypermap_of_fan (V,E)) d) = 3
562         ==> split_fan_face (V,E) d = (V,E)`
563 [
564    (((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN case THEN (move ["v"]) THEN (move ["w"]) THEN (case THEN ((move ["d_in"]) THEN (move ["card3"]))));
565    ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["d_in1"]))));
566    ((((use_arg_then2 ("CARD_FACE_GT_1", [CARD_FACE_GT_1])) (disch_tac [])) THEN (clear_assumption "CARD_FACE_GT_1") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("card3", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
567    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE TRIANGULAR_FACE))) (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 ("card3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d_in1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["f_eq"]) THEN (move ["_"])))));
568    ((((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("ABSORPTION", [ABSORPTION]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac));
569    (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(thm_tac (new_rewrite [] []))));
570    (((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`face (hypermap_of_fan (V,E)) (v,w)`))) (term_tac exists_tac)));
571    (((((use_arg_then2 ("FACE_SUBSET_DART1_OF_FAN", [FACE_SUBSET_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 2 0 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
572 ];;
573
574 (* Lemma sigma_in_dart1 *)
575 let sigma_in_dart1 = Sections.section_proof ["v";"w"]
576 `v,w IN dart1_of_fan (V,E)
577         ==> (v, sigma_fan (vec 0) V E v w) IN dart1_of_fan (V,E)`
578 [
579    ((repeat_tactic 1 9 (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("Fan.properties_of_set_of_edge_fan", [Fan.properties_of_set_of_edge_fan])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))));
580    (((fun arg_tac -> (use_arg_then2 ("Fan.sigma_fan_in_set_of_edge", [Fan.sigma_fan_in_set_of_edge])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (exact_tac));
581 ];;
582
583 (* Lemma in_face_lemma *)
584 let in_face_lemma = Sections.section_proof ["v";"w"]
585 `v,w IN dart1_of_fan (V,E)
586         ==> v,w IN face (hypermap_of_fan (V,E)) (v,w)
587         /\ sigma_fan (vec 0) V E v w, v IN face (hypermap_of_fan (V,E)) (v,w)
588         /\ f_fan_pair (V,E) (v,w) IN face (hypermap_of_fan (V,E)) (v,w)`
589 [
590    (BETA_TAC THEN (move ["vw_in"]));
591    ((((use_arg_then2 ("Hypermap.face_refl", [Hypermap.face_refl]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
592    ((((fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE FACE_LAST_POINT))) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
593    (((((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("POWER_1", [POWER_1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Hypermap.lemma_in_face", [Hypermap.lemma_in_face]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
594 ];;
595
596 (* Lemma f_fan_pair_last *)
597 let f_fan_pair_last = Sections.section_proof ["v";"w"]
598 `v,w IN dart1_of_fan (V,E)
599         ==> f_fan_pair (V,E) (sigma_fan (vec 0) V E v w,v) = (v,w)`
600 [
601    ((BETA_TAC THEN (move ["vw_in"])) THEN ((((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN", [Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN]))(gsym_then (thm_tac (new_rewrite [] [])))))));
602    (((((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
603    (((((fun arg_tac -> (use_arg_then2 ("Fan.INVERSE1_SIGMA_FAN", [Fan.INVERSE1_SIGMA_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
604 ];;
605
606 (* Lemma f_fan_pair3 *)
607 let f_fan_pair3 = Sections.section_proof ["v";"w"]
608 `v,w IN dart1_of_fan (V,E)
609         /\ CARD (face (hypermap_of_fan (V,E)) (v,w)) = 3
610         ==> f_fan_pair (V,E) (v,w) = (w, sigma_fan (vec 0) V E v w)
611         /\ f_fan_pair (V,E) (w, sigma_fan (vec 0) V E v w) = (sigma_fan (vec 0) V E v w, v)
612         /\ f_fan_pair (V,E) (sigma_fan (vec 0) V E v w, v) = (v,w) /\
613         w, sigma_fan (vec 0) V E v w IN dart1_of_fan (V,E)`
614 [
615    (BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["card3"]))));
616    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE TRIANGULAR_FACE))) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
617    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
618    (BETA_TAC THEN (case THEN (move ["f_eq"])) THEN (case THEN ((move ["eq1"]) THEN (move ["eq2"]))));
619    ((fun arg_tac -> arg_tac (Arg_term (`w,w1 IN dart1_of_fan (V,E) /\ w1,v IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["in_dart"]))));
620    (((repeat_tactic 1 9 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("IN_FACE_IMP_IN_DART1_OF_FAN", [IN_FACE_IMP_IN_DART1_OF_FAN])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
621    ((((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
622    ((fun arg_tac -> arg_tac (Arg_term (`{w,w1} IN E /\ {w1,v} IN E /\ {v,w} IN E /\ {w,v} IN E /\ {v,w1} IN E /\ {w1,w} IN E`))) (term_tac (have_gen_tac [](move ["inE"]))));
623    (((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
624    ((repeat_tactic 1 9 (((use_arg_then2 ("Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN", [Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)));
625    (((((use_arg_then2 ("eq1", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("eq2", []))(gsym_then (thm_tac (new_rewrite [3] []))))) THEN (((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [5] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("Fan.INVERSE1_SIGMA_FAN", [Fan.INVERSE1_SIGMA_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
626 ];;
627 (Sections.add_section_hyp "f_surr" (`fully_surrounded (V,E)`));;
628
629 (* Let dart1_eq *)
630 Sections.add_section_lemma "dart1_eq" (Sections.section_proof []
631 `dart_of_fan (V,E) = dart1_of_fan (V,E)`
632 [
633    ((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
634 ]);;
635
636 (* Lemma fully_surrounded_card_face_alt *)
637 let fully_surrounded_card_face_alt = Sections.section_proof ["d"]
638 `d IN dart_of_fan (V,E)
639         ==> CARD (face (hypermap_of_fan (V,E)) d) = 3 \/
640            3 < CARD (face (hypermap_of_fan (V,E)) d)`
641 [
642    (BETA_TAC THEN (move ["d_in"]));
643    (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FULLY_SURROUNDED_IMP_CARD_FACE_GE_3", [FULLY_SURROUNDED_IMP_CARD_FACE_GE_3])) (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 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC);
644    (((((use_arg_then2 ("GE", [GE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("leq_eqVlt", [leq_eqVlt]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EQ_SYM_EQ", [EQ_SYM_EQ]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
645 ];;
646
647 (* Lemma fully_surrounded_imp_conforming *)
648 let fully_surrounded_imp_conforming = Sections.section_proof []
649 `conforming_fan (vec 0,V,E)`
650 [
651    (((fun arg_tac -> (use_arg_then2 ("PIIJBJK", [PIIJBJK])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac));
652    (((((use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))) THEN (move ["v"]) THEN (move ["vV"]));
653    ((((use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
654 ];;
655
656 (* Lemma fully_surrounded_diag_not_in_dart *)
657 let fully_surrounded_diag_not_in_dart = Sections.section_proof ["v";"w"]
658 `v,w IN dart_of_fan (V,E)
659         /\ 3 < CARD (face (hypermap_of_fan (V,E)) (v,w))
660         ==> ~((w, sigma_fan (vec 0) V E v w) IN dart_of_fan (V,E))`
661 [
662    (((use_arg_then2 ("v", [])) (disch_tac [])) THEN (clear_assumption "v") THEN BETA_TAC THEN (move ["u"]));
663    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E u w`))) (term_tac (set_tac "v")));
664    ((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] [])))))));
665    ((BETA_TAC THEN (case THEN (move ["uw_in"]))) THEN (((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac) THEN (move ["wv_in"])));
666    ((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL FACE_NODE_EDGE_ORBIT_INVERSE)))(thm_tac (new_rewrite [] [])))));
667    ((THENL_FIRST) (((use_arg_then2 ("Hypermap.card_orbit_le", [Hypermap.card_orbit_le])) (thm_tac apply_tac)) THEN (split_tac)) ((arith_tac) THEN (done_tac)));
668    ((((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("INVERSE_F_FAN_PAIR_EXT_EXPLICIT", [INVERSE_F_FAN_PAIR_EXT_EXPLICIT]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
669    ((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `3 = SUC 2`)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Hypermap.POWER_2", [Hypermap.POWER_2]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))));
670    ((fun arg_tac -> arg_tac (Arg_term (`{v, u} IN E`))) (term_tac (have_gen_tac [](move ["vu_in"]))));
671    (((((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("v_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
672    (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Planarity.PROPERTIES_TRIANGLE_FAN", [Planarity.PROPERTIES_TRIANGLE_FAN])) (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 ("v_def", [])) (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));
673    ((((use_arg_then2 ("wv_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("uw_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("vu_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80]))(thm_tac (new_rewrite [] [])))) THEN ((simp_tac THEN TRY done_tac)));
674    ((BETA_TAC THEN (move ["x"]) THEN (move ["xV"])) THEN (((use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
675    (BETA_TAC THEN (move ["eq"]));
676    ((repeat_tactic 1 9 (((use_arg_then2 ("res", [res]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("uw_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("v_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vu_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
677    (((repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("wv_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
678 ];;
679
680 (* Lemma aux_lemma *)
681 let aux_lemma = Sections.section_proof ["v";"w"]
682 `let f = face (hypermap_of_fan (V,E)) (v,w) and
683                         h = ext_dart (V,E) and
684                         w1 = sigma_fan (vec 0) V E v w and
685                         d2 = f_fan_pair (V,E) (v,w) in
686         v,w IN dart_of_fan (V,E) /\ 3 < CARD f
687         ==> IMAGE h f IN face_set (hypermap1_of_fanx (vec 0,V,E))
688                 /\ CARD (IMAGE h f) > 3
689                 /\ {h (w1,v), h (v,w), h d2} SUBSET (IMAGE h f)
690                 /\ f1_fan (vec 0) V E (h (w1,v)) = h (v,w)
691                 /\ f1_fan (vec 0) V E (h (v,w)) = h d2
692                 /\ ~(f1_fan (vec 0) V E (h d2) = h (w1,v))
693                 /\ pr2 (h (w1,v)) = w1 /\ pr2 (h (v,w)) = v /\ pr2 (h d2) = w
694                 /\ pr3 (h (w1,v)) = v /\ pr3 (h (v,w)) = w
695                 /\ {w1,v} IN E /\ {v,w} IN E /\ ~({w, w1} IN E) /\ ~(w1 = w)`
696 [
697    ((CONV_TAC let_CONV) THEN (BETA_TAC THEN (case THEN ((move ["vw_in0"]) THEN (move ["card_gt3"])))));
698    ((((use_arg_then2 ("vw_in0", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in"])));
699    ((fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit2", [fan_hypermaps_iso_explicit2])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
700    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan _`))) (term_tac (set_tac "H")));
701    ((fun arg_tac -> arg_tac (Arg_term (`face H _2`))) (term_tac (set_tac "f")));
702    ((fun arg_tac -> arg_tac (Arg_term (`ext_dart _`))) (term_tac (set_tac "h")));
703    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
704    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _1 _2`))) (term_tac (set_tac "d2")));
705    (BETA_TAC THEN (move ["iso"]));
706    ((fun arg_tac -> arg_tac (Arg_term (`dart H = dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["dart_eq"]))));
707    (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
708    ((fun arg_tac -> (use_arg_then2 ("in_face_lemma", [in_face_lemma])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["in_face"])));
709    (in_tac ["in_face"] false ((((use_arg_then2 ("H_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_def", []))(thm_tac (new_rewrite [] []))))));
710    ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart H /\ w1,v IN dart H /\ d2 IN dart H`))) (term_tac (have_gen_tac [](move ["in_dart"]))));
711    (((split_tac) THEN ((TRY done_tac))) THEN (split_tac) THEN ((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("f", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("in_face", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Hypermap.lemma_face_subset", [Hypermap.lemma_face_subset]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (done_tac));
712    ((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("iso_components", [iso_components])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
713    ((((use_arg_then2 ("Hypermap.lemma_in_face_set", [Hypermap.lemma_in_face_set]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("hyp_iso_dart", [hyp_iso_dart])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
714    ((((use_arg_then2 ("CARD_IMAGE_INJ", [CARD_IMAGE_INJ]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("GT", [GT]))(thm_tac (new_rewrite [] []))))));
715    (((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Hypermap.FACE_FINITE", [Hypermap.FACE_FINITE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbT", [andbT]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (move ["y"]) THEN (move ["h1"]));
716    ((((fun arg_tac -> (use_arg_then2 ("hyp_iso_inj", [hyp_iso_inj])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("h1", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)));
717    ((split_tac) THEN ((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`face H (v,w)`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("h1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Hypermap.lemma_face_subset", [Hypermap.lemma_face_subset]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
718    (((((use_arg_then2 ("card_gt3", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
719    (((((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 (((use_arg_then2 ("orbF", [orbF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] []))))) THEN (move ["y"]));
720    (((THENL) (((THENL) case [ALL_TAC; (case THEN ALL_TAC)]) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) [((fun arg_tac -> arg_tac (Arg_term (`w1,v`))) (term_tac exists_tac)); ((fun arg_tac -> arg_tac (Arg_term (`v,w`))) (term_tac exists_tac)); ((use_arg_then2 ("d2", [])) (term_tac exists_tac))]) THEN (done_tac));
721    ((((use_arg_then2 ("h_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("fan_map_ext", [fan_map_ext]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))));
722    ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
723    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair (V,E) (w1,v) = v,w`))) (term_tac (have_gen_tac [](move ["eq"]))));
724    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`{v,w1} IN E`))) (term_tac (have_gen_tac [](move ["in1"])))) (((((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
725    ((((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN", [Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
726    ((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("Fan.INVERSE1_SIGMA_FAN", [Fan.INVERSE1_SIGMA_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
727    (((((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
728    ((THENL_ROT (-1)) (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (split_tac)));
729    ((((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr2", [Fan.pr2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr3", [Fan.pr3]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
730    ((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))));
731    (((((fun arg_tac -> (use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart])) (fun fst_arg -> (use_arg_then2 ("vw_in0", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("sigma_fan_not_fixed", [sigma_fan_not_fixed]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
732    ((((use_arg_then2 ("card_gt3", [])) (disch_tac [])) THEN (clear_assumption "card_gt3") THEN ((use_arg_then2 ("contraL", [contraL])) (disch_tac [])) THEN (clear_assumption "contraL") THEN (DISCH_THEN apply_tac)) THEN ((((use_arg_then2 ("NOT_LT", [NOT_LT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h_def", []))(thm_tac (new_rewrite [] []))))));
733    (((DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("hyp_iso_inj", [hyp_iso_inj])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (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 ((THENL) (ANTS_TAC) [ALL_TAC; (move ["eq2"])]));
734    (((((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
735    ((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("face", [face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Hypermap.card_orbit_le", [Hypermap.card_orbit_le]))(thm_tac (new_rewrite [] [])))));
736    ((((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `3 = SUC 2`)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("Hypermap.POWER_2", [Hypermap.POWER_2]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))));
737    ((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 0 10 (((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
738    (((((use_arg_then2 ("eq2", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
739 ];;
740
741 (* Lemma fan_split_fan_face *)
742 let fan_split_fan_face = Sections.section_proof ["v";"w"]
743 `v,w IN dart_of_fan (V,E)
744         ==> FAN (vec 0, split_fan_face (V,E) (v,w))
745         /\ dart_of_fan (split_fan_face (V,E) (v,w)) = dart1_of_fan (V,E)
746                 UNION {(sigma_fan (vec 0) V E v w, w), (w, sigma_fan (vec 0) V E v w)}
747         /\ fully_surrounded (split_fan_face (V,E) (v,w))`
748 [
749    ((BETA_TAC THEN (move ["vw_in"])) THEN (((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
750    (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_face_alt", [fully_surrounded_card_face_alt])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["card_f"]));
751    ((((use_arg_then2 ("split_fan_face_eq", [split_fan_face_eq]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_surr", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))));
752    ((((use_arg_then2 ("UNION_COMM", [UNION_COMM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("EQ_SYM_EQ", [EQ_SYM_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SUBSET_UNION_ABSORPTION", [SUBSET_UNION_ABSORPTION]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))));
753    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE TRIANGULAR_FACE))) (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 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["f_eq"])));
754    (((THENL) (BETA_TAC THEN (move ["x"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) [(((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))); (ALL_TAC)]) THEN ((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`face (hypermap_of_fan (V,E)) (v,w)`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("FACE_SUBSET_DART1_OF_FAN", [FACE_SUBSET_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
755    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE aux_lemma))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
756    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan _`))) (term_tac (set_tac "H")));
757    ((fun arg_tac -> arg_tac (Arg_term (`face H _2`))) (term_tac (set_tac "f")));
758    ((fun arg_tac -> arg_tac (Arg_term (`ext_dart _`))) (term_tac (set_tac "h")));
759    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
760    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _1 _2`))) (term_tac (set_tac "d2")));
761    ((fun arg_tac -> arg_tac (Arg_term (`{w,w1} INSERT E`))) (term_tac (set_tac "E1")));
762    (BETA_TAC THEN (case THEN (move ["h1"])) THEN (case THEN (move ["h2"])) THEN (case THEN (move ["h3"])) THEN (move ["h4"]));
763    ((fun arg_tac -> arg_tac (Arg_term (`E1 = E UNION {{w1,w}}`))) (term_tac (have_gen_tac [](move ["eq"]))));
764    (((((use_arg_then2 ("E1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("UNION_COMM", [UNION_COMM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SING_UNION_EQ_INSERT", [SING_UNION_EQ_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
765    (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("STEP3_REDUCE_FAN", [STEP3_REDUCE_FAN])) (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 ("h1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`{w,w1} INSERT E`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w1", [])) (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 ("w", [])) (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));
766    (((((use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (repeat_tactic 0 15 (((split_tac) THEN ((TRY done_tac))))));
767    ((BETA_TAC THEN (move ["x"]) THEN (move ["xV"])) THEN (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
768    (((((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] [])))) THEN (move ["fan2"])) THEN ((((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fan2", [fan2]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
769    (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("DART_FANADD_EQ_DART_FAN_ADD_2DART", [DART_FANADD_EQ_DART_FAN_ADD_2DART])) (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 ("h1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("E1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w1", [])) (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 ("w", [])) (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));
770    (((((use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (repeat_tactic 0 15 (((split_tac) THEN ((TRY done_tac))))));
771    ((BETA_TAC THEN (move ["x"]) THEN (move ["xV"])) THEN (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
772    ((fun arg_tac -> arg_tac (Arg_term (`pr23`))) (term_tac (set_tac "cc")));
773    ((fun arg_tac -> arg_tac (Arg_term (`cc = contracted_dart`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
774    ((((use_arg_then2 ("FUN_EQ_THM", [FUN_EQ_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("cc_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("pr23", [pr23]))(thm_tac (new_rewrite [] [])))));
775    ((case THEN (move ["x1"])) THEN (case THEN (move ["x2"])) THEN (case THEN (move ["x3"]) THEN (move ["x4"])));
776    ((((use_arg_then2 ("Fan_defs.contracted_dart", [Fan_defs.contracted_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
777    (((repeat_tactic 1 9 (((use_arg_then2 ("hypermap_of_fan_rep_alt", [hypermap_of_fan_rep_alt]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("dart_of_fan_eq_image", [dart_of_fan_eq_image]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] []))))) THEN (move ["dart_eq"]));
778    ((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
779    ((fun arg_tac -> arg_tac (Arg_term (`face (hypermap_of_fan (V,E1)) (w1,w)`))) (term_tac (set_tac "ds1")));
780    ((fun arg_tac -> arg_tac (Arg_term (`face (hypermap_of_fan (V,E1)) (w,w1)`))) (term_tac (set_tac "ds2")));
781    ((fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit2", [fan_hypermaps_iso_explicit2])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
782    (((fun arg_tac -> arg_tac (Arg_term (`ext_dart _`))) (term_tac (set_tac "h2"))) THEN (move ["iso2"]));
783    (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FAN80_FANADD", [FAN80_FANADD])) (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 ("h1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`{w,w1} INSERT E`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w1", [])) (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 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`IMAGE h2 ds1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`IMAGE h2 ds2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w,w1,v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w1,v,w`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,v,w,w1`))) (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));
784    (((((use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (repeat_tactic 0 12 (((split_tac) THEN ((TRY done_tac))))));
785    ((BETA_TAC THEN (move ["x"]) THEN (move ["xV"])) THEN (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
786    ((((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("h_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr3", [Fan.pr3]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
787    ((((use_arg_then2 ("ds1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ds2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("iso_components", [iso_components])) (fun fst_arg -> (use_arg_then2 ("iso2", [])) (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 -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
788    ((((use_arg_then2 ("h2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("extension_sigma_fan", [extension_sigma_fan]))(thm_tac (new_rewrite [] []))))));
789    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`w IN set_of_edge w1 V E1 /\ w1 IN set_of_edge w V E1`))) (term_tac (have_gen_tac [](move ["w_in"]))))) ((repeat_tactic 1 9 (((use_arg_then2 ("w_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
790    ((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 -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))));
791    ((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [3] []))))) THEN (((use_arg_then2 ("sigma_fan_inV", [sigma_fan_inV]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("vw_in1", [])) (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 (((use_arg_then2 ("andbb", [andbb]))(thm_tac (new_rewrite [] [])))));
792    (((((use_arg_then2 ("E1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
793    (((((use_arg_then2 ("Planarity.fan80", [Planarity.fan80]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded", [fully_surrounded]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] []))))) THEN (move ["f80"]) THEN (case THEN ALL_TAC) THEN (move ["x"]) THEN (move ["y"]) THEN (move ["xy_in"]));
794    ((fun arg_tac -> arg_tac (Arg_term (`{x,y} IN E1`))) (term_tac (have_gen_tac [](move ["xy_inE"]))));
795    ((((use_arg_then2 ("xy_in", [])) (disch_tac [])) THEN (clear_assumption "xy_in") THEN BETA_TAC) THEN ((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("E1_def", []))(gsym_then (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)));
796    ((((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); ALL_TAC]) THEN ((TRY done_tac))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))));
797    ((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 (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
798    ((((use_arg_then2 ("azim_dart1_eq_azim", [azim_dart1_eq_azim]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("f80", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fan2", [fan2]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("xy_inE", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
799    (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL add_edge_imp_card_set_edge_ge1_fan))) (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 ("w1", [])) (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)))(thm_tac (new_rewrite [] []))));
800    (((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("Fan_misc.FAN_IN_SET_OF_EDGE", [Fan_misc.FAN_IN_SET_OF_EDGE])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("xy_inE", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["a"]) THEN (move ["aV"]));
801    ((((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
802 ];;
803
804 (* Lemma node_split_fan *)
805 let node_split_fan = Sections.section_proof ["v";"w"]
806 `v,w IN dart_of_fan (V,E)
807         ==> let H = hypermap_of_fan (V,E) and
808                 H2 = hypermap_of_fan (split_fan_face (V,E) (v,w)) and
809                 w' = sigma_fan (vec 0) V E v w in
810         (!d. d IN dart_of_fan (V,E)
811                 ==> (FST d = w ==> node H2 d = (w,w') INSERT node H d)
812                 /\ (FST d = w' ==> node H2 d = (w',w) INSERT node H d)
813                 /\ (~(FST d = w) /\ ~(FST d = w') ==> node H2 d = node H d))`
814 [
815    ((BETA_TAC THEN (move ["vw_in"])) THEN ((CONV_TAC let_CONV) THEN (move ["d"]) THEN (move ["d_in"])));
816    ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN ((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN (move ["vw_in1"]) THEN (move ["d_in1"])));
817    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
818    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("sigma_fan_not_fixed", [sigma_fan_not_fixed])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["w'_neq"])));
819    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
820    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w'")));
821    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E2")));
822    (BETA_TAC THEN (case THEN (move ["fan2"])) THEN (case THEN (move ["dart_eq"])) THEN (move ["_"]));
823    ((repeat_tactic 1 9 (((use_arg_then2 ("fan_node_eq_fst", [fan_node_eq_fst]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
824    ((repeat_tactic 1 9 (((use_arg_then2 ("EXTENSION", [EXTENSION]))(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 ("inE", [inE]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] [])))));
825    ((THENL) (split_tac) [((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (move ["x"])); ALL_TAC]);
826    ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`x = w,w'`))) (disch_eq_tac "x_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
827    (((fun arg_tac -> arg_tac (Arg_term (`FST x = w`))) (disch_eq_tac "fst_x_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
828    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~(x = w',w)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
829    (((((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fst_x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_neq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
830    ((THENL) (split_tac) [((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (move ["x"])); ALL_TAC]);
831    ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`x = w',w`))) (disch_eq_tac "x_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
832    (((fun arg_tac -> arg_tac (Arg_term (`FST x = w'`))) (disch_eq_tac "fst_x_eq" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
833    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~(x = w,w')`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
834    (((((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fst_x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_neq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
835    (BETA_TAC THEN (case THEN ((move ["dw_neq"]) THEN (move ["dw'_neq"]))) THEN (move ["x"]));
836    (((use_arg_then2 ("andb_id2r", [andb_id2r])) (disch_tac [])) THEN (clear_assumption "andb_id2r") THEN (DISCH_THEN apply_tac) THEN (move ["fst_eq"]));
837    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`~(x = w',w)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) (((((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fst_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dw'_neq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
838    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`~(x = w,w')`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
839    (((((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fst_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dw_neq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
840 ];;
841
842 (* Lemma n_split_fan_face *)
843 let n_split_fan_face = Sections.section_proof ["v";"w"]
844 `v,w IN dart_of_fan (V,E)
845         /\ 3 < CARD (face (hypermap_of_fan (V,E)) (v,w))
846         ==> (let w1 = sigma_fan (vec 0) V E v w and
847                 d2 = f_fan_pair (V,E) (v,w) and
848                 n = n_fan_pair (split_fan_face (V,E) (v,w)) in
849         n (w1,w) = n_fan_pair (V,E) (w1,v) /\
850         n (w1,v) = w1,w /\
851         n d2 = w,w1 /\
852         n (w,w1) = w,v /\
853         (!d. d IN dart_of_fan (split_fan_face (V,E) (v,w)) /\
854                 ~(d = w1,w \/ d = w1,v \/ d = d2 \/ d = w,w1)
855                 ==> n d = n_fan_pair (V,E) d))`
856 [
857    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (move ["card_gt3"]));
858    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
859    (CONV_TAC let_CONV);
860    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
861    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
862    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
863    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _1 _2`))) (term_tac (set_tac "d2")));
864    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E1")));
865    ((fun arg_tac -> arg_tac (Arg_term (`E1 = E UNION {{w1,w}}`))) (term_tac (have_gen_tac [](move ["E1_eq"]))));
866    (((((use_arg_then2 ("E1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("UNION_COMM", [UNION_COMM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SING_UNION_EQ_INSERT", [SING_UNION_EQ_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
867    (BETA_TAC THEN (case THEN (move ["f1_fan"])) THEN (case THEN (move ["dart1"])) THEN (move ["f_surr1"]));
868    ((fun arg_tac -> arg_tac (Arg_term (`{w1,v} IN E /\ {v,w} IN E /\ ~({w,w1} IN E) /\ {w,v} IN E`))) (term_tac (have_gen_tac [](case THEN ((move ["e1"]) THEN (case THEN (move ["e2"])) THEN (case THEN (move ["e3"])) THEN (move ["e4"]))))));
869    ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("vw_in1", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))));
870    (((((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
871    ((fun arg_tac -> arg_tac (Arg_term (`d2 = w,inverse1_sigma_fan (vec 0) V E w v`))) (term_tac (have_gen_tac [](move ["d2_eq"]))));
872    ((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
873    ((((use_arg_then2 ("Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN", [Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (done_tac));
874    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80])) (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 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["f80"])));
875    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (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 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["gt1"])));
876    (split_tac);
877    ((repeat_tactic 1 9 (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
878    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT1", [SIGMA_FAN_OF_FANADD_AT_POINT1])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
879    (split_tac);
880    ((((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
881    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT2", [SIGMA_FAN_OF_FANADD_AT_POINT2])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
882    (split_tac);
883    ((((use_arg_then2 ("d2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
884    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT6", [SIGMA_FAN_OF_FANADD_AT_POINT6])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
885    (((((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
886    (split_tac);
887    ((((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
888    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT3", [SIGMA_FAN_OF_FANADD_AT_POINT3])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
889    (((((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] [])))))) THEN (move ["d"]) THEN (case THEN ALL_TAC) THEN (move ["d_in"]) THEN (move ["d_neq"]));
890    ((THENL_LAST) ((THENL) (((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") THEN case) [(move ["d_in"]); ALL_TAC]) (((((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
891    (((use_arg_then2 ("d_neq", [])) (disch_tac [])) THEN (clear_assumption "d_neq") THEN ((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") THEN ((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN BETA_TAC THEN (case THEN ALL_TAC) THEN (move ["x"]) THEN (move ["y"]) THEN (move ["d_in"]) THEN (case THEN (move ["eq1"])) THEN (case THEN (move ["eq2"])) THEN (case THEN (move ["eq3"])) THEN (move ["eq4"]));
892    ((repeat_tactic 1 9 (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
893    ((THENL_ROT (-1)) (((fun arg_tac -> arg_tac (Arg_term (`x IN {w,w1}`))) (disch_eq_tac "h1" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
894    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD1", [SIGMA_FAN_OF_FANADD1])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
895    (((((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (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 -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [1] [])))) THEN (((use_arg_then2 ("E1_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
896    ((fun arg_tac -> arg_tac (Arg_term (`(~(v = y) /\ x = w1) \/ (~(y = SND d2) /\ x = w)`))) (term_tac (have_gen_tac []ALL_TAC)));
897    ((((use_arg_then2 ("h1", [])) (disch_tac [])) THEN (clear_assumption "h1") THEN BETA_TAC) THEN ((((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] []))))) THEN (case THEN (move ["x_eq"])));
898    ((DISJ2_TAC) THEN ((((use_arg_then2 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (((use_arg_then2 ("eq3", [])) (disch_tac [])) THEN (clear_assumption "eq3") 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 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_eq", []))(thm_tac (new_rewrite [1] [])))) THEN (((use_arg_then2 ("SND", [SND]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
899    ((DISJ1_TAC) THEN ((((use_arg_then2 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac)) THEN (((use_arg_then2 ("eq2", [])) (disch_tac [])) THEN (clear_assumption "eq2") 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 ("x_eq", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
900    (case THEN (move ["xy_eq"]));
901    ((((use_arg_then2 ("xy_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT4", [SIGMA_FAN_OF_FANADD_AT_POINT4])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
902    (((((use_arg_then2 ("xy_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
903    ((((use_arg_then2 ("xy_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SIGMA_FAN_OF_FANADD_AT_POINT5", [SIGMA_FAN_OF_FANADD_AT_POINT5])) (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 ("f1_fan", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("e3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
904    (((((use_arg_then2 ("xy_eq", []))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((split_tac) THEN ((TRY done_tac))))));
905    ((((use_arg_then2 ("xy_eq", [])) (disch_tac [])) THEN (clear_assumption "xy_eq") THEN BETA_TAC) THEN (((((use_arg_then2 ("d2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SND", [SND]))(thm_tac (new_rewrite [] []))))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
906 ];;
907
908 (* Lemma inv_n_split_fan_face *)
909 let inv_n_split_fan_face = Sections.section_proof ["v";"w"]
910 `v,w IN dart_of_fan (V,E)
911         /\ 3 < CARD (face (hypermap_of_fan (V,E)) (v,w))
912         ==> (let w1 = sigma_fan (vec 0) V E v w and
913                 d2 = f_fan_pair (V,E) (v,w) and
914                 n = inverse (n_fan_pair_ext (split_fan_face (V,E) (v,w))) in
915         n (n_fan_pair (V,E) (w1,v)) = w1,w
916         /\ n (w1,w) = w1,v
917         /\ n (w,w1) = d2
918         /\ n (w,v) = w,w1
919         /\ (!d. ~(d = n_fan_pair (V,E) (w1,v) \/ d = w1,w \/ d = w,w1 \/ d = w,v)
920                 ==> n d = inverse (n_fan_pair_ext (V,E)) d))`
921 [
922    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (move ["card_f"]));
923    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
924    (CONV_TAC let_CONV);
925    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
926    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
927    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
928    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _1 _2`))) (term_tac (set_tac "d2")));
929    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E1")));
930    (BETA_TAC THEN (case THEN (move ["fan1"])) THEN (case THEN (move ["dart1"])) THEN (move ["f_surr1"]));
931    ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("PERMUTES_INVERSE_EQ", [PERMUTES_INVERSE_EQ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E1)`))) (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_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
932    ((fun arg_tac -> arg_tac (Arg_term (`w1,v IN dart1_of_fan (V,E) /\ d2 IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["in_dart"]))));
933    ((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
934    (((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
935    ((fun arg_tac -> arg_tac (Arg_term (`w1,w IN dart1_of_fan (V,E1) /\ w1,v IN dart1_of_fan (V,E1)
936                 /\ d2 IN dart1_of_fan (V,E1) /\ w,w1 IN dart1_of_fan (V,E1)`))) (term_tac (have_gen_tac [](move ["in_dart1"]))));
937    (((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_dart", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
938    ((repeat_tactic 1 9 (((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_dart1", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
939    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE n_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
940    (((((use_arg_then2 ("d2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] []))))) THEN (move ["eq"]));
941    (((repeat_tactic 1 9 (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] [])))))) THEN (move ["d"]) THEN (move ["d_neq"]));
942    ((((fun arg_tac -> (use_arg_then2 ("PERMUTES_INVERSE_EQ", [PERMUTES_INVERSE_EQ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E1)`))) (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_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
943    ((THENL_ROT (-1)) (((fun arg_tac -> arg_tac (Arg_term (`d IN dart1_of_fan (V,E)`))) (disch_eq_tac "d_in" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)));
944    ((fun arg_tac -> arg_tac (Arg_term (`inverse (n_fan_pair_ext (V,E)) d = d`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
945    ((((fun arg_tac -> (use_arg_then2 ("PERMUTES_INVERSE_EQ", [PERMUTES_INVERSE_EQ])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E)`))) (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_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
946    (((((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
947    ((((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))));
948    (((((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("d_neq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
949    ((fun arg_tac -> arg_tac (Arg_term (`inverse _ d`))) (term_tac (set_tac "y")));
950    ((fun arg_tac -> arg_tac (Arg_term (`y IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["y_in"]))));
951    ((((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("y_def", []))(gsym_then (thm_tac (new_rewrite [] []))))));
952    ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("Hypermap.lemma_dart_inveriant_under_inverse_maps", [Hypermap.lemma_dart_inveriant_under_inverse_maps]))(thm_tac (new_rewrite [] [])))));
953    ((((use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
954    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`n_fan_pair (V,E) y = n_fan_pair_ext (V,E) y`))) (term_tac (have_gen_tac [](move ["ny_eq"])))) (((((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
955    ((fun arg_tac -> arg_tac (Arg_term (`d = n_fan_pair (V,E) y`))) (term_tac (have_gen_tac [](move ["d_eq"]))));
956    ((((use_arg_then2 ("ny_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("PERMUTES_INVERSES", [PERMUTES_INVERSES])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`dart_of_fan (V,E)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
957    ((((use_arg_then2 ("N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN", [N_FAN_PAIR_EXT_PERMUTES_DART_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
958    ((((use_arg_then2 ("n_fan_pair_ext", [n_fan_pair_ext]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
959    ((((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("y_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
960    ((((use_arg_then2 ("d_neq", [])) (disch_tac [])) THEN (clear_assumption "d_neq") 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 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negbK", [negbK]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("d_eq", []))(thm_tac (new_rewrite [] []))))));
961    ((fun arg_tac -> arg_tac (Arg_term (`~(w1,w IN dart1_of_fan (V,E)) /\ ~(w,w1 IN dart1_of_fan (V,E))`))) (term_tac (have_gen_tac [](move ["not_in"]))));
962    (((((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andbb", [andbb]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
963    ((THENL_FIRST) ((THENL) case [(move ["y_eq"]); ALL_TAC]) ((((use_arg_then2 ("y_in", [])) (disch_tac [])) THEN (clear_assumption "y_in") THEN BETA_TAC) THEN ((((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("not_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
964    (((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); ALL_TAC]) THEN ((TRY done_tac)));
965    ((THENL_LAST) ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); (move ["y_eq"])]) ((((use_arg_then2 ("y_in", [])) (disch_tac [])) THEN (clear_assumption "y_in") THEN BETA_TAC) THEN ((((use_arg_then2 ("y_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("not_in", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
966    (repeat_tactic 1 9 ((DISJ2_TAC)));
967    ((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
968    (((use_arg_then2 ("Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN", [Fan_misc.INVERSE_SIGMA_FAN_EQ_INVERSE1_SIGMA_FAN]))(gsym_then (thm_tac (new_rewrite [] [])))));
969    (((((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
970    (((((fun arg_tac -> (use_arg_then2 ("Fan.INVERSE1_SIGMA_FAN", [Fan.INVERSE1_SIGMA_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((fun arg_tac -> (use_arg_then2 ("inE_eq_in_dart1", [inE_eq_in_dart1])) (fun fst_arg -> (use_arg_then2 ("V", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
971 ];;
972
973 (* Lemma n_split_fan_face_eq1 *)
974 let n_split_fan_face_eq1 = Sections.section_proof ["v";"w";"d"]
975 `v,w IN dart_of_fan (V,E)
976         /\ d IN dart_of_fan (split_fan_face (V,E) (v,w))
977         /\ ~(FST d = sigma_fan (vec 0) V E v w) /\ ~(FST d = w)
978         ==> n_fan_pair (split_fan_face (V,E) (v,w)) d = n_fan_pair (V,E) d`
979 [
980    ((((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN case THEN (move ["x"]) THEN (move ["y"])) THEN ((((use_arg_then2 ("FST", [FST]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["xy_in"])) THEN (move ["neq"])));
981    (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_face_alt", [fully_surrounded_card_face_alt])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["card_f"]));
982    ((((use_arg_then2 ("split_fan_face_eq", [split_fan_face_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
983    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE n_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["_"]) THEN (case THEN (move ["_"])) THEN (case THEN (move ["_"])) THEN (case THEN (move ["_"])) THEN (move ["eq"])))));
984    (((((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("neq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
985 ];;
986
987 (* Lemma n_split_fan_face_eq2 *)
988 let n_split_fan_face_eq2 = Sections.section_proof ["v";"w";"d"]
989 `v,w IN dart_of_fan (V,E)
990         /\ d IN dart_of_fan (V,E)
991         /\ ~(d IN face (hypermap_of_fan (V,E)) (v,w))
992         ==> n_fan_pair (split_fan_face (V,E) (v,w)) d = n_fan_pair (V,E) d`
993 [
994    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["d_in"])) THEN (move ["neq"]));
995    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
996    (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_face_alt", [fully_surrounded_card_face_alt])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["card_f"]));
997    ((((use_arg_then2 ("split_fan_face_eq", [split_fan_face_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
998    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE n_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))));
999    ((((use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1000    ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") 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 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1001    ((THENL_FIRST) (split_tac) ((((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 (((fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE FACE_LAST_POINT))) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1002    (split_tac);
1003    ((((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 (((((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))));
1004    (((((fun arg_tac -> (use_arg_then2 ("POWER_1", [POWER_1])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`face_map _`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Hypermap.lemma_in_face", [Hypermap.lemma_in_face]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1005    ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") 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 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1006 ];;
1007
1008 (* Lemma f_split_fan_face *)
1009 let f_split_fan_face = Sections.section_proof ["v";"w"]
1010 `v,w IN dart_of_fan (V,E)
1011         /\ 3 < CARD (face (hypermap_of_fan (V,E)) (v,w))
1012         ==> (let w1 = sigma_fan (vec 0) V E v w and
1013                 d2 = f_fan_pair (V,E) (v,w) and
1014                 f = f_fan_pair (split_fan_face (V,E) (v,w)) in
1015         f (v,w) = w,w1 /\
1016         f (w,w1) = w1,v /\
1017         f (w1,w) = d2 /\
1018         f (sigma_fan (vec 0) V E w1 v,w1) = w1,w /\
1019         (!d. d IN dart_of_fan (split_fan_face (V,E) (v,w)) /\
1020                 ~(d = v,w \/ d = w,w1 \/ d = w1,w \/ d = sigma_fan (vec 0) V E w1 v,w1)
1021                 ==> f d = f_fan_pair (V,E) d))`
1022 [
1023    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (move ["card_f"]));
1024    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
1025    (CONV_TAC let_CONV);
1026    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE inv_n_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1027    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1028    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
1029    ((fun arg_tac -> arg_tac (Arg_term (`inverse _`))) (term_tac (set_tac "n")));
1030    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan (vec 0) V E v w`))) (term_tac (set_tac "w1")));
1031    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _ (v,w)`))) (term_tac (set_tac "d2")));
1032    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E1")));
1033    (BETA_TAC THEN (case THEN (move ["fan1"])) THEN (case THEN (move ["dart1"])) THEN (move ["f_surr1"]) THEN (move ["n_eq"]));
1034    ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart1_of_fan (V,E1) /\ w,w1 IN dart1_of_fan (V,E1) /\
1035         w1,w IN dart1_of_fan (V,E1) /\ sigma_fan (vec 0) V E w1 v,w1 IN dart1_of_fan (V,E1)`))) (term_tac (have_gen_tac [](move ["in_dart1"]))));
1036    ((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("vw_in1", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1037    ((DISJ1_TAC) THEN ((((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1038    ((repeat_tactic 1 9 (((use_arg_then2 ("f_fan_pair_eq_inv_n_o_e", [f_fan_pair_eq_inv_n_o_e]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("e_fan_pair", [e_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("n_eq", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))));
1039    (BETA_TAC THEN (case THEN ((move ["x"]) THEN (move ["y"]))) THEN (case THEN (move ["xy_in"])) THEN (move ["xy_neq"]));
1040    ((((use_arg_then2 ("f_fan_pair_eq_inv_n_o_e", [f_fan_pair_eq_inv_n_o_e]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)));
1041    ((fun arg_tac -> arg_tac (Arg_term (`x,y IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["xy_in1"]))));
1042    ((((use_arg_then2 ("xy_in", [])) (disch_tac [])) THEN (clear_assumption "xy_in") THEN BETA_TAC) THEN ((((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("xy_neq", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1043    ((((use_arg_then2 ("f_fan_pair_eq_inv_n_o_e", [f_fan_pair_eq_inv_n_o_e]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("e_fan_pair", [e_fan_pair]))(thm_tac (new_rewrite [] []))))));
1044    ((((use_arg_then2 ("n_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("n_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("n_fan_pair", [n_fan_pair]))(thm_tac (new_rewrite [] [])))));
1045    ((((use_arg_then2 ("xy_neq", [])) (disch_tac [])) THEN (clear_assumption "xy_neq") THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)));
1046    (repeat_tactic 1 9 ((case THEN (simp_tac))));
1047 ];;
1048
1049 (* Lemma f_split_fan_face_eq *)
1050 let f_split_fan_face_eq = Sections.section_proof ["v";"w";"d"]
1051 `v,w IN dart_of_fan (V,E)
1052         /\ d IN dart_of_fan (V,E)
1053         /\ ~(d IN face (hypermap_of_fan (V,E)) (v,w))
1054         ==> f_fan_pair (split_fan_face (V,E) (v,w)) d = f_fan_pair (V,E) d`
1055 [
1056    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["d_in"])) THEN (move ["neq"]));
1057    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac))) THEN (move ["vw_in1"])));
1058    (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_face_alt", [fully_surrounded_card_face_alt])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["card_f"]));
1059    ((((use_arg_then2 ("split_fan_face_eq", [split_fan_face_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1060    ((((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE f_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))));
1061    ((((use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1062    ((THENL_FIRST) (split_tac) ((((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 (((use_arg_then2 ("Hypermap.face_refl", [Hypermap.face_refl]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1063    ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") 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 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1064    ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") 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 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1065    (((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 [] [])))));
1066    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan (vec 0) V E v w`))) (term_tac (set_tac "w1")));
1067    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE FACE_LAST_POINT))) (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 ("vw_in1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1068    ((((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (move ["w1v_in"]));
1069    (((fun arg_tac -> (use_arg_then2 ("Hypermap.lemma_face_identity", [Hypermap.lemma_face_identity])) (fun fst_arg -> (use_arg_then2 ("w1v_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))));
1070    ((((fun arg_tac -> arg_tac (Arg_theorem (let_RULE FACE_LAST_POINT)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fanV", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
1071    (((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1072 ];;
1073
1074 (* Lemma face_split_fan_face *)
1075 let face_split_fan_face = Sections.section_proof ["v";"w";"d"]
1076 `v,w IN dart_of_fan (V,E)
1077         /\ d IN dart_of_fan (V,E) /\ ~(d IN face (hypermap_of_fan (V,E)) (v,w))
1078                 ==> face (hypermap_of_fan (split_fan_face (V,E) (v,w))) d
1079                         = face (hypermap_of_fan (V,E)) d`
1080 [
1081    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["d_in"])) THEN (move ["d_n_in"]));
1082    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN ((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["d_in1"]) THEN (move ["vw_in1"])));
1083    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["fan1"]) THEN (case THEN (move ["dart1"])) THEN (move ["f_surr1"])))));
1084    ((fun arg_tac -> (use_arg_then2 ("f_split_fan_face_eq", [f_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["f_eq"])));
1085    (in_tac ["f_surr1"; "dart1"; "fan1"; "f_eq"] true (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))));
1086    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
1087    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E1")));
1088    ((repeat_tactic 1 9 (((use_arg_then2 ("face", [face]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("orbit_map", [orbit_map]))(thm_tac (new_rewrite [] []))))));
1089    ((fun arg_tac -> arg_tac (Arg_term (`face_map _`))) (term_tac (set_tac "f1")));
1090    ((fun arg_tac -> arg_tac (Arg_term (`face_map _`))) (term_tac (set_tac "f")));
1091    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`(f1 POWER n) d = (f POWER n) d /\ (f POWER n) d IN dart1_of_fan (V,E)
1092         /\ ~((f POWER n) d IN face (hypermap_of_fan (V,E)) (v,w))`))) (term_tac (have_gen_tac ["n"](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((ALL_TAC) THEN (done_tac)));
1093    ((((use_arg_then2 ("n", [])) (disch_tac [])) THEN (clear_assumption "n") THEN elim) THEN (((repeat_tactic 0 10 (((use_arg_then2 ("POWER_0", [POWER_0]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["n"]) THEN (case THEN (move ["eq"])) THEN (case THEN (move ["in1"])) THEN (move ["n_in"])));
1094    ((repeat_tactic 1 9 (((use_arg_then2 ("Fan.POWER_RIGHT", [Fan.POWER_RIGHT]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))));
1095    ((fun arg_tac -> arg_tac (Arg_term (`(f POWER n) d IN dart1_of_fan (V,E1)`))) (term_tac (have_gen_tac [](move ["fn_in1"]))));
1096    (((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1097    ((((use_arg_then2 ("f1_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [2] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 0 10 (((use_arg_then2 ("n_in", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1098    ((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
1099    (((fun arg_tac -> (use_arg_then2 ("Hypermap.lemma_different_faces", [Hypermap.lemma_different_faces])) (fun fst_arg -> (use_arg_then2 ("n_in", [])) (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));
1100    (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("Hypermap.lemma_face_identity", [Hypermap.lemma_face_identity])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((use_arg_then2 ("Hypermap.lemma_face_identity", [Hypermap.lemma_face_identity])) (thm_tac apply_tac)));
1101    (((((fun arg_tac -> (use_arg_then2 ("POWER_1", [POWER_1])) (fun fst_arg -> (use_arg_then2 ("f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (((use_arg_then2 ("Hypermap.lemma_in_face", [Hypermap.lemma_in_face]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1102 ];;
1103
1104 (* Lemma face_split_fan_face_explicit *)
1105 let face_split_fan_face_explicit = Sections.section_proof ["v";"w"]
1106 `let w' = sigma_fan (vec 0) V E v w and
1107              H = hypermap_of_fan (V,E) and
1108              H2 = hypermap_of_fan (split_fan_face (V,E) (v,w)) in
1109         v,w IN dart_of_fan (V,E) /\ 3 < CARD (face H (v,w))
1110         ==> (face H2 (v,w) = {(v,w), (w,w'), (w',v)} /\
1111              face H2 (w',w) = (w',w) INSERT (face H (v,w) DIFF {(v,w), (w',v)}))
1112         /\ (CARD (face H2 (v,w)) = 3 /\ CARD (face H2 (w',w)) = CARD (face H (v,w)) - 1)
1113         /\ ((v,w) IN face H (v,w) /\ (w',v) IN face H (v,w) /\ ~(w',w IN face H (v,w)))
1114         /\ (~(w' = w) /\ ~(v = w) /\ ~(v = w'))`
1115 [
1116    ((CONV_TAC let_CONV) THEN (BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["card_gt3"])))));
1117    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE f_split_fan_face))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_gt3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1118    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1119    ((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["dartH"]) THEN (case THEN (move ["_"])) THEN (case THEN (move ["_"])) THEN (move ["fH"])))));
1120    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
1121    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w'")));
1122    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E2")));
1123    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E)`))) (term_tac (set_tac "H")));
1124    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan _`))) (term_tac (set_tac "H2")));
1125    (BETA_TAC THEN (case THEN (move ["fan2"])) THEN (case THEN (move ["dart2_eq"])) THEN (move ["f_surr2"]) THEN (move ["f_eq"]));
1126    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq])) (fun fst_arg -> (use_arg_then2 ("f_surr2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["dart2_eq1"])));
1127    ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart1_of_fan (V,E) /\ w',v IN dart1_of_fan (V,E)
1128         /\ v,w' IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["all_in1"]))));
1129    ((in_tac ["vw_in"] false (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("dart1_switch", [dart1_switch])) (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)))(thm_tac (new_rewrite [] [])))));
1130    ((((fun arg_tac -> (use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1131    ((fun arg_tac -> arg_tac (Arg_term (`v,w IN dart1_of_fan (V,E2) /\ w,w' IN dart1_of_fan (V,E2)
1132         /\ w',w IN dart1_of_fan (V,E2) /\ w',v IN dart1_of_fan (V,E2)`))) (term_tac (have_gen_tac [](move ["all_in2"]))));
1133    (((((use_arg_then2 ("dart2_eq1", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(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 ("all_in1", []))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1134    ((fun arg_tac -> arg_tac (Arg_term (`~(w' = w) /\ ~(v = w) /\ ~(v = w')`))) (term_tac (have_gen_tac [](move ["neqs"]))));
1135    ((repeat_tactic 1 9 ((split_tac))) THEN (((fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ", [PAIR_IN_DART1_OF_FAN_IMP_NOT_EQ])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac) THEN ((TRY done_tac))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1136    ((fun arg_tac -> arg_tac (Arg_term (`face H2 (v,w) = _`))) (term_tac (have_gen_tac []((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (simp_tac)))));
1137    ((THENL_ROT (-1)) ((((use_arg_then2 ("face", [face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("orbit_map_le3", [orbit_map_le3]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("H2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((fun arg_tac ->(use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(fun tmp_arg1 -> (use_arg_then2 ("f_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))));
1138    (((((use_arg_then2 ("w'_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair_last", [f_fan_pair_last]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1139    (((((use_arg_then2 ("dart2_eq1", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("all_in2", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1140    ((repeat_tactic 1 9 (((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("FINITE_INSERT", [FINITE_INSERT]))(fun tmp_arg1 -> (use_arg_then2 ("FINITE_EMPTY", [FINITE_EMPTY]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] []))))));
1141    ((((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))));
1142    ((repeat_tactic 1 9 (((use_arg_then2 ("neqs", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("neqs", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("ONE", [ONE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("TWO", [TWO]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("THREE", [THREE]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1143    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FACE_FINITE", [FACE_FINITE])) (fun fst_arg -> (use_arg_then2 ("H", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`v,w`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("card_gt3", [])) (disch_tac [])) THEN (clear_assumption "card_gt3") THEN BETA_TAC) THEN ((repeat_tactic 1 9 (((use_arg_then2 ("face", [face]))(thm_tac (new_rewrite [] []))))) THEN (move ["k_gt3"]) THEN (move ["finA"])));
1144    ((fun arg_tac -> arg_tac (Arg_term (`face_map H`))) (term_tac (set_tac "f")));
1145    ((fun arg_tac -> arg_tac (Arg_term (`face_map H2`))) (term_tac (set_tac "f2")));
1146    ((fun arg_tac -> arg_tac (Arg_term (`CARD (orbit_map f (v,w))`))) (term_tac (set_tac "k")));
1147    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan (vec 0) V E w' v`))) (term_tac (set_tac "w2")));
1148    ((fun arg_tac -> arg_tac (Arg_term (`(f POWER i) (v,w) = (f_fan_pair (V,E) POWER i) (v,w)
1149                 /\ (f2 POWER i) (w',w) = (f_fan_pair (V,E2) POWER i) (w',w)`))) (term_tac (have_gen_tac ["i"](move ["f_pow_eq"]))));
1150    (((((use_arg_then2 ("fH", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("H2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("f_fan_pair_power", [f_fan_pair_power]))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
1151    ((fun arg_tac -> (use_arg_then2 ("finite_dart1", [finite_dart1])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["fin1"])));
1152    ((fun arg_tac -> arg_tac (Arg_term (`f permutes (dart1_of_fan (V,E))`))) (term_tac (have_gen_tac [](move ["f_perm"]))));
1153    (((((use_arg_then2 ("fH", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("F_FAN_PAIR_EXT_PERMUTES_DART1_OF_FAN", [F_FAN_PAIR_EXT_PERMUTES_DART1_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1154    ((fun arg_tac -> arg_tac (Arg_term (`(f POWER (k - 2)) (v,w) = w2,w'
1155         /\ (f POWER (k - 1)) (v,w) = w',v
1156         /\ (f POWER 0) (v,w) = v,w`))) (term_tac (have_gen_tac [](move ["f_eqs"]))));
1157    ((repeat_tactic 1 9 (((use_arg_then2 ("f_pow_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("f_fan_pair_power", [f_fan_pair_power]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1158    ((repeat_tactic 1 9 (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FINITE_ORBIT_MAP_INVERSE", [FINITE_ORBIT_MAP_INVERSE])) (fun fst_arg -> (use_arg_then2 ("fin1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("F_FAN_PAIR_EXT_PERMUTES_DART1_OF_FAN", [F_FAN_PAIR_EXT_PERMUTES_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (TRY ((((((use_arg_then2 ("fH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("k_def", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac)))));
1159    ((((use_arg_then2 ("POWER_0", [POWER_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("TWO", [TWO]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("POWER_1", [POWER_1]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))));
1160    (((repeat_tactic 1 9 (((use_arg_then2 ("INVERSE_F_FAN_PAIR_EXT_EXPLICIT", [INVERSE_F_FAN_PAIR_EXT_EXPLICIT]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 1 9 (((use_arg_then2 ("res", [res]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("all_in1", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("all_in1", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("w2_def", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1161    ((fun arg_tac -> arg_tac (Arg_term (`i < k ==> ((f POWER i) (v,w) = (w',v) <=> i = k - 1)
1162                 /\ ((f POWER i) (v,w) = (w2,w') <=> i = k - 2)
1163                 /\ ((f POWER i) (v,w) = (v,w) <=> i = 0)`))) (term_tac (have_gen_tac ["i"](move ["inj_f"]))));
1164    ((BETA_TAC THEN (move ["i_lt"])) THEN (repeat_tactic 1 9 ((split_tac))) THEN (TRY ((BETA_TAC THEN (((conv_thm_tac DISCH_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 ("f_eqs", []))(gsym_then (thm_tac (new_rewrite [1] [])))))) THEN ((DISCH_THEN (fun snd_th -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("ORBIT_MAP_INJ", [ORBIT_MAP_INJ])) (fun fst_arg -> (use_arg_then2 ("f_perm", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k_def", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("fin1", [])) (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 [] []))))) THEN (((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN ((use_arg_then2 ("i_lt", [])) (disch_tac [])) THEN (clear_assumption "i_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1165    ((fun arg_tac -> (use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1166    (((((use_arg_then2 ("face", [face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("H_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("k_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("k_gt3", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (move ["w'w_not_in"]));
1167    (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`_1 = _2`))) (term_tac (have_gen_tac []((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (simp_tac))))));
1168    ((((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("FINITE_DIFF", [FINITE_DIFF]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))));
1169    ((fun arg_tac -> arg_tac (Arg_term (`~(w',w IN orbit_map f (v,w))`))) (term_tac (have_gen_tac []((((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))) THEN (simp_tac)))));
1170    (((((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("face", [face]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("w'w_not_in", [])) (disch_tac [])) THEN (clear_assumption "w'w_not_in") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] [])))));
1171    (((DISCH_THEN (fun snd_th -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_face_subset", [lemma_face_subset]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1172    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`v,w IN _1 /\ _2`))) (term_tac (have_gen_tac [](move ["inH"])))) (((repeat_tactic 2 0 (((use_arg_then2 ("f_eqs", []))(gsym_then (thm_tac (new_rewrite [1] [])))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("lemma_in_orbit", [lemma_in_orbit]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
1173    ((THENL_FIRST) (((fun arg_tac -> (use_arg_then2 ("CARD_DIFF", [CARD_DIFF])) (fun fst_arg -> (use_arg_then2 ("finA", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) ((((((use_arg_then2 ("SUBSET", [SUBSET]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]) THEN (case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
1174    ((repeat_tactic 1 9 (((use_arg_then2 ("CARD_CLAUSES", [CARD_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("FINITE_INSERT", [FINITE_INSERT]))(fun tmp_arg1 -> (use_arg_then2 ("FINITE_EMPTY", [FINITE_EMPTY]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] []))))));
1175    ((((use_arg_then2 ("NOT_IN_EMPTY", [NOT_IN_EMPTY]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("inH", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("neqs", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("k_def", []))(thm_tac (new_rewrite [] [])))));
1176    ((((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1177    ((fun arg_tac -> arg_tac (Arg_term (`d IN dart1_of_fan (V,E) /\ ~(d = v,w) /\ ~(d = w2,w')
1178         ==> f_fan_pair (V,E2) d = f_fan_pair (V,E) d`))) (term_tac (have_gen_tac ["d"](move ["f_eq'"]))));
1179    (BETA_TAC THEN (case THEN (move ["d_in"])) THEN (move ["d_neqs"]));
1180    ((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("d_neqs", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("negb_or", [negb_or]))(gsym_then (thm_tac (new_rewrite [] []))))));
1181    (((THENL) ((((use_arg_then2 ("w'w_not_in", [])) (disch_tac [])) THEN (clear_assumption "w'w_not_in") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)) THEN case) [(ALL_TAC); (((use_arg_then2 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] []))))]) THEN (BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1182    ((fun arg_tac -> arg_tac (Arg_term (`1 <= i /\ i < k - 1 ==> (f POWER i) (v,w) = (f2 POWER i) (w',w)`))) (term_tac (have_gen_tac ["i"](move ["eq"]))));
1183    ((THENL_FIRST) ((THENL) (((use_arg_then2 ("i", [])) (disch_tac [])) THEN (clear_assumption "i") THEN elim) [ALL_TAC; (((THENL) case [ALL_TAC; (move ["i"])]) THEN (move ["Ih"]) THEN (move ["i_ineqs"]))]) ((arith_tac) THEN (done_tac)));
1184    (((repeat_tactic 1 9 (((use_arg_then2 ("f_pow_eq", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("POWER", [POWER]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1185    ((THENL_FIRST) ((((use_arg_then2 ("Ih", [])) (disch_tac [])) THEN (clear_assumption "Ih") THEN BETA_TAC) THEN (ANTS_TAC)) ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1186    ((BETA_TAC THEN (move ["eq1"])) THEN ((((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("COM_POWER", [COM_POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq1", []))(gsym_then (thm_tac (new_rewrite [] [])))))));
1187    ((((use_arg_then2 ("f2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("H2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_fan_pair_ext", [f_fan_pair_ext]))(thm_tac (new_rewrite [] [])))));
1188    ((fun arg_tac -> arg_tac (Arg_term (`(f POWER SUC i) (v,w) IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["f_pow_in"]))));
1189    (((((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_dart_invariant_power_face", [lemma_dart_invariant_power_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1190    ((((use_arg_then2 ("dart2_eq1", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_pow_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1191    ((THENL_LAST) (((use_arg_then2 ("f_eq'", []))(thm_tac (new_rewrite [] [])))) (((repeat_tactic 1 9 (((use_arg_then2 ("f_pow_eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("eq_sym", [eq_sym]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("COM_POWER", [COM_POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1192    (((((use_arg_then2 ("f_pow_in", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("inj_f", []))(thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN ((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1193    ((fun arg_tac -> arg_tac (Arg_term (`orbit_map f (v,w) DIFF {(v,w), (w',v)} =
1194         {(f POWER i) (v,w) | 1 <= i /\ i < k - 1}`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))));
1195    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("FINITE_ORBIT_MAP", [FINITE_ORBIT_MAP])) (fun fst_arg -> (use_arg_then2 ("f_perm", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("k_def", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))));
1196    (((repeat_tactic 1 9 (((use_arg_then2 ("IN_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]));
1197    ((THENL) (split_tac) [((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 [] []))))))); ((case THEN (move ["i"])) THEN (case THEN (move ["i_ineqs"])) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))]);
1198    ((((repeat_tactic 1 9 (((use_arg_then2 ("inj_f", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["j_ineqs"])) THEN (((use_arg_then2 ("j", [])) (term_tac exists_tac)) THEN (simp_tac)) THEN (((use_arg_then2 ("j_ineqs", [])) (disch_tac [])) THEN (clear_assumption "j_ineqs") THEN ((use_arg_then2 ("j_lt", [])) (disch_tac [])) THEN (clear_assumption "j_lt") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1199    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`i < k:num`))) (term_tac (have_gen_tac [](move ["i_lt"])))) ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1200    ((THENL_FIRST) (((repeat_tactic 1 9 (((use_arg_then2 ("inj_f", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (split_tac)) (((use_arg_then2 ("i", [])) (term_tac exists_tac)) THEN (done_tac)));
1201    ((((use_arg_then2 ("i_ineqs", [])) (disch_tac [])) THEN (clear_assumption "i_ineqs") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1202    ((THENL_ROT (-1)) (((fun arg_tac -> (use_arg_then2 ("orbit_cyclic", [orbit_cyclic])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`k - 1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))));
1203    (((((use_arg_then2 ("EXTENSION", [EXTENSION]))(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_ELIM_THM", [IN_ELIM_THM]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac)) THEN (move ["x"]));
1204    ((THENL) (split_tac) [((case THEN (move ["j"])) THEN (case THEN ((move ["j_lt"]) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))); ALL_TAC]);
1205    ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`j = 0`))) (disch_eq_tac "j0" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) (((((use_arg_then2 ("j0", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("POWER_0", [POWER_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1206    ((DISJ2_TAC) THEN ((use_arg_then2 ("j", [])) (term_tac exists_tac)) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("j_lt", [])) (disch_tac [])) THEN (clear_assumption "j_lt") THEN ((use_arg_then2 ("j0", [])) (disch_tac [])) THEN (clear_assumption "j0") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1207    ((THENL) case [(((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))); ((case THEN (move ["i"])) THEN (case THEN ((move ["i_ineqs"]) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))]);
1208    (((fun arg_tac -> arg_tac (Arg_term (`0`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("POWER_0", [POWER_0]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("I_THM", [I_THM]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1209    (((use_arg_then2 ("i", [])) (term_tac exists_tac)) THEN ((((use_arg_then2 ("i_ineqs", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1210    ((THENL_FIRST) (split_tac) ((((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1211    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`k - 1 = SUC (k - 2)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))))) ((((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1212    ((THENL_FIRST) ((((use_arg_then2 ("COM_POWER", [COM_POWER]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("o_THM", [o_THM]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) ((((use_arg_then2 ("k_gt3", [])) (disch_tac [])) THEN (clear_assumption "k_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac)));
1213    ((((use_arg_then2 ("f_eqs", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("H2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_fan_pair_ext", [f_fan_pair_ext]))(thm_tac (new_rewrite [] [])))));
1214    (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`w2,w' IN dart1_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["w2_in"])))));
1215    (((((use_arg_then2 ("dart2_eq1", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart2_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w2_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1216    (((((use_arg_then2 ("f_eqs", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_dart_invariant_power_face", [lemma_dart_invariant_power_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1217 ];;
1218
1219 (* Lemma azim_split_fan_face_eq *)
1220 let azim_split_fan_face_eq = Sections.section_proof ["v";"w";"d"]
1221 `v,w IN dart_of_fan (V,E) /\ d IN dart_of_fan (V,E)
1222                 /\ ~(d = sigma_fan (vec 0) V E v w, v)
1223                 /\ ~(d = f_fan_pair (V,E) (v,w))
1224                 ==> azim_dart (split_fan_face (V,E) (v,w)) d = azim_dart (V,E) d`
1225 [
1226    (((use_arg_then2 ("d", [])) (disch_tac [])) THEN (clear_assumption "d") THEN case THEN (move ["a"]) THEN (move ["b"]));
1227    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["d_in"])) THEN (move ["d_n_in"]));
1228    ((((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN ((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN BETA_TAC) THEN (((repeat_tactic 1 9 (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (move ["d_in1"]) THEN (move ["vw_in1"])));
1229    (((fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_face_alt", [fully_surrounded_card_face_alt])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN case THEN (move ["card_f"]));
1230    ((((use_arg_then2 ("split_fan_face_eq", [split_fan_face_eq]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1231    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1232    ((((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("SING_UNION_EQ_INSERT", [SING_UNION_EQ_INSERT]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> arg_tac (Arg_theorem (GEN_ALL Collect_geom.PER_SET2)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("UNION_COMM", [UNION_COMM]))(thm_tac (new_rewrite [] [])))));
1233    ((fun arg_tac -> arg_tac (Arg_term (`E UNION _`))) (term_tac (set_tac "E1")));
1234    (BETA_TAC THEN (case THEN (move ["fan1"])) THEN (case THEN (move ["dart1"])) THEN (move ["f_surr1"]));
1235    ((repeat_tactic 1 9 (((use_arg_then2 ("azim_dart_eq_azim_fan", [azim_dart_eq_azim_fan]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1236    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE aux_lemma))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_f", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1237    ((fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit2", [fan_hypermaps_iso_explicit2])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1238    ((fun arg_tac -> (use_arg_then2 ("fan_hypermaps_iso_explicit2", [fan_hypermaps_iso_explicit2])) (fun fst_arg -> (use_arg_then2 ("fan1", [fan1])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1239    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan _`))) (term_tac (set_tac "H2")));
1240    ((fun arg_tac -> arg_tac (Arg_term (`ext_dart _`))) (term_tac (set_tac "h2")));
1241    ((fun arg_tac -> arg_tac (Arg_term (`hypermap1_of_fanx _`))) (term_tac (set_tac "G2")));
1242    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan _`))) (term_tac (set_tac "H")));
1243    ((fun arg_tac -> arg_tac (Arg_term (`ext_dart _`))) (term_tac (set_tac "h")));
1244    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w1")));
1245    (BETA_TAC THEN (move ["iso2"]) THEN (move ["iso"]) THEN (case THEN (move ["h1"])) THEN (case THEN (move ["h2"])) THEN (case THEN (move ["h3"])) THEN (move ["h4"]));
1246    ((fun arg_tac -> arg_tac (Arg_term (`face G2 (h2 (w1,w))`))) (term_tac (set_tac "ds1")));
1247    ((fun arg_tac -> arg_tac (Arg_term (`face G2 (h2 (w,w1))`))) (term_tac (set_tac "ds2")));
1248    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_imp_fan80", [fully_surrounded_imp_fan80])) (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 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["f80"])));
1249    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_card_set_of_edge1", [fully_surrounded_card_set_of_edge1])) (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 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["gt1"])));
1250    ((fun arg_tac -> arg_tac (Arg_term (`w IN set_of_edge w1 V E1 /\ w1 IN set_of_edge w V E1`))) (term_tac (have_gen_tac [](move ["w_in"]))));
1251    ((fun arg_tac -> arg_tac (Arg_term (`w,w1 IN dart1_of_fan (V,E1) /\ w1,w IN dart1_of_fan (V,E1)`))) (term_tac (have_gen_tac [](move ["in1"]))));
1252    (((((use_arg_then2 ("fully_surrounded_dart_of_fan_eq", [fully_surrounded_dart_of_fan_eq]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1", []))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1253    ((repeat_tactic 1 9 (((fun arg_tac -> (use_arg_then2 ("PAIR_IN_DART1_OF_FAN", [PAIR_IN_DART1_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fan1", [fan1])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1254    ((fun arg_tac -> arg_tac (Arg_term (`w1,v IN dart_of_fan (V,E) /\ f_fan_pair (V,E) (v,w) IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["in_dart"]))));
1255    ((((use_arg_then2 ("w1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1256    ((((use_arg_then2 ("E_N_F_IN_DART1_OF_FAN", [E_N_F_IN_DART1_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1257    ((fun arg_tac -> arg_tac (Arg_term (`dart H = dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["dart_eq"]))));
1258    (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1259    (((fun arg_tac -> arg_tac (Arg_term (`a,b IN face H (v,w)`))) (disch_eq_tac "d_in_face" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac));
1260    ((THENL_ROT (-1)) (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_fanadd_eq_ds", [azim_fanadd_eq_ds])) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (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 ("E1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w1", [])) (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 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ds1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ds2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w,w1,v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w1,v,w`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,v,w,w1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`h (a,b)`))) (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)));
1261    (((repeat_tactic 1 9 (((use_arg_then2 ("tran", [tran]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("h_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr2", [Fan.pr2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr3", [Fan.pr3]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1262    ((repeat_tactic 11 0 (((use_arg_then2 ("h4", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1263    ((((use_arg_then2 ("ds2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ds1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("G2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("extension_sigma_fan", [extension_sigma_fan]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("w_in", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1264    ((THENL_FIRST) ((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN (split_tac)) (((fun arg_tac -> arg_tac (Arg_term (`a,b`))) (term_tac exists_tac)) THEN (done_tac)));
1265    ((((use_arg_then2 ("d_n_in", [])) (disch_tac [])) THEN (clear_assumption "d_n_in") THEN BETA_TAC) THEN (repeat_tactic 1 9 (((use_arg_then2 ("negb_or", [negb_or]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)));
1266    ((fun arg_tac -> (use_arg_then2 ("hyp_iso_inj", [hyp_iso_inj])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["inj"])));
1267    (case THEN ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("inj", [])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC) THEN ((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1268    ((THENL_ROT (-1)) (((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_fanadd_eq", [azim_fanadd_eq])) (fun fst_arg -> (use_arg_then2 ("gt1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f80", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (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 ("E1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("h3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w1", [])) (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 ("w", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ds1", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("ds2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w,w1,v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,w1,v,w`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`vec 0:real^3,v,w,w1`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`h (a,b)`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`IMAGE h (face H (a,b))`))) (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)));
1269    (((repeat_tactic 1 9 (((use_arg_then2 ("tran", [tran]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("h_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr2", [Fan.pr2]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Fan.pr3", [Fan.pr3]))(thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1270    ((repeat_tactic 11 0 (((use_arg_then2 ("h4", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("w1_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E1_def", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1271    ((((use_arg_then2 ("ds2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("ds1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("G2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("h2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("ext_dart", [ext_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("extension_sigma_fan", [extension_sigma_fan]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("w_in", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1272    ((THENL_LAST) (split_tac) ((((use_arg_then2 ("IN_IMAGE", [IN_IMAGE]))(thm_tac (new_rewrite [] [])))) THEN ((fun arg_tac -> arg_tac (Arg_term (`a,b`))) (term_tac exists_tac)) THEN (((use_arg_then2 ("Hypermap.face_refl", [Hypermap.face_refl]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1273    ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((fun arg_tac -> (use_arg_then2 ("iso_components", [iso_components])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [1] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1274    ((((use_arg_then2 ("Hypermap.lemma_in_face_set", [Hypermap.lemma_in_face_set]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("hyp_iso_dart", [hyp_iso_dart])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] [])))));
1275    (((use_arg_then2 ("d_in_face", [])) (disch_tac [])) THEN (clear_assumption "d_in_face") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac));
1276    ((DISCH_THEN (fun snd_th -> (fun arg_tac -> (use_arg_then2 ("image_inj_gen", [image_inj_gen])) (fun fst_arg -> (fun arg_tac -> (use_arg_then2 ("hyp_iso_inj", [hyp_iso_inj])) (fun fst_arg -> (use_arg_then2 ("iso", [iso])) (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 (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC);
1277    (((repeat_tactic 1 9 (((use_arg_then2 ("Hypermap.lemma_face_subset", [Hypermap.lemma_face_subset]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac))) THEN (((conv_thm_tac DISCH_THEN)(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1278    ((((use_arg_then2 ("Hypermap.face_refl", [Hypermap.face_refl]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1279 ];;
1280
1281 (* Lemma azim_split_fan_face_not_in_face *)
1282 let azim_split_fan_face_not_in_face = Sections.section_proof ["v";"w";"d"]
1283 `v,w IN dart_of_fan (V,E) /\
1284         d IN dart_of_fan (V,E) /\
1285         ~(d IN face (hypermap_of_fan (V,E)) (v,w))
1286         ==> azim_dart (split_fan_face (V,E) (v,w)) d = azim_dart (V,E) d`
1287 [
1288    (BETA_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["d_in"])) THEN (move ["d_n_in"]));
1289    ((((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_split_fan_face_eq", [azim_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1290    ((((use_arg_then2 ("negb_or", [negb_or]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("d_n_in", [])) (disch_tac [])) THEN (clear_assumption "d_n_in") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)));
1291    ((case THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))) THEN ((((use_arg_then2 ("in_face_lemma", [in_face_lemma]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1292 ];;
1293
1294 (* Lemma azim_split_fan_face_add *)
1295 let azim_split_fan_face_add = Sections.section_proof ["v";"w"]
1296 `v,w IN dart_of_fan (V,E) /\ 3 < CARD (face (hypermap_of_fan (V,E)) (v,w))
1297         ==> let w' = sigma_fan (vec 0) V E v w in
1298             let d2 = f_fan_pair (V,E) (v,w) in
1299             let F2 = split_fan_face (V,E) (v,w) in
1300                 azim_dart (V,E) d2 = azim_dart F2 (w,w') + azim_dart F2 d2
1301                 /\ azim_dart (V,E) (w',v) = azim_dart F2 (w',w) + azim_dart F2 (w',v)`
1302 [
1303    ((BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["card_gt3"])))) THEN (((use_arg_then2 ("vw_in", [])) (disch_tac [])) THEN BETA_TAC) THEN ((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN (move ["vw_in1"])));
1304    (repeat_tactic 1 9 ((CONV_TAC let_CONV)));
1305    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("fully_surrounded_diag_not_in_dart", [fully_surrounded_diag_not_in_dart])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_gt3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["ww'_n_in"])));
1306    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("sigma_fan_not_fixed", [sigma_fan_not_fixed])) (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 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("f_surr", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["w'_neq"])));
1307    ((fun arg_tac -> (use_arg_then2 ("fan_split_fan_face", [fan_split_fan_face])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1308    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
1309    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E2")));
1310    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w'")));
1311    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair _1 _2`))) (term_tac (set_tac "d2")));
1312    (BETA_TAC THEN (case THEN (move ["fan2"])) THEN (case THEN (move ["dart_eq"])) THEN (move ["_"]));
1313    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`split_fan_face (V,E) (v,w) = (V,E2)`))) (term_tac (have_gen_tac [](move ["split_eq"])))) ((((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1314    ((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["dartH"]) THEN (move ["_"])))));
1315    (split_tac);
1316    ((THENL_FIRST) ((fun arg_tac -> arg_tac (Arg_term (`FST d2 = w`))) (term_tac (have_gen_tac [](move ["fst_d2"])))) (((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1317    ((fun arg_tac -> arg_tac (Arg_term (`d2 IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["d2_in"]))));
1318    (((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("fan_hypermap_map1", [fan_hypermap_map1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_dart_invariant", [lemma_dart_invariant]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1319    ((fun arg_tac -> arg_tac (Arg_term (`d2 IN dart_of_fan (V,E2)`))) (term_tac (have_gen_tac [](move ["d2_in2"]))));
1320    (((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1321    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SUM_AZIM_DART", [SUM_AZIM_DART])) (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 ("d2_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["sumVE"])));
1322    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SUM_AZIM_DART", [SUM_AZIM_DART])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d2_in2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["sumVE2"])));
1323    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE node_split_fan))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("d2_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["eq"]) THEN (move ["_"])))));
1324    ((((fun arg_tac -> (use_arg_then2 ("eq", [])) (fun fst_arg -> (use_arg_then2 ("fst_d2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN ((use_arg_then2 ("eq", [])) (disch_tac [])) THEN (clear_assumption "eq") THEN BETA_TAC THEN (move ["_"])) THEN (((((use_arg_then2 ("split_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] []))))) THEN (move ["n2_eq"])));
1325    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E)`))) (term_tac (set_tac "H")));
1326    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E2)`))) (term_tac (set_tac "H2")));
1327    ((fun arg_tac -> arg_tac (Arg_term (`~(w,w' IN node H d2)`))) (term_tac (have_gen_tac [](move ["ww'_node"]))));
1328    (((use_arg_then2 ("ww'_n_in", [])) (disch_tac [])) THEN (clear_assumption "ww'_n_in") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))));
1329    (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NODE_SUBSET_DART_OF_FAN", [NODE_SUBSET_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1330    ((((use_arg_then2 ("sumVE", [])) (disch_tac [])) THEN (clear_assumption "sumVE") THEN BETA_TAC) THEN ((((use_arg_then2 ("sumVE2", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n2_eq", []))(thm_tac (new_rewrite [] []))))));
1331    ((THENL_FIRST) (in_tac ["ww'_node"] true (((fun arg_tac -> (use_arg_then2 ("INSERT_DELETE", [INSERT_DELETE])) (fun fst_arg -> (use_arg_then2 ("d2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("node_refl", [node_refl]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1332    ((repeat_tactic 1 9 (((use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(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 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("NODE_FINITE", [NODE_FINITE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1333    ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("ww'_node", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(thm_tac (new_rewrite [] [])))));
1334    (((fun arg_tac -> arg_tac (Arg_term (`sum _1 _2`))) (term_tac (set_tac "s1"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`sum _1 _2`))) (term_tac (set_tac "s2"))));
1335    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`s1 = s2`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("REAL_EQ_ADD_RCANCEL", [REAL_EQ_ADD_RCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1336    (((((use_arg_then2 ("s1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("s2_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"]) THEN (move ["x_in"])));
1337    ((fun arg_tac -> arg_tac (Arg_term (`x IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["x_in_dart"]))));
1338    (((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`node H d2`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_node_subset", [lemma_node_subset]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1339    ((((use_arg_then2 ("split_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_split_fan_face_eq", [azim_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x_in_dart", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1340    ((((use_arg_then2 ("d2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))));
1341    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`FST x = FST d2`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) (((((use_arg_then2 ("fst_d2", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_neq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac)));
1342    ((((fun arg_tac -> (use_arg_then2 ("fst_node_hypermap_of_fan", [fst_node_hypermap_of_fan])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("H_def", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1343    ((fun arg_tac -> arg_tac (Arg_term (`w',v IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["w'v_in"]))));
1344    (((((use_arg_then2 ("dart1_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("dart1_switch", [dart1_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("sigma_in_dart1", [sigma_in_dart1]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1345    ((fun arg_tac -> arg_tac (Arg_term (`w',v IN dart_of_fan (V,E2)`))) (term_tac (have_gen_tac [](move ["w'v_in2"]))));
1346    (((((use_arg_then2 ("dart_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_UNION", [IN_UNION]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1347    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SUM_AZIM_DART", [SUM_AZIM_DART])) (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 ("w'v_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["sumVE"])));
1348    ((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("SUM_AZIM_DART", [SUM_AZIM_DART])) (fun fst_arg -> (use_arg_then2 ("fan2", [fan2])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w'v_in2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (move ["sumVE2"])));
1349    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE node_split_fan))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("w'v_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["_"]) THEN (case THEN ((move ["eq"]) THEN (move ["_"])))))));
1350    ((((use_arg_then2 ("eq", [])) (disch_tac [])) THEN (clear_assumption "eq") THEN BETA_TAC) THEN (((((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("split_eq", []))(thm_tac (new_rewrite [] []))))) THEN (move ["n2_eq"])));
1351    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E)`))) (term_tac (set_tac "H")));
1352    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E2)`))) (term_tac (set_tac "H2")));
1353    ((fun arg_tac -> arg_tac (Arg_term (`~(w',w IN node H (w',v))`))) (term_tac (have_gen_tac [](move ["w'w_node"]))));
1354    ((((use_arg_then2 ("ww'_n_in", [])) (disch_tac [])) THEN (clear_assumption "ww'_n_in") THEN BETA_TAC) THEN (((use_arg_then2 ("dart_switch", [dart_switch]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))));
1355    (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("NODE_SUBSET_DART_OF_FAN", [NODE_SUBSET_DART_OF_FAN]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1356    ((((use_arg_then2 ("sumVE", [])) (disch_tac [])) THEN (clear_assumption "sumVE") THEN BETA_TAC) THEN ((((use_arg_then2 ("sumVE2", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("n2_eq", []))(thm_tac (new_rewrite [] []))))));
1357    ((THENL_FIRST) (in_tac ["w'w_node"] true (((fun arg_tac -> (use_arg_then2 ("INSERT_DELETE", [INSERT_DELETE])) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`w',v`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))))) (((((use_arg_then2 ("H_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("node_refl", [node_refl]))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1358    ((repeat_tactic 1 9 (((use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(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 ("FINITE_DELETE", [FINITE_DELETE]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("NODE_FINITE", [NODE_FINITE]))(thm_tac (new_rewrite [] []))))) THEN ((TRY done_tac)));
1359    ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("w'w_node", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(thm_tac (new_rewrite [] [])))));
1360    (((fun arg_tac -> arg_tac (Arg_term (`sum _1 _2`))) (term_tac (set_tac "s1"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`sum _1 _2`))) (term_tac (set_tac "s2"))));
1361    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`s1 = s2`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) ((((use_arg_then2 ("REAL_EQ_ADD_RCANCEL", [REAL_EQ_ADD_RCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1362    (((((use_arg_then2 ("s1_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("s2_def", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (move ["x"]) THEN (move ["x_in"])));
1363    ((fun arg_tac -> arg_tac (Arg_term (`x IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["x_in_dart"]))));
1364    (((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((fun arg_tac -> arg_tac (Arg_term (`node H (w',v)`))) (term_tac exists_tac)) THEN ((((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_node_subset", [lemma_node_subset]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1365    ((((use_arg_then2 ("split_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_split_fan_face_eq", [azim_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("x_in_dart", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("x_in", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1366    ((((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("pair_expand", [pair_expand]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] [])))));
1367    ((THENL_FIRST) (((THENL_ROT 1)) ((fun arg_tac -> arg_tac (Arg_term (`FST x = FST (w',v)`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] [])))))))) (((simp_tac) THEN (((use_arg_then2 ("w'_neq", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac)));
1368    ((((fun arg_tac -> (use_arg_then2 ("fst_node_hypermap_of_fan", [fst_node_hypermap_of_fan])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (disch_tac [])) THEN (DISCH_THEN apply_tac)) THEN (((use_arg_then2 ("H_def", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1369 ];;
1370
1371 (* Lemma tau_split_fan_face_eq *)
1372 let tau_split_fan_face_eq = Sections.section_proof ["v";"w";"f"]
1373 `v,w IN dart_of_fan (V,E) /\
1374         f IN face_set (hypermap_of_fan (V,E)) DELETE face (hypermap_of_fan (V,E)) (v,w)
1375         ==> tauVEF (V, {w,sigma_fan (vec 0) V E v w} INSERT E, f) = tauVEF (V, E, f)`
1376 [
1377    ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN ALL_TAC THEN (case THEN (move ["vw_in"])) THEN (case THEN (move ["f_in"])) THEN (move ["f_n_in"]));
1378    ((fun arg_tac -> arg_tac (Arg_term (`dart (hypermap_of_fan (V,E)) = dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["dart_eq"]))));
1379    ((((use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN]))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1380    ((repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.tauVEF", [Tame_defs.tauVEF]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("split_fan_face", [split_fan_face]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_EQ_ADD_RCANCEL", [REAL_EQ_ADD_RCANCEL]))(thm_tac (new_rewrite [] [])))));
1381    (((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN (move ["d"]) THEN (move ["d_in"]) THEN (simp_tac));
1382    ((((use_arg_then2 ("REAL_EQ_MUL_RCANCEL", [REAL_EQ_MUL_RCANCEL]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("azim_split_fan_face_not_in_face", [azim_split_fan_face_not_in_face]))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)));
1383    (((fun arg_tac -> (use_arg_then2 ("Hypermap.lemma_face_representation", [Hypermap.lemma_face_representation])) (fun fst_arg -> (use_arg_then2 ("f_in", [])) (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 (move ["y_in"])) THEN (move ["f_eq"]));
1384    (((((use_arg_then2 ("vw_in", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("andTb", [andTb]))(thm_tac (new_rewrite [] []))))) THEN (split_tac));
1385    (((use_arg_then2 ("IN_TRANS", [IN_TRANS])) (thm_tac apply_tac)) THEN ((use_arg_then2 ("f", [])) (term_tac exists_tac)) THEN (((use_arg_then2 ("d_in", []))(thm_tac (new_rewrite [] [])))));
1386    (((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dart_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("Hypermap.lemma_face_subset", [Hypermap.lemma_face_subset]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1387    ((((use_arg_then2 ("f_n_in", [])) (disch_tac [])) THEN (clear_assumption "f_n_in") THEN ((use_arg_then2 ("contra", [contra])) (disch_tac [])) THEN (clear_assumption "contra") THEN (DISCH_THEN apply_tac)) THEN ((DISCH_THEN (fun snd_th -> (use_arg_then2 ("Hypermap.lemma_face_identity", [Hypermap.lemma_face_identity])) (thm_tac (match_mp_then snd_th MP_TAC)))) THEN BETA_TAC THEN (((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [] []))))));
1388    ((((use_arg_then2 ("d_in", [])) (disch_tac [])) THEN (clear_assumption "d_in") THEN BETA_TAC) THEN ((((use_arg_then2 ("f_eq", []))(thm_tac (new_rewrite [] [])))) THEN (DISCH_THEN (fun snd_th -> (use_arg_then2 ("Hypermap.lemma_face_identity", [Hypermap.lemma_face_identity])) (thm_tac (match_mp_then snd_th MP_TAC))))) THEN (done_tac));
1389 ];;
1390
1391 (* Lemma tau_split_fan_face_add *)
1392 let tau_split_fan_face_add = Sections.section_proof ["v";"w"]
1393 `let w' = sigma_fan (vec 0) V E v w in
1394          let H = hypermap_of_fan (V,E) in
1395          let H2 = hypermap_of_fan (V, {w,w'} INSERT E) in
1396                 v,w IN dart_of_fan (V,E) /\ 3 < CARD (face H (v,w))
1397                 ==> tauVEF (V, E, face H (v,w))
1398                         = tauVEF (V, {w,w'} INSERT E, face H2 (v,w))
1399                         + tauVEF (V, {w,w'} INSERT E, face H2 (w',w))`
1400 [
1401    ((repeat_tactic 1 9 ((CONV_TAC let_CONV))) THEN (BETA_TAC THEN (case THEN ((move ["vw_in"]) THEN (move ["card_gt3"])))));
1402    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE face_split_fan_face_explicit))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_gt3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1403    ((fun arg_tac -> (fun arg_tac -> (fun arg_tac -> arg_tac (Arg_theorem (let_RULE azim_split_fan_face_add))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("card_gt3", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN ALL_TAC));
1404    (((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] []))));
1405    ((fun arg_tac -> (use_arg_then2 ("COMPONENTS_HYPERMAP_OF_FAN", [COMPONENTS_HYPERMAP_OF_FAN])) (fun fst_arg -> (use_arg_then2 ("fanV", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun arg -> thm_tac MP_TAC arg THEN (case THEN ((move ["dartH"]) THEN (case THEN (move ["_"])) THEN (case THEN (move ["_"])) THEN (move ["fH"])))));
1406    ((fun arg_tac -> arg_tac (Arg_term (`sigma_fan _ V E v w`))) (term_tac (set_tac "w'")));
1407    ((fun arg_tac -> arg_tac (Arg_term (`_ INSERT E`))) (term_tac (set_tac "E2")));
1408    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E)`))) (term_tac (set_tac "H")));
1409    ((fun arg_tac -> arg_tac (Arg_term (`hypermap_of_fan (V,E2)`))) (term_tac (set_tac "H2")));
1410    ((fun arg_tac -> arg_tac (Arg_term (`f_fan_pair (V,E) (v,w)`))) (term_tac (set_tac "d2")));
1411    (BETA_TAC THEN (move ["azim_add"]) THEN (case THEN (move ["faces_eq"])) THEN (case THEN (move ["cards_eq"])) THEN (case THEN (move ["in_face"])) THEN (move ["neqs"]));
1412    ((fun arg_tac -> arg_tac (Arg_term (`d2 IN face H (v,w)`))) (term_tac (have_gen_tac [](move ["d2_in_face"]))));
1413    (((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("POWER_1", [POWER_1]))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair_power", [f_fan_pair_power]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 0 10 (((use_arg_then2 ("dart1_eq", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("fH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_in_face", [lemma_in_face]))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1414    ((fun arg_tac -> arg_tac (Arg_term (`d2 IN dart_of_fan (V,E)`))) (term_tac (have_gen_tac [](move ["d2_in"]))));
1415    (((((fun arg_tac -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("d2_in_face", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_face_subset", [lemma_face_subset]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1416    (repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.tauVEF", [Tame_defs.tauVEF]))(thm_tac (new_rewrite [] [])))));
1417    (((fun arg_tac -> arg_tac (Arg_term (`\x. _ x`))) (term_tac (set_tac "a"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`\x. _ x`))) (term_tac (set_tac "a2"))));
1418    (((fun arg_tac -> arg_tac (Arg_theorem (ARITH_RULE `!a b c d x. (a + x * b) + c + x * d = (a + c) + x * (b + d):real`)))(thm_tac (new_rewrite [] []))));
1419    ((THENL_ROT (-1)) ((congr_tac (`_1 + _2 * _3:real`)) THEN ((TRY done_tac))));
1420    (((repeat_tactic 1 9 (((use_arg_then2 ("cards_eq", []))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("REAL_OF_NUM_SUB", [REAL_OF_NUM_SUB]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (((use_arg_then2 ("card_gt3", [])) (disch_tac [])) THEN (clear_assumption "card_gt3") THEN BETA_TAC) THEN (arith_tac) THEN (done_tac));
1421    (repeat_tactic 1 9 (((use_arg_then2 ("faces_eq", []))(thm_tac (new_rewrite [] [])))));
1422    ((fun arg_tac -> arg_tac (Arg_term (`face H (v,w) = (v,w) INSERT (w',v) INSERT (face H (v,w) DIFF {(v,w), (w',v)})`))) (term_tac (have_gen_tac [](((conv_thm_tac DISCH_THEN)(thm_tac (new_rewrite [1] [])))))));
1423    (((((use_arg_then2 ("EXTENSION", [EXTENSION]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))) THEN (move ["x"]));
1424    ((THENL_FIRST) (((fun arg_tac -> arg_tac (Arg_term (`x = v,w`))) (disch_eq_tac "eq1" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) ((((use_arg_then2 ("eq1", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac)));
1425    ((((fun arg_tac -> arg_tac (Arg_term (`x = w',v`))) (disch_eq_tac "eq2" [])) THEN case THEN (simp_tac) THEN (process_fst_eq_tac)) THEN (((use_arg_then2 ("eq2", []))(thm_tac (new_rewrite [] [])))) THEN (done_tac));
1426    ((repeat_tactic 1 9 (((fun arg_tac ->(use_arg_then2 ("SUM_SING", [SUM_SING]))(fun tmp_arg1 -> (use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("FINITE_INSERT", [FINITE_INSERT]))(fun tmp_arg1 -> (fun arg_tac ->(use_arg_then2 ("FINITE_EMPTY", [FINITE_EMPTY]))(fun tmp_arg1 -> (fun arg_tac ->(use_arg_then2 ("FINITE_DIFF", [FINITE_DIFF]))(fun tmp_arg1 -> (use_arg_then2 ("FACE_FINITE", [FACE_FINITE]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(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)));
1427    ((repeat_tactic 0 20 (((fun arg_tac ->(use_arg_then2 ("IN_SING", [IN_SING]))(fun tmp_arg1 -> (fun arg_tac ->(use_arg_then2 ("IN_INSERT", [IN_INSERT]))(fun tmp_arg1 -> (use_arg_then2 ("IN_DIFF", [IN_DIFF]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("in_face", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("neqs", []))(thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("neqs", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1428    (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("INSERT_DELETE", [INSERT_DELETE])) (fun fst_arg -> (use_arg_then2 ("d2", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (fun arg_tac -> arg_tac (Arg_term (`_1 DIFF _2`))) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(gsym_then (thm_tac (new_rewrite [] [])))));
1429    (((((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_in_face", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("neqs", []))(gsym_then (thm_tac (new_rewrite [] []))))))) THEN (done_tac));
1430    ((repeat_tactic 1 9 (((use_arg_then2 ("SUM_CLAUSES", [SUM_CLAUSES]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 0 10 (((fun arg_tac ->(use_arg_then2 ("FINITE_DELETE", [FINITE_DELETE]))(fun tmp_arg1 -> (fun arg_tac ->(use_arg_then2 ("FINITE_DIFF", [FINITE_DIFF]))(fun tmp_arg1 -> (use_arg_then2 ("FACE_FINITE", [FACE_FINITE]))(fun tmp_arg2 -> arg_tac (Arg_theorem (CONJ (get_arg_thm tmp_arg1) (get_arg_thm tmp_arg2))))))(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 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1431    ((fun arg_tac -> arg_tac (Arg_term (`split_fan_face (V,E) (v,w) = (V,E2)`))) (term_tac (have_gen_tac [](move ["split_eq"]))));
1432    (((((use_arg_then2 ("split_fan_face", [split_fan_face]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("E2_def", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1433    ((THENL_ROT (-1)) ((repeat_tactic 1 9 (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(thm_tac (new_rewrite [] []))))) THEN (congr_tac (`_1 + _2:real`))));
1434    (((use_arg_then2 ("SUM_EQ", [SUM_EQ])) (thm_tac apply_tac)) THEN ((((use_arg_then2 ("IN_DELETE", [IN_DELETE]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_DIFF", [IN_DIFF]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_INSERT", [IN_INSERT]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("IN_SING", [IN_SING]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("negb_or", [negb_or]))(thm_tac (new_rewrite [] []))))));
1435    (BETA_TAC THEN (move ["d"]) THEN (case THEN ALL_TAC) THEN (case THEN (move ["d_in_face"])) THEN (move ["d_neqs"]) THEN (move ["d_neq"]));
1436    (((((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("a2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_EQ_MUL_RCANCEL", [REAL_EQ_MUL_RCANCEL]))(thm_tac (new_rewrite [] []))))) THEN (DISJ1_TAC));
1437    ((((use_arg_then2 ("split_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (use_arg_then2 ("azim_split_fan_face_eq", [azim_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d2_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_neqs", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("d_neq", []))(thm_tac (new_rewrite [] [])))) THEN (simp_tac));
1438    (((((fun arg_tac -> (use_arg_then2 ("IN_TRANS", [IN_TRANS])) (fun fst_arg -> (use_arg_then2 ("d_in_face", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("lemma_face_subset", [lemma_face_subset]))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("dartH", []))(thm_tac (new_rewrite [] []))))) THEN (done_tac));
1439    ((repeat_tactic 1 9 (((use_arg_then2 ("REAL_ADD_ASSOC", [REAL_ADD_ASSOC]))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (congr_tac (`_1 + _2:real`)));
1440    (((((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("a2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac) THEN (((use_arg_then2 ("REAL_EQ_MUL_RCANCEL", [REAL_EQ_MUL_RCANCEL]))(thm_tac (new_rewrite [] []))))) THEN (DISJ1_TAC));
1441    ((((use_arg_then2 ("split_eq", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((fun arg_tac -> (fun arg_tac -> (use_arg_then2 ("azim_split_fan_face_eq", [azim_split_fan_face_eq])) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg))) (fun fst_arg -> (use_arg_then2 ("vw_in", [])) (fun snd_arg -> combine_args_then arg_tac fst_arg snd_arg)))(thm_tac (new_rewrite [] [])))) THEN ((TRY done_tac)) THEN (((use_arg_then2 ("w'_def", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("PAIR_EQ", [PAIR_EQ]))(thm_tac (new_rewrite [] []))))));
1442    (((repeat_tactic 1 9 (((use_arg_then2 ("negb_and", [negb_and]))(thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("neqs", []))(thm_tac (new_rewrite [] [])))) THEN (((use_arg_then2 ("neqs", []))(gsym_then (thm_tac (new_rewrite [] [])))))) THEN (done_tac));
1443    ((((use_arg_then2 ("a_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (((use_arg_then2 ("a2_def", []))(gsym_then (thm_tac (new_rewrite [] []))))) THEN (simp_tac));
1444    ((((use_arg_then2 ("d2_def", []))(gsym_then (thm_tac (new_rewrite [2; 4] []))))) THEN (((use_arg_then2 ("f_fan_pair", [f_fan_pair]))(thm_tac (new_rewrite [] [])))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("Tame_defs.h_dart", [Tame_defs.h_dart]))(thm_tac (new_rewrite [] []))))) THEN (repeat_tactic 1 9 (((use_arg_then2 ("FST", [FST]))(thm_tac (new_rewrite [] []))))));
1445    (((fun arg_tac -> arg_tac (Arg_term (`&1 + _2`))) (term_tac (set_tac "x"))) THEN ((fun arg_tac -> arg_tac (Arg_term (`&1 + _2`))) (term_tac (set_tac "y"))));
1446    ((repeat_tactic 1 9 (((use_arg_then2 ("azim_add", []))(thm_tac (new_rewrite [] []))))) THEN (arith_tac) THEN (done_tac));
1447 ];;
1448
1449 (* Finalization of the section AddTriangle *)
1450 let split_fan_face_eq = Sections.finalize_theorem split_fan_face_eq;;
1451 let sigma_in_dart1 = Sections.finalize_theorem sigma_in_dart1;;
1452 let in_face_lemma = Sections.finalize_theorem in_face_lemma;;
1453 let f_fan_pair_last = Sections.finalize_theorem f_fan_pair_last;;
1454 let f_fan_pair3 = Sections.finalize_theorem f_fan_pair3;;
1455 let fully_surrounded_card_face_alt = Sections.finalize_theorem fully_surrounded_card_face_alt;;
1456 let fully_surrounded_imp_conforming = Sections.finalize_theorem fully_surrounded_imp_conforming;;
1457 let fully_surrounded_diag_not_in_dart = Sections.finalize_theorem fully_surrounded_diag_not_in_dart;;
1458 let aux_lemma = Sections.finalize_theorem aux_lemma;;
1459 let fan_split_fan_face = Sections.finalize_theorem fan_split_fan_face;;
1460 let node_split_fan = Sections.finalize_theorem node_split_fan;;
1461 let n_split_fan_face = Sections.finalize_theorem n_split_fan_face;;
1462 let inv_n_split_fan_face = Sections.finalize_theorem inv_n_split_fan_face;;
1463 let n_split_fan_face_eq1 = Sections.finalize_theorem n_split_fan_face_eq1;;
1464 let n_split_fan_face_eq2 = Sections.finalize_theorem n_split_fan_face_eq2;;
1465 let f_split_fan_face = Sections.finalize_theorem f_split_fan_face;;
1466 let f_split_fan_face_eq = Sections.finalize_theorem f_split_fan_face_eq;;
1467 let face_split_fan_face = Sections.finalize_theorem face_split_fan_face;;
1468 let face_split_fan_face_explicit = Sections.finalize_theorem face_split_fan_face_explicit;;
1469 let azim_split_fan_face_eq = Sections.finalize_theorem azim_split_fan_face_eq;;
1470 let azim_split_fan_face_not_in_face = Sections.finalize_theorem azim_split_fan_face_not_in_face;;
1471 let azim_split_fan_face_add = Sections.finalize_theorem azim_split_fan_face_add;;
1472 let tau_split_fan_face_eq = Sections.finalize_theorem tau_split_fan_face_eq;;
1473 let tau_split_fan_face_add = Sections.finalize_theorem tau_split_fan_face_add;;
1474 Sections.end_section "AddTriangle";;
1475
1476 (* Close the module *)
1477 end;;