Update from HH
[Flyspeck/.git] / legacy / oldfan / Conforming2.hl
1
2 (* ========================================================================== *)
3 (* FLYSPECK - BOOK FORMALIZATION                                              *)
4 (*                                                                            *)
5 (* Chapter: Fan                                              *)
6 (* Author: Hoang Le Truong                                        *)
7 (* Date: 2010-02-09                                                           *)
8 (* ========================================================================= *)
9
10 (*
11 tame_lemmas-compiled.hl needs Conforming2.hl which is an almost exact copy of Conforming.hl. The content of Conforming2.hl should replace Conforming.hl. I think there will be no problems with such a replacement but I never tested it. The only difference between Conforming2.hl and Conforming.hl is that I removed the assumption `~(conforming_fan (x,V,E))` from some lemmas where it is not used.
12
13
14 Alexey
15 *)
16
17
18
19 module  Conforming2 = struct
20
21
22
23
24
25
26
27
28
29 open Sphere;;
30 open Fan_defs;;
31 open Hypermap;;
32 open Vol1;;
33 open Fan;;
34 open Topology;;         
35 open Fan_misc;;
36 open Planarity;; 
37
38
39
40
41
42
43
44 let conforming_bijection_fan = new_definition `conforming_bijection_fan (x,V,E) <=>
45   !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ 
46                                                          s = dartset_leads_into_fan x V E f)`;;
47
48                                                          
49 let conforming_half_space_fan = new_definition `conforming_half_space_fan (x,V,E) <=>
50         !f. f IN face_set (hypermap1_of_fanx (x,V,E)) ==> 
51                 dartset_leads_into_fan x V E f = 
52                         INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN f}`;;
53         
54                         
55 let conforming_solid_angle_fan = new_definition `conforming_solid_angle_fan (x,V,E) <=>
56   !f. f IN face_set (hypermap1_of_fanx (x,V,E)) ==>
57   (let U = dartset_leads_into_fan x V E f in
58      (!r. measurable (ball (x,r) INTER U)) /\
59        eventually_radial x U /\
60        sol x U = &2 * pi + sum (f) (\y. (azim_fan x V E (pr2 y) (pr3 y))  - pi))`;;
61
62            
63 let conforming_diagonal_fan = new_definition `conforming_diagonal_fan (x,V,E) <=>
64         (!f y z. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ y IN f /\ z IN f /\ ~(y = z) ==> 
65                 ~collinear {x, pr2 y, pr2 z} /\
66                 ((y = f1_fan x V E z) \/ (z = f1_fan  x V E y) \/ 
67                         aff_gt {x} {pr2 y, pr2 z} SUBSET (dartset_leads_into_fan  x V E f)))`;;
68
69
70
71                 
72                         
73 let conforming_fan = new_definition `conforming_fan (x,V,E) <=>
74  (!v. v IN V==>CARD (set_of_edge v V E) >1)/\
75         fan80(x,V,E) /\
76         conforming_bijection_fan (x,V,E) /\
77         conforming_half_space_fan (x,V,E) /\
78         conforming_solid_angle_fan (x,V,E) /\
79         conforming_diagonal_fan (x,V,E)`;;
80
81
82
83
84 let N_FAN = new_definition `N_FAN (x,V,E) = nsum (face_set (hypermap1_of_fanx (x,V,E))) (\f. CARD f -3)`;;
85
86
87
88 let minimally_nonconforming_fan=new_definition`minimally_nonconforming_fan(x,V,E)<=>
89 FAN(x,V,E)
90  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
91 /\ fan80(x,V,E)
92 /\ ~(conforming_fan (x,V,E))
93 /\ (!E1. FAN(x,V,E1)  /\ 
94          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
95          fan80(x,V,E1)/\ 
96          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))`;;
97
98
99
100
101 let GINGUAP=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
102 FAN(x,V,E)
103 /\ conforming_fan (x,V,E)
104 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
105 ==>   convex(dartset_leads_into_fan x V E ds)`,
106
107 REWRITE_TAC[conforming_fan;conforming_half_space_fan]
108 THEN REPEAT STRIP_TAC
109 THEN POP_ASSUM MP_TAC
110 THEN POP_ASSUM MP_TAC
111 THEN POP_ASSUM MP_TAC
112 THEN POP_ASSUM MP_TAC
113 THEN DISCH_THEN(LABEL_TAC"EM")
114 THEN REPEAT STRIP_TAC
115 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
116 THEN MATCH_MP_TAC CONVEX_INTERS
117 THEN REWRITE_TAC[IN_ELIM_THM]
118 THEN REPEAT STRIP_TAC
119 THEN ASM_REWRITE_TAC[CONVEX_AFF_GT]);;
120
121
122
123
124
125 let fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v w.
126 FAN(x,V,E) /\ {v,w} IN E
127 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
128 /\ fan80(x,V,E)
129 ==>  aff_gt {x, v,w} {sigma_fan x V E v w} =
130  aff_gt {x, v, w} {inverse1_sigma_fan x V E w v}`,
131
132
133 REPEAT STRIP_TAC
134 THEN POP_ASSUM (fun th -> MP_TAC th
135 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
136 THEN DISCH_TAC
137 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`] THEN MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w v:real^3`] )
138 THEN POP_ASSUM MP_TAC
139 THEN DISCH_THEN(LABEL_TAC"EM")
140 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
141 THEN REMOVE_THEN "EM" MP_TAC
142 THEN REMOVE_ASSUM_TAC
143 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
144 THEN POP_ASSUM MP_TAC
145 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
146 THEN POP_ASSUM MP_TAC
147 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
148 THEN ASM_REWRITE_TAC[]
149 THEN STRIP_TAC THEN STRIP_TAC
150 THEN ASM_REWRITE_TAC[]
151 THEN STRIP_TAC
152 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w v:real^3`]
153 THEN POP_ASSUM MP_TAC
154 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
155 THEN ASM_REWRITE_TAC[]
156 THEN STRIP_TAC
157 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`] THEN DISCH_TAC THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
158 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
159 `(v:real^3)`]
160 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`w:real^3`]
161 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` sigma_fan x V E v w:real^3`;`(v:real^3)`]
162 THEN POP_ASSUM MP_TAC
163 THEN RESA_TAC
164 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`sigma_fan x V E v w:real^3`;`v:real^3`;`w:real^3`]
165 THEN POP_ASSUM MP_TAC
166 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
167 THEN ASM_REWRITE_TAC[]
168 THEN STRIP_TAC
169 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`] THEN DISCH_TAC THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC THEN ASSUME_TAC th)
170 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`sigma_fan x V E v w:real^3`; `w:real^3`]
171 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(w:real^3)`;`inverse1_sigma_fan x V E w v:real^3`]
172 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`v:real^3`;`inverse1_sigma_fan x V E w v:real^3`; ]
173 THEN POP_ASSUM MP_TAC
174 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;CROSS_TRIPLE]
175 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
176 THEN ASM_REWRITE_TAC[]
177 THEN STRIP_TAC
178 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
179 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`;`sigma_fan x V E v w:real^3`;]
180 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w v:real^3`]);;
181
182
183
184
185
186
187
188
189
190
191
192 let IMAGE_F1_IN_FACE_IMP_IN_FACE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y y1.
193 FAN(x,V,E)
194 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
195 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
196 /\ y IN ds
197 /\ y1 IN d_fan(x,V,E)
198 /\ f1_fan x V E y1= y
199 ==>   y1 IN ds`,
200
201 REPEAT STRIP_TAC
202 THEN POP_ASSUM MP_TAC
203 THEN POP_ASSUM MP_TAC
204 THEN POP_ASSUM MP_TAC
205 THEN POP_ASSUM MP_TAC
206 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
207 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
208 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM;orbit_map]
209 THEN RESA_TAC
210 THEN REWRITE_TAC[IN_ELIM_THM]
211 THEN STRIP_TAC
212 THEN ASM_REWRITE_TAC[]
213 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
214 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
215 THEN STRIP_TAC
216 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) y1 IN
217       face_set (hypermap1_of_fanx (x,V,E))`ASSUME_TAC
218 THENL[
219 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
220 THEN EXISTS_TAC`y1:real^3#real^3#real^3#real^3`
221 THEN ASM_REWRITE_TAC[];
222 MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) y1):real^3#real^3#real^3#real^3->bool`]
223 THEN SUBGOAL_THEN`?N:num. CARD (face (hypermap1_of_fanx (x,V,E)) y1)= SUC N /\ N>0`ASSUME_TAC
224 THENL[
225 EXISTS_TAC`CARD (face (hypermap1_of_fanx (x:real^3,V,E)) y1)-1`
226 THEN POP_ASSUM MP_TAC
227 THEN ARITH_TAC;
228 POP_ASSUM MP_TAC
229 THEN STRIP_TAC
230 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`CARD (face (hypermap1_of_fanx (x,V,E)) y1):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
231 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y1:real^3#real^3#real^3#real^3`)
232 THEN STRIP_TAC
233 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V,E)`;`y1:real^3#real^3#real^3#real^3`]
234 THEN POP_ASSUM MP_TAC
235 THEN ASM_REWRITE_TAC[POWER;o_DEF;GSYM lemma_add_exponent_function]
236 THEN STRIP_TAC
237 THEN EXISTS_TAC`N+n:num`
238 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`N+n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
239 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
240 THEN MP_TAC(ARITH_RULE`n>=0/\ N>0==> N+n>=0`)
241 THEN ASM_REWRITE_TAC[]]]);;
242
243
244
245
246
247
248 let IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE=prove(`!m x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y y1.
249 FAN(x,V,E)
250 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
251 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
252 /\ y IN ds
253 /\ y1 IN d_fan(x,V,E)
254 /\ (f1_fan x V E POWER m) y1= y
255 ==>   y1 IN ds`,
256
257 INDUCT_TAC
258 THENL[
259 ASM_REWRITE_TAC[POWER;I_DEF]
260 THEN REPEAT STRIP_TAC
261 THEN ASM_REWRITE_TAC[];
262 POP_ASSUM MP_TAC
263 THEN DISCH_THEN(LABEL_TAC"LINH")
264 THEN ASM_REWRITE_TAC[POWER;o_DEF]
265 THEN REPEAT STRIP_TAC
266 THEN REMOVE_THEN "LINH"(fun th-> MRESA_TAC th[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`;` (f1_fan x V E y1):real^3#real^3#real^3#real^3`;])
267 THEN POP_ASSUM MP_TAC
268 THEN POP_ASSUM MP_TAC
269 THEN POP_ASSUM MP_TAC
270 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
271 THEN STRIP_TAC
272 THEN MRESAL_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`][POWER_1]
273 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y1:real^3#real^3#real^3#real^3`)
274 THEN STRIP_TAC
275 THEN STRIP_TAC
276 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E y1):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`;]]);;
277
278
279
280
281
282
283
284 let REP_OF_INVERSE1_SIGMA_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
285 FAN(x,V,E)
286 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
287 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
288 /\ y IN ds
289 ==>  f1_fan x V E  (x,sigma_fan x V E (pr2 y) (pr3 y),(pr2 y),sigma_fan x V E (sigma_fan x V E (pr2 y) (pr3 y)) (pr2 y))=y `,
290
291 REPEAT STRIP_TAC
292 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
293 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
294 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ y IN ds ==> y IN d1_fan (x,V,E)`) 
295 THEN ASM_REWRITE_TAC[f1_fan;d1_fan;IN_ELIM_THM]
296 THEN STRIP_TAC
297 THEN ASM_REWRITE_TAC[pr2;pr3]
298 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
299 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`));;
300
301
302
303
304 let REP_OF_INVERSE1_SIGMA_FAN_IN_D_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
305 FAN(x,V,E)
306 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
307 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
308 /\ y IN ds
309 ==> (x,sigma_fan x V E (pr2 y) (pr3 y),(pr2 y),sigma_fan x V E (sigma_fan x V E (pr2 y) (pr3 y)) (pr2 y)) IN
310       d_fan (x:real^3,V:real^3->bool,E)`,
311
312 REPEAT STRIP_TAC
313 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
314 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
315 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ y IN ds ==> y IN d1_fan (x,V,E)`) 
316 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
317 THEN STRIP_TAC
318 THEN ASM_REWRITE_TAC[pr2;pr3]
319 THEN EXISTS_TAC`x:real^3`
320 THEN EXISTS_TAC`(sigma_fan x V E v w):real^3`
321 THEN EXISTS_TAC`v:real^3`
322 THEN EXISTS_TAC`(sigma_fan x V E (sigma_fan x V E v w) v):real^3`
323 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
324 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
325 ` (v:real^3)`]
326 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`w:real^3`]
327 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v w):real^3`;`v:real^3`]
328 THEN POP_ASSUM MP_TAC
329 THEN RESA_TAC);;
330
331
332
333
334
335 let DARTSET_LEADS_INTO_SUBSET_WDART_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
336 FAN(x,V,E)
337 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
338 /\ y IN ds
339 /\ conforming_fan (x,V,E)
340 ==>   (dartset_leads_into_fan x V E ds) SUBSET (w_dart_fan x V E y)`,
341 REWRITE_TAC[conforming_fan;conforming_half_space_fan]
342 THEN REPEAT STRIP_TAC
343 THEN POP_ASSUM MP_TAC
344 THEN POP_ASSUM MP_TAC
345 THEN POP_ASSUM MP_TAC
346 THEN DISCH_THEN(LABEL_TAC"EM")
347 THEN REPEAT STRIP_TAC
348 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
349 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
350 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
351 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V,E)`) THEN RESA_TAC
352 THEN POP_ASSUM MP_TAC
353 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
354 THEN STRIP_TAC
355 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
356 ` (v:real^3)`]
357 THEN FIND_ASSUM MP_TAC`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)` 
358 THEN DISCH_TAC
359 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `v:real^3` th) THEN FIND_ASSUM MP_TAC `(v:real^3) IN V` THEN DISCH_TAC
360 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]) THEN STRIP_TAC)
361 THEN ASM_REWRITE_TAC[w_dart_fan;]
362 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
363 THEN DISCH_TAC
364 THEN POP_ASSUM (fun th -> MP_TAC th
365 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
366 THEN DISCH_TAC
367 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM1"))
368 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`w:real^3`]
369 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v w):real^3`;`v:real^3`]
370 THEN POP_ASSUM MP_TAC
371 THEN RESA_TAC
372 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`v:real^3`;`w:real^3`;`(sigma_fan x V E v w):real^3`]
373 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v w):real^3`;`v:real^3`;`w:real^3`]
374 THEN POP_ASSUM MP_TAC
375 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
376 THEN ASM_REWRITE_TAC[]
377 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
378 THEN STRIP_TAC
379 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC THEN MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`] THEN DISCH_TAC THEN ASSUME_TAC th)
380 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`w:real^3`;`v:real^3`;`(sigma_fan x V E v w):real^3`]
381 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
382 THEN SUBGOAL_THEN`x,sigma_fan x V E v w,v,sigma_fan x V E (sigma_fan x V E v w) v IN
383       d1_fan (x:real^3,V:real^3->bool,E)` ASSUME_TAC
384 THENL[ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
385 THEN EXISTS_TAC`x:real^3`
386 THEN EXISTS_TAC`(sigma_fan x V E v w):real^3`
387 THEN EXISTS_TAC`v:real^3`
388 THEN EXISTS_TAC`(sigma_fan x V E (sigma_fan x V E v w) v):real^3`
389 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`];
390 MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E (x,sigma_fan x V E v w, v, sigma_fan x V E (sigma_fan x V E v w) v)):real^3#real^3#real^3#real^3)` ;`((x,sigma_fan x V E v w,v,sigma_fan x V E (sigma_fan x V E v w) v):real^3#real^3#real^3#real^3)`]
391 THEN POP_ASSUM MP_TAC
392 THEN POP_ASSUM MP_TAC
393 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[pr2;pr3;f1_fan]
394 THEN REWRITE_TAC[]
395 THEN STRIP_TAC
396 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[pr2;pr3;f1_fan]
397 THEN REWRITE_TAC[INTERS;INTER;IN_ELIM_THM; SUBSET]
398 THEN REPEAT STRIP_TAC
399 THENL[POP_ASSUM(fun th-> MRESA1_TAC th `aff_gt {x, w, v} {sigma_fan x V E v w:real^3}` THEN POP_ASSUM MATCH_MP_TAC)
400 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
401 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
402 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
403 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`];
404 POP_ASSUM(fun th-> MRESA1_TAC th `aff_gt {x, v, sigma_fan x V E v w} {w}` THEN POP_ASSUM MATCH_MP_TAC)
405 THEN EXISTS_TAC`(x,sigma_fan x V E v w,v,sigma_fan x V E (sigma_fan x V E v w:real^3) v):real^3#real^3#real^3#real^3`
406 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
407 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
408 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
409 THEN MRESAL_TAC REP_OF_INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`][pr2;pr3]
410 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`;`(x,sigma_fan x V E v w,v,sigma_fan x V E (sigma_fan x V E v w:real^3) v):real^3#real^3#real^3#real^3`]
411 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
412 THEN REWRITE_TAC[]]]);;
413
414
415
416
417
418
419
420
421 let power_map_points_edge_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 w:real^3 n:num.
422 FAN(x,V,E)
423 /\ {v,w} IN E
424 ==> {v,power_map_points sigma_fan x V E v w n} IN E`,
425 REPEAT STRIP_TAC
426 THEN MRESA_TAC i_IN_ORBITS_FAN[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;` (w:real^3)`;`n:num`] 
427 THEN MRESA_TAC ORBITS_SUBSET_EDGE_FAN[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;` (w:real^3)`]
428 THEN MP_TAC (SET_RULE`power_map_points sigma_fan x V E v w n IN
429       set_of_orbits_points_fan x V E v w /\
430 set_of_orbits_points_fan x V E v w SUBSET set_of_edge v V E
431 ==> power_map_points sigma_fan x V E v w n IN set_of_edge v V E`)
432 THEN ASM_REWRITE_TAC[]
433 THEN MRESA_TAC properties_of_set_of_edge_fan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;` ((power_map_points sigma_fan x V E v w n):real^3)`]);;
434
435
436
437
438 let     SRPRNPL=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
439 FAN(x,V,E)
440 /\ conforming_fan (x,V,E)
441 ==>   simple_hypermap(hypermap1_of_fanx (x,V,E))`,
442
443 REPEAT STRIP_TAC
444 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN ASSUME_TAC th)
445 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
446 THEN ASM_REWRITE_TAC[simple_hypermap;node;EXTENSION;INTER;IN_ELIM_THM;orbit_map]
447 THEN REPEAT STRIP_TAC
448 THEN EQ_TAC
449 THEN STRIP_TAC
450 THENL[POP_ASSUM MP_TAC
451 THEN POP_ASSUM MP_TAC
452 THEN POP_ASSUM MP_TAC
453 THEN POP_ASSUM MP_TAC
454 THEN DISCH_THEN (LABEL_TAC "EM")
455 THEN REPEAT STRIP_TAC
456 THEN SUBGOAL_THEN`x' IN face (hypermap1_of_fanx (x:real^3,V,E)) x'`ASSUME_TAC
457 THENL[
458 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
459 THEN EXISTS_TAC`0`
460 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];
461  SUBGOAL_THEN `face (hypermap1_of_fanx (x,V,E)) x' IN
462       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
463 THENL[
464 ASM_REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;orbit_map;face]
465 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
466 THEN ASM_REWRITE_TAC[];
467 MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
468 THEN REMOVE_THEN"EM"MP_TAC
469 THEN ASM_REWRITE_TAC[]
470 THEN DISCH_THEN(LABEL_TAC"EM")
471 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
472 THEN REMOVE_ASSUM_TAC
473 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
474 THEN POP_ASSUM MP_TAC
475 THEN REMOVE_THEN"EM"MP_TAC
476 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[d1_fan;]
477 THEN REWRITE_TAC[IN_ELIM_THM]
478 THEN STRIP_TAC
479 THEN STRIP_TAC
480 THEN MRESA_TAC power_n_fan[`n:num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
481 THEN MRESAL_TAC DARTSET_LEADS_INTO_SUBSET_WDART_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) x'):real^3#real^3#real^3#real^3->bool`;`x'':real^3#real^3#real^3#real^3`][pr2;pr3;]
482 THEN MRESAL_TAC DARTSET_LEADS_INTO_SUBSET_WDART_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) x'):real^3#real^3#real^3#real^3->bool`;`x':real^3#real^3#real^3#real^3`][pr2;pr3]
483 THEN MRESA_TAC power_map_points_edge_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`; `w:real^3`; `n:num`]
484 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) x'):real^3#real^3#real^3#real^3->bool`]
485 THEN MRESA_TAC exists_point_in_component_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`(dartset_leads_into_fan x V E
486       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))):real^3->bool`]
487
488 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E
489       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)) SUBSET
490       w_dart_fan x V E
491       (x,
492        v,
493        power_map_points sigma_fan x V E v w n,
494        power_map_points sigma_fan x V E v w (SUC n))/\
495  dartset_leads_into_fan x V E
496       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)) SUBSET
497       w_dart_fan x V E (x,v,w,sigma_fan x V E v w)
498 /\ z IN
499       dartset_leads_into_fan x V E
500       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))
501 ==> ~(w_dart_fan x V E (x,v,w,sigma_fan x V E v w) INTER      w_dart_fan x V E
502       (x,
503        v,
504        power_map_points sigma_fan x V E v w n,
505        power_map_points sigma_fan x V E v w (SUC n)) 
506       ={})`)
507 THEN ASM_REWRITE_TAC[]
508 THEN REWRITE_TAC[power_map_points]
509 THEN STRIP_TAC
510 THEN MRESA_TAC disjoint_fan2[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`; `w:real^3`;`(power_map_points sigma_fan x V E v w n):real^3`]
511 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;IN_SING])]];
512 POP_ASSUM MP_TAC
513 THEN REWRITE_TAC[IN_SING]
514 THEN RESA_TAC
515 THEN STRIP_TAC
516 THENL[
517 EXISTS_TAC `0`
518 THEN REWRITE_TAC[ARITH_RULE`0>=0`; POWER;I_DEF];
519
520 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
521 THEN EXISTS_TAC `0`
522 THEN REWRITE_TAC[ARITH_RULE`0>=0`; POWER;I_DEF]]]);;
523
524
525 let N_FAN_GE_0=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
526 FAN(x,V,E)
527 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
528 ==> 0<= N_FAN(x,V,E) `,
529
530 REPEAT STRIP_TAC
531 THEN MRESA_TAC NSUM_EQ_0[`(\f:real^3#real^3#real^3#real^3->bool. 0)`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
532 THEN MRESA_TAC NSUM_LE[`(\f:real^3#real^3#real^3#real^3->bool. 0)`;`(\f:real^3#real^3#real^3#real^3->bool. CARD f - 3)`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
533 THEN REWRITE_TAC[N_FAN]
534 THEN POP_ASSUM MATCH_MP_TAC
535 THEN REWRITE_TAC[FINITE_HYPERMAP_ORBITS]
536 THEN REPEAT STRIP_TAC
537 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`x':real^3#real^3#real^3#real^3->bool`]
538 THEN POP_ASSUM MP_TAC
539 THEN ARITH_TAC);;
540
541 let NSUM_EQ_0_IFF = prove
542  (`!s f. FINITE s ==> (nsum s f = 0 <=> !x. x IN s ==> f x = 0)`,
543   REPEAT STRIP_TAC THEN EQ_TAC THEN ASM_SIMP_TAC[NSUM_EQ_0] THEN
544   ASM_MESON_TAC[ARITH_RULE `n = 0 <=> n <= 0`; NSUM_POS_BOUND]);;
545
546
547
548 let N_FAN_EQ_0_IMP_CARD_FACE_EQ_3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
549 FAN(x,V,E)
550 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
551 /\ N_FAN(x,V,E)=0
552 /\ ds IN face_set (hypermap1_of_fanx (x,V,E)) 
553 ==> CARD ds=3`,
554
555 REWRITE_TAC[N_FAN]
556 THEN REPEAT STRIP_TAC
557 THEN MRESAL_TAC NSUM_EQ_0_IFF[`face_set (hypermap1_of_fanx (x:real^3,V,E))`;`(\f:real^3#real^3#real^3#real^3->bool. CARD f -3)`][FINITE_HYPERMAP_ORBITS]
558 THEN POP_ASSUM (fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
559 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
560 THEN POP_ASSUM MP_TAC
561 THEN POP_ASSUM MP_TAC
562 THEN ARITH_TAC);;
563
564
565
566
567 let version_JUTSTKG=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
568 FAN(x,V,E) 
569 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
570 /\ fan80(x,V,E)
571 /\ U IN topological_component_yfan (x,V,E)
572 ==> ?f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ dartset_leads_into_fan x V E f = U`,
573
574 REPEAT STRIP_TAC
575 THEN MRESA_TAC JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`]
576 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
577 THEN ABBREV_TAC`y=(x,v,u:real^3,sigma_fan x V E v u)`
578 THEN ABBREV_TAC`ds=face (hypermap1_of_fanx (x:real^3,V,E)) y`
579 THEN EXISTS_TAC`ds:real^3#real^3#real^3#real^3->bool`
580 THEN ASM_REWRITE_TAC[]
581 THEN SUBGOAL_THEN`y IN dart (hypermap1_of_fanx (x:real^3,V,E))`ASSUME_TAC
582 THENL[
583 REMOVE_ASSUM_TAC
584 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
585 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
586 THEN MRESAL_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`][d1_fan;IN_ELIM_THM]
587 THEN EXISTS_TAC`x:real^3`
588 THEN EXISTS_TAC`v:real^3`
589 THEN EXISTS_TAC`u:real^3`
590 THEN EXISTS_TAC`(sigma_fan x (V:real^3->bool) E v u):real^3`
591 THEN ASM_REWRITE_TAC[];
592
593 SUBGOAL_THEN `ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`ASSUME_TAC
594 THENL[
595  POP_ASSUM MP_TAC
596 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;face_set; IN_ELIM_THM;set_of_orbits;face])
597 THEN STRIP_TAC
598 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
599 THEN ASM_REWRITE_TAC[];
600
601 SUBGOAL_THEN`y IN ds:real^3#real^3#real^3#real^3->bool`ASSUME_TAC
602 THENL[
603 EXPAND_TAC"ds"
604 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
605 THEN EXISTS_TAC`0`
606 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
607 MRESA_TAC DARTSET_LEADS_INTO_FAN [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
608 `ds:real^3#real^3#real^3#real^3->bool`;]
609 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
610 THEN EXPAND_TAC"y"
611 THEN REWRITE_TAC[pr2;pr3]]]]);;
612
613
614 let measurable_dartset_leads_into30_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds e.
615 FAN(x,V,E)
616 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
617 /\ fan80(x,V,E)
618 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
619 /\ CARD ds=3
620 ==>   measurable((dartset_leads_into_fan x V E ds) INTER ball (x,e))`,
621 REPEAT STRIP_TAC
622 THEN MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
623 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
624 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`]
625 THEN MESON_TAC[MEASURABLE_BALL_AFF_GT]);;
626
627
628
629
630
631
632
633 let   DWFBRQY=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
634 FAN(x,V,E)
635 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
636 /\ fan80(x,V,E)
637 /\ N_FAN(x,V,E)=0
638 ==> conforming_fan (x,V,E)`,
639
640
641 REPEAT STRIP_TAC
642 THEN ASM_REWRITE_TAC[conforming_fan]
643 THEN MRESA_TAC N_FAN_EQ_0_IMP_CARD_FACE_EQ_3[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
644 THEN POP_ASSUM MP_TAC
645 THEN DISCH_THEN(LABEL_TAC"EM")
646 THEN STRIP_TAC
647 THENL[
648 REWRITE_TAC[conforming_bijection_fan;EXISTS_UNIQUE]
649 THEN REPEAT STRIP_TAC
650 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`s:real^3->bool`]
651 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
652 THEN ASM_REWRITE_TAC[]
653 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
654 THEN REPEAT STRIP_TAC
655 THEN POP_ASSUM MP_TAC
656 THEN MRESA_TAC exists_point_dart_leads_into_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
657 `y:real^3#real^3#real^3#real^3->bool`;]
658 THEN POP_ASSUM MP_TAC
659 THEN POP_ASSUM MP_TAC
660 THEN DISCH_THEN(LABEL_TAC"MA")
661 THEN REPEAT STRIP_TAC
662 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
663 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3->bool`]
664 THEN MP_TAC(SET_RULE`y' IN y /\ y SUBSET d_fan(x,V,E)==> y' IN d_fan(x,V,E)`)
665 THEN RESA_TAC
666 THEN MRESA_TAC KVQWYDL_lemma30[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
667 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y':real^3#real^3#real^3#real^3`)
668 THEN REMOVE_THEN "MA" MP_TAC
669 THEN ASM_TAC
670 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
671 THEN REPEAT STRIP_TAC
672 THEN POP_ASSUM MP_TAC
673 THEN POP_ASSUM MP_TAC
674 THEN ASM_REWRITE_TAC[]
675 THEN REPEAT STRIP_TAC
676 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`;`y':real^3#real^3#real^3#real^3`][face]
677 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x'':real^3#real^3#real^3#real^3`;`y':real^3#real^3#real^3#real^3`][face];
678
679 STRIP_TAC
680 THENL[
681 REWRITE_TAC[conforming_half_space_fan]
682 THEN REPEAT STRIP_TAC
683 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
684 THEN MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
685 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th);])
686 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
687 THEN ASM_REWRITE_TAC[SET_RULE`INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)} | y IN {f1, f2, f3}}
688 = aff_gt {x, pr2 f1, pr3 f1} {pr3 (f1_fan x V E f1)} INTER aff_gt {x, pr2 f2, pr3 f2} {pr3 (f1_fan x V E f2)} INTER aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3)}`;SET_RULE`{pr2 y | y IN {f1, f2, f3}}={pr2 f1, pr2 f2, pr2 f3}`]
689 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
690 THEN DISCH_TAC
691 THEN POP_ASSUM (fun th -> MP_TAC th
692 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
693 THEN DISCH_TAC
694 THEN POP_ASSUM (fun th -> MRESA_TAC th [`pr2 f2:real^3`;`pr2 f3:real^3`])
695 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`;`(pr2 f2):real^3`;`(pr2 f3):real^3`]
696 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`(pr3 f3):real^3`;`(pr3 f1):real^3`;`(pr3 f2):real^3`];
697
698 STRIP_TAC
699 THENL[
700 REWRITE_TAC[conforming_solid_angle_fan]
701 THEN REPEAT STRIP_TAC
702 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
703 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`]
704 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
705 THEN MRESA_TAC measurable_dartset_leads_into30_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;]
706 THEN MRESA_TAC dartset_leads_into_fan_eventually_radial_norm[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;]
707 THEN POP_ASSUM MP_TAC
708 THEN REWRITE_TAC[eventually_radial_norm;eventually_radial;radial_norm; radial;ball_eq_normball]
709 THEN DISCH_TAC
710 THEN ASM_REWRITE_TAC[]
711 THEN MRESA_TAC solid_of_dartset_leads_into_fan_triangle_fan
712 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;];
713
714 REWRITE_TAC[conforming_diagonal_fan]
715 THEN REPEAT GEN_TAC
716 THEN STRIP_TAC
717 THEN POP_ASSUM MP_TAC
718 THEN POP_ASSUM MP_TAC
719 THEN POP_ASSUM MP_TAC
720 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
721 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
722 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f2):real^3`;`(pr2 f1):real^3`]
723 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f3):real^3`;`(pr2 f2):real^3`]
724 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f1):real^3`;`(pr2 f3):real^3`]
725 THEN REPEAT DISCH_TAC
726 THEN MP_TAC(SET_RULE`y IN {f1, f2, f3:real^3#real^3#real^3#real^3} /\ z IN {f1, f2, f3}/\ ~(y = z)
727 ==> (y=f1 /\ z= f2) \/ (y=f1 /\ z= f3) \/ (y=f2 /\ z= f1) \/ (y=f2 /\ z= f3)\/ (y=f3 /\ z= f1) \/ (y=f3 /\ z= f2)` )
728 THEN RESA_TAC
729 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
730 THEN ASM_REWRITE_TAC[]]]]);;
731
732
733
734
735 let NEGLIGIBLE_AFF_3=prove(`!x:real^3 v:real^3 u:real^3.
736   negligible (aff {x,v,u})`,
737
738 MESON_TAC[NEGLIGIBLE_AFFINE_HULL_3;aff]);;
739
740
741
742
743 let NEGLIGIBLE_AFF_GE_2_1=prove(`!x:real^3 v:real^3 u:real^3.
744 ~collinear {x,v,u}
745 ==>  negligible (aff_ge {x,v} {u})`,
746  
747 REPEAT GEN_TAC THEN GEOM_ORIGIN_TAC `x:real^3` THEN 
748 REPEAT STRIP_TAC
749 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
750 THEN EXISTS_TAC`{w:real^3| (w) dot (e2_fan (vec 0) v u)= &0}`
751 THEN MRESAL_TAC exp_aff_ge_by_dot[`(vec 0):real^3`;`v:real^3`;`u:real^3`][VECTOR_ARITH`A- vec 0=A`]
752 THEN REWRITE_TAC[SET_RULE`{w | w dot e2_fan (vec 0) v u = &0 /\ &0 <= w dot e1_fan (vec 0) v u} SUBSET
753  {w | w dot e2_fan (vec 0) v u = &0}`]
754 THEN ONCE_REWRITE_TAC[DOT_SYM]
755 THEN MATCH_MP_TAC NEGLIGIBLE_HYPERPLANE
756 THEN ASM_REWRITE_TAC[]
757 THEN STRIP_TAC
758 THEN MRESAL_TAC properties_coordinate[`((vec 0):real^3)`;` (v:real^3)`;` (u:real^3)`][orthonormal;DOT_LZERO]
759 THEN ASM_TAC
760 THEN REAL_ARITH_TAC);;
761
762
763
764 let NEGLIGIBLE_AFF_GE_1_2=prove(`!x:real^3 v:real^3 u:real^3.
765 ~collinear {x,v,u}
766 ==>  negligible (aff_ge {x} {v,u})`, 
767
768 REPEAT STRIP_TAC
769 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
770 THEN EXISTS_TAC `aff_ge {x,v} {u:real^3}`
771 THEN MRESA_TAC aff_ge_inter_aff_ge[`x:real^3`;`v:real^3`;`u:real^3`]
772 THEN ASM_SIMP_TAC[SET_RULE`A INTER B SUBSET A`;NEGLIGIBLE_AFF_GE_2_1]);;
773
774 let NEGLIGIBLE_AFF_GT_1_2=prove(`!x:real^3 v:real^3 u:real^3.
775 ~collinear {x,v,u}
776 ==>  negligible (aff_gt {x} {v,u})`,
777 REPEAT STRIP_TAC
778 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
779 THEN EXISTS_TAC `aff_ge {x} {v,u:real^3}`
780 THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]th3) THEN RESA_TAC
781 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`u:real^3`]
782 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GE_1_2]);;
783
784
785
786
787
788
789
790
791
792
793 let MEASURE_AFF_3=prove(`!x:real^3 v:real^3 u:real^3.
794  measure (aff {x,v,u})= &0`,
795
796 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
797 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3]);;
798
799
800
801 let MEASURE_AFF_GT_2_1=prove(`!x:real^3 v:real^3 u:real^3.
802 ~collinear {x,v,u}==>   measure (aff_gt {x} {v,u})= &0`,
803
804 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
805 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2]);;
806
807
808 let NEGLIGIBLE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
809 negligible (aff  {x,v,u} INTER normball x r)`,
810 REPEAT STRIP_TAC
811 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
812 THEN EXISTS_TAC `aff {x,v,u:real^3}`
813 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3; SET_RULE`A INTER B SUBSET A`]);;
814
815
816
817
818 let NEGLIGIBLE_AFF_GT_1_2_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
819 ~collinear {x,v,u}
820 ==>  negligible (aff_gt {x} {v,u} INTER normball x r)`,
821 REPEAT STRIP_TAC
822 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
823 THEN EXISTS_TAC `aff_gt {x} {v,u:real^3}`
824 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2; SET_RULE`A INTER B SUBSET A`]);;
825
826
827 let MEASURE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
828   measure (aff {x,v,u} INTER normball x r)= &0`,
829
830 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
831 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3_INTER_BALL]);;
832
833
834
835 let MEASURE_AFF_GT_2_1_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
836 ~collinear {x,v,u}==>   measure (aff_gt {x} {v,u} INTER normball x r)= &0`,
837
838 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
839 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2_INTER_BALL]);;
840
841
842 let HAS_MEASURE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
843 (aff {x,v,u} INTER normball x r)  has_measure  &0`,
844
845 REPEAT STRIP_TAC 
846 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3_INTER_BALL;HAS_MEASURE_0]);;
847
848
849 let HAS_MEASURE_AFF_GT_1_2_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
850 ~collinear {x,v,u}==>  (aff_gt {x} {v,u} INTER normball x r)  has_measure  &0`,
851
852 REPEAT STRIP_TAC 
853 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2_INTER_BALL;HAS_MEASURE_0]);;
854
855
856 let MEASURABLE_AFF_GT_2_1_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
857 ~collinear {x,v,u}==>   measurable (aff_gt {x} {v,u} INTER normball x r)`,
858 REPEAT STRIP_TAC
859 THEN ASM_SIMP_TAC[measurable;]
860 THEN EXISTS_TAC`&0`
861 THEN MRESA_TAC HAS_MEASURE_AFF_GT_1_2_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`r:real`]);;
862
863
864 let XFAN_EQ_UNIONS_AFF_GE_1_2=prove(`!x V E.
865 xfan(x,V,E) =UNIONS {y | ?e. e IN E /\ y = aff_ge {x} e}`,
866 REWRITE_TAC[xfan;UNIONS;IN_ELIM_THM]
867 THEN SET_TAC[]);;
868
869
870
871
872 let NEGLIGIBLE_XFAN=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool).
873 FAN (x,V,E) ==>  negligible (xfan (x,V,E))`,
874 REPEAT STRIP_TAC THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2] THEN MATCH_MP_TAC NEGLIGIBLE_UNIONS
875 THEN MRESAL_TAC set_edges_is_finite_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`][IN_ELIM_THM]
876 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3->bool. aff_ge {x:real^3} e)`;`E:(real^3->bool)->bool`][IMAGE;]
877 THEN REPEAT STRIP_TAC
878 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
879 THEN POP_ASSUM MP_TAC
880 THEN REMOVE_ASSUM_TAC
881 THEN POP_ASSUM MP_TAC
882 THEN DISCH_THEN(LABEL_TAC "EM")
883 THEN STRIP_TAC
884 THEN REMOVE_THEN "EM" MP_TAC
885 THEN RESA_TAC
886 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
887 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_GE_1_2]);;
888
889
890 let NEGLIGIBLE_XFAN_INTER_BALL=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) r:real.
891 FAN (x,V,E) ==>  negligible (xfan (x,V,E) INTER normball x r)`,
892 REPEAT STRIP_TAC THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
893 THEN EXISTS_TAC`xfan ((x:real^3),(V:real^3->bool),(E:(real^3->bool)->bool))`
894 THEN POP_ASSUM MP_TAC
895 THEN ASM_REWRITE_TAC[NEGLIGIBLE_XFAN;SET_RULE`xfan (x,V,E) INTER normball x r SUBSET xfan (x,V,E)`]);;
896
897
898
899 let MEASURE_XFAN=prove(`!x:real^3 V E.
900 FAN (x,V,E) ==>  measure (xfan (x,V,E))= &0`,
901
902 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
903 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN]);;
904
905
906 let HAS_MEASURE_XFAN=prove(`!x:real^3 V E.
907 FAN (x,V,E) ==>  (xfan (x,V,E)) has_measure  &0`,
908
909 REPEAT STRIP_TAC 
910 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN;HAS_MEASURE_0]);;
911
912
913
914 let MEASURE_XFAN_INTER_BALL=prove(`!x:real^3 V E r.
915 FAN (x,V,E) ==>  measure (xfan (x,V,E) INTER normball x r)= &0`,
916
917 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
918 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN_INTER_BALL]);;
919
920
921 let HAS_MEASURE_XFAN_INTER_BALL=prove(`!x:real^3 V E r.
922 FAN (x,V,E) ==>  (xfan (x,V,E) INTER normball x r)  has_measure  &0`,
923
924 REPEAT STRIP_TAC 
925 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN_INTER_BALL;HAS_MEASURE_0]);;
926
927
928
929 let MEASURABLE_BALL_INTER_UNIV=prove(`!x r. measurable ((:real^3) INTER normball x r)`,
930 REWRITE_TAC[SET_RULE`(:real^3) INTER (A:real^3->bool)=A`;GSYM ball_eq_normball;MEASURABLE_BALL]);;
931
932
933
934
935
936
937
938
939 let MEASURE_YFAN_INTER_BALL=prove(`!x:real^3 V E r. 
940 FAN(x,V,E)/\ &0<= r
941 ==> measure ( (yfan (x,V,E)) INTER normball x r)= &4/ &3 *pi *r pow 3`,
942
943 REPEAT STRIP_TAC
944 THEN REWRITE_TAC[yfan;SET_RULE`((:real^3) DIFF xfan (x,V,E)) INTER normball x r= normball x r DIFF (xfan (x,V,E) INTER normball x r)`]
945 THEN MRESAL_TAC HAS_MEASURE_XFAN_INTER_BALL[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` r:real`][HAS_MEASURE_MEASURABLE_MEASURE;GSYM ball_eq_normball]
946 THEN MRESAL_TAC MEASURE_DIFF_SUBSET[`normball (x:real^3) (r:real)`;`(xfan ((x:real^3),V:real^3->bool,E) INTER normball x r)`][GSYM ball_eq_normball;MEASURABLE_BALL;SET_RULE`xfan (x,V,E) INTER ball (x,r) SUBSET ball (x,r)`;]
947 THEN ASM_SIMP_TAC[VOLUME_BALL]
948 THEN REAL_ARITH_TAC);;
949
950
951
952
953 let MESURABLE_YFAN_INTER_BALL=prove(`!x:real^3 V E r. 
954 FAN(x,V,E)/\ &0<= r
955 ==> measurable ( (yfan (x,V,E)) INTER normball x r)`,
956
957
958 REPEAT STRIP_TAC
959 THEN REWRITE_TAC[yfan;SET_RULE`((:real^3) DIFF xfan (x,V,E)) INTER normball x r= normball x r DIFF (xfan (x,V,E) INTER normball x r)`]
960 THEN MRESAL_TAC HAS_MEASURE_XFAN_INTER_BALL[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` r:real`][HAS_MEASURE_MEASURABLE_MEASURE;GSYM ball_eq_normball]
961 THEN MRESAL_TAC MEASURABLE_DIFF[`normball (x:real^3) (r:real)`;`(xfan ((x:real^3),V:real^3->bool,E) INTER normball x r)`][GSYM ball_eq_normball;MEASURABLE_BALL;SET_RULE`xfan (x,V,E) INTER ball (x,r) SUBSET ball (x,r)`;]);;
962
963
964
965
966
967
968 let RADIAL_DIFF=prove(`!r v0 A B:real^N->bool. radial_norm r v0 A /\ radial_norm r v0 B /\ A SUBSET B ==> radial_norm r v0 (B DIFF A)`,
969
970 REWRITE_TAC[radial_norm]
971 THEN REPEAT STRIP_TAC
972 THENL[
973 ASM_TAC THEN SET_TAC[];
974
975 MP_TAC(SET_RULE`v0 + u:real^N IN B DIFF A==> v0 + u IN B  /\ ~(v0 + u IN A)`)
976 THEN RESA_TAC
977 THEN FIND_ASSUM MP_TAC `!u:real^N. v0 + u IN B ==> (!t. t > &0 /\ t * norm u < r ==> v0 + t % u IN B)`
978 THEN DISCH_TAC
979 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `u:real^N` th))
980 THEN POP_ASSUM MP_TAC
981 THEN POP_ASSUM (fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
982 THEN REPEAT STRIP_TAC
983 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
984 THEN FIND_ASSUM MP_TAC `!u:real^N. v0 + u IN A ==> (!t. t > &0 /\ t * norm u < r ==> v0 + t % u IN A)`
985 THEN DISCH_TAC
986 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `t% u:real^N` th))
987 THEN DISJ_CASES_TAC(SET_RULE`v0 + t % u IN A \/ ~(v0 + t % u:real^N IN A)`)
988 THENL[POP_ASSUM (fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
989 THEN REPEAT STRIP_TAC
990 THEN POP_ASSUM (fun th-> MRESA1_TAC th `inv t:real`)
991 THEN POP_ASSUM MP_TAC
992 THEN MP_TAC(REAL_ARITH`t> &0==> ~(t= &0) /\ &0<= t`) THEN RESA_TAC
993 THEN MRESA1_TAC REAL_ABS_REFL`t:real`
994 THEN MRESA1_TAC REAL_MUL_LINV`t:real`
995 THEN MRESAL1_TAC REAL_LT_INV `t:real`[REAL_ARITH`&0<A <=> A> &0`;NORM_MUL; REAL_ARITH`A*B*C=(A*B)*C`;REAL_ARITH`&1 *A=A`;VECTOR_ARITH`A % B%C=(A*B)%C`;VECTOR_ARITH`&1 %A=A`]
996 THEN MP_TAC(SET_RULE`B SUBSET normball v0 r /\ v0 + u:real^N IN B==> v0 + u IN normball v0 r`)
997 THEN ASM_REWRITE_TAC[normball;IN_ELIM_THM;dist;VECTOR_ARITH`(A+B)-A=B:real^N`]
998 THEN SET_TAC[];
999
1000 ASM_TAC THEN SET_TAC[]]]);;
1001
1002
1003
1004
1005 let RADIAL_UNION=prove(`!r v0 A B:real^N->bool. radial_norm r v0 A /\ radial_norm r v0 B ==> radial_norm r v0 (A UNION B)`,
1006
1007 REWRITE_TAC[radial_norm;IN_UNION]
1008 THEN REPEAT STRIP_TAC
1009 THEN ASM_TAC THEN SET_TAC[]);;
1010
1011
1012 let RADIAL_EMPTY=prove(`!r v0:real^N. radial_norm r v0 {}`,
1013 REWRITE_TAC[radial_norm;]
1014 THEN SET_TAC[]);;
1015
1016
1017 let RADIAL_UNIONS=prove(`!r v0 f:(real^N->bool)->bool.
1018         FINITE f /\ (!s. s IN f ==> radial_norm r v0 s)
1019         ==> (radial_norm r v0 (UNIONS f))`,
1020   GEN_TAC THEN GEN_TAC THEN REWRITE_TAC[IMP_CONJ] THEN
1021   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1022   SIMP_TAC[UNIONS_0; UNIONS_INSERT; RADIAL_EMPTY] THEN
1023   REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC THEN
1024   MATCH_MP_TAC RADIAL_UNION THEN ASM_SIMP_TAC[]);;
1025
1026
1027
1028 let RADIAL_UNIV=prove(`!r x. r> &0 ==> radial_norm r x ((:real^N) INTER normball x r)`,
1029 REPEAT STRIP_TAC
1030 THEN REWRITE_TAC[radial_norm]
1031 THEN REPEAT STRIP_TAC
1032 THENL
1033 [ SET_TAC[];
1034 UNDISCH_TAC `(x:real^N) + u IN (:real^N) INTER normball x r` THEN
1035 ASM_SIMP_TAC[aff_normball;SET_RULE`(:real^N) INTER (A:real^N->bool)=A`]]);;
1036
1037
1038
1039
1040 let RADIAL_AFF_GE_1_2 = prove(`!x u v r.
1041      (DISJOINT {(x:real^B)} {u,v} /\ (r > &0) ) ==>
1042      radial_norm r x (aff_ge {x} {u,v} INTER normball x r)`,
1043
1044 REWRITE_TAC[radial_norm]
1045 THEN REPEAT STRIP_TAC
1046 THENL[SET_TAC[];
1047
1048 UNDISCH_TAC `(x:real^B) + u' IN aff_ge {x} {u, v} INTER normball x r`
1049 THEN ASM_SIMP_TAC[AFF_GE_1_2]
1050 THEN REWRITE_TAC[IN_ELIM_THM;IN_INTER]
1051 THEN REPEAT STRIP_TAC
1052 THENL[EXISTS_TAC `&1 + (t:real) * t1 - t`
1053 THEN EXISTS_TAC `(t:real) * t2`
1054 THEN EXISTS_TAC `(t:real) * t3`
1055 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 + t * t1 - t) + t * t2 + t * t3 = &1 + t * (t1 + t2 +t3)-t `; REAL_ARITH`&1 + t * &1 - t = &1`;VECTOR_ARITH`(&1 + t * t1 - t) % x + (t * t2) % u + (t * t3) % v=x + t % (t1 % x +  t2 % u + t3 % v) - t %x`;]
1056 THEN MP_TAC(REAL_ARITH`t> &0 ==> &0<= t`) THEN RESA_TAC
1057 THEN SUBGOAL_THEN `&0 <= t * t2 /\ &0 <= t * t3` (fun t -> REWRITE_TAC[t])
1058 THENL[ ASM_MESON_TAC[REAL_LE_MUL];
1059 REMOVE_ASSUM_TAC
1060 THEN REMOVE_ASSUM_TAC
1061 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1062 THEN VECTOR_ARITH_TAC];
1063
1064 MATCH_MP_TAC aff_normball
1065 THEN ASM_REWRITE_TAC[]]]);;
1066
1067 let RADIAL_AFF_GT_3_1 = prove_by_refinement(`!x u v w r.
1068      (DISJOINT {(x:real^B),u,v} {w} /\ (r > &0) ) ==>
1069      radial_norm r x (aff_gt {x,u,v} {w} INTER normball x r)`,
1070 [
1071 REWRITE_TAC[radial_norm];
1072 REPEAT STRIP_TAC;
1073 SET_TAC[];
1074 UNDISCH_TAC `(x:real^B) + u' IN aff_gt {x,u,v} {w} INTER normball x r`;
1075 ASM_SIMP_TAC[AFF_GT_3_1];
1076 REWRITE_TAC[IN_ELIM_THM;IN_INTER];
1077 REPEAT STRIP_TAC;
1078 EXISTS_TAC `&1 + (t:real) * t1 - t`;
1079 EXISTS_TAC `(t:real) * t2`;
1080 EXISTS_TAC `(t:real) * t3`;
1081 EXISTS_TAC `(t:real) * t4`;
1082 SUBGOAL_THEN `&0 < t * t4` (fun t -> REWRITE_TAC[t]);
1083 ASM_MESON_TAC[REAL_MUL_POS_LT;REAL_ARITH `r > &0 <=> &0 < r`];
1084 CONJ_TAC;
1085 SUBGOAL_THEN `(&1 + t * t1 - t) + t * t2 + t * t3 + t * t4 = &1 - t + t * (t1 + t2 + t3 + t4)` (fun t-> ASM_REWRITE_TAC[t]);
1086 REAL_ARITH_TAC;
1087 REAL_ARITH_TAC;
1088 ONCE_REWRITE_TAC[ VECTOR_ARITH `( &1 + t * t1 - t) % (x:real^B) + (t * t2) % u + (t * t3) % v + (t * t4) % w  = x - t % x + t % (t1 % x + t2 % u + t3 % v + t4 % w)`];
1089 UNDISCH_TAC `(x:real^B) + u' = t1 % x + t2 % u + t3 % v + t4 % w`;
1090 DISCH_THEN(fun thm -> ONCE_REWRITE_TAC[GSYM thm]);
1091 VECTOR_ARITH_TAC;
1092 MATCH_MP_TAC aff_normball;
1093 ASM_REWRITE_TAC[];
1094 ]);;
1095
1096
1097 let RADIAL_INTERS=prove(`!r v0 f:(real^N->bool)->bool.
1098         FINITE f /\ (!s. s IN f ==> radial_norm r v0 (s INTER normball v0 r))/\  r> &0 
1099         ==> (radial_norm r v0 (INTERS f INTER normball v0 r))`,
1100
1101   GEN_TAC THEN GEN_TAC THEN REWRITE_TAC[IMP_CONJ] THEN
1102   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1103   SIMP_TAC[ INTERS_0; INTERS_INSERT;RADIAL_UNIV;FORALL_IN_CLAUSES] THEN
1104   REWRITE_TAC[IN_INSERT;SET_RULE`(x INTER INTERS f) INTER normball v0 r=(x INTER normball v0 r) INTER (INTERS f INTER normball v0 r)`] THEN REPEAT STRIP_TAC 
1105 THEN  MATCH_MP_TAC inter_radial THEN ASM_SIMP_TAC[]);;
1106
1107
1108
1109
1110
1111 let XFAN_INTER_BALL_UNIONS=prove(`!x:real^N V E.
1112 xfan(x,V,E) INTER normball x r= UNIONS {y | ?e. e IN E /\ y = (aff_ge {x} e) INTER normball x r}`,
1113 REPEAT GEN_TAC
1114 THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2]
1115 THEN ONCE_REWRITE_TAC[ EXTENSION]
1116 THEN REWRITE_TAC[UNIONS; INTER;IN_ELIM_THM]
1117 THEN GEN_TAC
1118 THEN EQ_TAC
1119 THENL[
1120 STRIP_TAC
1121 THEN ASM_REWRITE_TAC[]
1122 THEN EXISTS_TAC `{x' | x' IN aff_ge {x} e /\ x' IN normball (x:real^N) (r:real)}`
1123 THEN POP_ASSUM MP_TAC
1124 THEN POP_ASSUM MP_TAC
1125 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1126 THEN RESA_TAC THEN RESA_TAC
1127 THEN EXISTS_TAC`e:real^N->bool`
1128 THEN ASM_REWRITE_TAC[];
1129 STRIP_TAC
1130 THEN POP_ASSUM MP_TAC
1131 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1132 THEN RESA_TAC
1133 THEN EXISTS_TAC `aff_ge {x:real^N} e `
1134 THEN ASM_REWRITE_TAC[]
1135 THEN EXISTS_TAC `e:real^N->bool`
1136 THEN ASM_REWRITE_TAC[]]);;
1137
1138
1139 let RADIAL_XFAN_INTER_BALL=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) r.
1140 FAN (x,V,E) /\ r> &0 ==>  radial_norm r x  (xfan (x,V,E) INTER normball x r)`,
1141 REPEAT STRIP_TAC THEN REWRITE_TAC[XFAN_INTER_BALL_UNIONS]
1142  THEN MATCH_MP_TAC RADIAL_UNIONS
1143 THEN MRESAL_TAC set_edges_is_finite_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`][IN_ELIM_THM]
1144 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3->bool. aff_ge {x:real^3} e INTER normball x r)`;`E:(real^3->bool)->bool`][IMAGE;]
1145 THEN REPEAT STRIP_TAC
1146 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
1147 THEN POP_ASSUM MP_TAC
1148 THEN REMOVE_ASSUM_TAC
1149 THEN POP_ASSUM MP_TAC
1150 THEN DISCH_THEN(LABEL_TAC "EM")
1151 THEN STRIP_TAC
1152 THEN REMOVE_THEN "EM" MP_TAC
1153 THEN RESA_TAC
1154 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
1155 THEN ASM_MESON_TAC[RADIAL_AFF_GE_1_2]);;
1156
1157
1158
1159
1160
1161 let RADIAL_NORM_YFAN_INTER_BALL=prove(`!x:real^3 V E r. 
1162 FAN(x,V,E) /\ r> &0
1163 ==> radial_norm r x ( (yfan (x,V,E)) INTER normball x r)`,
1164
1165 REPEAT STRIP_TAC
1166 THEN REWRITE_TAC[yfan;SET_RULE`((:real^3) DIFF xfan (x,V,E)) INTER normball x r= ((:real^3) INTER normball x r) DIFF (xfan (x,V,E) INTER normball x r)`]
1167 THEN MRESA_TAC RADIAL_UNIV[`r:real`;`x:real^3`]
1168 THEN MRESA_TAC  RADIAL_XFAN_INTER_BALL[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` r:real`]
1169 THEN MRESAL_TAC RADIAL_DIFF[`r:real`;`x:real^3`;`(xfan ((x:real^3),V:real^3->bool,E) INTER normball x r)`;`(:real^3) INTER normball (x:real^3) (r:real)`;][SET_RULE`xfan (x,V,E) INTER normball x r SUBSET (:real^3) INTER normball x r`;]);;
1170
1171
1172
1173
1174
1175
1176
1177 let SOLID_ANGLE_YFAN=prove(`!x:real^3 V E.
1178 FAN (x,V,E) ==>  sol x (yfan (x,V,E))= &4 * pi`,
1179 REPEAT STRIP_TAC
1180 THEN MRESAL_TAC RADIAL_NORM_YFAN_INTER_BALL[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` &1:real`][REAL_ARITH`&1> &0`]
1181 THEN MRESAL_TAC MESURABLE_YFAN_INTER_BALL
1182 [`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` &1:real`][REAL_ARITH`&0<= &1`]
1183 THEN MRESAL_TAC MEASURE_YFAN_INTER_BALL
1184 [`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` &1:real`][REAL_ARITH`&0<= &1`]
1185 THEN MRESAL_TAC sol[`x:real^3`;`yfan(x:real^3,V:real^3->bool,E)`;`&1`][REAL_ARITH`&1> &0`]
1186 THEN REAL_ARITH_TAC);;
1187
1188
1189
1190 let SUM_SOL_IN_TOPOLOGICAL_COMPONENET_EQ_IN_FACE_SET=prove(`!x:real^3 V E.
1191 FAN(x,V,E) /\ conforming_fan (x,V,E)
1192 ==>  sum (topological_component_yfan (x,V,E)) (\f. sol x f) = sum (face_set (hypermap1_of_fanx (x,V,E))) (\f. sol x (dartset_leads_into_fan x V E f))`,
1193 REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
1194 THEN REPEAT STRIP_TAC
1195 THEN MRESA_TAC SUM_IMAGE[`(\f. (dartset_leads_into_fan x V E f))`;`(\f. sol x f)`;`(face_set (hypermap1_of_fanx (x:real^3,V,E)))`]
1196 THEN POP_ASSUM MP_TAC
1197 THEN SUBGOAL_THEN`(!x' y.
1198            x' IN face_set (hypermap1_of_fanx (x,V,E)) /\
1199            y IN face_set (hypermap1_of_fanx (x,V,E)) /\
1200            dartset_leads_into_fan x V E x' = dartset_leads_into_fan x V E y
1201            ==> x' = y)`ASSUME_TAC
1202 THENL[
1203 REMOVE_ASSUM_TAC
1204 THEN REMOVE_ASSUM_TAC
1205 THEN REMOVE_ASSUM_TAC
1206 THEN POP_ASSUM MP_TAC
1207 THEN DISCH_THEN(LABEL_TAC "A")
1208 THEN REPEAT STRIP_TAC
1209 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`x':real^3#real^3#real^3#real^3->bool`]
1210 THEN REMOVE_THEN "A" (fun th-> MRESA1_TAC th`dartset_leads_into_fan (x:real^3) V E x'` )
1211 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3->bool` THEN MRESA1_TAC th`x':real^3#real^3#real^3#real^3->bool`);
1212 POP_ASSUM (fun th-> REWRITE_TAC[th])
1213 THEN REWRITE_TAC[FUN_EQ_THM;o_DEF;]
1214 THEN SUBGOAL_THEN`(IMAGE (\f. dartset_leads_into_fan x V E f)
1215  (face_set (hypermap1_of_fanx (x,V,E))))=topological_component_yfan (x,V,E)` ASSUME_TAC
1216 THENL[
1217  ONCE_REWRITE_TAC[EXTENSION]
1218 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
1219 THEN GEN_TAC
1220 THEN EQ_TAC
1221 THENL[STRIP_TAC
1222 THEN ASM_SIMP_TAC[dartset_leads_into_is_topological_component_yfan];
1223
1224 REMOVE_ASSUM_TAC
1225 THEN REMOVE_ASSUM_TAC
1226 THEN REMOVE_ASSUM_TAC
1227 THEN POP_ASSUM MP_TAC
1228 THEN DISCH_THEN(LABEL_TAC "A")
1229 THEN REPEAT STRIP_TAC
1230 THEN REMOVE_THEN "A" (fun th-> MRESA1_TAC th`x':real^3->bool` )
1231 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
1232 THEN ASM_REWRITE_TAC[]];
1233 ASM_REWRITE_TAC[]]]);;
1234
1235
1236
1237
1238 let SOL_EMPTY=prove(`!x:real^3.
1239          sol x {} = &0`,
1240 GEN_TAC
1241 THEN MRESAL_TAC sol[`x:real^3`;`{}:real^3->bool`;`&1`][REAL_ARITH`&1> &0`;SET_RULE`{} INTER normball x (&1)={}`;MEASURABLE_EMPTY;RADIAL_EMPTY;MEASURE_EMPTY]
1242 THEN REAL_ARITH_TAC);;
1243
1244
1245
1246 let SOL_DISJOINT_UNION =prove(`!x:real^3 s t r. r > &0 /\  measurable (s INTER normball x r) /\ measurable (t INTER normball x r) /\ DISJOINT s t /\ radial_norm r x (s INTER normball x r) /\ radial_norm r x (t INTER normball x r)
1247          ==> sol x (s UNION t) = sol x s + sol x t`,
1248   
1249 REPEAT STRIP_TAC
1250 THEN MRESAL_TAC MEASURABLE_UNION[`(s INTER normball x r):real^3->bool`;`(t INTER normball x r):real^3->bool`][SET_RULE`(s INTER normball x r) UNION (t INTER normball x r):real^3->bool=((s UNION t) INTER normball x r):real^3->bool`]
1251 THEN MP_TAC(SET_RULE`DISJOINT (s:real^3->bool) t 
1252 ==>DISJOINT (s INTER normball x r) (t INTER normball x r)`)
1253 THEN RESA_TAC
1254 THEN MRESAL_TAC MEASURE_DISJOINT_UNION[`(s INTER normball x r):real^3->bool`;`(t INTER normball x r):real^3->bool`][SET_RULE`(s INTER normball x r) UNION (t INTER normball x r):real^3->bool=((s UNION t) INTER normball x r):real^3->bool`]
1255 THEN MRESAL_TAC RADIAL_UNION[`r:real`;`x:real^3`;`(s INTER normball x r):real^3->bool`;`(t INTER normball x r):real^3->bool`][SET_RULE`(s INTER normball x r) UNION (t INTER normball x r):real^3->bool=((s UNION t) INTER normball x r):real^3->bool`]
1256 THEN MRESA_TAC sol[`x:real^3`;`s:real^3->bool`;`r:real`]
1257 THEN MRESA_TAC sol[`x:real^3`;`t:real^3->bool`;`r:real`]
1258 THEN MRESA_TAC sol[`x:real^3`;`s UNION t:real^3->bool`;`r:real`]
1259 THEN REAL_ARITH_TAC);;
1260
1261
1262 let UNIONS_INTER=prove(`!f t:A->bool. UNIONS f INTER t= UNIONS {s INTER t| s IN f}`,
1263
1264 ONCE_REWRITE_TAC[EXTENSION]
1265 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM]
1266 THEN REPEAT STRIP_TAC
1267 THEN EQ_TAC
1268 THENL[
1269 STRIP_TAC
1270 THEN ASM_REWRITE_TAC[]
1271 THEN EXISTS_TAC`{x | x IN u /\ x IN t}:A->bool`
1272 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1273 THEN EXISTS_TAC`u :A->bool`
1274 THEN ASM_REWRITE_TAC[];
1275 STRIP_TAC
1276 THEN ASM_REWRITE_TAC[]
1277 THEN POP_ASSUM MP_TAC
1278 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1279 THEN RESA_TAC
1280 THEN EXISTS_TAC`s :A->bool`
1281 THEN ASM_REWRITE_TAC[]]);;
1282
1283
1284
1285
1286
1287
1288 let UNIONS_INTER1=prove(`!f t:A->bool. UNIONS f INTER t= UNIONS {y | ?s. s IN f /\ y = s INTER t}`,
1289
1290 ONCE_REWRITE_TAC[EXTENSION]
1291 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM]
1292 THEN REPEAT STRIP_TAC
1293 THEN EQ_TAC
1294 THENL[
1295 STRIP_TAC
1296 THEN ASM_REWRITE_TAC[]
1297 THEN EXISTS_TAC`{x | x IN u /\ x IN t}:A->bool`
1298 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1299 THEN EXISTS_TAC`u :A->bool`
1300 THEN ASM_REWRITE_TAC[];
1301 STRIP_TAC
1302 THEN ASM_REWRITE_TAC[]
1303 THEN POP_ASSUM MP_TAC
1304 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1305 THEN RESA_TAC
1306 THEN EXISTS_TAC`s :A->bool`
1307 THEN ASM_REWRITE_TAC[]]);;
1308
1309
1310
1311 let MEASURABLE_UNIONS = prove
1312  (`!f:(real^N->bool)->bool.
1313         FINITE f /\ (!s. s IN f ==> measurable s)
1314         ==> measurable (UNIONS f)`,
1315   REWRITE_TAC[IMP_CONJ] THEN
1316   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1317   SIMP_TAC[UNIONS_0; UNIONS_INSERT; MEASURABLE_EMPTY] THEN
1318   REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC THEN
1319   MATCH_MP_TAC MEASURABLE_UNION THEN ASM_SIMP_TAC[]);;
1320
1321
1322
1323 let SOL_UNIONS=prove(`!r x f:(real^3->bool)->bool.
1324         FINITE f /\  r> &0 /\
1325         (!s. s IN f  ==> measurable (s INTER normball x r) /\ radial_norm r x (s INTER normball x r)) /\
1326         (!s t. s IN f /\ t IN f /\ ~(s = t) ==> DISJOINT s t)
1327         ==> sol x (UNIONS f) = sum f (\s. sol x s)`,
1328 GEN_TAC THEN GEN_TAC THEN  REWRITE_TAC[IMP_CONJ] THEN
1329   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1330   SIMP_TAC[UNIONS_0; UNIONS_INSERT; SOL_EMPTY;SUM_CLAUSES] 
1331 THEN  REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC 
1332 THEN ASM_TAC THEN DISCH_THEN(LABEL_TAC"EM")
1333 THEN ASM_REWRITE_TAC[SET_RULE`(!s. P s \/ Q s==> C s)<=> (!s. P s ==> C s) /\ (!s. Q s ==> C s)`;SET_RULE`(!s. P s /\ Q s) <=> (!s. P s) /\ (!s. Q s)`;
1334 SET_RULE`(!s. E s ==> P s \/ Q s==> C s)<=> (!s. E s==> P s ==> C s) /\ (!s. E s ==> Q s ==> C s)`]
1335 THEN REPEAT STRIP_TAC
1336 THEN REMOVE_THEN "EM" MP_TAC
1337 THEN ASM_REWRITE_TAC[]
1338 THEN DISCH_TAC
1339 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
1340 THEN  MATCH_MP_TAC SOL_DISJOINT_UNION
1341 THEN EXISTS_TAC`r:real`
1342 THEN ASM_REWRITE_TAC[]
1343 THEN FIND_ASSUM (fun th-> MP_TAC (SPEC `x':real^3->bool` th))`!s:real^3->bool. s = x'
1344           ==> measurable (s INTER normball x r) /\
1345               radial_norm r x (s INTER normball x r)`
1346 THEN REWRITE_TAC[]
1347 THEN DISCH_TAC
1348 THEN ASM_SIMP_TAC[UNIONS_INTER1]
1349 THEN MRESAL_TAC FINITE_IMAGE[`(\s:real^3->bool. s INTER normball x r)`;`f:(real^3->bool)->bool`][IMAGE;]
1350 THEN FIND_ASSUM MP_TAC`!s:real^3->bool. s IN f
1351           ==> measurable (s INTER normball x r) /\
1352               radial_norm r x (s INTER normball x r)`
1353
1354 THEN REWRITE_TAC[SET_RULE`(!s. P s==> Q s /\ Q1 s)<=>(!s. P s==> Q s )/\ (!s. P s==> Q1 s)`]
1355 THEN STRIP_TAC
1356
1357 THEN MRESAL_TAC RADIAL_UNIONS[`r:real`;`x:real^3`;`{y | ?s. s IN f /\ y = s INTER normball x r}:(real^3->bool)->bool`;][IN_ELIM_THM;SET_RULE`(!s. (?s'. s' IN f /\ s = P s') ==> Q s) <=> (!s. s IN f  ==> Q (P s))`
1358 ]
1359 THEN MRESAL_TAC MEASURABLE_UNIONS[`{y | ?s. s IN f /\ y = s INTER normball x r}:(real^3->bool)->bool`;][IN_ELIM_THM;SET_RULE`(!s. (?s'. s' IN f /\ s = P s') ==> Q s) <=> (!s. s IN f  ==> Q (P s))`;DISJOINT]
1360 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`]
1361 THEN REWRITE_TAC[UNIONS_INTER1]
1362 THEN REMOVE_ASSUM_TAC
1363 THEN REMOVE_ASSUM_TAC
1364 THEN REMOVE_ASSUM_TAC
1365 THEN REMOVE_ASSUM_TAC
1366 THEN REMOVE_ASSUM_TAC
1367 THEN REMOVE_ASSUM_TAC
1368 THEN REMOVE_ASSUM_TAC
1369 THEN REMOVE_ASSUM_TAC
1370 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `x':real^3->bool`[SET_RULE` (!t. t IN f ==> ~(x' = t) ==> DISJOINT x' t)
1371 <=> (!t. t IN f /\ ~(x' = t) ==> DISJOINT x' t)`])
1372 THEN FIND_ASSUM MP_TAC`~((x':real^3->bool) IN f)`
1373 THEN REWRITE_TAC[SET_RULE`~(x' IN f)<=> (!t. t IN f ==> ~(x' = t))`]
1374 THEN STRIP_TAC 
1375 THEN MP_TAC(SET_RULE` (!t. t IN f /\ ~(x' = t:real^3->bool) ==> DISJOINT x' t) /\
1376 (!t. t IN f ==> ~(x' = t:real^3->bool))==> (!t. t IN f ==> DISJOINT x' t)`)
1377 THEN ASM_REWRITE_TAC[DISJOINT]
1378 THEN SET_TAC[]);;
1379
1380 let BOUNDED_INTER_BALL=prove(`!x:real^3 V E.
1381 FAN(x,V,E) /\ conforming_fan (x,V,E)
1382 ==>(!f. f IN topological_component_yfan (x,V,E)
1383           ==> bounded (f INTER normball x r)) `,
1384 REPEAT STRIP_TAC
1385 THEN MATCH_MP_TAC BOUNDED_SUBSET
1386 THEN EXISTS_TAC`(normball x r):real^3->bool`
1387 THEN SIMP_TAC[GSYM ball_eq_normball;BOUNDED_BALL]
1388 THEN SET_TAC[]);;
1389
1390
1391 let OPEN_AFF_GT_3_1=prove(`!x v u w:real^3.
1392                             (~coplanar {x,v,u,w}) ==> open (aff_gt {x,v,u} {w})`,
1393
1394  GEOM_ORIGIN_TAC `x:real^3` THEN
1395  REPEAT STRIP_TAC THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC  THEN
1396 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
1397 THEN MRESAL_TAC coplanar_cross_dot[`vec 0:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`]
1398 THEN MP_TAC (REAL_ARITH`~((v cross u) dot w = &0)==> &0< (v cross u) dot w \/ &0< --((v cross u) dot w)`)
1399 THEN RESA_TAC
1400 THENL[POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
1401 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`v:real^3`;`u:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`;]
1402 THEN  REWRITE_TAC[REAL_ARITH`&0<A <=> A> &0`; OPEN_HALFSPACE_GT];
1403
1404 POP_ASSUM MP_TAC
1405 THEN REWRITE_TAC[GSYM DOT_LNEG]
1406 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
1407 THEN ASM_TAC
1408 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
1409 THEN REPEAT DISCH_TAC
1410 THEN MRESAL_TAC aff_gt_3_1_rep_cross_dot[`(vec 0):real^3`;`u:real^3`;`v:real^3`;`w:real^3`][VECTOR_ARITH`A- vec  0=A`;]
1411 THEN  REWRITE_TAC[ REAL_ARITH`&0<A <=> A> &0`;OPEN_HALFSPACE_GT;] ]);;
1412
1413
1414
1415
1416 let EQ_SET_THM=prove(`!f' f.{(f:A->B)  y| y IN f'}= {t|(?y. y IN f' /\ t = f y)}`,
1417 ONCE_REWRITE_TAC[EXTENSION] THEN REWRITE_TAC[IN_ELIM_THM]);;
1418
1419
1420 let fully_surrounded_imp_aff_gt_3_1_of_dart_eq_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds  y.
1421 FAN(x,V,E) 
1422 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1423 /\ fan80(x,V,E)
1424 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
1425 /\ y IN ds
1426 ==>  aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)} =
1427  aff_gt {x, pr2 y, pr3 y} {sigma_fan x V E  (pr2 y) (pr3 y)}`,
1428
1429 REPEAT STRIP_TAC
1430 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1431 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
1432 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
1433 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d1_fan(x,V,E)==> y IN d1_fan (x,V,E)`)
1434 THEN RESA_TAC
1435 THEN POP_ASSUM MP_TAC
1436 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1437 THEN STRIP_TAC
1438 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
1439 THEN ASM_SIMP_TAC[fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan]);;
1440
1441
1442
1443
1444
1445 let OPEN_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 V E f.
1446 FAN(x,V,E) /\ conforming_fan (x,V,E)/\ f IN topological_component_yfan (x,V,E)
1447           ==> open f`,
1448 REWRITE_TAC[conforming_fan;conforming_bijection_fan;conforming_half_space_fan]
1449 THEN REPEAT STRIP_TAC
1450 THEN POP_ASSUM MP_TAC
1451 THEN POP_ASSUM MP_TAC
1452 THEN POP_ASSUM MP_TAC
1453 THEN POP_ASSUM MP_TAC
1454 THEN POP_ASSUM MP_TAC
1455 THEN DISCH_THEN(LABEL_TAC"EM")
1456 THEN DISCH_THEN(LABEL_TAC"YEU")
1457 THEN REPEAT STRIP_TAC
1458 THEN REMOVE_THEN "EM" (fun th-> MRESAL1_TAC th`f:real^3->bool`[EXISTS_UNIQUE])
1459 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3->bool`)
1460 THEN MATCH_MP_TAC OPEN_INTERS
1461 THEN ASM_REWRITE_TAC[IN_ELIM_THM;]
1462 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`]
1463 THEN MRESAL_TAC FINITE_IMAGE[`(\y:real^3#real^3#real^3#real^3. aff_gt {x:real^3, pr2 y, pr3 y} {pr3 (f1_fan x V E y)})`;`f':real^3#real^3#real^3#real^3->bool`][IMAGE;EQ_SET_THM]
1464 THEN REPEAT STRIP_TAC
1465 THEN ASM_REWRITE_TAC[]
1466 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_dart_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`]
1467 THEN MATCH_MP_TAC OPEN_AFF_GT_3_1
1468 THEN MRESA_TAC properties_of_elements_in_face_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1469 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
1470 THEN REWRITE_TAC[fan80]
1471 THEN DISCH_TAC
1472 THEN POP_ASSUM (fun th -> MRESA_TAC th [`(pr2 y):real^3`;`(pr3 y):real^3`] )
1473 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(pr3 y):real^3`]
1474 THEN POP_ASSUM MP_TAC
1475 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(pr3 y):real^3`]
1476 THEN DISCH_TAC
1477 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(sigma_fan x V E (pr2 y) (pr3 y)):real^3`]
1478 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E (pr2 y) (pr3 y)):real^3`;`(pr2 y):real^3`;`(pr3 y):real^3`;]
1479 THEN POP_ASSUM MP_TAC
1480 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1481 THEN RESA_TAC
1482 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
1483 THEN ASM_REWRITE_TAC[]);;
1484
1485
1486 let OPEN_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL=prove(`!x:real^3 V E f.
1487 FAN(x,V,E) /\ conforming_fan (x,V,E)/\ f IN topological_component_yfan (x,V,E)
1488           ==> open (f INTER normball x r)`,
1489 REPEAT STRIP_TAC
1490 THEN MATCH_MP_TAC OPEN_INTER
1491 THEN ASM_SIMP_TAC[GSYM ball_eq_normball;OPEN_BALL;]
1492 THEN ASM_MESON_TAC[OPEN_TOPOLOGICAL_COMPONENT_YFAN]);;
1493
1494
1495 let MEASURABLE_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL=prove(`!x:real^3 V E r f.
1496 FAN(x,V,E) /\ conforming_fan (x,V,E) /\ f IN topological_component_yfan (x,V,E)
1497           ==> measurable (f INTER normball x r) `,
1498
1499 REPEAT STRIP_TAC
1500 THEN MATCH_MP_TAC MEASURABLE_OPEN
1501 THEN ASM_MESON_TAC[OPEN_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL;BOUNDED_INTER_BALL]);;
1502
1503
1504
1505 let RADIAL_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 V E r f.
1506 FAN(x,V,E) /\ r> &0 /\ conforming_fan (x,V,E) /\ f IN topological_component_yfan (x,V,E) 
1507           ==> radial_norm r x (f INTER normball x r) `,
1508
1509 REWRITE_TAC[conforming_fan;conforming_bijection_fan;conforming_half_space_fan]
1510 THEN REPEAT STRIP_TAC
1511 THEN POP_ASSUM MP_TAC
1512 THEN POP_ASSUM MP_TAC
1513 THEN POP_ASSUM MP_TAC
1514 THEN POP_ASSUM MP_TAC
1515 THEN POP_ASSUM MP_TAC
1516 THEN DISCH_THEN(LABEL_TAC"EM")
1517 THEN DISCH_THEN(LABEL_TAC"YEU")
1518 THEN REPEAT STRIP_TAC
1519 THEN REMOVE_THEN "EM" (fun th-> MRESAL1_TAC th`f:real^3->bool`[EXISTS_UNIQUE])
1520 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3->bool`)
1521 THEN MATCH_MP_TAC RADIAL_INTERS
1522 THEN ASM_REWRITE_TAC[IN_ELIM_THM;]
1523 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`]
1524 THEN MRESAL_TAC FINITE_IMAGE[`(\y:real^3#real^3#real^3#real^3. aff_gt {x:real^3, pr2 y, pr3 y} {pr3 (f1_fan x V E y)})`;`f':real^3#real^3#real^3#real^3->bool`][IMAGE;EQ_SET_THM]
1525 THEN REPEAT STRIP_TAC
1526 THEN ASM_REWRITE_TAC[]
1527 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_dart_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`]
1528 THEN MATCH_MP_TAC RADIAL_AFF_GT_3_1
1529 THEN ASM_REWRITE_TAC[]
1530 THEN MRESA_TAC properties_of_elements_in_face_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1531 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
1532 THEN REWRITE_TAC[fan80]
1533 THEN DISCH_TAC
1534 THEN POP_ASSUM (fun th -> MRESA_TAC th [`(pr2 y):real^3`;`(pr3 y):real^3`] )
1535 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(pr3 y):real^3`]
1536 THEN POP_ASSUM MP_TAC
1537 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(pr3 y):real^3`]
1538 THEN DISCH_TAC
1539 THEN MRESA_TAC properties_of_set_of_edge_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`(pr2 y):real^3`;`(sigma_fan x V E (pr2 y) (pr3 y)):real^3`]
1540 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E (pr2 y) (pr3 y)):real^3`;`(pr2 y):real^3`;`(pr3 y):real^3`;]
1541 THEN POP_ASSUM MP_TAC
1542 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1543 THEN RESA_TAC
1544 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
1545 THEN ASM_REWRITE_TAC[]
1546 THEN ASM_MESON_TAC[notcoplanar_disjoints]);;
1547
1548
1549 let FINITE_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
1550 FAN(x,V,E) 
1551 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1552 /\ fan80(x,V,E)
1553 ==> FINITE (topological_component_yfan (x,V,E))`,
1554 REPEAT STRIP_TAC
1555 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V,E)`
1556 THEN MRESAL_TAC FINITE_IMAGE[`(\f:real^3#real^3#real^3#real^3->bool. dartset_leads_into_fan x V E f)`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`][IMAGE;]
1557 THEN POP_ASSUM MP_TAC
1558 THEN SUBGOAL_THEN`{y | ?f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
1559           y = dartset_leads_into_fan x V E f} =topological_component_yfan (x:real^3,V,E)` (fun th-> REWRITE_TAC[th])
1560 THEN ONCE_REWRITE_TAC[EXTENSION]
1561 THEN REWRITE_TAC[IN_ELIM_THM]
1562 THEN GEN_TAC THEN EQ_TAC
1563 THENL[
1564 REPEAT STRIP_TAC
1565 THEN ASM_SIMP_TAC[dartset_leads_into_is_topological_component_yfan];
1566
1567 REPEAT STRIP_TAC
1568 THEN ONCE_REWRITE_TAC[SET_RULE`A=B<=> B=A`]
1569 THEN ASM_SIMP_TAC[version_JUTSTKG]]);;
1570
1571
1572 let SUM_SOL_TOPOLOGICAL_COMPONENT_YFAN_EQ_SOL_UNIONS=prove(`!x:real^3 V E.
1573 FAN(x,V,E) /\ conforming_fan (x,V,E)
1574 ==>  sol x (UNIONS (topological_component_yfan (x,V,E)))=sum (topological_component_yfan (x,V,E)) (\f. sol x f)`,
1575
1576 REPEAT STRIP_TAC
1577 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan]; THEN ASSUME_TAC th THEN STRIP_TAC)
1578 THEN MATCH_MP_TAC SOL_UNIONS
1579 THEN MRESAL_TAC FINITE_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;][SET_RULE`(!s. P s==> Q s /\ R s)<=>(!s. P s==> Q s) /\(!s. P s==> R s)`]
1580 THEN EXISTS_TAC`&1`
1581 THEN MRESAL_TAC RADIAL_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`&1:real`][REAL_ARITH`&1> &0`]
1582 THEN MRESA_TAC MEASURABLE_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`&1:real`]
1583 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
1584 THEN REPEAT STRIP_TAC
1585 THEN POP_ASSUM MP_TAC
1586 THEN ASM_REWRITE_TAC[DISJOINT;CONNECTED_COMPONENT_NONOVERLAP]);;
1587
1588 let UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN=prove(`!x:real^3 V E.
1589   UNIONS (topological_component_yfan (x,V,E))= yfan(x,V,E)`,
1590  ONCE_REWRITE_TAC[EXTENSION]
1591 THEN  REWRITE_TAC[UNIONS;topological_component_yfan;IN_ELIM_THM]
1592 THEN REPEAT STRIP_TAC
1593 THEN EQ_TAC
1594 THENL[
1595 REPEAT STRIP_TAC
1596 THEN POP_ASSUM MP_TAC
1597 THEN RESA_TAC
1598 THEN MATCH_MP_TAC(SET_RULE`!x B A. x IN B /\ B SUBSET A==> x IN A`)
1599 THEN EXISTS_TAC`connected_component (yfan (x:real^3,V:real^3->bool,E)) (y:real^3)`
1600 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_SUBSET];
1601 STRIP_TAC
1602 THEN EXISTS_TAC`connected_component (yfan (x,V:real^3->bool,E)) x'`
1603 THEN STRIP_TAC
1604 THENL[EXISTS_TAC`x':real^3`
1605 THEN ASM_REWRITE_TAC[];
1606 ASM_REWRITE_TAC[IN;CONNECTED_COMPONENT_REFL_EQ]]]);;
1607
1608
1609 let SUM_SOL_IN_FACE_SET_EQ_4PI=prove(`!x:real^3 V E.
1610 FAN(x,V,E) /\ conforming_fan (x,V,E)
1611 ==>  sum (face_set (hypermap1_of_fanx (x,V,E))) (\f. sol x (dartset_leads_into_fan x V E f))= &4 * pi`,
1612
1613 REPEAT STRIP_TAC
1614 THEN MRESA_TAC SUM_SOL_IN_TOPOLOGICAL_COMPONENET_EQ_IN_FACE_SET[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1615 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
1616 THEN MRESA_TAC SUM_SOL_TOPOLOGICAL_COMPONENT_YFAN_EQ_SOL_UNIONS[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1617 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN])
1618 THEN ASM_SIMP_TAC[SOLID_ANGLE_YFAN]);;
1619
1620
1621
1622
1623 let DART_EQ_UNIONS_FACE_SET_NODE_SET_EDGE_SET=prove(`!(H:(A)hypermap). dart H = UNIONS (face_set H)/\ dart H = UNIONS (node_set H)/\ dart H = UNIONS (edge_set H)`,
1624   GEN_TAC THEN REWRITE_TAC[face_set;node_set;edge_set]
1625 THEN REPEAT STRIP_TAC
1626 THEN MATCH_MP_TAC lemma_partition
1627 THEN REWRITE_TAC[hypermap_lemma]);;
1628
1629
1630
1631 let FINITE_NODE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
1632 ds IN node_set(hypermap1_of_fanx (x,V,E))
1633 ==> FINITE ds `,
1634 REWRITE_TAC[node_set;set_of_orbits;IN_ELIM_THM]
1635 THEN REPEAT STRIP_TAC
1636 THEN ASM_REWRITE_TAC[GSYM node;NODE_FINITE]);;
1637
1638
1639 let lemma_properties_of_node_set_fan=prove(`!x V E f y y1. FAN (x,V,E) /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)/\
1640  f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1641 /\ y IN f /\ y1 IN f
1642 ==> pr2 y = pr2 y1 `,
1643
1644 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1645 THEN REPEAT STRIP_TAC
1646 THEN POP_ASSUM MP_TAC
1647 THEN POP_ASSUM MP_TAC
1648 THEN ASM_REWRITE_TAC[]
1649 THEN POP_ASSUM MP_TAC
1650 THEN POP_ASSUM MP_TAC
1651 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
1652 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1653 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
1654 THEN REPEAT STRIP_TAC
1655 THEN POP_ASSUM MP_TAC
1656 THEN POP_ASSUM MP_TAC
1657 THEN POP_ASSUM MP_TAC
1658 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`;]
1659 THEN REMOVE_ASSUM_TAC
1660 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
1661 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n':num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`;]
1662 THEN REMOVE_ASSUM_TAC
1663 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
1664 THEN FIND_ASSUM MP_TAC `x' IN d1_fan (x:real^3,V,E)`
1665 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1666 THEN RESA_TAC
1667 THEN MRESA_TAC power_n_fan[`n:num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
1668 THEN MRESA_TAC power_n_fan[`n':num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
1669 THEN REPEAT STRIP_TAC
1670 THEN ASM_REWRITE_TAC[pr2]);;
1671
1672
1673
1674
1675 let lemma_node_identity_fan=prove(`!x V E f y.  f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1676  /\ y IN f 
1677 ==> f= node (hypermap1_of_fanx (x,V,E)) y`,
1678 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1679 THEN REPEAT STRIP_TAC
1680 THEN POP_ASSUM MP_TAC
1681 THEN ASM_REWRITE_TAC[node]
1682 THEN MESON_TAC[lemma_orbit_identity; hypermap_lemma]);;
1683
1684
1685 let node_subset_dart_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
1686 FAN(x,V,E)
1687 /\ ds IN node_set(hypermap1_of_fanx (x,V,E))
1688 ==> ds SUBSET d_fan (x,V,E)`,
1689 REPEAT GEN_TAC THEN STRIP_TAC
1690 THEN MRESA_TAC lemma_node_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
1691 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
1692 THEN MRESA_TAC lemma_node_subset[`hypermap1_of_fanx(x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`]);;
1693
1694
1695
1696
1697
1698
1699 let rep_node_set_fan=prove(`!x V E f y. FAN (x,V,E) 
1700 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1701 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1702  /\ y IN f 
1703 ==> f = {z| ?i. i >= 0 /\ z=(x, pr2 y,power_map_points (sigma_fan) x V E (pr2 y) (pr3 y) i, power_map_points (sigma_fan) x V E (pr2 y) (pr3 y) (SUC i))}`,
1704
1705  REPEAT STRIP_TAC
1706 THEN ASM_SIMP_TAC[lemma_node_identity_fan;]
1707 THEN REWRITE_TAC[node;orbit_map;EXTENSION;IN_ELIM_THM]
1708 THEN MRESA_TAC node_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
1709 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1710 THEN MP_TAC(SET_RULE`y IN (f:real^3#real^3#real^3#real^3->bool) /\ f SUBSET d_fan(x,V,E)==> y IN d_fan(x,V,E)`)
1711 THEN RESA_TAC
1712 THEN POP_ASSUM (fun th->  MP_TAC th THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN ASSUME_TAC th)
1713 THEN STRIP_TAC
1714 THEN ASM_REWRITE_TAC[pr2;pr3]
1715 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
1716 THEN GEN_TAC
1717 THEN EQ_TAC
1718 THENL[
1719 STRIP_TAC
1720 THEN POP_ASSUM MP_TAC
1721 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`;]
1722 THEN REMOVE_ASSUM_TAC
1723 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
1724 THEN MRESA_TAC power_n_fan[`n:num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
1725 THEN RESA_TAC
1726 THEN EXISTS_TAC`n:num`
1727 THEN ASM_SIMP_TAC[];
1728
1729 REPEAT STRIP_TAC
1730 THEN EXISTS_TAC`i:num`
1731 THEN ASM_REWRITE_TAC[]
1732 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`i:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`;]
1733 THEN REMOVE_ASSUM_TAC
1734 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
1735 THEN MRESA_TAC power_n_fan[`i:num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
1736 THEN RESA_TAC]);;
1737
1738
1739 let properties_of_elements_in_node_fully_surroundedfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
1740 FAN(x,V,E)
1741 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1742 /\ ds IN node_set(hypermap1_of_fanx (x,V,E))
1743 /\ y IN ds
1744 ==> {pr2 y, pr3 y} IN E`,
1745
1746 REPEAT GEN_TAC THEN STRIP_TAC
1747 THEN MRESA_TAC node_subset_dart_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
1748 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d_fan (x,V,E)==> y IN d_fan (x,V,E)`)
1749 THEN RESA_TAC
1750 THEN POP_ASSUM MP_TAC 
1751 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
1752 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1753 THEN STRIP_TAC
1754 THEN ASM_REWRITE_TAC[pr2;pr3]);;
1755
1756
1757 let lemma_card_node_eq_set_of_orbits=prove(`!x V E f y. FAN (x,V,E) 
1758 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1759 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1760  /\ y IN f 
1761 ==> CARD {z| ?i. i >= 0 /\ z=(x, pr2 y,power_map_points (sigma_fan) x V E (pr2 y) (pr3 y) i, power_map_points (sigma_fan) x V E (pr2 y) (pr3 y) (SUC i))}= CARD( set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) ((pr2 y):real^3) ((pr3 y):real^3)
1762 )`,
1763
1764  REPEAT STRIP_TAC
1765 THEN MATCH_MP_TAC BIJECTIONS_CARD_EQ
1766 THEN EXISTS_TAC`pr3:real^3#real^3#real^3#real^3->real^3`
1767 THEN EXISTS_TAC`(\z:real^3. x,pr2 y, z, sigma_fan x V E (pr2 y) z)`
1768 THEN MRESA_TAC properties_of_elements_in_node_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1769 THEN MP_TAC (ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(pr2 y):real^3`;` ((pr3 y):real^3)`]FINITE_ORBITS_SIGMA_FAN) 
1770 THEN RESA_TAC
1771 THEN REWRITE_TAC[set_of_orbits_points_fan;IN_ELIM_THM; pr3]
1772 THEN REWRITE_TAC[GSYM pr3]
1773 THEN STRIP_TAC
1774 THENL[
1775 STRIP_TAC THEN STRIP_TAC THEN ASM_REWRITE_TAC[ARITH_RULE`0<= i <=> i>=0`;pr3;power_map_points]
1776 THEN EXISTS_TAC`i:num`
1777 THEN ASM_REWRITE_TAC[];
1778
1779 STRIP_TAC THEN STRIP_TAC THEN ASM_REWRITE_TAC[ARITH_RULE`i>=0 <=> 0<=i`;power_map_points]
1780 THEN EXISTS_TAC`i:num`
1781 THEN ASM_REWRITE_TAC[]]);;
1782
1783
1784 let lemma_card_node_eq_set_of_edge=prove(`!x V E f y. FAN (x,V,E) /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1785 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1) /\ y IN f 
1786 ==>   CARD (set_of_edge (pr2 y) V E)=CARD f `,
1787
1788 REPEAT STRIP_TAC
1789 THEN MRESA_TAC rep_node_set_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1790 THEN MRESA_TAC lemma_card_node_eq_set_of_orbits[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1791 THEN MRESA_TAC properties_of_elements_in_node_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1792 THEN MRESA_TAC CARD_SET_OF_ORBITS_POINTS_FAN[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(pr2 y):real^3`;` ((pr3 y):real^3)`]);;
1793
1794
1795
1796 let mono_cyclic_power_sigma_fan=prove(`!x V E v u i j. FAN(x,V,E)/\ {v,u} IN E /\
1797            i IN 0..CARD (set_of_edge (v) V E) - 1 /\
1798            j IN 0..CARD (set_of_edge (v) V E) - 1 /\
1799            power_map_points sigma_fan x V E (v) (u) i =
1800            power_map_points sigma_fan x V E (v) (u) j
1801            ==> i = j`,
1802
1803 REWRITE_TAC[IN_NUMSEG_0]
1804 THEN REPEAT STRIP_TAC 
1805 THEN DISJ_CASES_TAC(ARITH_RULE`i=j \/ i< j\/ j< i:num`)
1806 THENL[
1807 ASM_REWRITE_TAC[];
1808
1809 POP_ASSUM MP_TAC
1810 THEN STRIP_TAC
1811 THENL[
1812 MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1813 ` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;`j:num`;`i:num`]cyclic_power_sigma_fan) 
1814 THEN RESA_TAC
1815 THEN ASM_TAC
1816 THEN ARITH_TAC;
1817
1818 MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1819 ` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;`i:num`;`j:num`]cyclic_power_sigma_fan) 
1820 THEN RESA_TAC
1821 THEN ASM_TAC
1822 THEN ARITH_TAC]]);;
1823
1824
1825 let SUM_AZIM_FAN_OF_NODE_EQ_SUM_AZIM_I_FAN=prove(`!x V E f y. FAN (x,V,E) /\ f IN node_set (hypermap1_of_fanx (x,V,E)) /\ y IN f /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1826                   ==> sum (0..CARD (set_of_edge (pr2 y) V E) - 1) (\i. azim_i_fan x V E (pr2 y) (pr3 y) i) = 
1827                       sum f (\y1. azim_fan x V E (pr2 y1) (pr3 y1))`,
1828
1829 REPEAT STRIP_TAC
1830 THEN POP_ASSUM MP_TAC
1831 THEN DISCH_THEN(LABEL_TAC "EM")
1832 THEN MRESA_TAC rep_node_set_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1833 THEN SUBGOAL_THEN`(!x' y1.
1834            x' IN set_of_orbits_points_fan x V E (pr2 y) (pr3 y) /\
1835            y1 IN set_of_orbits_points_fan x V E (pr2 y) (pr3 y) /\
1836            x,pr2 y,x',sigma_fan x V E (pr2 y) x' =
1837            x,pr2 y,y1,sigma_fan x V E (pr2 y) y1
1838            ==> x' = y1)`ASSUME_TAC
1839 THENL[MESON_TAC[EQ_PAIR_4];
1840
1841  MRESAL_TAC SUM_IMAGE[`(\z:real^3. x,pr2 y, z, sigma_fan x V E (pr2 y) z)`;`(\y. azim_fan x V E (pr2 y) (pr3 y))`;`set_of_orbits_points_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) ((pr2 y):real^3) ((pr3 y):real^3)`][IMAGE]
1842 THEN POP_ASSUM MP_TAC
1843 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[set_of_orbits_points_fan]
1844 THEN REWRITE_TAC[IN_ELIM_THM;SET_RULE`{y' | ?x'. (?i. 0 <= i /\
1845                  x' = power_map_points sigma_fan x V E (pr2 y) (pr3 y) i) /\
1846             y' = x,pr2 y,x',sigma_fan x V E (pr2 y) x'} = {y' | ?i. 0 <= i /\
1847             y' = x,pr2 y,power_map_points sigma_fan x V E (pr2 y) (pr3 y) i,sigma_fan x V E (pr2 y) (power_map_points sigma_fan x V E (pr2 y) (pr3 y) i)}`;power_map_points;ARITH_RULE`i>= 0<=> 0<= i`]
1848 THEN RESA_TAC
1849 THEN REWRITE_TAC[o_DEF;pr2;pr3]
1850 THEN ASM_REWRITE_TAC[GSYM pr2; GSYM pr3;azim_fan;azim_i_fan]
1851 THEN MRESA_TAC properties_of_elements_in_node_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1852 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` ((pr3 y):real^3)`;` ((pr2 y):real^3)`]
1853 THEN REMOVE_ASSUM_TAC
1854 THEN USE_THEN "EM"(fun th-> MP_TAC(ISPEC `(pr2 y):real^3` th) THEN POP_ASSUM (fun th-> REWRITE_TAC[th]) THEN RESA_TAC)
1855
1856 THEN MRESA_TAC SIMP_ORBITS_POINTS_FAN[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` ((pr2 y):real^3)`;` ((pr3 y):real^3)`] 
1857 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1858 THEN MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1859 ` (E:(real^3->bool)->bool)`;` ((pr2 y):real^3)`;` ((pr3 y):real^3)`]mono_cyclic_power_sigma_fan
1860
1861 THEN RESA_TAC
1862 THEN MRESAL_TAC SUM_IMAGE[`(\i:num. power_map_points sigma_fan x V E (pr2 y) (pr3 y) i)`;`(\x'. azim x (pr2 y) x' (sigma_fan x V E (pr2 y) x'))`;`0..CARD (set_of_edge (pr2 y) (V:real^3->bool) E) - 1`][IMAGE;o_DEF;power_map_points]
1863 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;IN_NUMSEG_0])
1864 THEN MP_TAC(ARITH_RULE`CARD (set_of_edge (pr2 y) V E) > 1==> (!i. i <= CARD (set_of_edge (pr2 y) V E) - 1<=>   i < CARD (set_of_edge (pr2 y) V E)) `)
1865 THEN RESA_TAC
1866 THEN SUBGOAL_THEN`{y1 | ?i. i < CARD (set_of_edge (pr2 y) V E) /\
1867           y1 = power_map_points sigma_fan x V E (pr2 y) (pr3 y) i}
1868  =
1869  {power_map_points sigma_fan x V E (pr2 y) (pr3 y) i | i | i <
1870                                                            CARD
1871                                                            (set_of_edge
1872                                                             (pr2 y)
1873                                                             V
1874                                                            E)}
1875 `(fun th-> REWRITE_TAC[th])
1876 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]]);;
1877
1878 let exists_point_in_node=prove(`!x V E f. f IN node_set (hypermap1_of_fanx (x,V,E))
1879 ==> ?y. y IN f`,
1880 REWRITE_TAC[node_set;set_of_orbits;IN_ELIM_THM] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM]
1881 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
1882 THEN EXISTS_TAC`0`
1883 THEN REWRITE_TAC[POWER;ARITH_RULE`0>=0`;I_DEF]);;
1884
1885
1886 let SUM_AZIM_FAN_OF_NODE_EQ_2PI_I_FAN=prove(`!x V E f. FAN (x,V,E) /\ f IN node_set (hypermap1_of_fanx (x,V,E)) /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1887                   ==> 
1888                       sum f (\y. azim_fan x V E (pr2 y) (pr3 y))= &2 * pi`,
1889
1890
1891 REPEAT STRIP_TAC
1892 THEN POP_ASSUM MP_TAC
1893 THEN DISCH_THEN(LABEL_TAC"EM")
1894 THEN MRESA_TAC exists_point_in_node[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;]
1895 THEN MRESA_TAC SUM_AZIM_FAN_OF_NODE_EQ_SUM_AZIM_I_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1896 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
1897 THEN SUBGOAL_THEN`(\i. azim_i_fan x V E (pr2 y) (pr3 y) i)= azim_i_fan x V E (pr2 y) (pr3 y) `(fun th-> REWRITE_TAC[th])
1898 THEN REWRITE_TAC[FUN_EQ_THM]
1899 THEN MATCH_MP_TAC SUM_AZIMS_EQ_2PI_FAN
1900 THEN ASM_REWRITE_TAC[]
1901 THEN MRESA_TAC properties_of_elements_in_node_fully_surroundedfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`; `y:real^3#real^3#real^3#real^3`]
1902 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` ((pr3 y):real^3)`;` ((pr2 y):real^3)`]
1903 THEN REMOVE_ASSUM_TAC
1904 THEN USE_THEN "EM"(fun th-> MP_TAC(ISPEC `(pr2 y):real^3` th) THEN POP_ASSUM (fun th-> REWRITE_TAC[th]) THEN RESA_TAC)
1905 THEN ASM_REWRITE_TAC[ARITH_RULE`1<A<=> A>1`]
1906 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge (pr2 y) V E = {(pr3 y):real^3})\/  ~(set_of_edge (pr2 y) V E = {pr3 y})`)
1907 THENL[
1908 MRESA_TAC CARD_SING[`(pr3 y):real^3`; `(set_of_edge (pr2 y) V E):real^3->bool`]
1909 THEN FIND_ASSUM MP_TAC `CARD ((set_of_edge (pr2 y) V E):real^3->bool) >1`
1910 THEN POP_ASSUM MP_TAC
1911 THEN POP_ASSUM (fun TH-> REWRITE_TAC[TH])
1912 THEN ARITH_TAC;
1913 ASM_REWRITE_TAC[]]);;
1914
1915
1916
1917
1918 let SUM_CARD_FACE_NODE_DART_FAN=prove(`!x V E.
1919      FAN (x,V,E) /\ conforming_fan (x,V,E)
1920      ==> &2 * &(CARD (face_set (hypermap1_of_fanx (x,V,E))))  +
1921  &2 * &(CARD (node_set (hypermap1_of_fanx (x,V,E))))  -
1922  &(CARD (dart (hypermap1_of_fanx (x,V,E)))) = &4 `,
1923
1924 REPEAT STRIP_TAC
1925 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan] THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) THEN REWRITE_TAC[SET_RULE`(!s. P s ==>  Q s /\ Q1 s/\ Q2 s) <=> (!s. P s ==>  Q s ) /\ (!s. P s ==>  Q1 s) /\ (!s. P s ==>  Q2 s)`]
1926  THEN ASSUME_TAC th THEN STRIP_TAC)
1927 THEN MRESA_TAC SUM_SOL_IN_FACE_SET_EQ_4PI[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1928 THEN POP_ASSUM MP_TAC
1929 THEN MRESA_TAC SUM_EQ[`(\f. sol x (dartset_leads_into_fan (x:real^3) V E f))`;`(\f. (&2 * pi + sum f (\y. azim_fan x V E (pr2 y) (pr3 (y:real^3#real^3#real^3#real^3)) - pi)))`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
1930 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V,E)`
1931 THEN MRESA_TAC SUM_ADD[`(\f:real^3#real^3#real^3#real^3->bool. &2 * pi)`;`(\f. sum f (\y. azim_fan x V E (pr2 y) (pr3 (y:real^3#real^3#real^3#real^3)) - pi))`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
1932 THEN MRESA_TAC SUM_CONST[`&2 * pi`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
1933 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;]
1934 THEN SUBGOAL_THEN`(!t1 t2 y.
1935            t1 IN face_set (hypermap1_of_fanx (x,V,E)) /\
1936            t2 IN face_set (hypermap1_of_fanx (x,V,E)) /\
1937            ~(t1 = t2) /\
1938            y IN t1 /\
1939            y IN t2
1940            ==> azim_fan x V E (pr2 y) (pr3 y) - pi = &0)` ASSUME_TAC
1941 THENL[
1942  REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
1943 THEN REPEAT STRIP_TAC
1944 THEN POP_ASSUM MP_TAC
1945 THEN POP_ASSUM MP_TAC
1946 THEN POP_ASSUM MP_TAC
1947 THEN ASM_REWRITE_TAC[]
1948 THEN DISCH_THEN (LABEL_TAC "EM")
1949 THEN REPEAT STRIP_TAC
1950 THEN REMOVE_THEN "EM" MP_TAC
1951 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
1952 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face];
1953
1954
1955 MRESA_TAC SUM_UNIONS_NONZERO[` (\y. azim_fan x (V:real^3->bool) E (pr2 y) (pr3 (y:real^3#real^3#real^3#real^3)) - pi)`;`face_set (hypermap1_of_fanx (x:real^3,V:real^3->bool,E))`]
1956 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1957 THEN MRESA_TAC SUM_SUB[`(\y. azim_fan x V E (pr2 y) (pr3 (y:real^3#real^3#real^3#real^3)))`;`(\f:real^3#real^3#real^3#real^3. pi)`;`(UNIONS (node_set (hypermap1_of_fanx (x:real^3,V,E))))`]
1958 THEN POP_ASSUM MP_TAC
1959 THEN MRESA1_TAC DART_EQ_UNIONS_FACE_SET_NODE_SET_EDGE_SET`(hypermap1_of_fanx (x:real^3,V:real^3->bool,E))` 
1960 THEN REMOVE_ASSUM_TAC
1961 THEN POP_ASSUM (fun th-> MRESA_TAC SUM_CONST[`pi`;`(UNIONS (node_set (hypermap1_of_fanx (x:real^3,V,E))))`]
1962 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th;hypermap_lemma] THEN STRIP_TAC THEN POP_ASSUM (fun th -> REWRITE_TAC[th]) THEN REWRITE_TAC[th] THEN MP_TAC th THEN ASM_REWRITE_TAC[] THEN STRIP_TAC THEN ASSUME_TAC th THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC "MA"))
1963 THEN RESA_TAC
1964 THEN SUBGOAL_THEN`(!t1 t2 y.
1965            t1 IN node_set (hypermap1_of_fanx (x,V,E)) /\
1966            t2 IN node_set (hypermap1_of_fanx (x,V,E)) /\
1967            ~(t1 = t2) /\
1968            y IN t1 /\
1969            y IN t2
1970            ==> azim_fan x V E (pr2 y) (pr3 y) = &0)` ASSUME_TAC
1971 THENL[
1972  REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1973 THEN REPEAT STRIP_TAC
1974 THEN POP_ASSUM MP_TAC
1975 THEN POP_ASSUM MP_TAC
1976 THEN POP_ASSUM MP_TAC
1977 THEN ASM_REWRITE_TAC[]
1978 THEN DISCH_THEN (LABEL_TAC "EM")
1979 THEN REPEAT STRIP_TAC
1980 THEN REMOVE_THEN "EM" MP_TAC
1981 THEN MRESAL_TAC lemma_node_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][node]
1982 THEN MRESAL_TAC lemma_node_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][node];
1983
1984 MRESAL_TAC SUM_UNIONS_NONZERO[` (\y. azim_fan x (V:real^3->bool) E (pr2 y) (pr3 (y:real^3#real^3#real^3#real^3)))`;`node_set (hypermap1_of_fanx (x:real^3,V:real^3->bool,E))`][FINITE_NODE_FAN]
1985 THEN MRESA_TAC SUM_AZIM_FAN_OF_NODE_EQ_2PI_I_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
1986 THEN MRESA_TAC SUM_EQ[`(\t:real^3#real^3#real^3#real^3->bool. sum t (\y. azim_fan x V E (pr2 y) (pr3 y)))`;`(\t:real^3#real^3#real^3#real^3->bool. &2 * pi)`;`(node_set (hypermap1_of_fanx (x:real^3,V,E)))`]
1987 THEN MRESA_TAC SUM_CONST[`&2 * pi`;`node_set (hypermap1_of_fanx (x:real^3,V,E))`]
1988 THEN REMOVE_THEN "MA"(fun th-> REWRITE_TAC[SYM th])
1989 THEN RESA_TAC
1990 THEN ONCE_REWRITE_TAC[REAL_ARITH`A= A * &1`]
1991 THEN MP_TAC(REAL_ARITH`&0< pi==> ~(pi= &0)`)
1992 THEN ASM_REWRITE_TAC[PI_WORKS]
1993 THEN STRIP_TAC
1994 THEN MRESA1_TAC REAL_MUL_RINV`pi:real`
1995 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;REAL_ARITH`(A+B-C)*D*E=(A*D+B*D-C*D)*E/\ (A*B)*C=B*A*C`;])
1996 THEN REAL_ARITH_TAC]]);;
1997
1998
1999
2000
2001
2002
2003
2004
2005 let nonconformin_fan_imp_n_fan_ge0=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2006 FAN(x,V,E)
2007  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2008 /\ fan80(x,V,E)
2009 /\ ~(conforming_fan (x,V,E))
2010 ==> N_FAN(x,V,E)> 0`,
2011
2012 REPEAT STRIP_TAC
2013 THEN POP_ASSUM MP_TAC
2014 THEN ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
2015 THEN ASM_SIMP_TAC[ARITH_RULE`~(A>0)<=> A=0`;DWFBRQY]);;
2016
2017
2018 let nonconformin_fan_imp_exist_face_gt_3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2019 FAN(x,V,E)
2020  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2021 /\ fan80(x,V,E)
2022 /\ ~(conforming_fan (x,V,E))
2023 ==> ?ds. ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3`,
2024
2025 REPEAT STRIP_TAC
2026 THEN MRESA_TAC nonconformin_fan_imp_n_fan_ge0[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
2027 THEN POP_ASSUM MP_TAC
2028 THEN REWRITE_TAC[N_FAN]
2029 THEN DISJ_CASES_TAC(SET_RULE`(!f. f IN face_set (hypermap1_of_fanx (x,V,E))==> CARD f -3=0)\/ ~(!f. f IN face_set (hypermap1_of_fanx (x:real^3,V,E))==> CARD f -3=0)`)
2030 THENL[
2031 ASM_SIMP_TAC[NSUM_EQ_0] THEN ARITH_TAC;
2032 POP_ASSUM MP_TAC 
2033 THEN REWRITE_TAC[NOT_FORALL_THM;NOT_IMP;ARITH_RULE`~(A=0)<=> A>0`]
2034 THEN REPEAT STRIP_TAC
2035 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
2036 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
2037 THEN ASM_REWRITE_TAC[]
2038 THEN ASM_TAC
2039 THEN ARITH_TAC]);;
2040
2041
2042 let exists_face_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2043  ds IN face_set(hypermap1_of_fanx (x,V,E)) 
2044 ==> ?f1. f1 IN ds `,
2045
2046 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
2047 THEN REPEAT STRIP_TAC
2048 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
2049 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
2050 THEN EXISTS_TAC`0`
2051 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
2052
2053
2054 let exists_node_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2055  ds IN node_set(hypermap1_of_fanx (x,V,E)) 
2056 ==> ?f1. f1 IN ds `,
2057
2058 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
2059 THEN REPEAT STRIP_TAC
2060 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
2061 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
2062 THEN EXISTS_TAC`0`
2063 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
2064
2065
2066
2067 let identity_face_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1.
2068  ds IN face_set(hypermap1_of_fanx (x,V,E)) 
2069 /\ f1 IN ds 
2070 ==> ds= face (hypermap1_of_fanx (x,V,E))  f1 `,
2071 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
2072 THEN REPEAT STRIP_TAC
2073 THEN POP_ASSUM MP_TAC
2074 THEN ASM_SIMP_TAC[GSYM face;]
2075 THEN MESON_TAC[lemma_face_identity]);;
2076
2077
2078 let identity_node_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1.
2079  ds IN node_set(hypermap1_of_fanx (x,V,E)) 
2080 /\ f1 IN ds 
2081 ==> ds= node (hypermap1_of_fanx (x,V,E))  f1 `,
2082 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
2083 THEN REPEAT STRIP_TAC
2084 THEN POP_ASSUM MP_TAC
2085 THEN ASM_SIMP_TAC[GSYM node;]
2086 THEN MESON_TAC[lemma_node_identity]);;
2087
2088
2089
2090
2091 let condition_f1_eq_fan=prove(`!x V E v u w.
2092 FAN(x,V,E)
2093 /\ {u,w} IN E /\ {v,u} IN E
2094 /\ sigma_fan x V E u w = v
2095 ==> f1_fan x V E (x,v,u,sigma_fan x V E v u)=(x,u,w,v)`,
2096
2097 REPEAT STRIP_TAC
2098 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
2099 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2100 THEN ASM_SIMP_TAC[INVERSE1_SIGMA_FAN]);;
2101
2102
2103 let nonconformin_fan_imp_exist_3point_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2104 FAN(x,V,E)
2105  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2106 /\ fan80(x,V,E)
2107 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2108 ==> ?f1 f2 f3. {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
2109 /\ {pr2 f2, pr2 f3} IN E
2110 /\ ~({pr2 f3, pr2 f1 } IN E)
2111 /\ {pr2 f1, pr2 f2 } IN E
2112 /\ sigma_fan x V E (pr2 f2) (pr2 f3)=pr2 f1
2113 /\ pr2 f3= pr3 f2
2114 /\ pr2 f2= pr3 f1`,
2115
2116 REPEAT STRIP_TAC
2117 THEN MRESA_TAC exists_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
2118 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
2119 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2120 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
2121 THEN ABBREV_TAC`f2=f1_fan x V E (f1:real^3#real^3#real^3#real^3)`
2122 THEN ABBREV_TAC`f3=f1_fan x V E (f2:real^3#real^3#real^3#real^3)`
2123 THEN ABBREV_TAC`f4=f1_fan x V E (f3:real^3#real^3#real^3#real^3)`
2124 THEN POP_ASSUM MP_TAC
2125 THEN DISCH_THEN(LABEL_TAC"VUT")
2126 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2:real^3#real^3#real^3#real^3)` ;`(f1:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
2127 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
2128 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f4:real^3#real^3#real^3#real^3)` ;`(f3:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
2129
2130 THEN MP_TAC(SET_RULE`f1 IN ds /\ f2 IN ds /\ f3 IN ds /\ ds SUBSET d1_fan (x,V,E)==> {f1,f2,f3} SUBSET (ds:real^3#real^3#real^3#real^3->bool)/\ f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)`)
2131 THEN RESA_TAC
2132 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
2133 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f1:real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(f3:real^3#real^3#real^3#real^3)`)
2134 THEN DISJ_CASES_TAC(SET_RULE`f3=f1 \/ ~(f3=f1:real^3#real^3#real^3#real^3)`)
2135 THENL(*1*)[
2136 MP_TAC(SET_RULE`f1=f3:real^3#real^3#real^3#real^3==> pr2 f1= pr2 f3`) 
2137 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2138 THEN REWRITE_TAC[]
2139 THEN STRIP_TAC
2140 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`]
2141 THEN REMOVE_ASSUM_TAC
2142 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2:real^3#real^3#real^3#real^3)` ;`(f1:real^3#real^3#real^3#real^3)`]
2143 THEN POP_ASSUM MP_TAC
2144 THEN POP_ASSUM MP_TAC
2145 THEN RESA_TAC THEN RESA_TAC
2146 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` pr2 (f3:real^3#real^3#real^3#real^3)`;
2147 ` pr2 (f2:real^3#real^3#real^3#real^3)`]
2148 THEN POP_ASSUM MP_TAC
2149 THEN POP_ASSUM MP_TAC
2150 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2151 THEN RESA_TAC THEN RESA_TAC
2152 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge (pr2 (f2:real^3#real^3#real^3#real^3)) V E = {pr2 f3} \/ ~(set_of_edge (pr2 (f2:real^3#real^3#real^3#real^3)) V E = {pr2 f3})`)
2153 THENL[
2154  MRESA_TAC CARD_SING[`(pr2 f3):real^3`; `(set_of_edge (pr2 (f2:real^3#real^3#real^3#real^3)) V E):real^3->bool`]
2155 THEN POP_ASSUM MP_TAC
2156 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
2157 THEN FIND_ASSUM (fun th -> MP_TAC(ISPEC `(pr2 (f2:real^3#real^3#real^3#real^3))` th))`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
2158 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (f2:real^3#real^3#real^3#real^3)) IN V`
2159 THEN ARITH_TAC;
2160
2161 MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` pr2 (f2:real^3#real^3#real^3#real^3)`;
2162 ` pr2 (f3:real^3#real^3#real^3#real^3)`]
2163 THEN ASM_TAC THEN SET_TAC[]];(*1*)
2164
2165
2166
2167
2168 DISJ_CASES_TAC(SET_RULE`f4=f1 \/ ~(f4=f1:real^3#real^3#real^3#real^3)`)
2169 THENL(*2*)[
2170 SUBGOAL_THEN(`((f1_fan (x:real^3) V E) POWER 3) f1=f1`) ASSUME_TAC
2171 THENL(*3*)[
2172 ASM_SIMP_TAC[ARITH_RULE`3= SUC(2)/\ 2= SUC(1) /\ 1= SUC(0)`;POWER;I_DEF;o_DEF];(*3*)
2173
2174  SUBGOAL_THEN`face (hypermap1_of_fanx (x:real^3,V:real^3->bool,E)) f1=orbit_map (f1_fan x V E) f1`ASSUME_TAC
2175 THENL(*4*)[
2176 ASM_REWRITE_TAC[face;orbit_map;EXTENSION;IN_ELIM_THM]
2177 THEN GEN_TAC
2178 THEN EQ_TAC
2179 THEN STRIP_TAC
2180 THEN MRESAL_TAC into_domain_power_efn_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`n:num`;`( \ t. res (t x V E ) (d1_fan (x:real^3,V,E))) `][POWER_1;I_DEF]
2181 THEN POP_ASSUM(fun th-> MRESA1_TAC th `f1:real^3#real^3#real^3#real^3`)
2182 THEN EXISTS_TAC`n:num`
2183 THEN ASM_REWRITE_TAC[];(*4*)
2184
2185 MRESAL_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`][]
2186 THEN MRESAL_TAC card_orbit_le[`f1_fan (x:real^3) V E`;`3`;`f1:real^3#real^3#real^3#real^3`][ARITH_RULE`~(3=0)`]
2187 THEN POP_ASSUM MP_TAC
2188 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM th])
2189 THEN ASM_TAC THEN ARITH_TAC]];
2190 POP_ASSUM MP_TAC
2191 THEN DISCH_THEN(LABEL_TAC"EMYEU")
2192 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
2193 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
2194 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
2195 THEN ASM_REWRITE_TAC[]
2196 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2:real^3#real^3#real^3#real^3)` ;`(f1:real^3#real^3#real^3#real^3)`]
2197 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`]
2198 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)] 
2199 THEN POP_ASSUM MP_TAC
2200 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)]
2201 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th)
2202 THEN POP_ASSUM MP_TAC
2203 THEN POP_ASSUM MP_TAC
2204 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th) THEN ASSUME_TAC th)
2205 THEN STRIP_TAC
2206 THEN STRIP_TAC
2207 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[th] THEN MP_TAC th)
2208 THEN REPEAT STRIP_TAC THEN ASSUME_TAC (SYM th))
2209 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`;`(pr3 f1):real^3`;` (pr2 f3):real^3`]
2210 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2211 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC 
2212 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
2213 THEN REPEAT STRIP_TAC
2214 THEN MRESA_TAC condition_f1_eq_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` (pr2 f3):real^3`;`(pr2 f1):real^3`;`(pr3 f1):real^3`;]
2215 THEN REMOVE_THEN "EMYEU" MP_TAC
2216 THEN REMOVE_THEN"VUT"(fun th-> REWRITE_TAC[SYM th])
2217 THEN ASM_TAC
2218 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
2219 THEN REPEAT (ASM_REWRITE_TAC[pr2;pr3] THEN STRIP_TAC THEN ASM_REWRITE_TAC[])
2220 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
2221 THEN POP_ASSUM MP_TAC
2222 THEN REMOVE_ASSUM_TAC
2223 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
2224 THEN STRIP_TAC
2225 THEN MRESA_TAC MONO_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v'':real^3`;`v:real^3`;`w'':real^3`;]]]);;
2226
2227
2228
2229
2230
2231
2232 let condition_aff_gt_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
2233 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E 
2234 /\ sigma_fan x V E u w = v
2235  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2236 /\ fan80(x,V,E)
2237 /\ ~({w,v} IN E)
2238 ==> aff_gt {x} {v,w} SUBSET yfan (x,V,E)`,
2239
2240 REPEAT STRIP_TAC
2241 THEN REWRITE_TAC[yfan;SET_RULE`A SUBSET (:real^3) DIFF B<=> A INTER B= {}`]
2242 THEN POP_ASSUM MP_TAC
2243 THEN ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
2244 THEN REWRITE_TAC[xfan;IN;SET_RULE`{A,B}={B,A}`]
2245 THEN STRIP_TAC
2246 THEN MRESAL_TAC AFF_GT_CUT_XFAN_IMP_EDGE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v:real^3`; `u:real^3`; `w:real^3`][IN]);;
2247
2248
2249
2250
2251
2252
2253
2254 let segment_subset_aff_gt_union=prove(`!x:real^3 y z v u w.
2255 ~coplanar{x,v,u,w}
2256 /\ y IN aff_gt {x} {v, u, w}
2257 /\ z IN aff_gt {x} {w, v}
2258 ==> segment[y,z] SUBSET aff_gt {x} {w, v} UNION aff_gt {x} {v, u, w}`,
2259  REWRITE_TAC[segment;UNION;SUBSET;IN_ELIM_THM]
2260 THEN REPEAT STRIP_TAC
2261 THEN POP_ASSUM MP_TAC
2262 THEN MP_TAC(REAL_ARITH`u'<= &1==> u'= &1 \/ u'< &1`)
2263 THEN RESA_TAC
2264 THENL[
2265 REWRITE_TAC[REAL_ARITH`&1- &1= &0`]
2266 THEN REDUCE_VECTOR_TAC
2267 THEN RESA_TAC;
2268
2269 STRIP_TAC
2270 THEN MATCH_MP_TAC(SET_RULE`B==> A\/ B`)
2271 THEN ASM_TAC
2272 THEN DISCH_TAC
2273 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2274 THEN MRESA_TAC AFF_GT_1_2[`x:real^3`;`w:real^3`;`v:real^3`;]
2275 THEN MRESA_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2276 THEN REWRITE_TAC[IN_ELIM_THM]
2277 THEN REPEAT STRIP_TAC
2278 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - u') % (t1 % x + t2 % v + t3 % u + t4 % w) +
2279      u' % (t1' % x + t2' % w + t3' % v)
2280 =((&1 - u') *t1 + u' *t1') % x + ((&1 - u')*t2+ u' * t3') % v + ((&1 - u')*t3) % u + ((&1 - u')*t4+ u' * t2') % w`]
2281 THEN EXISTS_TAC`(&1 - u') * t1 + u' * t1':real`
2282 THEN EXISTS_TAC`(&1 - u') * t2 + u' * t3':real`
2283 THEN EXISTS_TAC`(&1 - u') * t3:real`
2284 THEN EXISTS_TAC`(&1 - u') * t4 + u' * t2':real`
2285 THEN ASM_REWRITE_TAC[REAL_ARITH` ((&1 - u') * t1 + u' * t1') +
2286  ((&1 - u') * t2 + u' * t3') +
2287  (&1 - u') * t3 +
2288  (&1 - u') * t4 +
2289  u' * t2'
2290 =  (&1 - u') * (t1 + t2+ t3 + t4)+ u'*(t1' +t2'+t3')
2291 `;REAL_ARITH`(&1 - u') * &1 + u' * &1 = &1`]
2292 THEN STRIP_TAC
2293 THENL[ 
2294 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0<=B ==> &0< A+B`)
2295 THEN STRIP_TAC
2296 THENL[MATCH_MP_TAC REAL_LT_MUL
2297 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2298
2299 MATCH_MP_TAC REAL_LE_MUL
2300 THEN ASM_TAC
2301 THEN REAL_ARITH_TAC];
2302 STRIP_TAC
2303 THENL[
2304 MATCH_MP_TAC REAL_LT_MUL
2305 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2306
2307 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0<=B ==> &0< A+B`)
2308 THEN STRIP_TAC
2309 THENL[
2310 MATCH_MP_TAC REAL_LT_MUL
2311 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2312 MATCH_MP_TAC REAL_LE_MUL
2313 THEN ASM_TAC
2314 THEN REAL_ARITH_TAC]]]]);;
2315
2316
2317 let SEGMENT_CONNECTED=prove(`!a b. connected(segment [a,b])`,
2318
2319 REPEAT GEN_TAC THEN
2320 MATCH_MP_TAC CONVEX_CONNECTED THEN
2321 REWRITE_TAC[SEGMENT_CONVEX_HULL;CONVEX_CONVEX_HULL]);;
2322
2323
2324 let AFF_GT_SUBSET_DART_LEADS_INTO_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
2325 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2326 /\ sigma_fan x V E u w = v
2327  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2328 /\ fan80(x,V,E)
2329 ==> aff_gt {x} {w,v} SUBSET dart_leads_into x V E u w`,
2330 REPEAT STRIP_TAC
2331 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2332 THEN REWRITE_TAC[fan80]
2333 THEN DISCH_TAC
2334 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2335 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2336 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2337 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
2338 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u:real^3`; `w:real^3`]
2339 THEN MRESA_TAC in_topological_component_yfan_is_connected[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`]
2340 THEN MRESAL_TAC notcoplanar_4point_aff_gt_1_3_not_empty[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][SET_RULE`~(A={})<=> ?y. y IN A`]
2341 THEN MP_TAC(SET_RULE`y IN aff_gt {x} {v, u, w}/\ aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w
2342 ==> y IN dart_leads_into x V E u w`)
2343 THEN RESA_TAC
2344 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`]
2345 THEN MP_TAC(SET_RULE`dart_leads_into x V E u w SUBSET yfan (x,V,E)
2346 /\ aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w
2347 ==> aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)`)
2348 THEN RESA_TAC
2349 THEN MRESA_TAC expand_element_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`;`y:real^3`]
2350 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`w:real^3`;`v:real^3`]
2351 THEN MRESA_TAC condition_aff_gt_subset_yfan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
2352 THEN POP_ASSUM MP_TAC
2353 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
2354 THEN STRIP_TAC
2355 THEN MRESA_TAC segment_subset_aff_gt_union[`x:real^3`;`y:real^3`;`y':real^3`;` v:real^3`;`u:real^3`;`w:real^3`;]
2356 THEN MP_TAC(SET_RULE`
2357 segment [y,y'] SUBSET aff_gt {x} {w, v} UNION aff_gt {x} {v, u, w}
2358 /\ aff_gt {x} {w, v} SUBSET yfan (x,V:real^3->bool,E)
2359 /\ aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)
2360 ==> segment [y,y':real^3] SUBSET yfan(x,V,E) 
2361 `)
2362 THEN RESA_TAC
2363 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{ w,v:real^3}`]
2364 THEN MRESA_TAC CONVEX_CONNECTED[`aff_gt {x} {w,v}:real^3->bool`]
2365 THEN MRESA_TAC SEGMENT_CONNECTED[`y:real^3`;`y':real^3`]
2366 THEN MRESA_TAC ENDS_IN_SEGMENT[`y:real^3`;`y':real^3`]
2367 THEN MRESA1_TAC CONNECTED_IFF_CONNECTED_COMPONENT`segment[y,y':real^3]`
2368 THEN POP_ASSUM (fun th-> MRESA_TAC th [`y:real^3`;`y':real^3`])
2369 THEN MRESA_TAC CONNECTED_COMPONENT_OF_SUBSET[`segment [y,y':real^3]`;`yfan(x:real^3,V:real^3->bool,E)`;`y:real^3`;`y':real^3`]
2370 THEN MRESAL_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3,V:real^3->bool,E)`;`y:real^3`;`y':real^3`][IN]
2371 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
2372 THEN MRESA_TAC CONNECTED_COMPONENT_MAXIMAL[`yfan(x:real^3,V:real^3->bool,E)`;`aff_gt {x} {w,v}:real^3->bool`;`y':real^3`]);;
2373
2374
2375
2376
2377 let STEP2_REDUCE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1 f2 f3 v u w.
2378 FAN(x,V,E)
2379  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2380 /\ fan80(x,V,E)
2381 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2382 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
2383 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2384 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2385 /\ sigma_fan x V E u w = v
2386 ==> aff_gt {x} {v,w} SUBSET dartset_leads_into_fan x V E ds`,
2387
2388 REPEAT STRIP_TAC
2389 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
2390 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2391 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
2392 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds /\ ds SUBSET d1_fan(x,V,E)==> f1 IN d1_fan(x,V,E)/\ f2 IN d1_fan(x,V,E) /\ f3 IN d1_fan(x,V,E) /\ f1 IN ds /\ f2 IN ds/\  f3 IN ds`)
2393 THEN RESA_TAC
2394 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f3:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`]
2395 THEN REMOVE_ASSUM_TAC
2396 THEN MRESA_TAC AFF_GT_SUBSET_DART_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`]
2397 THEN MRESA_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
2398 `ds:real^3#real^3#real^3#real^3->bool`;`dart_leads_into (x:real^3) V E (pr2 f2) (pr3 f2)`;`f2:real^3#real^3#real^3#real^3`]
2399 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2400 THEN ASM_REWRITE_TAC[]);;
2401
2402
2403 let STEP3_REDUCE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w.
2404 FAN(x,V,E)
2405  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2406 /\ fan80(x,V,E)
2407 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2408 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
2409 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2410 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2411 /\ sigma_fan x V E u w = v
2412 /\ E UNION {{v,w}}= E1
2413 ==> FAN (x,V,E1)`,
2414
2415 REPEAT STRIP_TAC
2416 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
2417 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
2418 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2419 ` (w:real^3)`]
2420 THEN POP_ASSUM MP_TAC
2421 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2422 THEN ASM_REWRITE_TAC[]
2423 THEN STRIP_TAC
2424 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2425 ` (v:real^3)`]
2426 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2427 THEN REWRITE_TAC[fan80]
2428 THEN DISCH_TAC
2429 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
2430 THEN MRESAL_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`&1:real`][REAL_ARITH`&0<= &1 /\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % u + &1 % w=w`]
2431 THEN MRESA_TAC DWWUTKW[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;
2432 `ds:real^3#real^3#real^3#real^3->bool`;]);;
2433
2434
2435
2436
2437
2438
2439 let SET_OF_EDGE_UNION_GRAPH=prove(`!v V E1 E2. set_of_edge v V (E1 UNION E2)= (set_of_edge v V E1) UNION (set_of_edge v V E2)`,
2440 ONCE_REWRITE_TAC[EXTENSION]
2441 THEN REWRITE_TAC[set_of_edge;UNION;IN_ELIM_THM;SET_RULE`(A\/B)/\C<=>(A/\C)\/ (B/\C)`;]
2442 THEN REPEAT STRIP_TAC
2443 THEN EQ_TAC
2444 THEN SET_TAC[]);;
2445
2446
2447
2448
2449
2450 let add_edge_imp_card_set_edge_ge1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1.
2451 FAN(x,V,E)
2452  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2453 /\ E1=E UNION {{v,w}}
2454 ==> 
2455 (!v. v IN V==>CARD (set_of_edge v V E1) > 1)`,
2456 REWRITE_TAC[FAN;fan1]
2457 THEN REPEAT STRIP_TAC
2458 THEN MRESA_TAC remark_finite_fan1[`v':real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
2459 THEN POP_ASSUM MP_TAC
2460 THEN ASM_REWRITE_TAC[SET_OF_EDGE_UNION_GRAPH;]
2461 THEN STRIP_TAC
2462 THEN MRESAL_TAC CARD_SUBSET[`(set_of_edge v' (V:real^3->bool) E):real^3->bool`;`(set_of_edge v' (V:real^3->bool) E UNION set_of_edge v' V {{v, w}}):real^3->bool`][SET_RULE`A SUBSET A UNION B`]
2463 THEN POP_ASSUM MP_TAC
2464 THEN FIRST_ASSUM (MP_TAC o SPEC `v':real^3`)
2465 THEN REMOVE_ASSUM_TAC
2466 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2467 THEN ARITH_TAC);;
2468
2469
2470
2471
2472 let pr23=new_definition`pr23=(\(x,y,z,t). (y,z))`
2473 ;;
2474
2475
2476 let PR23_OF_D1_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool.
2477 IMAGE pr23 (d1_fan(x,V,E))={ (v,w) | {v,w} IN E}`,
2478 REWRITE_TAC[IMAGE;d1_fan;IN_ELIM_THM;EXTENSION;]
2479 THEN REPEAT STRIP_TAC
2480 THEN EQ_TAC
2481 THENL[
2482 REPEAT STRIP_TAC
2483 THEN POP_ASSUM MP_TAC
2484 THEN ASM_REWRITE_TAC[pr23;]
2485 THEN RESA_TAC
2486 THEN EXISTS_TAC `v:real^3`
2487 THEN EXISTS_TAC `w:real^3`
2488 THEN ASM_REWRITE_TAC[];
2489
2490 REPEAT STRIP_TAC
2491 THEN EXISTS_TAC`x,v,w,sigma_fan x V E v w:real^3`
2492 THEN ASM_REWRITE_TAC[pr23]
2493 THEN EXISTS_TAC `x:real^3`
2494 THEN EXISTS_TAC `v:real^3`
2495 THEN EXISTS_TAC `w:real^3`
2496 THEN EXISTS_TAC `sigma_fan x V E v w:real^3`
2497 THEN ASM_REWRITE_TAC[]]);;
2498
2499
2500
2501
2502 let PR23_OF_D20_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool.
2503 IMAGE pr23 (d20_fan(x,V,E))={ (v,v) | v IN V/\ set_of_edge v V E={}}`,
2504
2505 REWRITE_TAC[IMAGE;d20_fan;IN_ELIM_THM;EXTENSION;]
2506 THEN REPEAT STRIP_TAC
2507 THEN EQ_TAC
2508 THENL[
2509 REPEAT STRIP_TAC
2510 THEN POP_ASSUM MP_TAC
2511 THEN ASM_REWRITE_TAC[pr23;]
2512 THEN RESA_TAC
2513 THEN EXISTS_TAC `v:real^3`
2514 THEN ASM_REWRITE_TAC[IN];
2515
2516 REPEAT STRIP_TAC
2517 THEN EXISTS_TAC`(x:real^3),v,v,(v:real^3)`
2518 THEN ASM_REWRITE_TAC[pr23]
2519 THEN EXISTS_TAC `x:real^3`
2520 THEN EXISTS_TAC `v:real^3`
2521 THEN ASM_REWRITE_TAC[IN]
2522 THEN ASM_TAC
2523 THEN SIMP_TAC[IN]]);;
2524
2525
2526
2527 let add_edge_graph=prove(`!v w E. {v',w' | {v', w'} IN E UNION {{v, w}}}= {v',w' | {v', w'} IN E} UNION {(v',w')| {v',w'}={v,w}}`,
2528
2529 ONCE_REWRITE_TAC[EXTENSION]
2530 THEN REWRITE_TAC[UNION;IN_ELIM_THM;IN_SING;SET_RULE`(A\/B)/\C<=>(A/\C)\/ (B/\C)`;]
2531 THEN REPEAT STRIP_TAC
2532 THEN EQ_TAC
2533 THEN SET_TAC[]);;
2534
2535 let expand_set_edge_fan=prove(`!v w.{(v',w')| {v',w'}={v,w}}={(v,w), (w,v)}`,
2536
2537 REWRITE_TAC[SET_RULE`{v',w'}={v,w}<=> (v=v' /\ w= w') \/ v= w' /\ w=v'`]
2538 THEN SET_TAC[]);;
2539
2540
2541
2542
2543
2544
2545
2546 let DART_FANADD_EQ_DART_FAN_ADD_2DART=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w.
2547 FAN(x,V,E)
2548  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2549 /\ fan80(x,V,E)
2550 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2551 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
2552 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2553 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2554 /\ sigma_fan x V E u w = v
2555 /\ ~(v=w)
2556 /\ E UNION {{v,w}}=E1
2557 ==> 
2558 IMAGE pr23 (dart (hypermap1_of_fanx (x,V,E1)))
2559
2560 = (IMAGE pr23 (dart (hypermap1_of_fanx (x,V,E)))) UNION {(v,w),(w,v)}`,
2561
2562
2563 REPEAT STRIP_TAC
2564 THEN POP_ASSUM MP_TAC
2565 THEN DISCH_THEN(LABEL_TAC"YEU")
2566 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
2567 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
2568 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2569 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
2570 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
2571 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2572 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
2573
2574 THEN ASM_REWRITE_TAC[d_fan;IMAGE_UNION;PR23_OF_D20_FAN;PR23_OF_D1_FAN]
2575 THEN REMOVE_THEN"YEU"(fun th-> REWRITE_TAC[SYM th;add_edge_graph;expand_set_edge_fan;SET_OF_EDGE_UNION_GRAPH]));;
2576
2577
2578
2579 let pr23_inj_in_dfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2580 FAN(x,V,E)
2581 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
2582 ==> (!y y1.
2583  y IN d_fan(x,V,E) 
2584 /\ y1 IN d_fan(x,V,E) 
2585 /\ pr23 y= pr23 y1
2586 ==> y=y1)`,
2587 REPEAT STRIP_TAC
2588 THEN POP_ASSUM MP_TAC
2589 THEN POP_ASSUM MP_TAC
2590 THEN POP_ASSUM MP_TAC
2591 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2592 THEN REWRITE_TAC[PAIR_EQ;IN_ELIM_THM;d1_fan]
2593 THEN STRIP_TAC
2594 THEN STRIP_TAC
2595 THEN ASM_REWRITE_TAC[pr23;PAIR_EQ]
2596 THEN STRIP_TAC
2597 THEN ASM_REWRITE_TAC[]);;
2598
2599
2600
2601
2602
2603 let condition_set_of_edge_eq_empty=prove(`!v:A V E1 E2.
2604 ~(v IN UNIONS E2)
2605 ==> set_of_edge v V E2= {}`,
2606 REWRITE_TAC[set_of_edge;SET_RULE`A={}<=> !s. ~(s IN A)`;IN_ELIM_THM;DE_MORGAN_THM;]
2607 THEN REPEAT STRIP_TAC
2608 THEN MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2609 THEN POP_ASSUM MP_TAC
2610 THEN MATCH_MP_TAC MONO_NOT
2611 THEN STRIP_TAC
2612 THEN REWRITE_TAC[UNIONS;IN_ELIM_THM]
2613 THEN EXISTS_TAC`{v:A,s}`
2614 THEN ASM_REWRITE_TAC[]
2615 THEN SET_TAC[]);;
2616
2617
2618
2619
2620 let SET_OF_EDGE_INVARIANT=prove(`!v V E1 E2.
2621 ~(v IN UNIONS E2)
2622 ==> set_of_edge v V (E1 UNION E2)= (set_of_edge v V E1)`,
2623
2624 SIMP_TAC[SET_OF_EDGE_UNION_GRAPH;condition_set_of_edge_eq_empty;SET_RULE`A UNION {}=A`]);;
2625
2626
2627 let expand_unions=prove(`!v w:A. UNIONS {{v,w}}= {v,w}`,
2628 SIMP_TAC[UNIONS;IN_SING;]
2629 THEN ONCE_REWRITE_TAC[EXTENSION;]
2630 THEN SIMP_TAC[IN_ELIM_THM]
2631 THEN REPEAT STRIP_TAC
2632 THEN EQ_TAC
2633 THENL[SET_TAC[];
2634
2635 STRIP_TAC
2636 THEN EXISTS_TAC`{v,w:A}`
2637 THEN ASM_REWRITE_TAC[]]);;
2638
2639
2640 let SIGMA_FAN_OF_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v w.
2641 FAN(x,V,E)/\ FAN(x,V,E1)
2642  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2643  /\ ~({v,w} IN E)
2644 /\ E UNION {{v,w}}=E1
2645 ==> (!v1 w1. {v1,w1} IN E /\ ~(v1 IN {v,w})==> sigma_fan x V E1 v1 w1 = sigma_fan x V E v1 w1)
2646 `,
2647
2648 REPEAT STRIP_TAC
2649 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2650 `(v1:real^3)`]
2651 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2652 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v1:real^3`)
2653 THEN POP_ASSUM MP_TAC
2654 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v1 V E1 = {w1:real^3})\/ ~(set_of_edge v1 V E1 = {w1})`)
2655 THENL[
2656 ASM_REWRITE_TAC[]
2657 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2658                  IN_INSERT; NOT_IN_EMPTY]
2659 THEN ARITH_TAC;
2660
2661
2662 POP_ASSUM MP_TAC
2663 THEN MRESAL_TAC SET_OF_EDGE_INVARIANT[`v1:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` ({{v,w}}:(real^3->bool)->bool)`;][expand_unions]
2664 THEN STRIP_TAC
2665 THEN STRIP_TAC
2666 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v1:real^3`;`w1:real^3`;`sigma_fan x V E v1 w1:real^3`]
2667 THEN POP_ASSUM MATCH_MP_TAC
2668 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`w1:real^3`]
2669 ]);;
2670
2671
2672
2673
2674
2675
2676
2677 let add_edge_graph=prove(`!v w E E1.
2678 E UNION {{v,w}}=E1
2679 ==> {w,v} IN E1/\ {v,w}IN E1`,
2680
2681 REPEAT STRIP_TAC
2682 THENL
2683 [ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2684 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2685 THEN SET_TAC[];
2686 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2687 THEN SET_TAC[]]);;
2688
2689 let not_in_set_of_edge=prove(`
2690 !v w V E. ~({w,v} IN E) 
2691 ==> ~(w IN set_of_edge v V E)`,
2692 REPEAT GEN_TAC THEN STRIP_TAC
2693 THEN POP_ASSUM MP_TAC
2694 THEN MATCH_MP_TAC MONO_NOT
2695 THEN SIMP_TAC[set_of_edge;IN_ELIM_THM;SET_RULE`{A,B}={B,A}`]);;
2696
2697
2698
2699 let set_of_only_edge=prove(`!v w V. w IN V ==> set_of_edge v V {{v, w}}={w}`,
2700
2701 REWRITE_TAC[set_of_edge;IN_SING;SET_RULE`{v',w'}={v,w}<=> (v=v' /\ w= w') \/ v= w' /\ w=v'`;EXTENSION;IN_ELIM_THM]
2702 THEN REPEAT STRIP_TAC
2703 THEN EQ_TAC
2704 THEN STRIP_TAC 
2705 THEN ASM_REWRITE_TAC[]);;
2706
2707
2708 let set_of_only_edge1=prove(`!v w V. v IN V ==> set_of_edge w V {{v, w}}={v}`,
2709
2710 REWRITE_TAC[set_of_edge;IN_SING;SET_RULE`{v',w'}={v,w}<=> (v=v' /\ w= w') \/ v= w' /\ w=v'`;EXTENSION;IN_ELIM_THM]
2711 THEN REPEAT STRIP_TAC
2712 THEN EQ_TAC
2713 THEN STRIP_TAC 
2714 THEN ASM_REWRITE_TAC[]);;
2715
2716
2717
2718
2719
2720
2721 let SIGMA_FAN_OF_FANADD_AT_POINT1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
2722 FAN(x,V,E)/\ FAN(x,V,E1)
2723 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2724 /\ sigma_fan x V E u w = v
2725 /\ fan80(x,V,E)
2726  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2727 /\ E UNION {{v,w}}=E1
2728 ==> sigma_fan x V E1 v w = sigma_fan x V E v u`,
2729
2730
2731 REPEAT STRIP_TAC
2732 THEN POP_ASSUM MP_TAC
2733 THEN POP_ASSUM MP_TAC
2734 THEN DISCH_THEN(LABEL_TAC"YEU")
2735 THEN DISCH_THEN(LABEL_TAC"EM")
2736 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2737 `(v:real^3)`]
2738 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2739 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
2740 THEN POP_ASSUM MP_TAC
2741 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {w:real^3})\/ ~(set_of_edge v V E1 = {w})`)
2742 THENL[
2743 ASM_REWRITE_TAC[]
2744 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2745                  IN_INSERT; NOT_IN_EMPTY]
2746 THEN ARITH_TAC;
2747
2748 STRIP_TAC
2749 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2750 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
2751 `(v:real^3)`]
2752 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`sigma_fan x V E v u:real^3`]
2753 THEN POP_ASSUM MATCH_MP_TAC
2754 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
2755 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
2756 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/ ~(set_of_edge v V E = {u})`)
2757 THENL[
2758 ASM_REWRITE_TAC[]
2759 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2760                  IN_INSERT; NOT_IN_EMPTY]
2761 THEN ARITH_TAC;
2762 STRIP_TAC
2763 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
2764 THEN POP_ASSUM MP_TAC
2765 THEN DISCH_THEN(LABEL_TAC"QUY")
2766 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
2767 THEN MRESA_TAC not_in_set_of_edge[`v:real^3`;`w:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;]
2768 THEN STRIP_TAC
2769 THENL[
2770 MATCH_MP_TAC (SET_RULE`!x y A. x IN A /\ ~(y IN A)==> ~(x=y)`)
2771 THEN EXISTS_TAC`set_of_edge (v:real^3) V E`
2772 THEN ASM_REWRITE_TAC[];
2773
2774 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2775 `(w:real^3)`]
2776 THEN POP_ASSUM MP_TAC
2777 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
2778 THEN ASM_REWRITE_TAC[]
2779 THEN STRIP_TAC
2780 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
2781 THEN REPEAT STRIP_TAC
2782 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
2783 THEN ABBREV_TAC`u1=sigma_fan x V E v u`
2784 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
2785 `(v:real^3)`]
2786 THEN POP_ASSUM MP_TAC
2787 THEN RESA_TAC
2788 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`u1:real^3`]
2789 THEN MATCH_MP_TAC(REAL_ARITH`!A B C D. A=B+C /\ A<= B+D ==> C<= D`)
2790 THEN EXISTS_TAC`azim x v u (u1:real^3)`
2791 THEN EXISTS_TAC`azim x v u (w:real^3)`
2792 THEN ASM_REWRITE_TAC[]
2793 THEN FIRST_X_ASSUM (fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"NHO"))
2794 THEN DISJ_CASES_TAC(SET_RULE`(w1=u:real^3)\/ ~(w1=u)`)
2795 THENL[
2796 ASM_REWRITE_TAC[]
2797 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2798 THEN REWRITE_TAC[fan80]
2799 THEN DISCH_TAC
2800 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2801 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2802 THEN MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][DE_MORGAN_THM;]
2803 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][REAL_ARITH`A+B-A=B`;]
2804 THEN MATCH_MP_TAC (REAL_ARITH`A<B==> A<=B`)
2805 THEN SIMP_TAC[azim];
2806 REMOVE_THEN"QUY" (fun th-> MRESA1_TAC th`w1:real^3`)
2807 THEN MP_TAC(REAL_ARITH`azim x v u w + azim x v w u1 = azim x v u u1 /\ azim x v u u1 <= azim x v u w1
2808 /\ &0<= azim x v w u1==> azim x v u w <= azim x v u w1`)
2809 THEN RESA_TAC
2810 THEN POP_ASSUM MP_TAC 
2811 THEN SIMP_TAC[azim]
2812 THEN STRIP_TAC
2813 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2814 `(v:real^3)`]
2815 THEN POP_ASSUM MP_TAC
2816 THEN RESA_TAC
2817 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
2818 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])]]]]);;
2819
2820
2821
2822
2823 let SIGMA_FAN_OF_FANADD_AT_POINT2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
2824 FAN(x,V,E)/\ FAN(x,V,E1)
2825 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2826 /\ sigma_fan x V E u w = v
2827 /\ fan80(x,V,E)
2828  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2829 /\ E UNION {{v,w}}=E1
2830 ==> sigma_fan x V E1 v u = w`,
2831
2832 REPEAT STRIP_TAC
2833 THEN POP_ASSUM MP_TAC
2834 THEN POP_ASSUM MP_TAC
2835 THEN DISCH_THEN(LABEL_TAC"YEU")
2836 THEN DISCH_THEN(LABEL_TAC"EM")
2837 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2838 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2839 `(v:real^3)`]
2840 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2841 `(u:real^3)`]
2842 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
2843 `(v:real^3)`]
2844 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2845 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
2846 THEN POP_ASSUM MP_TAC
2847 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {u:real^3})\/ ~(set_of_edge v V E1 = {u})`)
2848 THENL[
2849
2850 ASM_REWRITE_TAC[]
2851 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2852                  IN_INSERT; NOT_IN_EMPTY]
2853 THEN ARITH_TAC;
2854 STRIP_TAC
2855 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2856 THEN POP_ASSUM MATCH_MP_TAC
2857 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
2858 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
2859 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
2860 `(w:real^3)`]
2861 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
2862 THEN REPEAT STRIP_TAC
2863 THENL[
2864 REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
2865 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/ ~(set_of_edge v V E = {u})`)
2866 THENL[
2867 ASM_REWRITE_TAC[]
2868 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2869                  IN_INSERT; NOT_IN_EMPTY]
2870 THEN ARITH_TAC;
2871 STRIP_TAC
2872 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
2873 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
2874 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
2875 THEN POP_ASSUM MP_TAC
2876 THEN POP_ASSUM MP_TAC
2877 THEN REAL_ARITH_TAC];
2878 ASM_REWRITE_TAC[]
2879 THEN REAL_ARITH_TAC]]);;
2880
2881
2882
2883
2884 let XFAN_INTER_SET=prove(`!x:real^N V E s:real^N->bool.
2885 xfan(x,V,E) INTER s = UNIONS {y | ?e. e IN E /\ y = (aff_ge {x} e) INTER s}`,
2886 REPEAT GEN_TAC
2887 THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2]
2888 THEN ONCE_REWRITE_TAC[ EXTENSION]
2889 THEN REWRITE_TAC[UNIONS; INTER;IN_ELIM_THM]
2890 THEN GEN_TAC
2891 THEN EQ_TAC
2892 THENL[
2893 STRIP_TAC
2894 THEN ASM_REWRITE_TAC[]
2895 THEN EXISTS_TAC `{x' | x' IN aff_ge {x:real^N} e /\ x' IN s}`
2896 THEN POP_ASSUM MP_TAC
2897 THEN POP_ASSUM MP_TAC
2898 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2899 THEN RESA_TAC THEN RESA_TAC
2900 THEN EXISTS_TAC`e:real^N->bool`
2901 THEN ASM_REWRITE_TAC[];
2902 STRIP_TAC
2903 THEN POP_ASSUM MP_TAC
2904 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2905 THEN RESA_TAC
2906 THEN EXISTS_TAC `aff_ge {x:real^N} e `
2907 THEN ASM_REWRITE_TAC[]
2908 THEN EXISTS_TAC `e:real^N->bool`
2909 THEN ASM_REWRITE_TAC[]]);;
2910
2911
2912
2913
2914 let condition_azim_imp_edge_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
2915 FAN(x,V,E)
2916 /\ {v,u} IN E /\ {u,w} IN E /\  {w,w1} IN E  
2917 /\ sigma_fan x V E u w = v
2918 /\ sigma_fan x V E w w1 = u
2919 /\ fan80(x,V,E)
2920  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2921 /\  azim x w v u = azim x w w1 u
2922 ==> {v,w} IN E`,
2923
2924
2925 REPEAT STRIP_TAC
2926 THEN POP_ASSUM MP_TAC
2927 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2928 THEN REWRITE_TAC[fan80]
2929 THEN DISCH_TAC
2930 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`w1:real^3`] THEN MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2931 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`w1:real^3`]
2932 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
2933 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2934 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
2935 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
2936 THEN POP_ASSUM MP_TAC
2937 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2938 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
2939 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
2940 THEN RESA_TAC
2941 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`w1:real^3`]
2942 THEN POP_ASSUM MP_TAC
2943 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2944 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
2945 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
2946 THEN RESA_TAC
2947 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
2948 THEN POP_ASSUM MP_TAC
2949 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2950 THEN RESA_TAC
2951 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`w1:real^3`]
2952 THEN POP_ASSUM MP_TAC
2953 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2954 THEN RESA_TAC
2955 THEN REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
2956 THEN STRIP_TAC
2957 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`;`w1:real^3`]
2958 THEN POP_ASSUM MP_TAC
2959 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2960 THEN RESA_TAC
2961 THEN MATCH_MP_TAC AFF_GT_CUT_XFAN_IMP_EDGE_FAN
2962 THEN EXISTS_TAC`x:real^3`
2963 THEN EXISTS_TAC`V:real^3->bool`
2964 THEN EXISTS_TAC`u:real^3`
2965 THEN ASM_SIMP_TAC[SET_RULE`A INTER B= B INTER A`]
2966 THEN MRESAL_TAC XFAN_INTER_SET[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`aff_gt {x:real^3} {v, w}`][IN;xfan]
2967 THEN ASM_REWRITE_TAC[UNIONS;IN_ELIM_THM;SET_RULE`~(A={})<=> ?y. y IN A`]
2968 THEN SUBGOAL_THEN`?y. y IN aff_gt {x:real^3} {v,w} INTER aff_ge {x} {w,w1}`ASSUME_TAC
2969 THENL[
2970 MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3,w:real^3}`;`{w1:real^3}`]
2971 THEN MP_TAC(SET_RULE`v IN aff_gt {x, w} {w1} /\ aff_gt {x, w} {w1} SUBSET aff_ge {x, w} {w1}
2972 ==> v IN aff_ge {x, w} {w1:real^3}`)
2973 THEN RESA_TAC
2974 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`w:real^3`;`w1:real^3`;`v:real^3`]
2975 THEN POP_ASSUM MP_TAC
2976 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2977 THEN RESA_TAC
2978 THENL[
2979 POP_ASSUM MP_TAC
2980 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{B,C}={C,B}`]
2981 THEN STRIP_TAC
2982 THEN MRESAL_TAC point_in_aff_ge[`x:real^3`;`w:real^3`;`w1:real^3`][INTER;IN_ELIM_THM]
2983 THEN EXISTS_TAC`w1:real^3`
2984 THEN ASM_REWRITE_TAC[];
2985
2986 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2987 `(w:real^3)`]
2988 THEN MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`w:real^3`;`w1:real^3`;`v:real^3`]
2989 THEN ASM_SIMP_TAC[SET_RULE`A SUBSET B==> A INTER B= A`]
2990 THEN MATCH_MP_TAC exists_in_aff_gt
2991 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
2992 `(w:real^3)`]];
2993
2994 POP_ASSUM MP_TAC
2995 THEN STRIP_TAC
2996 THEN EXISTS_TAC `y:real^3`
2997 THEN EXISTS_TAC `aff_gt {x} {v, w} INTER aff_ge {x} {w, w1:real^3}`
2998 THEN ASM_REWRITE_TAC[]
2999 THEN EXISTS_TAC`{w,w1:real^3}`
3000 THEN ASM_SIMP_TAC[SET_RULE`A INTER B= B INTER A`;]
3001 THEN ASM_TAC
3002 THEN SIMP_TAC[IN]]);;
3003
3004 let condition_azim_le_pi=prove(
3005 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
3006 FAN(x,V,E)
3007 /\ {v,u} IN E /\ {u,w} IN E 
3008 /\ sigma_fan x V E u w = v
3009 /\ fan80(x,V,E)
3010  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3011 ==> &0< azim x w v u/\ azim x w v u < pi`,
3012
3013
3014 REPEAT GEN_TAC
3015 THEN STRIP_TAC
3016 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3017 THEN REWRITE_TAC[fan80]
3018 THEN DISCH_TAC
3019 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`w1:real^3`] THEN MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
3020 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3021 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3022 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
3023 THEN POP_ASSUM MP_TAC
3024 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3025 THEN RESA_TAC
3026 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
3027 THEN POP_ASSUM MP_TAC
3028 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3029 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
3030 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
3031 THEN RESA_TAC
3032 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3033 THEN POP_ASSUM MP_TAC
3034 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3035 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3036 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
3037 THEN RESA_TAC
3038 THEN MP_TAC(ARITH_RULE`~(azim x w v u = &0) /\ &0<= azim x w v u==>  &0< azim x w v u `)
3039 THEN ASM_SIMP_TAC[azim]
3040 THEN RESA_TAC
3041 THEN DISJ_CASES_TAC(REAL_ARITH`pi<= azim x w v u \/ azim x w v u < pi`)
3042 THENL[
3043 MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
3044 THEN POP_ASSUM MP_TAC
3045 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3046 THEN RESA_TAC
3047 THEN MP_TAC(ARITH_RULE`~(azim x w v u = pi)/\ pi<= azim x w v u /\ azim x w v u < &2 * pi /\ azim x w v u = &2 * pi - azim x w u v
3048 ==> &0 < azim x w u v /\ azim x w u v< pi`)
3049 THEN ASM_SIMP_TAC[azim]
3050 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3051 THEN STRIP_TAC
3052 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `w:real^3`;`v:real^3`;`u:real^3`]
3053 THEN POP_ASSUM MP_TAC
3054 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3055 THEN RESA_TAC
3056 THEN POP_ASSUM MP_TAC
3057 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
3058 THEN REWRITE_TAC[DOT_LNEG]
3059 THEN ASM_TAC
3060 THEN REAL_ARITH_TAC;
3061 ASM_REWRITE_TAC[]]);;
3062
3063
3064
3065
3066 let azim_trangle_le_azim_face_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3067 FAN(x,V,E)
3068 /\ {v,u} IN E /\ {u,w} IN E /\  {w,w1} IN E  /\ ~({v,w} IN E)
3069 /\ sigma_fan x V E u w = v
3070 /\ sigma_fan x V E w w1 = u
3071 /\ fan80(x,V,E)
3072  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3073 ==> azim x w v u < azim x w w1 u`,
3074
3075 REPEAT STRIP_TAC
3076 THEN REWRITE_TAC[REAL_ARITH`A<B <=> ~(B<=A) `]
3077 THEN STRIP_TAC
3078 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3079 THEN REWRITE_TAC[fan80]
3080 THEN DISCH_TAC
3081 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`w1:real^3`] THEN MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
3082 THEN POP_ASSUM MP_TAC
3083 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`w1:real^3`]
3084 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3085 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`] THEN DISCH_TAC  THEN
3086 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
3087 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3088 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3089 `(w:real^3)`]
3090 THEN MRESA_TAC condition_azim_imp_edge_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
3091 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`]
3092 THEN POP_ASSUM MP_TAC
3093 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3094 THEN RESA_TAC
3095 THEN MP_TAC(REAL_ARITH`azim x w v u = azim x w v w1 + azim x w w1 u
3096 /\ azim x w w1 u <= azim x w v u /\ &0< azim x w w1 u /\ ~(azim x w v u = azim x w w1 u) ==> &0 < azim x w v w1 /\ azim x w v w1 < azim x w v u`)
3097 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
3098 THEN RESA_TAC
3099 THEN MRESA_TAC condition_azim_le_pi[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3100 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3101 THEN POP_ASSUM MP_TAC
3102 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3103 THEN RESA_TAC
3104 THEN SUBGOAL_THEN`w1 IN wedge x w v (u:real^3)` ASSUME_TAC
3105 THENL[
3106 REWRITE_TAC[wedge;IN_ELIM_THM] 
3107 THEN ASM_REWRITE_TAC[];
3108 POP_ASSUM MP_TAC
3109 THEN ASM_REWRITE_TAC[]
3110 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
3111 THEN POP_ASSUM MP_TAC
3112 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
3113 THEN RESA_TAC
3114 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3115 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
3116 THEN POP_ASSUM MP_TAC
3117 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3118 THEN RESA_TAC
3119 THEN POP_ASSUM (fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC th THEN ONCE_REWRITE_TAC[CROSS_TRIPLE] THEN DISCH_TAC THEN ASSUME_TAC th) THEN ASSUME_TAC th)
3120 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3121 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
3122 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3123 THEN MRESA_TAC invariant_crossr_dot_esilon_3piont[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`;`w1:real^3`]
3124 THEN POP_ASSUM MP_TAC
3125 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
3126 THEN RESA_TAC
3127 THEN POP_ASSUM MP_TAC
3128 THEN ABBREV_TAC`h=t/ &2:real`
3129 THEN MP_TAC(REAL_ARITH`&0< t/\ t< &1/\ h= t/ &2 ==> &0 <= h/\ &0< h/\ &0<= &1 -h /\ h< t`)
3130 THEN RESA_TAC
3131 THEN DISCH_THEN(fun th-> MRESA1_TAC th `h:real`)
3132 THEN POP_ASSUM MP_TAC
3133 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3134 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3135 THEN STRIP_TAC
3136 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
3137 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3138 THEN STRIP_TAC
3139 THEN SUBGOAL_THEN`&0 < ((w - x) cross (v - x)) dot ((&1 - h) % w + h % w1 - x:real^3)/\ &0 < ((u - x) cross (w - x)) dot ((&1 - h) % w + h % w1 - x:real^3)` ASSUME_TAC
3140 THENL[
3141
3142 REWRITE_TAC[VECTOR_ARITH`(&1 - h) % w + h % w1-x=(&1 - h) % (w-x) + h % (w1-x)`]
3143 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
3144 THEN REDUCE_ARITH_TAC
3145 THEN STRIP_TAC
3146 THEN MATCH_MP_TAC REAL_LT_MUL
3147 THEN ASM_REWRITE_TAC[];
3148
3149 SUBGOAL_THEN`(&1 - h) % w + h % w1 IN aff_gt {x} {v,u,w:real^3}`ASSUME_TAC
3150 THENL[
3151 MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3152 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;IN_ELIM_THM;INTER;VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]);
3153 SUBGOAL_THEN`(&1 - h:real) % w + h % (w1:real^3) IN aff_ge {x} {w,w1:real^3}`ASSUME_TAC
3154 THENL[
3155  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`w:real^3`;` w1:real^3`][IN_ELIM_THM]
3156 THEN EXISTS_TAC`&0`
3157 THEN EXISTS_TAC`&1-h:real`
3158 THEN EXISTS_TAC`h:real`
3159 THEN ASM_REWRITE_TAC[REAL_ARITH`&0 + &1 - h + h = &1`]
3160 THEN REDUCE_VECTOR_TAC;
3161 MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`;]
3162 THEN POP_ASSUM MP_TAC
3163 THEN POP_ASSUM MP_TAC
3164 THEN POP_ASSUM MP_TAC
3165 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
3166 THEN MRESA_TAC dart_leads_into_fan_in_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`u:real^3`; `w:real^3`]
3167 THEN MRESA_TAC topological_component_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dart_leads_into x V E u w):real^3->bool`]
3168 THEN MP_TAC(SET_RULE`dart_leads_into x V E u w SUBSET yfan (x,V,E)
3169 /\ aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w
3170 ==> aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)`)
3171 THEN RESA_TAC
3172 THEN POP_ASSUM MP_TAC
3173 THEN REWRITE_TAC[yfan]
3174 THEN SET_TAC[]]]]]);;
3175
3176
3177
3178 let SIGMA_FAN_OF_FANADD_AT_POINT3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
3179 FAN(x,V,E)/\ FAN(x,V,E1)
3180 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3181 /\ sigma_fan x V E u w = v
3182 /\ fan80(x,V,E)
3183  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3184 /\ E UNION {{v,w}}=E1
3185 ==> sigma_fan x V E1 w v = u`,
3186
3187
3188 REPEAT STRIP_TAC
3189 THEN POP_ASSUM MP_TAC
3190 THEN POP_ASSUM MP_TAC
3191 THEN DISCH_THEN(LABEL_TAC"YEU")
3192 THEN DISCH_THEN(LABEL_TAC"EM")
3193 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3194 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3195 `(v:real^3)`]
3196 THEN MP_TAC(SET_RULE`{u,w:real^3} IN E /\ E UNION {{v,w}}=E1==> {u,w} IN E1`)
3197 THEN RESA_TAC
3198 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (u:real^3)`;
3199 `(w:real^3)`]
3200 THEN POP_ASSUM MP_TAC
3201 THEN POP_ASSUM MP_TAC
3202 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3203 THEN ASM_REWRITE_TAC[]
3204 THEN STRIP_TAC
3205 THEN STRIP_TAC
3206 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
3207 `(w:real^3)`]
3208 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3209 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3210 THEN POP_ASSUM MP_TAC
3211 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {v:real^3})\/ ~(set_of_edge w V E1 = {v})`)
3212 THENL[
3213 ASM_REWRITE_TAC[]
3214 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3215                  IN_INSERT; NOT_IN_EMPTY]
3216 THEN ARITH_TAC;
3217
3218 STRIP_TAC
3219 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`;`u:real^3`]
3220 THEN POP_ASSUM MATCH_MP_TAC
3221 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3222 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge1;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3223 THEN REPEAT STRIP_TAC
3224 THEN ABBREV_TAC`w2=inverse1_sigma_fan x V E w u:real^3`
3225 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`w:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC(th))
3226 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w2:real^3})\/ ~(set_of_edge w V E = {w2})`)
3227 THENL[
3228 ASM_REWRITE_TAC[]
3229 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3230                  IN_INSERT; NOT_IN_EMPTY]
3231 THEN ARITH_TAC;
3232
3233 STRIP_TAC
3234 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3235 THEN POP_ASSUM MP_TAC
3236 THEN POP_ASSUM MP_TAC
3237 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3238 THEN POP_ASSUM MP_TAC
3239 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3240 THEN ASM_REWRITE_TAC[]
3241 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3242 THEN STRIP_TAC
3243 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w2:real^3)`;
3244 `(w:real^3)`]
3245 THEN STRIP_TAC
3246 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3247 THEN POP_ASSUM MP_TAC
3248 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3249 THEN RESA_TAC
3250 THEN  MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w2:real^3`]
3251 THEN STRIP_TAC
3252 THEN REMOVE_ASSUM_TAC
3253 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w1:real^3`)
3254 THEN POP_ASSUM MP_TAC
3255 THEN DISJ_CASES_TAC(SET_RULE`~(w1 = w2:real^3)\/ (w1 = w2)`)
3256 THENL[
3257 RESA_TAC
3258 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` w2:real^3`]
3259 THEN POP_ASSUM MP_TAC
3260 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3261 THEN RESA_TAC
3262 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w w2 u==> azim x w v u <= azim x w w2 u`)
3263 THEN RESA_TAC
3264 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`u:real^3`]
3265 THEN POP_ASSUM MP_TAC
3266 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3267 THEN ASM_REWRITE_TAC[]
3268 THEN DISCH_THEN(LABEL_TAC "ME1")
3269 THEN MP_TAC(REAL_ARITH`azim x w w2 (u:real^3) = azim x w w2 v + azim x w v u
3270 /\ azim x w w2 u <= azim x w w2 w1
3271 /\ &0 <= azim x w v u
3272 ==>  azim x w w2 v <= azim x w w2 w1 `)
3273 THEN RESA_TAC
3274 THEN POP_ASSUM MP_TAC
3275 THEN SIMP_TAC[azim]
3276 THEN STRIP_TAC
3277 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3278 `(w:real^3)`]
3279 THEN POP_ASSUM MP_TAC
3280 THEN RESA_TAC
3281 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`w1:real^3`]
3282 THEN MATCH_MP_TAC(REAL_ARITH`!B A C. A+C<=A+B==>C<=B`)
3283 THEN EXISTS_TAC`azim x w w2 (v:real^3)`
3284 THEN POP_ASSUM (fun th -> REWRITE_TAC[SYM th;])
3285 THEN REMOVE_THEN "ME1"(fun th -> ASM_REWRITE_TAC[SYM th;]);
3286 STRIP_TAC
3287 THEN REMOVE_ASSUM_TAC
3288 THEN ASM_REWRITE_TAC[]
3289 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` w2:real^3`]
3290 THEN POP_ASSUM MP_TAC
3291 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3292 THEN RESA_TAC
3293 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w w2 u==> azim x w v u <= azim x w w2 u`)
3294 THEN RESA_TAC
3295 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`u:real^3`]
3296 THEN POP_ASSUM MP_TAC
3297 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3298 THEN ASM_REWRITE_TAC[]
3299 THEN STRIP_TAC
3300 THEN MATCH_MP_TAC(REAL_ARITH`!B A C. A+C<=A+B==>C<=B`)
3301 THEN EXISTS_TAC`azim x w w2 (v:real^3)`
3302 THEN POP_ASSUM (fun th -> REWRITE_TAC[SYM th;]
3303 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w w2 u /\ 
3304 azim x w w2 u = azim x w w2 v + azim x w v u
3305 ==> ~(azim x w w2 v = &0)`)
3306 THEN ASM_REWRITE_TAC[SYM th]
3307 THEN STRIP_TAC)
3308 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`][REAL_ARITH`A+ B-A=B`]
3309 THEN MATCH_MP_TAC(REAL_ARITH`!a b. a< b==> a<= b`)
3310 THEN SIMP_TAC[azim]]]]);;
3311
3312
3313 let elements_in_ds2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
3314 FAN(x,V,E)
3315  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3316 /\ fan80(x,V,E)
3317 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3318 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
3319 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3320 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3321 /\ sigma_fan x V E u w = v
3322 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3323 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3324 /\  f10=(x,w,v,u)
3325 /\ E UNION {{v,w}}= E1
3326 ==> f10 IN ds2`,
3327 REPEAT STRIP_TAC
3328 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3329 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3330 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
3331 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
3332 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3333 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3334 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3335 THEN REWRITE_TAC[face;orbit_map; IN_ELIM_THM]
3336 THEN EXISTS_TAC`0:num`
3337 THEN REWRITE_TAC[POWER;ARITH_RULE`0>=0`;I_DEF;EQ_PAIR_4]
3338 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3339 `v:real^3`;`u:real^3`; `w:real^3` ]);;
3340
3341
3342
3343
3344
3345
3346
3347
3348 let SIGMA_FAN_OF_FANADD_AT_POINT4=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3349
3350 FAN(x,V,E)/\ FAN(x,V,E1)
3351 /\ fan80(x,V,E)
3352 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ ~(u=w1)
3353 /\ {v,w1} IN E
3354 /\ sigma_fan x V E u w = v
3355  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3356 /\ E UNION {{v,w}}=E1
3357 ==> sigma_fan x V E1 v w1 = sigma_fan x V E v w1`,
3358
3359
3360
3361
3362 REPEAT STRIP_TAC
3363 THEN POP_ASSUM MP_TAC
3364 THEN POP_ASSUM MP_TAC
3365 THEN DISCH_THEN(LABEL_TAC"YEU")
3366 THEN DISCH_THEN(LABEL_TAC"EM")
3367 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3368 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3369 `(v:real^3)`]
3370 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3371 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
3372 THEN POP_ASSUM MP_TAC
3373 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {w1:real^3})\/ ~(set_of_edge v V E1 = {w1})`)
3374 THENL(*1*)[
3375
3376 ASM_REWRITE_TAC[]
3377 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3378                  IN_INSERT; NOT_IN_EMPTY]
3379 THEN ARITH_TAC;(*1*)
3380
3381
3382 STRIP_TAC
3383 THEN MP_TAC(SET_RULE`{v,w1:real^3} IN E /\ E UNION {{v,w}}=E1==> {v,w1} IN E1`)
3384 THEN RESA_TAC
3385 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3386 `(v:real^3)`]
3387 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3388 `(v:real^3)`]
3389 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`w1:real^3`;`sigma_fan x V E v w1:real^3`]
3390 THEN POP_ASSUM MATCH_MP_TAC
3391 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
3392 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {w1:real^3})\/ ~(set_of_edge v V E = {w1})`)
3393 THENL(*2*)[
3394
3395 ASM_REWRITE_TAC[]
3396 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3397                  IN_INSERT; NOT_IN_EMPTY]
3398 THEN ARITH_TAC;(*2*)
3399
3400 STRIP_TAC
3401 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
3402 `(w:real^3)`]
3403 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3404 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
3405 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3406 THEN  MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w1:real^3`]
3407 THEN POP_ASSUM MP_TAC
3408 THEN DISCH_THEN(LABEL_TAC"MA")
3409 THEN REPEAT STRIP_TAC
3410 THENL(*3*)[
3411 REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`w1':real^3`);(*3*)
3412
3413 ASM_REWRITE_TAC[]
3414 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`u:real^3`)
3415 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
3416 THEN DISJ_CASES_TAC(SET_RULE`~(sigma_fan x V E v u = w1)\/ (sigma_fan x V E v u = w1)`)
3417 THENL(*4*)[
3418 ASM_REWRITE_TAC[]
3419 THEN MRESA_TAC 
3420 MONO_AZIM_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`w1:real^3`;`u:real^3`]
3421 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v u):real^3`;`v:real^3`]
3422 THEN POP_ASSUM MP_TAC
3423 THEN RESA_TAC
3424 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`;`(sigma_fan x V E v u):real^3`]
3425 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
3426 THEN MP_TAC(REAL_ARITH`azim x v w1 (sigma_fan x V E v u) =
3427       azim x v w1 u + azim x v u (sigma_fan x V E v u)
3428 /\ azim x v u w <= azim x v u (sigma_fan x V E v u)
3429 ==> azim x v w1 u+ azim x v u w<= azim x v w1 (sigma_fan x V E v u)
3430 `)
3431 THEN POP_ASSUM(fun th -> REWRITE_TAC[th])
3432 THEN POP_ASSUM(fun th -> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3433 THEN ASM_REWRITE_TAC[]
3434 THEN STRIP_TAC
3435 THEN MP_TAC(REAL_ARITH` azim x v w1 (sigma_fan x V E v u)< &2 * pi
3436 /\ azim x v w1 u+ azim x v u w<= azim x v w1 (sigma_fan x V E v u)
3437 ==>
3438 azim x v w1 u+ azim x v u w< &2 * pi
3439 `)
3440 THEN ASM_SIMP_TAC[azim]
3441 THEN STRIP_TAC
3442 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w} IN E1`) THEN RESA_TAC
3443 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
3444 THEN MRESA_TAC sum3_azim_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`;`w:real^3`]
3445 THEN  MATCH_MP_TAC(REAL_ARITH`!A B C.A<=B /\ &0<= C ==>A<= B+C`)
3446 THEN ASM_SIMP_TAC[azim];(*4*)
3447
3448 MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
3449 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;` u:real^3`;`w1:real^3`]
3450 THEN MP_TAC(REAL_ARITH`
3451       azim x v w1 u + azim x v u (sigma_fan x V E v u) = &2 * pi
3452 /\ azim x v u w <= azim x v u (sigma_fan x V E v u)
3453 ==> azim x v w1 u+ azim x v u w<= &2 * pi
3454 `)
3455 THEN POP_ASSUM(fun th -> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3456 THEN ASM_REWRITE_TAC[]
3457 THEN DISJ_CASES_TAC(SET_RULE`azim x v u w1 = &0\/ ~(azim x v u w1 = &0)`)
3458 THENL(*5*)[
3459
3460 MRESA_TAC UNIQUE_AZIM_0_POINT_FAN[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w1:real^3`];(*5*)
3461
3462 ASM_REWRITE_TAC[REAL_ARITH`A-B+B=A`]
3463 THEN STRIP_TAC
3464 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w} IN E1`) THEN RESA_TAC
3465 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
3466 THEN MP_TAC(REAL_ARITH`azim x v w1 u + azim x v u w <= &2 * pi
3467 ==> azim x v w1 u + azim x v u w < &2 * pi\/ azim x v w1 u + azim x v u w = &2 * pi`)
3468 THEN RESA_TAC THENL(*6*)[
3469
3470 MRESA_TAC sum3_azim_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`;`w:real^3`]
3471 THEN  MATCH_MP_TAC(REAL_ARITH`!A B C.A<=B /\ &0<= C ==>A<= B+C`)
3472 THEN ASM_SIMP_TAC[azim];(*6*)
3473
3474 POP_ASSUM MP_TAC
3475 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;` u:real^3`;`w1:real^3`][REAL_ARITH`A-C+D=A<=> C=D`]
3476 THEN STRIP_TAC
3477 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`w:real^3`]
3478 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3479 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3480 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w1:real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
3481 THEN RESA_TAC
3482 THENL(*7*)[
3483 MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3484 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w1:real^3`]
3485 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w1:real^3`;]
3486 THEN SUBGOAL_THEN`aff_gt {x} {v, w1:real^3} SUBSET xfan(x,V:real^3->bool,E)` ASSUME_TAC
3487 THENL(*8*)[
3488
3489 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
3490 THEN GEN_TAC
3491 THEN STRIP_TAC
3492 THEN EXISTS_TAC`{v,w1}:real^3->bool`
3493 THEN MP_TAC(SET_RULE`x' IN aff_gt {x}{v,w1}/\ aff_gt {x} { v,w1} SUBSET aff_ge {x} {v, w1}
3494 ==> x' IN aff_ge {x:real^3} {v, w1}`)
3495 THEN RESA_TAC
3496 THEN ASM_TAC
3497 THEN SIMP_TAC[IN];(*8*)
3498
3499 MP_TAC(SET_RULE`aff_gt {x} {v, w1} SUBSET aff_gt {x} {v, w}/\y IN aff_gt {x} {v, w1}
3500 /\ aff_gt {x} {v, w1} SUBSET xfan (x,V,E)
3501 ==> ~(aff_gt {x:real^3} {v, w} INTER xfan (x,V:real^3->bool,E) ={})`)
3502 THEN RESA_TAC
3503 THEN POP_ASSUM MP_TAC
3504 THEN REWRITE_TAC[xfan;IN ]
3505 THEN STRIP_TAC
3506 THEN MRESAL_TAC AFF_GT_CUT_XFAN_IMP_EDGE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v:real^3`; `u:real^3`; `w:real^3`][IN]
3507 THEN POP_ASSUM MP_TAC
3508 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3509 THEN ASM_TAC
3510 THEN SIMP_TAC[IN] ];(*7*)
3511
3512
3513
3514
3515
3516 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v:real^3`;`w1:real^3`;`w:real^3`]
3517 THEN SUBGOAL_THEN`aff_gt {x} {w, v:real^3} SUBSET xfan(x,V:real^3->bool,E)` ASSUME_TAC
3518 THENL(*8*)[
3519 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
3520 THEN GEN_TAC
3521 THEN STRIP_TAC
3522 THEN EXISTS_TAC`{v,w1}:real^3->bool`
3523 THEN MP_TAC(SET_RULE`x' IN aff_gt {x}{w,v}/\ aff_gt {x} {w, v} SUBSET aff_ge {x} {v, w1}
3524 ==> x' IN aff_ge {x:real^3} {v, w1}`)
3525 THEN RESA_TAC
3526 THEN ASM_TAC
3527 THEN SIMP_TAC[IN];
3528
3529
3530 MRESA_TAC condition_aff_gt_subset_yfan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
3531 THEN POP_ASSUM MP_TAC
3532 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3533 THEN REWRITE_TAC[yfan]
3534 THEN POP_ASSUM MP_TAC
3535 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`w:real^3`;`v:real^3`]
3536 THEN POP_ASSUM MP_TAC
3537 THEN SET_TAC[]]]]]]]]]);;
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550 let SIGMA_FAN_OF_FANADD_AT_POINT5=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3551
3552 FAN(x,V,E)/\ FAN(x,V,E1)
3553 /\ fan80(x,V,E)
3554 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ ~(w1=inverse1_sigma_fan x V E w u )
3555 /\ {w,w1} IN E
3556 /\ sigma_fan x V E u w = v
3557  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3558 /\ E UNION {{v,w}}=E1
3559 ==> sigma_fan x V E1 w w1 = sigma_fan x V E w w1`,
3560 REPEAT STRIP_TAC
3561 THEN POP_ASSUM MP_TAC
3562 THEN POP_ASSUM MP_TAC
3563 THEN DISCH_THEN(LABEL_TAC"YEU")
3564 THEN DISCH_THEN(LABEL_TAC"EM")
3565 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3566 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3567 `(w:real^3)`]
3568 THEN POP_ASSUM MP_TAC
3569 THEN POP_ASSUM MP_TAC
3570 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3571 THEN ASM_REWRITE_TAC[]
3572 THEN STRIP_TAC
3573 THEN STRIP_TAC
3574 THEN MP_TAC(SET_RULE`{w:real^3, w1} IN E /\ E UNION {{v,w}}=E1 ==>{w, w1} IN E1`)
3575 THEN RESA_TAC
3576 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3577 `(w:real^3)`]
3578 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3579 `(w:real^3)`]
3580 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3581 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3582 THEN POP_ASSUM MP_TAC
3583 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {w1:real^3})\/ ~(set_of_edge w V E1 = {w1})`)
3584 THENL(*1*)[
3585
3586 ASM_REWRITE_TAC[]
3587 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3588                  IN_INSERT; NOT_IN_EMPTY]
3589 THEN ARITH_TAC;(*1*)
3590
3591 STRIP_TAC
3592 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`w:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC(th))
3593 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1:real^3})\/ ~(set_of_edge w V E = {w1})`)
3594 THENL(*2*)[
3595 ASM_REWRITE_TAC[]
3596 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3597                  IN_INSERT; NOT_IN_EMPTY]
3598 THEN ARITH_TAC;(*2*)
3599
3600 STRIP_TAC
3601 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`]
3602 THEN POP_ASSUM MP_TAC
3603 THEN DISCH_THEN(LABEL_TAC "MA")
3604 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` ((sigma_fan x V E w w1):real^3)`;`(w:real^3)`]
3605 THEN POP_ASSUM MP_TAC
3606 THEN RESA_TAC
3607 THEN MP_TAC(SET_RULE`{w:real^3, sigma_fan x V E w w1} IN E /\ E UNION {{v,w}}=E1 ==>{w, sigma_fan x V E w w1} IN E1`)
3608 THEN RESA_TAC
3609 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` ((sigma_fan x V E w w1):real^3)`;`(w:real^3)`]
3610 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`;`sigma_fan x V E w w1:real^3`]
3611 THEN POP_ASSUM MATCH_MP_TAC
3612 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3613 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
3614 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3615 THEN REPEAT STRIP_TAC
3616 THENL(*3*)[
3617 REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`w1':real^3`);(*3*)
3618
3619 POP_ASSUM MP_TAC
3620 THEN POP_ASSUM MP_TAC
3621 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3622 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`(v:real^3)`]
3623 THEN ASM_SIMP_TAC[set_of_only_edge;IN_SING]
3624 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3625 THEN POP_ASSUM MP_TAC
3626 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3`)
3627 THEN POP_ASSUM MP_TAC
3628 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3`)
3629 THEN POP_ASSUM MP_TAC
3630 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3631 THEN ASM_REWRITE_TAC[]
3632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3633 THEN REPEAT STRIP_TAC
3634 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` ((inverse1_sigma_fan x V E w u):real^3)`;`(w:real^3)`]
3635 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w (u:real^3)`)
3636 THEN MRESA_TAC MONO_AZIM_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`;`(inverse1_sigma_fan x V E w u):real^3`]
3637 THEN POP_ASSUM MP_TAC
3638 THEN DISJ_CASES_TAC(SET_RULE`~(u=w1:real^3)\/ u=w1`)
3639 THENL(*4*)[
3640 ASM_REWRITE_TAC[]
3641 THEN STRIP_TAC
3642 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`w:real^3`;`w1:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`u:real^3`]
3643 THEN POP_ASSUM MP_TAC
3644 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3645 THEN ASM_REWRITE_TAC[]
3646 THEN STRIP_TAC
3647 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
3648 THEN POP_ASSUM MP_TAC
3649 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
3650 THEN ASM_REWRITE_TAC[]
3651 THEN STRIP_TAC
3652 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3653 ==>
3654 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3655 THEN RESA_TAC
3656 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
3657 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`;`u:real^3`]
3658 THEN POP_ASSUM MP_TAC
3659 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3660 THEN ASM_REWRITE_TAC[]
3661 THEN STRIP_TAC
3662 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3663       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3664 /\ &0<= azim x w v u
3665 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3666 `)
3667 THEN ASM_SIMP_TAC[azim]
3668 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3669 THEN STRIP_TAC
3670 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) v <=
3671       azim x w (inverse1_sigma_fan x V E w u) u
3672 /\ azim x w w1 u =
3673       azim x w w1 (inverse1_sigma_fan x V E w u) +
3674       azim x w (inverse1_sigma_fan x V E w u) u
3675 /\ azim x w w1 u< &2 *pi
3676 ==>  azim x w w1 (inverse1_sigma_fan x V E w u) +
3677      azim x w (inverse1_sigma_fan x V E w u) v < &2 *pi
3678       
3679 `)
3680 THEN SIMP_TAC[azim]
3681 THEN ASM_REWRITE_TAC[]
3682 THEN STRIP_TAC
3683 THEN MRESA_TAC sum3_azim_fan[`x:real^3`;`w:real^3`;`w1:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`]
3684 THEN MATCH_MP_TAC (REAL_ARITH`!A B C. A<= B/\ &0<= C==> A<= B +C`)
3685 THEN ASM_SIMP_TAC[azim];(*4*)
3686
3687 POP_ASSUM(fun th -> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
3688 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
3689 THEN POP_ASSUM MP_TAC
3690 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
3691 THEN ASM_REWRITE_TAC[]
3692 THEN STRIP_TAC
3693 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3694 ==>
3695 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3696 THEN RESA_TAC
3697 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
3698 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`;`u:real^3`]
3699 THEN POP_ASSUM MP_TAC
3700 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3701 THEN ASM_REWRITE_TAC[]
3702 THEN STRIP_TAC
3703 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3704       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3705 /\ &0<= azim x w v u
3706 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3707 `)
3708 THEN ASM_SIMP_TAC[azim]
3709 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3710 THEN STRIP_TAC
3711 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) v <=
3712       azim x w (inverse1_sigma_fan x V E w u) u
3713 ==>  azim x w u (inverse1_sigma_fan x V E w u) +
3714      azim x w (inverse1_sigma_fan x V E w u) v <= 
3715 azim x w u (inverse1_sigma_fan x V E w u) +
3716     azim x w (inverse1_sigma_fan x V E w u) u
3717 `)
3718 THEN RESA_TAC
3719 THEN POP_ASSUM MP_TAC
3720 THEN DISJ_CASES_TAC(SET_RULE`azim x w (inverse1_sigma_fan x V E w u) u = &0\/ ~(azim x w (inverse1_sigma_fan x V E w u) (u:real^3) = &0)`)
3721 THENL(*5*)[
3722 MRESA_TAC UNIQUE_AZIM_0_POINT_FAN[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`;`u:real^3`];
3723
3724 MRESAL_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`;`u:real^3`][REAL_ARITH`A-B+B=A`]
3725 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SYM th;REAL_ARITH`A<=B<=> A<B \/ A=B`])
3726 THEN STRIP_TAC
3727 THENL(*6*)[
3728 MRESA_TAC sum3_azim_fan[`x:real^3`;`w:real^3`;`u:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`]
3729 THEN MATCH_MP_TAC (REAL_ARITH`!A B C. A<= B/\ &0<= C==> A<= B +C`)
3730 THEN ASM_SIMP_TAC[azim];
3731 POP_ASSUM MP_TAC
3732 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`;`u:real^3`][REAL_ARITH`A-B+C=A<=> B=C`]
3733 THEN STRIP_TAC
3734 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`u:real^3`;`v:real^3`]
3735 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3736 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3737 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
3738 THEN DISCH_TAC
3739 THEN POP_ASSUM (fun th -> MP_TAC th
3740 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
3741 THEN DISCH_TAC
3742 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM1"))
3743 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
3744 THEN POP_ASSUM MP_TAC
3745 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
3746 THEN ASM_REWRITE_TAC[]]]]]]]);;
3747
3748
3749
3750
3751 let SIGMA_FAN_OF_FANADD_AT_POINT6=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3752 FAN(x,V,E)/\ FAN(x,V,E1)
3753 /\ fan80(x,V,E)
3754 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ w1=inverse1_sigma_fan x V E w u 
3755 /\ {w,w1} IN E
3756 /\ sigma_fan x V E u w = v
3757  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3758 /\ E UNION {{v,w}}=E1
3759 ==> sigma_fan x V E1 w w1 = v`,
3760
3761 REPEAT STRIP_TAC
3762 THEN POP_ASSUM MP_TAC
3763 THEN POP_ASSUM MP_TAC
3764 THEN DISCH_THEN(LABEL_TAC"YEU")
3765 THEN DISCH_THEN(LABEL_TAC"EM")
3766 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3767 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3768 `(w:real^3)`]
3769 THEN POP_ASSUM MP_TAC
3770 THEN POP_ASSUM MP_TAC
3771 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3772 THEN ASM_REWRITE_TAC[]
3773 THEN STRIP_TAC
3774 THEN STRIP_TAC
3775 THEN MP_TAC(SET_RULE`{w:real^3, w1} IN E /\ E UNION {{v,w}}=E1 ==>{w, w1} IN E1`)
3776 THEN RESA_TAC
3777 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3778 `(w:real^3)`]
3779 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3780 `(w:real^3)`]
3781 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3782 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3783 THEN POP_ASSUM MP_TAC
3784 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {w1:real^3})\/ ~(set_of_edge w V E1 = {w1})`)
3785 THENL[
3786 ASM_REWRITE_TAC[]
3787 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3788                  IN_INSERT; NOT_IN_EMPTY]
3789 THEN ARITH_TAC;
3790
3791 STRIP_TAC
3792 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`w:real^3` THEN POP_ASSUM MP_TAC THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"YEU"))
3793 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1:real^3})\/ ~(set_of_edge w V E = {w1})`)
3794 THENL[
3795 ASM_REWRITE_TAC[]
3796 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3797                  IN_INSERT; NOT_IN_EMPTY]
3798 THEN ARITH_TAC;
3799 DISCH_THEN(LABEL_TAC"LINHYEU")
3800 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` v:real^3`;`(w:real^3)`]
3801 THEN MRESA_TAC UNIQUE_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`;`v:real^3`]
3802 THEN POP_ASSUM MATCH_MP_TAC
3803 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3804 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3805 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3806 THEN STRIP_TAC
3807 THENL[
3808 STRIP_TAC
3809 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
3810 THEN POP_ASSUM MP_TAC
3811 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3812 THEN ASM_REWRITE_TAC[]
3813 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3814 THEN ASM_REWRITE_TAC[];
3815 POP_ASSUM MP_TAC
3816 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3817 THEN ASM_REWRITE_TAC[]
3818 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3819 THEN ASM_REWRITE_TAC[]
3820 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3821 THEN REWRITE_TAC[UNION;IN_ELIM_THM;IN_SING]
3822 THEN REPEAT STRIP_TAC
3823 THENL[(*4*)
3824 REMOVE_THEN "LINHYEU" MP_TAC
3825 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1':real^3})\/ ~(set_of_edge w V E = {w1'})`)
3826 THENL[
3827
3828 ASM_REWRITE_TAC[]
3829 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3830                  IN_INSERT; NOT_IN_EMPTY]
3831 THEN ARITH_TAC;
3832 STRIP_TAC
3833 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3834 THEN REMOVE_ASSUM_TAC
3835 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3836 THEN POP_ASSUM MP_TAC
3837 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3838 THEN ASM_REWRITE_TAC[]
3839 THEN STRIP_TAC
3840 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`]
3841 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w1':real^3`)
3842 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
3843 THEN POP_ASSUM MP_TAC
3844 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3845 THEN ASM_REWRITE_TAC[]
3846 THEN STRIP_TAC
3847 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3848 ==>
3849 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3850 THEN RESA_TAC
3851 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`;`u:real^3`]
3852 THEN POP_ASSUM MP_TAC
3853 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3854 THEN ASM_REWRITE_TAC[]
3855 THEN STRIP_TAC
3856 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3857       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3858 /\ &0<= azim x w v u
3859 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3860 `)
3861 THEN ASM_SIMP_TAC[azim]
3862 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3863 THEN REMOVE_ASSUM_TAC
3864 THEN REMOVE_ASSUM_TAC
3865 THEN POP_ASSUM MP_TAC
3866 THEN REAL_ARITH_TAC];
3867 POP_ASSUM MP_TAC
3868 THEN POP_ASSUM MP_TAC
3869 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` u:real^3`;`(v:real^3)`]
3870 THEN MRESAL_TAC set_of_only_edge1[`v:real^3`;`w:real^3`;`V:real^3->bool`][IN_SING]
3871 THEN STRIP_TAC
3872 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
3873 THEN REAL_ARITH_TAC]]]]);;
3874
3875
3876
3877
3878 let f1_fan_of_f10_eq_f20=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20.
3879 FAN(x,V,E)
3880  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3881 /\ fan80(x,V,E)
3882 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3883 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
3884 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3885 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3886 /\ sigma_fan x V E u w = v
3887 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3888 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3889 /\ f10=(x,w,v,u)
3890 /\ f20=(x,v,u,w)
3891 /\ E UNION {{v,w}}= E1
3892 ==> f20=f1_fan x V E1 f10`,
3893
3894 REPEAT STRIP_TAC
3895 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3896 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3897 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
3898 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
3899 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3900 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3901 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3902 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3903 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3904 `v:real^3`;`u:real^3`; `w:real^3` ]
3905 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3906 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
3907 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3908 THEN POP_ASSUM MP_TAC
3909 THEN MP_TAC(SET_RULE`{v,u:real^3} IN E /\ E UNION {{v,w}}= E1
3910 ==> {v,u} IN E1`) THEN RESA_TAC THEN RESA_TAC);;
3911
3912
3913
3914
3915
3916
3917 let f1_fan_of_f20_eq_f30=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f20 f30.
3918 FAN(x,V,E)
3919  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3920 /\ fan80(x,V,E)
3921 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3922 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
3923 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3924 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3925 /\ sigma_fan x V E u w = v
3926 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3927 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3928 /\ f20=(x,v,u,w)
3929 /\ f30=(x,u,w,v)
3930 /\ E UNION {{v,w}}= E1
3931 ==> f30=f1_fan x V E1 f20`,
3932
3933 REPEAT STRIP_TAC
3934 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3935 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3936 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
3937 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
3938 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3939 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3940 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3941 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3942 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3943 `v:real^3`; `w:real^3` ]
3944 THEN POP_ASSUM MP_TAC
3945 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3946 THEN RESA_TAC
3947 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
3948 THEN POP_ASSUM MP_TAC
3949 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3950 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
3951 `(u:real^3)`]
3952 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3953 `(v:real^3)`]
3954 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
3955 THEN RESA_TAC
3956 THEN DISCH_TAC
3957 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3958 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`]
3959 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
3960 THEN POP_ASSUM MP_TAC
3961 THEN MP_TAC(SET_RULE`{u:real^3,w} IN E /\ E UNION {{v,w}}= E1
3962 ==> {u,w} IN E1`) THEN RESA_TAC THEN RESA_TAC);;
3963
3964
3965 let f1_fan_of_f30_eq_f10=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f30.
3966 FAN(x,V,E)
3967  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3968 /\ fan80(x,V,E)
3969 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3970 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
3971 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3972 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3973 /\ sigma_fan x V E u w = v
3974 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3975 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3976 /\ f10=(x,w,v,u)
3977 /\ f30=(x,u,w,v)
3978 /\ E UNION {{v,w}}= E1
3979 ==> f10=f1_fan x V E1 f30`,
3980
3981 REPEAT STRIP_TAC
3982 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3983 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3984 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
3985 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
3986 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3987 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3988 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3989 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3990 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3991 `v:real^3`; `u:real^3`;`w:real^3` ]
3992 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3993 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
3994 THEN POP_ASSUM (fun th-> MRESA1_TAC th`v:real^3`)
3995 THEN POP_ASSUM MP_TAC
3996 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3997 THEN MP_TAC(SET_RULE` E UNION {{v,w:real^3}}= E1
3998 ==> {v,w} IN E1`) 
3999 THEN RESA_TAC THEN RESA_TAC);;
4000
4001
4002
4003
4004
4005
4006 let f10_in_d1_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4007 FAN(x,V,E)
4008  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4009 /\ fan80(x,V,E)
4010 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4011 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4012 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4013 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4014 /\ sigma_fan x V E u w = v
4015 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4016 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4017 /\ f10=(x,w,v,u)
4018 /\ (x,v,u,w)=f20
4019 /\ (x,u,w,v)=f30
4020 /\ E UNION {{v,w}}= E1
4021 ==> f10 IN d1_fan (x,V,E1)`,
4022 REPEAT STRIP_TAC
4023 THEN POP_ASSUM MP_TAC
4024 THEN DISCH_THEN(LABEL_TAC"EM")
4025 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4026 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4027 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4028 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4029 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4030 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4031 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4032 THEN MRESA_TAC f1_fan_of_f10_eq_f20[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4033 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)` ]
4034 THEN MRESA_TAC f1_fan_of_f20_eq_f30[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4035 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
4036 THEN MRESA_TAC f1_fan_of_f30_eq_f10[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4037 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f30:real^3#real^3#real^3#real^3)`; ]
4038 THEN MRESAL_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4039 `v:real^3`; `u:real^3`;`w:real^3` ][d1_fan; IN_ELIM_THM]
4040 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4041 THEN EXISTS_TAC`x:real^3`
4042 THEN EXISTS_TAC`w:real^3`
4043 THEN EXISTS_TAC`v:real^3`
4044 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
4045 THEN ASM_REWRITE_TAC[]
4046 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4047 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th])
4048 THEN SET_TAC[]);;
4049
4050
4051
4052 let pair_disjoint_f10_f20_f30=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4053 FAN(x,V,E)
4054  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4055 /\ fan80(x,V,E)
4056 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4057 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4058 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4059 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4060 /\ sigma_fan x V E u w = v
4061 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4062 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4063 /\ f10=(x,w,v,u)
4064 /\ f20=(x,v,u,w)
4065 /\ f30=(x,u,w,v)
4066 /\ E UNION {{v,w}}= E1
4067 ==> ~(f10= f20)/\ ~(f20= f30)/\ ~(f30=f10)`,
4068
4069 REPEAT GEN_TAC THEN STRIP_TAC
4070 THEN ASM_REWRITE_TAC[EQ_PAIR_4;SET_RULE`~(A/\B)<=> ~ A\/ ~ B`]
4071 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;` (v:real^3)`]
4072 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;` (u:real^3)`]);;
4073
4074
4075 let n_fan_permutes_prime=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) p.
4076 FAN(x,V,E) /\ p = ( \ t. res (t x V E ) (d1_fan (x,V,E)))
4077 ==> (p n_fan) permutes (d_fan (x,V,E))`,
4078
4079 REPEAT STRIP_TAC
4080 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4081 THEN MRESA_TAC PERMUTES_FINITE_SURJECTIVE[`d_fan (x:real^3,V,E)`;`res (n_fan x V E) (d1_fan (x:real^3,V,E))`]
4082 THEN STRIP_TAC
4083 THENL[
4084 REWRITE_TAC[res;d_fan;UNION;IN_ELIM_THM;DE_MORGAN_THM]
4085 THEN REPEAT STRIP_TAC
4086 THEN ASM_REWRITE_TAC[];
4087 MRESA_TAC into_domain_n_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4088 THEN REPEAT STRIP_TAC
4089 THEN DISJ_CASES_TAC(SET_RULE`~(y IN d1_fan (x,V,E) )\/ (y IN d1_fan (x:real^3,V,E))`)
4090 THENL[
4091 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4092 THEN ASM_REWRITE_TAC[res];
4093 MRESA_TAC permuters_of_enf_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4094 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4095 THEN POP_ASSUM  (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4096 THEN REWRITE_TAC[res]
4097 THEN EXISTS_TAC`b:real^3#real^3#real^3#real^3`
4098 THEN ASM_REWRITE_TAC[]
4099 THEN MRESA_TAC subset_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4100 THEN ASM_TAC THEN SET_TAC[]]]);;
4101
4102
4103 let f1_fan_permutes_prime=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) p.
4104 FAN(x,V,E) /\ p = ( \ t. res (t x V E ) (d1_fan (x,V,E)))
4105 ==> (p f1_fan) permutes (d_fan (x,V,E))`,
4106
4107 REPEAT STRIP_TAC
4108 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4109 THEN MRESA_TAC PERMUTES_FINITE_SURJECTIVE[`d_fan (x:real^3,V,E)`;`res (f1_fan x V E) (d1_fan (x:real^3,V,E))`]
4110 THEN STRIP_TAC
4111 THENL[
4112 REWRITE_TAC[res;d_fan;UNION;IN_ELIM_THM;DE_MORGAN_THM]
4113 THEN REPEAT STRIP_TAC
4114 THEN ASM_REWRITE_TAC[];
4115 MRESA_TAC into_domain_f1_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4116 THEN REPEAT STRIP_TAC
4117 THEN DISJ_CASES_TAC(SET_RULE`~(y IN d1_fan (x,V,E) )\/ (y IN d1_fan (x:real^3,V,E))`)
4118 THENL[
4119 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4120 THEN ASM_REWRITE_TAC[res];
4121 MRESA_TAC permuters_of_enf_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4122 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4123 THEN POP_ASSUM  (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4124 THEN REWRITE_TAC[res]
4125 THEN EXISTS_TAC`b:real^3#real^3#real^3#real^3`
4126 THEN ASM_REWRITE_TAC[]
4127 THEN MRESA_TAC subset_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4128 THEN ASM_TAC THEN SET_TAC[]]]);;
4129
4130
4131
4132
4133
4134
4135 let card_ds2_fanadd_eq3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4136 FAN(x,V,E)
4137  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4138 /\ fan80(x,V,E)
4139 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4140 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4141 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4142 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4143 /\ sigma_fan x V E u w = v
4144 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4145 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4146 /\ (x,w,v,u)=f10
4147 /\ (x,v,u,w)=f20
4148 /\ (x,u,w,v)=f30
4149 /\ E UNION {{v,w}}= E1
4150 ==> CARD ds2=3`,
4151
4152 REPEAT STRIP_TAC
4153 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4154 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4155 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4156 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4157 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4158 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4159 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4160 THEN MRESA_TAC f1_fan_of_f10_eq_f20[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4161 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)` ]
4162 THEN MRESA_TAC f1_fan_of_f20_eq_f30[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4163 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
4164 THEN MRESA_TAC f1_fan_of_f30_eq_f10[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4165 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f30:real^3#real^3#real^3#real^3)`; ]
4166 THEN POP_ASSUM MP_TAC
4167 THEN DISCH_THEN(LABEL_TAC"EM YEU")
4168 THEN MRESAL_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4169 `v:real^3`; `u:real^3`;`w:real^3` ][face;orbit_map]
4170 THEN MRESA_TAC f10_in_d1_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4171 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4172 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`3:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4173 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4174 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`2:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4175 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4176 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`1:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4177 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4178 THEN MRESAL_TAC card_orbit_le[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`3:num`;`(f10:real^3#real^3#real^3#real^3)`][ARITH_RULE`~(3=0)`;ARITH_RULE`3=SUC 2`;POWER_2;POWER;o_DEF]
4179 THEN POP_ASSUM MP_TAC
4180 THEN REMOVE_THEN "EM YEU"(fun th -> REWRITE_TAC[SYM th;ARITH_RULE`SUC 2=3`;])
4181 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`0:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f10:real^3#real^3#real^3#real^3)`]
4182 [POWER;I_DEF]
4183 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`1:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`]
4184 [POWER_1]
4185 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`2:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`]
4186 [POWER_2;o_DEF]
4187 THEN MP_TAC(SET_RULE`f10 IN orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4188 /\ f1_fan x V E1 f10 IN
4189       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4190 /\ f1_fan x V E1 (f1_fan x V E1 f10) IN
4191       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4192 ==>
4193 {f10, f1_fan x V E1 f10,f1_fan x V E1 (f1_fan x V E1 f10)} SUBSET
4194       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10`)
4195 THEN RESA_TAC
4196 THEN MRESA_TAC pair_disjoint_f10_f20_f30[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4197 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4198 THEN SUBGOAL_THEN(`CARD {f10,f20,f30:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
4199 THENL[
4200 SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4201                  IN_INSERT; NOT_IN_EMPTY]
4202
4203 THEN ASM_REWRITE_TAC[]
4204 THEN ARITH_TAC;
4205 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4206 THEN STRIP_TAC
4207 THEN MRESA_TAC f1_fan_permutes_prime[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4208 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`]
4209 THEN MRESA_TAC lemma_orbit_finite[`d1_fan(x:real^3,V,E1)`;`(res (f1_fan x V E1) (d1_fan (x:real^3,V,E1)))`;`(f10:real^3#real^3#real^3#real^3)`]
4210 THEN MRESAL_TAC CARD_SUBSET_LE[`{f10, f1_fan x V E1 f10, f1_fan (x:real^3) V E1 (f1_fan x V E1 f10)}`;`orbit_map (res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))) f10`;][orbit_map]
4211 ]);;
4212
4213
4214
4215
4216
4217 let reperentation_of_ds2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4218 FAN(x,V,E)
4219  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4220 /\ fan80(x,V,E)
4221 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4222 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4223 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4224 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4225 /\ sigma_fan x V E u w = v
4226 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4227 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4228 /\ (x,w,v,u)=f10
4229 /\ (x,v,u,w)=f20
4230 /\ (x,u,w,v)=f30
4231 /\ E UNION {{v,w}}= E1
4232 ==> ds2={f10,f20,f30}`,
4233
4234 REPEAT STRIP_TAC
4235 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4236 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4237 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4238 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4239 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4240 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4241 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4242 THEN MRESA_TAC f1_fan_of_f10_eq_f20[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4243 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)` ]
4244 THEN MRESA_TAC f1_fan_of_f20_eq_f30[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4245 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
4246 THEN MRESA_TAC f1_fan_of_f30_eq_f10[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4247 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f30:real^3#real^3#real^3#real^3)`; ]
4248 THEN POP_ASSUM MP_TAC
4249 THEN DISCH_THEN(LABEL_TAC"EM YEU")
4250 THEN MRESAL_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4251 `v:real^3`; `u:real^3`;`w:real^3` ][face;orbit_map]
4252 THEN MRESA_TAC f10_in_d1_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4253 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4254 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`3:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4255 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4256 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`2:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4257 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4258 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`1:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4259 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4260 THEN MRESAL_TAC card_orbit_le[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`3:num`;`(f10:real^3#real^3#real^3#real^3)`][ARITH_RULE`~(3=0)`;ARITH_RULE`3=SUC 2`;POWER_2;POWER;o_DEF]
4261 THEN POP_ASSUM MP_TAC
4262 THEN REMOVE_THEN "EM YEU"(fun th -> REWRITE_TAC[SYM th;ARITH_RULE`SUC 2=3`;])
4263 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`0:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f10:real^3#real^3#real^3#real^3)`]
4264 [POWER;I_DEF]
4265 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`1:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`]
4266 [POWER_1]
4267 THEN MRESAL_TAC in_orbit_lemma[`res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))`;`2:num`;`(f10:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`]
4268 [POWER_2;o_DEF]
4269 THEN MP_TAC(SET_RULE`f10 IN orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4270 /\ f1_fan x V E1 f10 IN
4271       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4272 /\ f1_fan x V E1 (f1_fan x V E1 f10) IN
4273       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4274 ==>
4275 {f10, f1_fan x V E1 f10,f1_fan x V E1 (f1_fan x V E1 f10)} SUBSET
4276       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10`)
4277 THEN RESA_TAC
4278 THEN MRESA_TAC pair_disjoint_f10_f20_f30[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4279 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4280 THEN SUBGOAL_THEN(`CARD {f10,f20,f30:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
4281 THENL[
4282 SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4283                  IN_INSERT; NOT_IN_EMPTY]
4284
4285 THEN ASM_REWRITE_TAC[]
4286 THEN ARITH_TAC;
4287 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4288 THEN STRIP_TAC
4289 THEN MRESA_TAC f1_fan_permutes_prime[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4290 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`]
4291 THEN MRESA_TAC lemma_orbit_finite[`d1_fan(x:real^3,V,E1)`;`(res (f1_fan x V E1) (d1_fan (x:real^3,V,E1)))`;`(f10:real^3#real^3#real^3#real^3)`]
4292 THEN MRESAL_TAC CARD_SUBSET_LE[`{f10, f1_fan x V E1 f10, f1_fan (x:real^3) V E1 (f1_fan x V E1 f10)}`;`orbit_map (res (f1_fan x V E1) (d1_fan (x:real^3,V,E1))) f10`;][orbit_map]]);;
4293
4294
4295 let edge_not_in_ds2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4296 FAN(x,V,E)
4297 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4298 /\ fan80(x,V,E)
4299 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4300 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4301 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4302 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4303 /\ sigma_fan x V E u w = v
4304 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4305 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4306 /\ f10=(x,w,v,u)
4307 /\ f20=(x,v,u,w)
4308 /\ f30=(x,u,w,v)
4309 /\ E UNION {{v,w}}=E1
4310 ==> ~((x,v,w,sigma_fan x V E1 v w) IN ds2)`,
4311
4312 REPEAT GEN_TAC THEN STRIP_TAC
4313 THEN MRESAL_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4314 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ][SET_RULE`~(a IN {b,c,d})<=> ~(a=b)/\ ~(a=c)/\ ~(a=d) `;EQ_PAIR_4;SET_RULE`~(A/\B)<=> ~ A\/ ~ B`]
4315 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;` (v:real^3)`]
4316 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;` (u:real^3)`]
4317 THEN ASM_TAC
4318 THEN DISJ_CASES_TAC(SET_RULE`v=w \/ ~(v=w:real^3)`)
4319 THEN ASM_REWRITE_TAC[]
4320 THEN REPEAT STRIP_TAC
4321 THEN MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;
4322 ` w:real^3`]
4323 THEN FIND_ASSUM (MP_TAC)`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
4324 THEN DISCH_TAC
4325 THEN POP_ASSUM(fun th-> MP_TAC (ISPEC `u:real^3` th) )
4326 THEN POP_ASSUM MP_TAC
4327 THEN POP_ASSUM MP_TAC
4328 THEN POP_ASSUM MP_TAC
4329 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
4330 THEN REPEAT STRIP_TAC
4331 THEN POP_ASSUM MP_TAC
4332 THEN ASM_REWRITE_TAC[]
4333 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4334                  IN_INSERT; NOT_IN_EMPTY]
4335 THEN ARITH_TAC);;
4336
4337
4338
4339 let disjoint_ds1_and_ds2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
4340 FAN(x,V,E)
4341  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4342 /\ fan80(x,V,E)
4343 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4344 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4345 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4346 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4347 /\ sigma_fan x V E u w = v
4348 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4349 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4350 /\ (x,w,v,u)=f10
4351 /\ (x,v,u,w)=f20
4352 /\ (x,u,w,v)=f30
4353 /\ E UNION {{v,w}}= E1
4354 ==> ~(ds1=ds2)`,
4355 REPEAT GEN_TAC THEN STRIP_TAC
4356 THEN MRESA_TAC edge_not_in_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4357 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4358 THEN POP_ASSUM MP_TAC
4359 THEN MATCH_MP_TAC MONO_NOT
4360 THEN STRIP_TAC
4361 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])
4362 THEN EXISTS_TAC`0:num`
4363 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]);;
4364
4365
4366
4367
4368 let card_eq_image_in_d_fan=prove(`!x V E ds.
4369 FAN(x,V,E) /\
4370 (!v. v IN V==>CARD (set_of_edge v V E) >1)/\
4371 ds SUBSET d_fan(x,V,E)
4372 ==>
4373 CARD(IMAGE pr23 ds)= CARD ds`,
4374
4375 REPEAT STRIP_TAC
4376 THEN MATCH_MP_TAC CARD_IMAGE_INJ
4377 THEN MRESA_TAC finite_d_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
4378 THEN MRESA_TAC FINITE_SUBSET[`ds:real^3#real^3#real^3#real^3->bool`; `d_fan(x:real^3,V,E):real^3#real^3#real^3#real^3->bool`]
4379 THEN REPEAT STRIP_TAC
4380 THEN POP_ASSUM MP_TAC
4381 THEN MP_TAC(SET_RULE`x' IN ds /\ y IN ds /\ ds SUBSET d_fan(x,V,E)==> x' IN d_fan(x:real^3,V,E)/\ y IN d_fan(x,V,E)`)
4382 THEN RESA_TAC
4383 THEN POP_ASSUM MP_TAC
4384 THEN POP_ASSUM MP_TAC
4385 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
4386 THEN REWRITE_TAC[d_fan;UNION;d1_fan;IN_ELIM_THM]
4387 THEN REPEAT STRIP_TAC
4388 THEN POP_ASSUM MP_TAC
4389 THEN ASM_REWRITE_TAC[pr23;PAIR_EQ]
4390 THEN RESA_TAC);;
4391
4392
4393
4394
4395
4396
4397 let trans=new_definition`trans (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) E1=(\(x,y:real^3,z,sigma_fan x V E y z). (x,y,z,sigma_fan x V E1 y z))`
4398 ;;
4399
4400 let tran=new_definition`tran x V E1=(\(x,y:real^3,z,w). (x,y,z,sigma_fan x V E1 y z))`
4401 ;;
4402
4403
4404 let tranf=new_definition`tranf x V E E1 ds=(@f. ?y. f = face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds)`
4405 ;;
4406
4407
4408
4409 let exists_tranf_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
4410 FAN(x,V,E)
4411  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4412 /\ fan80(x,V,E)
4413 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4414 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4415 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4416 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4417 /\ sigma_fan x V E u w = v
4418 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4419 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4420 /\ (x,w,v,u)=f10
4421 /\ (x,v,u,w)=f20
4422 /\ (x,u,w,v)=f30
4423 /\ E UNION {{v,w}}= E1
4424 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4425 ==> ?f. ?y. f = face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0`,
4426
4427 REPEAT STRIP_TAC
4428 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4429 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4430 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4431 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4432 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4433 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4434 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4435 THEN MP_TAC(SET_RULE` ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4436 ==> ds0 IN face_set (hypermap1_of_fanx (x,V,E)) `)
4437 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM;]
4438 THEN STRIP_TAC
4439 THEN POP_ASSUM MP_TAC
4440 THEN POP_ASSUM MP_TAC
4441 THEN DISCH_THEN(LABEL_TAC"YEU")
4442 THEN DISCH_THEN(LABEL_TAC"EM")
4443 THEN REMOVE_THEN "YEU" MP_TAC
4444 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4445 THEN STRIP_TAC
4446 THEN REMOVE_THEN "EM" MP_TAC
4447 THEN RESA_TAC
4448 THEN EXISTS_TAC`face (hypermap1_of_fanx (x:real^3,V,E1)) (tran x V E1 (x':real^3#real^3#real^3#real^3))`
4449 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
4450 THEN ASM_REWRITE_TAC[tran;orbit_map;IN_ELIM_THM]
4451 THEN EXISTS_TAC`0:num`
4452 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]);;
4453
4454
4455
4456
4457
4458
4459 let TRANF=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
4460 FAN(x,V,E)
4461  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4462 /\ fan80(x,V,E)
4463 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4464 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4465 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4466 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4467 /\ sigma_fan x V E u w = v
4468 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4469 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4470 /\ (x,w,v,u)=f10
4471 /\ (x,v,u,w)=f20
4472 /\ (x,u,w,v)=f30
4473 /\ E UNION {{v,w}}= E1
4474 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4475 ==>
4476 ?y. tranf x V E E1 ds0 = face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0`,
4477
4478 REPEAT GEN_TAC THEN STRIP_TAC THEN ONCE_REWRITE_TAC[tranf]
4479   THEN MRESA_TAC exists_tranf_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4480 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
4481 THEN SELECT_ELIM_TAC 
4482 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
4483 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3` THEN ASM_REWRITE_TAC[]);;
4484
4485
4486
4487
4488
4489
4490 let exists_edge_not_edge_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y n:num.
4491 FAN(x,V,E)
4492  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4493 /\ fan80(x,V,E)
4494 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4495 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4496 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4497 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4498 /\ sigma_fan x V E u w = v
4499 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4500 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4501 /\ (x,w,v,u)=f10
4502 /\ (x,v,u,w)=f20
4503 /\ (x,u,w,v)=f30
4504 /\ E UNION {{v,w}}= E1
4505 /\ y IN d_fan(x,V,E)
4506 ==> 
4507 ?y1. y1 IN d_fan(x,V,E)/\ ~(pr2 y1 IN {v,w})/\ 
4508 face (hypermap1_of_fanx (x,V,E)) y1= face (hypermap1_of_fanx (x,V,E)) y
4509 `,
4510
4511 REPEAT STRIP_TAC
4512 THEN POP_ASSUM MP_TAC
4513 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4514 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4515 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4516 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4517 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4518 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4519 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4520 THEN STRIP_TAC
4521 THEN DISJ_CASES_TAC(SET_RULE`~(pr2 y IN {v,w})\/ pr2 y IN {v,w}`)
4522 THENL[
4523 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4524 THEN ASM_REWRITE_TAC[];
4525
4526 POP_ASSUM MP_TAC
4527 THEN REWRITE_TAC[SET_RULE`A IN {B,C}<=> A=B\/ A=C`]
4528 THEN STRIP_TAC
4529 THENL[ EXISTS_TAC`f1_fan x V E (y:real^3#real^3#real^3#real^3)`
4530 THEN ASM_REWRITE_TAC[]
4531 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
4532 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4533 THEN SUBGOAL_THEN`f1_fan x V E y IN face (hypermap1_of_fanx (x:real^3,V,E)) y` ASSUME_TAC
4534 THENL[
4535 ASM_REWRITE_TAC[face;IN_ELIM_THM;orbit_map;]
4536 THEN EXISTS_TAC`1:num`
4537 THEN REWRITE_TAC[ARITH_RULE`1>=0`;]
4538 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4539 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
4540 THEN REWRITE_TAC[POWER_1];
4541
4542 MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`y:real^3#real^3#real^3#real^3`;`(f1_fan x V E y):real^3#real^3#real^3#real^3`]
4543 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4544 THEN REMOVE_ASSUM_TAC 
4545 THEN POP_ASSUM MP_TAC 
4546 THEN POP_ASSUM MP_TAC 
4547 THEN ASM_REWRITE_TAC[d1_fan; IN_ELIM_THM;]
4548 THEN RESA_TAC
4549 THEN ASM_REWRITE_TAC[f1_fan;pr2]
4550 THEN POP_ASSUM MP_TAC
4551 THEN POP_ASSUM MP_TAC
4552 THEN POP_ASSUM MP_TAC
4553 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4554 THEN REPEAT STRIP_TAC
4555 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
4556 `(v':real^3)`]
4557 THEN REMOVE_THEN"YEU EM" MP_TAC
4558 THEN ASM_REWRITE_TAC[]
4559 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4560 THEN ASM_REWRITE_TAC[]];
4561
4562 EXISTS_TAC`f1_fan x V E (y:real^3#real^3#real^3#real^3)`
4563 THEN ASM_REWRITE_TAC[]
4564 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
4565 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4566 THEN SUBGOAL_THEN`f1_fan x V E y IN face (hypermap1_of_fanx (x:real^3,V,E)) y` ASSUME_TAC
4567 THENL[
4568 ASM_REWRITE_TAC[face;IN_ELIM_THM;orbit_map;]
4569 THEN EXISTS_TAC`1:num`
4570 THEN REWRITE_TAC[ARITH_RULE`1>=0`;]
4571 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4572 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
4573 THEN REWRITE_TAC[POWER_1];
4574
4575 MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`y:real^3#real^3#real^3#real^3`;`(f1_fan x V E y):real^3#real^3#real^3#real^3`]
4576 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4577 THEN REMOVE_ASSUM_TAC 
4578 THEN POP_ASSUM MP_TAC 
4579 THEN POP_ASSUM MP_TAC 
4580 THEN ASM_REWRITE_TAC[d1_fan; IN_ELIM_THM;]
4581 THEN RESA_TAC
4582 THEN ASM_REWRITE_TAC[f1_fan;pr2]
4583 THEN POP_ASSUM MP_TAC
4584 THEN POP_ASSUM MP_TAC
4585 THEN POP_ASSUM MP_TAC
4586 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4587 THEN REPEAT STRIP_TAC
4588 THEN REMOVE_THEN"YEU EM" MP_TAC
4589 THEN ASM_REWRITE_TAC[]
4590 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
4591 `(v':real^3)`]]]]);;
4592
4593
4594
4595
4596 let TRAN_COMMUTATIVE_F1_FAN1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
4597 FAN(x,V,E)
4598  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4599 /\ fan80(x,V,E)
4600 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4601 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4602 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4603 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4604 /\ sigma_fan x V E u w = v
4605 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4606 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4607 /\ (x,w,v,u)=f10
4608 /\ (x,v,u,w)=f20
4609 /\ (x,u,w,v)=f30
4610 /\ E UNION {{v,w}}= E1
4611 /\ ~(pr3 y IN {v,w})
4612 /\ y IN d_fan(x,V,E)
4613 ==> 
4614 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4615
4616
4617
4618 REPEAT STRIP_TAC
4619 THEN POP_ASSUM MP_TAC
4620 THEN POP_ASSUM MP_TAC
4621 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4622 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4623 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4624 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4625 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4626 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4627 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4628 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4629 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4630 THEN RESA_TAC
4631 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4632 THEN REMOVE_THEN"EMYEU" MP_TAC
4633 THEN ASM_REWRITE_TAC[pr3]
4634 THEN RESA_TAC
4635 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4636 `v:real^3`; `w:real^3` ]
4637 THEN POP_ASSUM MP_TAC
4638 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4639 THEN ASM_REWRITE_TAC[]
4640 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4641 THEN STRIP_TAC
4642 THEN POP_ASSUM(fun th-> MRESA_TAC th[`w':real^3`;`(inverse1_sigma_fan (x:real^3) V E w' v')`])
4643 THEN POP_ASSUM MP_TAC
4644 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`]
4645 THEN REMOVE_ASSUM_TAC
4646 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4647 THEN POP_ASSUM MP_TAC
4648 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4649 THEN POP_ASSUM MP_TAC
4650 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4651 THEN REPEAT RESA_TAC
4652 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[SYM th])
4653 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w':real^3`]
4654 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w' (v':real^3)`)
4655 THEN POP_ASSUM MP_TAC
4656 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4657 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w' v', w'} IN E
4658 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E w' v', w'} IN E1`)
4659 THEN REPEAT RESA_TAC);;
4660
4661
4662
4663
4664 let TRAN_COMMUTATIVE_F1_FAN2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
4665 FAN(x,V,E)
4666  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4667 /\ fan80(x,V,E)
4668 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4669 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4670 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4671 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4672 /\ sigma_fan x V E u w = v
4673 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4674 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4675 /\ (x,w,v,u)=f10
4676 /\ (x,v,u,w)=f20
4677 /\ (x,u,w,v)=f30
4678 /\ E UNION {{v,w}}= E1
4679 /\ ~(pr2 y= u)
4680 /\ pr3 y = w
4681 /\ y IN d_fan(x,V,E)
4682 ==> 
4683 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4684
4685 REPEAT STRIP_TAC
4686 THEN POP_ASSUM MP_TAC
4687 THEN POP_ASSUM MP_TAC
4688 THEN POP_ASSUM MP_TAC
4689 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4690 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4691 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4692 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4693 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4694 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4695 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4696 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4697 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4698 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4699 THEN RESA_TAC
4700 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4701 THEN REMOVE_THEN"EMYEU" MP_TAC
4702 THEN ASM_REWRITE_TAC[pr3]
4703 THEN DISCH_THEN(LABEL_TAC"LINH")
4704 THEN REMOVE_THEN"YEU EM" MP_TAC
4705 THEN ASM_REWRITE_TAC[pr2]
4706 THEN RESA_TAC
4707 THEN SUBGOAL_THEN(`~(inverse1_sigma_fan (x:real^3) V E w v'=inverse1_sigma_fan x V E w u)`) ASSUME_TAC
4708 THENL[
4709 POP_ASSUM MP_TAC
4710 THEN MATCH_MP_TAC MONO_NOT
4711 THEN STRIP_TAC
4712 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
4713 THEN POP_ASSUM MP_TAC
4714 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3` 
4715 THEN POP_ASSUM MP_TAC
4716 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4717 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4718 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"LINH"))
4719 THEN RESA_TAC
4720 THEN MRESA1_TAC th`v':real^3`
4721 THEN POP_ASSUM MP_TAC
4722 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] 
4723 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC));
4724
4725 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
4726 THEN REMOVE_ASSUM_TAC
4727 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4728 THEN POP_ASSUM MP_TAC
4729 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4730 THEN POP_ASSUM MP_TAC
4731 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] 
4732 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN ASM_REWRITE_TAC[]
4733 THEN ASSUME_TAC th)
4734 THEN RESA_TAC
4735 THEN RESA_TAC
4736 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w v'):real^3`]
4737 THEN POP_ASSUM MP_TAC
4738 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC
4739 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
4740 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w (v':real^3)`)
4741 THEN POP_ASSUM MP_TAC
4742 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4743 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w v', w} IN E
4744 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E w v', w} IN E1`)
4745 THEN REPEAT RESA_TAC]);;
4746
4747
4748
4749
4750
4751 let TRAN_COMMUTATIVE_F1_FAN3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
4752 FAN(x,V,E)
4753  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4754 /\ fan80(x,V,E)
4755 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4756 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4757 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4758 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4759 /\ sigma_fan x V E u w = v
4760 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4761 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4762 /\ (x,w,v,u)=f10
4763 /\ (x,v,u,w)=f20
4764 /\ (x,u,w,v)=f30
4765 /\ E UNION {{v,w}}= E1
4766 /\ ~(pr2 y= sigma_fan x V E v u)
4767 /\ pr3 y = v
4768 /\ y IN d_fan(x,V,E)
4769 ==> 
4770 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4771
4772 REPEAT STRIP_TAC
4773 THEN POP_ASSUM MP_TAC
4774 THEN POP_ASSUM MP_TAC
4775 THEN POP_ASSUM MP_TAC
4776 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4777 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4778 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4779 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4780 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4781 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4782 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4783 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4784 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4785 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4786 THEN RESA_TAC
4787 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4788 THEN REMOVE_THEN"EMYEU" MP_TAC
4789 THEN ASM_REWRITE_TAC[pr3]
4790 THEN DISCH_THEN(LABEL_TAC"LINH")
4791 THEN REMOVE_THEN"YEU EM" MP_TAC
4792 THEN ASM_REWRITE_TAC[pr2]
4793 THEN RESA_TAC
4794 THEN SUBGOAL_THEN(`~(u=inverse1_sigma_fan (x:real^3) V E v v')`) ASSUME_TAC
4795 THENL[
4796 POP_ASSUM MP_TAC
4797 THEN MATCH_MP_TAC MONO_NOT
4798 THEN STRIP_TAC
4799 THEN ASM_REWRITE_TAC[]
4800 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4801 THEN POP_ASSUM MP_TAC
4802 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3` 
4803 THEN POP_ASSUM MP_TAC
4804 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4805 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4806 THEN RESA_TAC));
4807 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4808 THEN REMOVE_ASSUM_TAC
4809 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3` 
4810 THEN POP_ASSUM MP_TAC
4811 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4812 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4813 THEN RESA_TAC 
4814 THEN POP_ASSUM MP_TAC
4815 THEN REMOVE_ASSUM_TAC
4816 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`) 
4817 THEN POP_ASSUM MP_TAC
4818 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4819 THEN ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4820 THEN RESA_TAC ))
4821 THEN STRIP_TAC
4822 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E v v'):real^3`]
4823 THEN POP_ASSUM MP_TAC
4824 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC
4825 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
4826 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E v (v':real^3)`)
4827 THEN POP_ASSUM MP_TAC
4828 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4829 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E v v', v} IN E
4830 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E v v', v} IN E1`)
4831 THEN REPEAT RESA_TAC]);;
4832
4833
4834
4835
4836
4837
4838 let TRAN_COMMUTATIVE_F1_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
4839 FAN(x,V,E)
4840  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4841 /\ fan80(x,V,E)
4842 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4843 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
4844 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4845 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4846 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
4847 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4848 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4849 /\ (x,w,v,u)=f10
4850 /\ (x,v,u,w)=f20
4851 /\ (x,u,w,v)=f30
4852 /\ E UNION {{v,w}}= E1
4853 /\ ~(y IN ds)
4854 /\ y IN d_fan(x,V,E)
4855 ==> 
4856 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4857
4858
4859 REPEAT STRIP_TAC
4860 THEN DISJ_CASES_TAC(SET_RULE`
4861 ((pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
4862 ((pr2 y= u)/\ pr3 y = w)\/
4863 (~(pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
4864 (~(pr2 y= u)/\ pr3 y = w)\/
4865  ~(pr3 y IN {v,w})`)
4866 THENL[
4867 POP_ASSUM MP_TAC
4868 THEN STRIP_TAC
4869 THEN POP_ASSUM MP_TAC
4870 THEN POP_ASSUM MP_TAC
4871 THEN POP_ASSUM MP_TAC
4872 THEN DISCH_THEN(LABEL_TAC"LINH")
4873 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4874 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4875 THEN REMOVE_THEN "LINH" ( fun th->MP_TAC th
4876 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4877 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4878 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4879 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4880 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4881 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4882 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4883 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4884 THEN MP_TAC th THEN RESA_TAC)
4885 THEN RESA_TAC
4886 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4887 THEN REMOVE_THEN"EMYEU" MP_TAC
4888 THEN ASM_REWRITE_TAC[pr2]
4889 THEN RESA_TAC
4890 THEN REMOVE_THEN"YEU EM" MP_TAC
4891 THEN ASM_REWRITE_TAC[pr3]
4892 THEN RESA_TAC
4893 THEN POP_ASSUM MP_TAC
4894 THEN POP_ASSUM MP_TAC
4895 THEN POP_ASSUM MP_TAC
4896 THEN POP_ASSUM MP_TAC
4897 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4898 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4899 THEN STRIP_TAC
4900 THEN STRIP_TAC
4901 THEN REMOVE_THEN"YEU EM" MP_TAC
4902 THEN REMOVE_THEN"EMYEU" MP_TAC
4903 THEN RESA_TAC THEN STRIP_TAC
4904 THEN SUBGOAL_THEN`f1= f1_fan x V E (y:real^3#real^3#real^3#real^3)`ASSUME_TAC
4905 THENL[
4906 ASM_REWRITE_TAC[f1_fan]
4907 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4908 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3` )
4909 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
4910 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds  /\ ds SUBSET d1_fan (x,V,E)==> {f1,f2,f3} SUBSET (ds:real^3#real^3#real^3#real^3->bool)/\ f1 IN d1_fan (x,V,E) `)
4911 THEN RESA_TAC
4912 THEN POP_ASSUM MP_TAC
4913 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4914 THEN STRIP_TAC
4915 THEN FIND_ASSUM(MP_TAC)`pr2 f1 =v:real^3`
4916 THEN FIND_ASSUM(MP_TAC)`pr3 f1= u :real^3`
4917 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;pr2;pr3])
4918 THEN RESA_TAC
4919 THEN RESA_TAC;
4920
4921 POP_ASSUM MP_TAC
4922 THEN REMOVE_ASSUM_TAC
4923 THEN DISCH_THEN(fun th-> ASSUME_TAC(SYM th))
4924 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
4925 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds  /\ ds SUBSET d1_fan (x,V,E)==> {f1,f2,f3} SUBSET (ds:real^3#real^3#real^3#real^3->bool)/\ f1 IN ds `)
4926 THEN RESA_TAC
4927 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`]];
4928
4929
4930
4931
4932 POP_ASSUM MP_TAC
4933 THEN STRIP_TAC
4934 THENL[
4935
4936 POP_ASSUM MP_TAC
4937 THEN STRIP_TAC
4938 THEN POP_ASSUM MP_TAC
4939 THEN POP_ASSUM MP_TAC
4940 THEN POP_ASSUM MP_TAC
4941 THEN DISCH_THEN(LABEL_TAC"LINH")
4942 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4943 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4944 THEN REMOVE_THEN "LINH" ( fun th->MP_TAC th
4945 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4946 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4947 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
4948 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
4949 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
4950 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4951 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4952 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4953 THEN MP_TAC th THEN RESA_TAC)
4954 THEN RESA_TAC
4955 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4956 THEN REMOVE_THEN"EMYEU" MP_TAC
4957 THEN ASM_REWRITE_TAC[pr2]
4958 THEN RESA_TAC
4959 THEN REMOVE_THEN"YEU EM" MP_TAC
4960 THEN ASM_REWRITE_TAC[pr3]
4961 THEN RESA_TAC
4962 THEN POP_ASSUM MP_TAC
4963 THEN POP_ASSUM MP_TAC
4964 THEN POP_ASSUM MP_TAC
4965 THEN POP_ASSUM MP_TAC
4966 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4967 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4968 THEN STRIP_TAC
4969 THEN STRIP_TAC
4970 THEN REMOVE_THEN"YEU EM" MP_TAC
4971 THEN REMOVE_THEN"EMYEU" MP_TAC
4972 THEN RESA_TAC THEN STRIP_TAC
4973 THEN SUBGOAL_THEN`f2= (y:real^3#real^3#real^3#real^3)`ASSUME_TAC
4974 THENL[
4975 MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
4976 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds  /\ ds SUBSET d1_fan (x,V,E)==> {f1,f2,f3} SUBSET (ds:real^3#real^3#real^3#real^3->bool)/\ f2 IN d1_fan (x,V,E) `)
4977 THEN RESA_TAC
4978 THEN POP_ASSUM MP_TAC
4979 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4980 THEN STRIP_TAC
4981 THEN FIND_ASSUM(MP_TAC)`pr2 f2 =u:real^3`
4982 THEN FIND_ASSUM(MP_TAC)`pr3 f2= w :real^3`
4983 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;pr2;pr3])
4984 THEN RESA_TAC
4985 THEN RESA_TAC;
4986 POP_ASSUM MP_TAC
4987 THEN REMOVE_ASSUM_TAC
4988 THEN DISCH_TAC
4989 THEN  MP_TAC(SET_RULE`{f1,f2,f3:real^3#real^3#real^3#real^3} SUBSET ds  ==>  f2 IN ds `)
4990 THEN RESA_TAC];
4991 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN3
4992 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4993 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
4994 ;`ds1:real^3#real^3#real^3#real^3->bool`
4995 ;`ds2:real^3#real^3#real^3#real^3->bool`
4996 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
4997 ;`(y:real^3#real^3#real^3#real^3)`];
4998
4999 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN2
5000 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5001 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5002 ;`ds1:real^3#real^3#real^3#real^3->bool`
5003 ;`ds2:real^3#real^3#real^3#real^3->bool`
5004 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5005 ;`(y:real^3#real^3#real^3#real^3)`];
5006
5007 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5008 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5009 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5010 ;`ds1:real^3#real^3#real^3#real^3->bool`
5011 ;`ds2:real^3#real^3#real^3#real^3->bool`
5012 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5013 ;`(y:real^3#real^3#real^3#real^3)`]]]);;
5014
5015
5016
5017 let f1_fan_power_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y n.
5018 FAN(x,V,E)/\
5019 (!v. v IN V ==> CARD (set_of_edge v V E) > 1) /\
5020       ds IN face_set (hypermap1_of_fanx (x,V,E))/\
5021 y IN d1_fan (x,V,E)
5022 /\ ~(y IN ds)
5023 ==> ~((f1_fan x V E POWER n) y IN ds)`,
5024
5025 REPEAT STRIP_TAC
5026 THEN POP_ASSUM MP_TAC
5027 THEN POP_ASSUM MP_TAC
5028 THEN REWRITE_TAC[]
5029 THEN MATCH_MP_TAC MONO_NOT
5030 THEN SPEC_TAC (`n:num`,`n:num`)
5031 THEN INDUCT_TAC
5032 THENL[
5033 ASM_REWRITE_TAC[POWER;I_DEF];
5034
5035
5036 REWRITE_TAC[COM_POWER;o_DEF]
5037 THEN POP_ASSUM MP_TAC
5038 THEN DISCH_THEN(LABEL_TAC"EM")
5039 THEN STRIP_TAC
5040 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5041 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5042 THEN MP_TAC(SET_RULE`(f1_fan x V E POWER n) y IN d1_fan (x,V,E)/\
5043 d_fan (x,V,E)=d1_fan (x,V,E) UNION d20_fan (x,V,E)
5044 ==> (f1_fan x V E POWER n) y IN d_fan (x,V,E)`)
5045 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[d_fan]
5046 THEN RESA_TAC
5047 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E ((f1_fan x V E POWER n) y)):real^3#real^3#real^3#real^3`;`((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3`]]);;
5048
5049
5050 let f1_fan_power_in_face_imp_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y n.
5051 FAN(x,V,E)/\
5052 (!v. v IN V ==> CARD (set_of_edge v V E) > 1) /\
5053       ds IN face_set (hypermap1_of_fanx (x,V,E))/\
5054 y IN d1_fan (x,V,E)
5055 /\ ((f1_fan x V E POWER n) y IN ds)
5056 ==>
5057 (y IN ds)`,
5058
5059 REPEAT STRIP_TAC
5060 THEN POP_ASSUM MP_TAC
5061 THEN SPEC_TAC (`n:num`,`n:num`)
5062 THEN INDUCT_TAC
5063 THENL[
5064 ASM_REWRITE_TAC[POWER;I_DEF];
5065
5066
5067 REWRITE_TAC[COM_POWER;o_DEF]
5068 THEN POP_ASSUM MP_TAC
5069 THEN DISCH_THEN(LABEL_TAC"EM")
5070 THEN STRIP_TAC
5071 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5072 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5073 THEN MP_TAC(SET_RULE`(f1_fan x V E POWER n) y IN d1_fan (x,V,E)/\
5074 d_fan (x,V,E)=d1_fan (x,V,E) UNION d20_fan (x,V,E)
5075 ==> (f1_fan x V E POWER n) y IN d_fan (x,V,E)`)
5076 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[d_fan]
5077 THEN RESA_TAC
5078 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E ((f1_fan x V E POWER n) y)):real^3#real^3#real^3#real^3`;`((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3`]]);;
5079
5080
5081
5082 let TRAN_COMMUTATIVE_F1_FAN0=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
5083 FAN(x,V,E)
5084  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5085 /\ fan80(x,V,E)
5086 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5087 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5088 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5089 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5090 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5091 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5092 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5093 /\ (x,w,v,u)=f10
5094 /\ (x,v,u,w)=f20
5095 /\ (x,u,w,v)=f30
5096 /\ E UNION {{v,w}}= E1
5097  /\ ((~(pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
5098 (~(pr2 y= u)/\ pr3 y = w) \/  ~(pr3 y IN {v,w}))
5099 /\ y IN d_fan(x,V,E)
5100 ==> 
5101 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
5102
5103
5104 REPEAT STRIP_TAC
5105 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5106 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5107 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5108 ;`ds1:real^3#real^3#real^3#real^3->bool`
5109 ;`ds2:real^3#real^3#real^3#real^3->bool`
5110 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5111 ;`(y:real^3#real^3#real^3#real^3)`]
5112 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN2
5113 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5114 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5115 ;`ds1:real^3#real^3#real^3#real^3->bool`
5116 ;`ds2:real^3#real^3#real^3#real^3->bool`
5117 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5118 ;`(y:real^3#real^3#real^3#real^3)`]
5119 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN3
5120 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5121 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5122 ;`ds1:real^3#real^3#real^3#real^3->bool`
5123 ;`ds2:real^3#real^3#real^3#real^3->bool`
5124 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5125 ;`(y:real^3#real^3#real^3#real^3)`]);;
5126
5127
5128
5129 let TRAN_COMMUTATIVE_F1_FAN_POWER=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y n.
5130 FAN(x,V,E)
5131  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5132 /\ fan80(x,V,E)
5133 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5134 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5135 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5136 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5137 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5138 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5139 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5140 /\ (x,w,v,u)=f10
5141 /\ (x,v,u,w)=f20
5142 /\ (x,u,w,v)=f30
5143 /\ E UNION {{v,w}}= E1
5144 /\ ~(y IN ds)
5145 /\ y IN d_fan(x,V,E)
5146 ==> 
5147 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5148
5149 REPEAT STRIP_TAC
5150 THEN SPEC_TAC (`n:num`,`n:num`)
5151 THEN INDUCT_TAC
5152 THENL[
5153
5154 REWRITE_TAC[POWER;I_DEF];
5155 REWRITE_TAC[COM_POWER;o_DEF]
5156 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5157 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN
5158 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5159 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5160 ;`ds1:real^3#real^3#real^3#real^3->bool`
5161 ;`ds2:real^3#real^3#real^3#real^3->bool`
5162 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5163 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5164 THEN POP_ASSUM MATCH_MP_TAC
5165 THEN POP_ASSUM MP_TAC
5166 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5167 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5168 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5169 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5170 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5171 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5172 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5173 THEN STRIP_TAC
5174 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5175 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5176 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]);;
5177
5178
5179
5180
5181
5182
5183 let TRAN_COMMUTATIVE_F1_FAN_POWER1=prove(
5184 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y n.
5185 FAN(x,V,E)
5186  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5187 /\ fan80(x,V,E)
5188 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5189 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5190 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5191 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5192 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5193 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5194 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5195 /\ (x,w,v,u)=f10
5196 /\ (x,v,u,w)=f20
5197 /\ (x,u,w,v)=f30
5198 /\ E UNION {{v,w}}= E1
5199 /\ y IN d_fan(x,V,E)
5200 /\ (!m.  m < n ==> ~(pr3 ((f1_fan x V E POWER m) y) IN {v,w}))
5201 ==> 
5202 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5203
5204 REPEAT STRIP_TAC
5205 THEN POP_ASSUM MP_TAC
5206 THEN SPEC_TAC (`n:num`,`n:num`)
5207 THEN INDUCT_TAC
5208 THENL[
5209
5210 REWRITE_TAC[POWER;I_DEF];
5211 POP_ASSUM MP_TAC
5212 THEN POP_ASSUM MP_TAC
5213 THEN DISCH_THEN(LABEL_TAC"LINK")
5214 THEN DISCH_THEN(LABEL_TAC"LINH")
5215 THEN DISCH_TAC
5216 THEN SUBGOAL_THEN`(!m. m < n ==> ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w:real^3}))` ASSUME_TAC
5217 THENL[ REPEAT STRIP_TAC
5218 THEN POP_ASSUM MP_TAC
5219 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5220 REMOVE_THEN "LINH" MP_TAC 
5221 THEN ASM_REWRITE_TAC[] 
5222 THEN DISCH_TAC
5223 THEN REWRITE_TAC[COM_POWER;o_DEF]
5224 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5225 THEN REMOVE_ASSUM_TAC
5226 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5227 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5228 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5229 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5230 ;`ds1:real^3#real^3#real^3#real^3->bool`
5231 ;`ds2:real^3#real^3#real^3#real^3->bool`
5232 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5233 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5234 THEN POP_ASSUM MATCH_MP_TAC
5235 THEN POP_ASSUM MP_TAC
5236 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5237 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5238 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5239 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5240 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5241 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5242 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5243 THEN STRIP_TAC
5244 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5245 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5246 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5247 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258 let TRAN_COMMUTATIVE_F1_FAN_POWER2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y n.
5259 FAN(x,V,E)
5260  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5261 /\ fan80(x,V,E)
5262 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5263 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5264 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5265 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5266 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5267 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5268 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5269 /\ (x,w,v,u)=f10
5270 /\ (x,v,u,w)=f20
5271 /\ (x,u,w,v)=f30
5272 /\ E UNION {{v,w}}= E1
5273 /\ y IN d_fan(x,V,E)
5274 /\ (!m.  m < n ==> ((~(pr2 ((f1_fan x V E POWER m) y)= sigma_fan x V E v u)/\ pr3 ((f1_fan x V E POWER m) y) = v)\/
5275 (~(pr2 ((f1_fan x V E POWER m) y)= u)/\ pr3 ((f1_fan x V E POWER m) y) = w))
5276 )
5277 ==> 
5278 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5279
5280
5281 REPEAT STRIP_TAC
5282 THEN POP_ASSUM MP_TAC
5283 THEN SPEC_TAC (`n:num`,`n:num`)
5284 THEN INDUCT_TAC
5285
5286 THENL[
5287
5288 REWRITE_TAC[POWER;I_DEF];
5289
5290 POP_ASSUM MP_TAC
5291 THEN POP_ASSUM MP_TAC
5292 THEN DISCH_THEN(LABEL_TAC"LINK")
5293 THEN DISCH_THEN(LABEL_TAC"LINH")
5294 THEN DISCH_TAC
5295 THEN SUBGOAL_THEN`(!m. m < n ==> ((~(pr2 ((f1_fan x V E POWER m) y)= sigma_fan x V E v u)/\ pr3 ((f1_fan x V E POWER m) y) = v)\/
5296 (~(pr2 ((f1_fan x V E POWER m) y)= u)/\ pr3 ((f1_fan x V E POWER m) y) = w:real^3))
5297 )` ASSUME_TAC
5298 THENL[ 
5299 REPEAT STRIP_TAC
5300 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5301 REMOVE_THEN "LINH" MP_TAC 
5302 THEN ASM_REWRITE_TAC[] 
5303 THEN DISCH_TAC
5304 THEN REWRITE_TAC[COM_POWER;o_DEF]
5305 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5306 THEN REMOVE_ASSUM_TAC
5307 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5308 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN0
5309 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5310 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5311 ;`ds1:real^3#real^3#real^3#real^3->bool`
5312 ;`ds2:real^3#real^3#real^3#real^3->bool`
5313 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5314 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5315 THEN POP_ASSUM MATCH_MP_TAC
5316 THEN POP_ASSUM MP_TAC
5317 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5318 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5319 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5320 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5321 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5322 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5323 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5324 THEN STRIP_TAC
5325 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5326 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5327 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5328 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5329
5330
5331
5332 let TRAN_COMMUTATIVE_F1_FAN_POWER3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y n.
5333 FAN(x,V,E)
5334  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5335 /\ fan80(x,V,E)
5336 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5337 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5338 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5339 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5340 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5341 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5342 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5343 /\ (x,w,v,u)=f10
5344 /\ (x,v,u,w)=f20
5345 /\ (x,u,w,v)=f30
5346 /\ E UNION {{v,w}}= E1
5347 /\ y IN d_fan(x,V,E)
5348 /\ (!m.  m < n ==> (~(pr2 ((f1_fan x V E POWER m) y) = sigma_fan x V E v u) /\
5349                pr3 ((f1_fan x V E POWER m) y) = v) \/
5350                (~(pr2 ((f1_fan x V E POWER m) y) = u) /\
5351                pr3 ((f1_fan x V E POWER m) y) = w) \/
5352                ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w}))
5353 ==>
5354 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5355
5356
5357 REPEAT STRIP_TAC
5358 THEN POP_ASSUM MP_TAC
5359 THEN SPEC_TAC (`n:num`,`n:num`)
5360 THEN INDUCT_TAC
5361
5362 THENL[
5363
5364 REWRITE_TAC[POWER;I_DEF];
5365
5366 POP_ASSUM MP_TAC
5367 THEN POP_ASSUM MP_TAC
5368 THEN DISCH_THEN(LABEL_TAC"LINK")
5369 THEN DISCH_THEN(LABEL_TAC"LINH")
5370 THEN DISCH_TAC
5371 THEN SUBGOAL_THEN`(!m. m < n ==> (~(pr2 ((f1_fan x V E POWER m) y) = sigma_fan x V E v u) /\
5372                pr3 ((f1_fan x V E POWER m) y) = v) \/
5373                (~(pr2 ((f1_fan x V E POWER m) y) = u) /\
5374                pr3 ((f1_fan x V E POWER m) y) = w) \/
5375                ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w})
5376 )` ASSUME_TAC
5377 THENL[ 
5378 REPEAT STRIP_TAC
5379 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5380 REMOVE_THEN "LINH" MP_TAC 
5381 THEN ASM_REWRITE_TAC[] 
5382 THEN DISCH_TAC
5383 THEN REWRITE_TAC[COM_POWER;o_DEF]
5384 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5385 THEN REMOVE_ASSUM_TAC
5386 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5387 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN0
5388 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5389 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5390 ;`ds1:real^3#real^3#real^3#real^3->bool`
5391 ;`ds2:real^3#real^3#real^3#real^3->bool`
5392 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5393 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5394 THEN POP_ASSUM MATCH_MP_TAC
5395 THEN POP_ASSUM MP_TAC
5396 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5397 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5398 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5399 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5400 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5401 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5402 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5403 THEN STRIP_TAC
5404 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5405 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5406 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5407 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5408
5409
5410
5411 let unique_tranf_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0 f y.
5412 FAN(x,V,E)
5413  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5414 /\ fan80(x,V,E)
5415 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5416 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5417 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5418 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5419 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5420 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5421 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5422 /\ (x,w,v,u)=f10
5423 /\ (x,v,u,w)=f20
5424 /\ (x,u,w,v)=f30
5425 /\ E UNION {{v,w}}= E1
5426 /\ f= face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0
5427 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5428 ==> tranf x V E E1 ds0 = f`,
5429
5430 REPEAT STRIP_TAC
5431 THEN POP_ASSUM (fun th -> MP_TAC th
5432 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
5433 THEN STRIP_TAC
5434 THEN ASSUME_TAC th)
5435 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5436 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5437 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5438 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5439 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5440 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5441 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5442 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5443 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
5444 THEN FIND_ASSUM(MP_TAC) `ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
5445 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5446 THEN STRIP_TAC
5447 THEN POP_ASSUM MP_TAC
5448 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5449 THEN SUBGOAL_THEN`orbit_map (res (f1_fan x V E) (d1_fan (x,V,E))) x'=face (hypermap1_of_fanx (x:real^3,V,E)) x'`(fun th-> REWRITE_TAC[th])
5450 THENL[
5451  ASM_REWRITE_TAC[face];
5452
5453 STRIP_TAC
5454 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5455 THEN MRESA_TAC lemma_face_subset[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`]
5456 THEN MP_TAC(SET_RULE`face (hypermap1_of_fanx (x,V,E)) x' SUBSET d1_fan (x,V,E)
5457 /\ y IN face (hypermap1_of_fanx (x,V,E)) x' ==> y IN d1_fan(x,V,E)`)
5458 THEN RESA_TAC
5459 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`]
5460 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5461 THEN POP_ASSUM MP_TAC
5462 THEN REMOVE_ASSUM_TAC
5463 THEN REMOVE_ASSUM_TAC
5464 THEN POP_ASSUM MP_TAC
5465 THEN DISCH_THEN(LABEL_TAC"EM")
5466 THEN DISCH_TAC
5467 THEN REMOVE_THEN "EM" MP_TAC
5468 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[face;]
5469 THEN ASM_REWRITE_TAC[IN_ELIM_THM;orbit_map]
5470 THEN STRIP_TAC
5471 THEN POP_ASSUM MP_TAC
5472 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5473 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
5474 THEN RESA_TAC
5475 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`]
5476 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
5477 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5478 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5479 ;`ds1:real^3#real^3#real^3#real^3->bool`
5480 ;`ds2:real^3#real^3#real^3#real^3->bool`
5481 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5482 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]
5483 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x:real^3,V,E1)) ((f1_fan x V E1 POWER n) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)))):real^3#real^3#real^3#real^3->bool`;`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`]
5484 THEN POP_ASSUM MATCH_MP_TAC
5485 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E1)) ((f1_fan x V E1 POWER n) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))) IN
5486  face_set (hypermap1_of_fanx (x:real^3,V,E1))`ASSUME_TAC
5487 THENL[
5488 ASM_REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
5489 THEN EXISTS_TAC`(f1_fan (x:real^3) V E1 POWER n) (tran x V E1 (y:real^3#real^3#real^3#real^3))`
5490 THEN ASM_REWRITE_TAC[]
5491 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;]
5492 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
5493 THEN POP_ASSUM MATCH_MP_TAC
5494
5495 THEN FIND_ASSUM(MP_TAC)`y IN d1_fan (x:real^3,V,E)`
5496 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5497 THEN RESA_TAC
5498 THEN ASM_REWRITE_TAC[tran]
5499 THEN EXISTS_TAC`x:real^3`
5500 THEN EXISTS_TAC`v':real^3`
5501 THEN EXISTS_TAC`w':real^3`
5502 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
5503 THEN ASM_REWRITE_TAC[]
5504 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`;
5505
5506 MRESA_TAC f1_fan_power_in_face_imp_in_face[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`; 
5507 `(face (hypermap1_of_fanx (x,V,E1)) ((f1_fan x V E1 POWER n) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)))):real^3#real^3#real^3#real^3->bool`;`tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)` ;`n:num`]
5508 THEN POP_ASSUM MATCH_MP_TAC
5509 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
5510 THEN STRIP_TAC
5511 THENL[
5512
5513 FIND_ASSUM(MP_TAC)`y IN d1_fan (x:real^3,V,E)`
5514 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5515 THEN RESA_TAC
5516 THEN ASM_REWRITE_TAC[tran]
5517 THEN EXISTS_TAC`x:real^3`
5518 THEN EXISTS_TAC`v':real^3`
5519 THEN EXISTS_TAC`w':real^3`
5520 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
5521 THEN ASM_REWRITE_TAC[]
5522 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`;
5523
5524 EXISTS_TAC`0:num`
5525 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]]]]);;
5526
5527
5528
5529
5530
5531
5532 let tran_in_dart_newfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 y .
5533 FAN(x,V,E)/\ FAN(x,V,E1)
5534 /\ E SUBSET E1
5535 /\ y IN d1_fan(x,V,E)
5536 ==> tran x V E1 y IN d1_fan(x,V,E1)`,
5537 REPEAT STRIP_TAC
5538 THEN POP_ASSUM MP_TAC
5539 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5540 THEN RESA_TAC
5541 THEN REWRITE_TAC[tran]
5542 THEN EXISTS_TAC`x:real^3`
5543 THEN EXISTS_TAC`v:real^3`
5544 THEN EXISTS_TAC`w:real^3`
5545 THEN EXISTS_TAC`sigma_fan x V E1 v (w:real^3)`
5546 THEN ASM_REWRITE_TAC[]
5547 THEN ASM_TAC
5548 THEN SET_TAC[]);;
5549
5550
5551
5552
5553 let INJ_TRAN_D1_FAN=prove(` !x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 y y1.
5554 FAN(x,V,E)/\ FAN(x,V,E1)
5555 /\ E SUBSET E1
5556 /\ y IN d1_fan(x,V,E)
5557 /\ y1 IN d1_fan(x,V,E)
5558 /\
5559 tran x V E1 y = tran x V E1 y1
5560 ==> y =y1`,
5561 REWRITE_TAC[d1_fan;IN_ELIM_THM]
5562 THEN REPEAT STRIP_TAC
5563 THEN POP_ASSUM MP_TAC
5564 THEN ASM_REWRITE_TAC[tran;PAIR_EQ]
5565 THEN RESA_TAC);;
5566
5567
5568
5569
5570
5571
5572 let INJ_TRANF_FACE_DELETE_DS= prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0 ds0'.
5573 FAN(x,V,E)
5574  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5575 /\ fan80(x,V,E)
5576 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5577 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5578 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5579 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5580 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5581 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5582 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5583 /\ (x,w,v,u)=f10
5584 /\ (x,v,u,w)=f20
5585 /\ (x,u,w,v)=f30
5586 /\ E UNION {{v,w}}= E1
5587 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5588 /\ ds0' IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5589 /\ tranf x V E E1 ds0=tranf x V E E1 ds0'
5590 ==>
5591  ds0 = ds0'`,
5592
5593
5594
5595 REPEAT STRIP_TAC
5596 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5597 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
5598 THEN SUBGOAL_THEN`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)) IN face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)`ASSUME_TAC
5599 THENL[
5600
5601 REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5602 THEN EXISTS_TAC`0:num`
5603 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
5604
5605 POP_ASSUM MP_TAC
5606 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5607 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0':real^3#real^3#real^3#real^3->bool` ]
5608 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5609 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5610 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5611 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5612 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5613 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5614 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5615 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5616 THEN STRIP_TAC
5617 THEN POP_ASSUM MP_TAC
5618 THEN FIND_ASSUM(MP_TAC)`ds0' IN face_set (hypermap1_of_fanx (x:real^3,V,E)) DELETE ds`
5619 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
5620 THEN RESA_TAC
5621 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0':real^3#real^3#real^3#real^3->bool`]
5622 THEN MP_TAC(SET_RULE`y' IN ds0'/\ ds0' SUBSET d1_fan (x:real^3,V,E)==> y' IN d1_fan (x,V,E)`)
5623 THEN RESA_TAC
5624 THEN FIND_ASSUM(MP_TAC)`ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E)) DELETE ds`
5625 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
5626 THEN RESA_TAC
5627 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`]
5628 THEN MP_TAC(SET_RULE`y IN ds0/\ ds0 SUBSET d1_fan (x:real^3,V,E)==> y IN d1_fan (x,V,E)`)
5629 THEN RESA_TAC
5630 THEN MP_TAC(SET_RULE`E UNION {{v:real^3,w}}= E1==> E SUBSET E1`)
5631 THEN RESA_TAC
5632 THEN MRESA_TAC tran_in_dart_newfan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
5633 `y':real^3#real^3#real^3#real^3`]
5634 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5635 THEN POP_ASSUM(fun th-> MRESA1_TAC th`tran (x:real^3) V E1 (y':real^3#real^3#real^3#real^3)`)
5636 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0':real^3#real^3#real^3#real^3->bool`;`y':real^3#real^3#real^3#real^3`]
5637 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y':real^3#real^3#real^3#real^3`]
5638 THEN POP_ASSUM MP_TAC
5639 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
5640 THEN STRIP_TAC
5641 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
5642 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5643 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
5644 ;`ds1:real^3#real^3#real^3#real^3->bool`
5645 ;`ds2:real^3#real^3#real^3#real^3->bool`
5646 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5647 ;`(y':real^3#real^3#real^3#real^3)`;`n:num`]
5648 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
5649 THEN STRIP_TAC
5650 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5651 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y':real^3#real^3#real^3#real^3)`)
5652 THEN MRESA_TAC INJ_TRAN_D1_FAN
5653 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
5654 `y:real^3#real^3#real^3#real^3`;`(f1_fan x V E POWER n) (y':real^3#real^3#real^3#real^3)`]
5655 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0':real^3#real^3#real^3#real^3->bool`;`y':real^3#real^3#real^3#real^3`]
5656 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`]
5657
5658 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x:real^3,V,E)) ((f1_fan x V E POWER n) (y':real^3#real^3#real^3#real^3))):real^3#real^3#real^3#real^3->bool`;` (y':real^3#real^3#real^3#real^3)`]
5659 THEN POP_ASSUM MATCH_MP_TAC
5660 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x:real^3,V,E)) ((f1_fan x V E POWER n) y') IN
5661       face_set (hypermap1_of_fanx (x,V,E))`ASSUME_TAC
5662 THENL[
5663
5664 REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5665 THEN EXISTS_TAC`(f1_fan x V E POWER n) (y':real^3#real^3#real^3#real^3)`
5666 THEN ASM_REWRITE_TAC[face];
5667
5668 MRESA_TAC f1_fan_power_in_face_imp_in_face[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; 
5669 `(face (hypermap1_of_fanx (x,V,E)) ((f1_fan x V E POWER n)  (y':real^3#real^3#real^3#real^3))):real^3#real^3#real^3#real^3->bool`;`(y':real^3#real^3#real^3#real^3)` ;`n:num`]
5670 THEN POP_ASSUM MATCH_MP_TAC
5671 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5672 THEN EXISTS_TAC`0:num`
5673 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]]]);;
5674
5675
5676
5677
5678
5679
5680 let ds1_in_face_set_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
5681 FAN(x,V,E)
5682  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5683 /\ fan80(x,V,E)
5684 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5685 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5686 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5687 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5688 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5689 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5690 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5691 /\ (x,w,v,u)=f10
5692 /\ (x,v,u,w)=f20
5693 /\ (x,u,w,v)=f30
5694 /\ E UNION {{v,w}}= E1
5695 ==> ds1 IN face_set (hypermap1_of_fanx (x,V,E1))`,
5696
5697
5698 REPEAT STRIP_TAC
5699 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5700 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5701 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5702 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5703 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5704 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5705 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5706 THEN ASM_REWRITE_TAC[face_set;face;set_of_orbits;IN_ELIM_THM]
5707 THEN EXISTS_TAC`(x,v:real^3,w,sigma_fan x V E1 v w)`
5708 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
5709 THEN EXISTS_TAC`x:real^3`
5710 THEN EXISTS_TAC`v:real^3`
5711 THEN EXISTS_TAC`w:real^3`
5712 THEN EXISTS_TAC`sigma_fan x V E1 v w:real^3`
5713 THEN ASM_REWRITE_TAC[]
5714 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM;IN_SING] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`);;
5715
5716
5717
5718 let ds2_in_face_set_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
5719 FAN(x,V,E)
5720  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5721 /\ fan80(x,V,E)
5722 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5723 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5724 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5725 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5726 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5727 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
5728 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5729 /\ (x,w,v,u)=f10
5730 /\ (x,v,u,w)=f20
5731 /\ (x,u,w,v)=f30
5732 /\ E UNION {{v,w}}= E1
5733 ==> ds2 IN face_set (hypermap1_of_fanx (x,V,E1))`,
5734
5735 REPEAT STRIP_TAC
5736 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5737 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5738 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5739 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5740 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5741 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5742 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5743 THEN ASM_REWRITE_TAC[face_set;face;set_of_orbits;IN_ELIM_THM]
5744 THEN EXISTS_TAC`(x,w:real^3,v,sigma_fan x V E1 w v)`
5745 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
5746 THEN EXISTS_TAC`x:real^3`
5747 THEN EXISTS_TAC`w:real^3`
5748 THEN EXISTS_TAC`v:real^3`
5749 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
5750 THEN ASM_REWRITE_TAC[]
5751 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM;IN_SING] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`
5752 THEN SET_TAC[]);;
5753
5754
5755
5756
5757
5758 let condition_f1_fan_power_in_face_set=prove(`!n:num x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) y y1 ds.
5759 FAN(x,V,E) 
5760 /\ y = (f1_fan x V E POWER n) y1 
5761 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
5762 /\ d_fan (x,V,E) =d1_fan (x,V,E)
5763 /\ y1 IN ds
5764 ==> y IN ds`,
5765 INDUCT_TAC
5766 THENL[MESON_TAC[POWER;I_DEF];
5767 POP_ASSUM MP_TAC
5768 THEN DISCH_THEN(LABEL_TAC"LINH")
5769 THEN REPEAT STRIP_TAC
5770 THEN REMOVE_THEN "LINH"(fun th-> MRESAL_TAC th[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f1_fan x V E POWER n) y1:real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`;`ds:real^3#real^3#real^3#real^3->bool`;][COM_POWER;o_DEF])
5771 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f1_fan x V E ((f1_fan x V E POWER n) y1):real^3#real^3#real^3#real^3)` ;`((f1_fan x V E POWER n) y1:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]]);;
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783 let SUR_TRANF_FACE_DELETE_DS =prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 f.
5784 FAN(x,V,E)
5785  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5786 /\ fan80(x,V,E)
5787 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5788 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
5789 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5790 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5791 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5792 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
5793 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
5794 /\ (x,w,v,u)=f10
5795 /\ (x,v,u,w)=f20
5796 /\ (x,u,w,v)=f30
5797 /\ E UNION {{v,w}}= E1
5798 /\  f IN (face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 ) DELETE ds2
5799 ==> ?ds0. ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5800 /\ tranf x V E E1 ds0=f`,
5801
5802 REPEAT STRIP_TAC
5803 THEN POP_ASSUM MP_TAC
5804 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5805 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5806 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5807 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
5808 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
5809 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5810 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5811 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;face_set;set_of_orbits;]
5812 THEN STRIP_TAC
5813 THEN FIND_ASSUM(MP_TAC) `x' IN d1_fan (x:real^3,V,E1)`
5814 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[d1_fan;]
5815 THEN REWRITE_TAC[IN_ELIM_THM;]
5816 THEN STRIP_TAC
5817 THEN POP_ASSUM MP_TAC
5818 THEN DISCH_THEN(LABEL_TAC"NHO")
5819 THEN SUBGOAL_THEN`{v', w':real^3} IN E`ASSUME_TAC
5820 THENL(*1*)[
5821 FIND_ASSUM(MP_TAC) `{v', w':real^3} IN E1`
5822 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM;IN_SING;SET_RULE`{v', w'} = {v, w}<=> (v'=v/\ w'=w)\/ (v'=w/\ w'=v)`]) `E UNION {{v:real^3, w}} = E1`
5823 THEN STRIP_TAC
5824 THEN ASM_REWRITE_TAC[]
5825 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5826 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5827 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5828 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5829 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5830 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5831 THEN FIND_ASSUM(fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)`face_map (hypermap1_of_fanx (x:real^3,V,E1)) =
5832       res (f1_fan x V E1) (d1_fan (x,V,E1))`
5833 THEN POP_ASSUM MP_TAC
5834 THEN POP_ASSUM MP_TAC
5835 THEN ASM_REWRITE_TAC[]
5836 THEN SET_TAC[];(*1*)
5837
5838
5839
5840 ABBREV_TAC`y=(x,(v':real^3),w',sigma_fan x V E v' w')`
5841 THEN SUBGOAL_THEN`y IN d1_fan(x:real^3,V,E)`ASSUME_TAC
5842 THENL(*2*)[
5843 ASM_REWRITE_TAC[face;d1_fan;IN_ELIM_THM]
5844 THEN EXISTS_TAC`x:real^3`
5845 THEN EXISTS_TAC`v':real^3`
5846 THEN EXISTS_TAC`w':real^3`
5847 THEN EXISTS_TAC`sigma_fan x V E v' (w':real^3)`
5848 THEN EXPAND_TAC"y"
5849 THEN ASM_REWRITE_TAC[];(*2*)
5850
5851
5852 EXISTS_TAC`face (hypermap1_of_fanx (x:real^3,V,E)) (y:real^3#real^3#real^3#real^3)`
5853 THEN SUBGOAL_THEN `((?x'. x' IN d1_fan (x,V,E) /\
5854        face (hypermap1_of_fanx (x,V,E)) y =
5855        orbit_map (res (f1_fan x V E) (d1_fan (x,V,E))) x') /\
5856   ~(face (hypermap1_of_fanx (x,V,E)) y = ds)) ` ASSUME_TAC
5857
5858 THENL(*3*)[
5859
5860 STRIP_TAC
5861 THENL(*4*)[
5862
5863 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
5864 THEN ASM_REWRITE_TAC[face];(*4*)
5865
5866 STRIP_TAC
5867 THEN MP_TAC(SET_RULE`{f1, f2, (f3:real^3#real^3#real^3#real^3)} SUBSET ds ==> f2 IN ds`)
5868 THEN ASM_REWRITE_TAC[]
5869 THEN POP_ASSUM MP_TAC
5870 THEN DISCH_THEN(LABEL_TAC"ME")
5871 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`(CARD (ds:real^3#real^3#real^3#real^3->bool)):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
5872 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
5873 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`y:real^3#real^3#real^3#real^3`]
5874
5875 THEN MP_TAC(ARITH_RULE`(CARD (ds:real^3#real^3#real^3#real^3->bool)):num>3
5876 ==> ~((CARD (ds:real^3#real^3#real^3#real^3->bool)):num =0)`)
5877 THEN RESA_TAC
5878 THEN MRESA_TAC orbit_cyclic[`(res (f1_fan x V E) (d1_fan (x:real^3,V,E)))`;`(CARD (ds:real^3#real^3#real^3#real^3->bool)):num`;`y:real^3#real^3#real^3#real^3`]
5879 THEN REMOVE_THEN "ME"(fun th-> REWRITE_TAC[SYM th;face;])
5880 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5881 THEN STRIP_TAC
5882 THEN POP_ASSUM MP_TAC
5883 THEN DISJ_CASES_TAC(ARITH_RULE`k=0 \/ k=1\/ k>=2`)
5884 THENL(*5*)[
5885
5886 ASM_REWRITE_TAC[POWER;I_DEF]
5887 THEN POP_ASSUM MP_TAC
5888 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5889 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5890 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5891 THEN STRIP_TAC THEN STRIP_TAC
5892 THEN FIND_ASSUM(MP_TAC)`pr2 f2 = u:real^3`
5893 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
5894 THEN EXPAND_TAC"y"
5895 THEN REWRITE_TAC[pr2]
5896 THEN STRIP_TAC
5897 THEN FIND_ASSUM(MP_TAC)`pr3 f2 = w`
5898 THEN REWRITE_TAC[th]
5899 THEN EXPAND_TAC"y"
5900 THEN REWRITE_TAC[pr3]
5901 THEN STRIP_TAC)
5902 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5903 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5904  THEN REMOVE_ASSUM_TAC
5905 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5906 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5907 THEN ASM_REWRITE_TAC[]
5908 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5909 `v:real^3`; `w:real^3` ]
5910 THEN POP_ASSUM MP_TAC
5911 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5912 THEN RESA_TAC
5913 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
5914 THEN POP_ASSUM MP_TAC
5915 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5916 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
5917 `(u:real^3)`]
5918 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5919 `(v:real^3)`]
5920 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
5921 THEN RESA_TAC
5922 THEN RESA_TAC
5923 THEN STRIP_TAC
5924 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5925 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5926 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
5927 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f30 IN ds2`)
5928 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5929 THEN STRIP_TAC
5930 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5931 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
5932 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`;` (f30:real^3#real^3#real^3#real^3)`]
5933 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5934 THEN ASM_MESON_TAC[];(*5*)
5935
5936
5937
5938 POP_ASSUM MP_TAC
5939 THEN STRIP_TAC
5940 THENL(*6*)[
5941
5942 ASM_REWRITE_TAC[POWER_1]
5943 THEN MRESAL_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`][POWER_1]
5944 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
5945 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5946 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5947 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5948 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5949 THEN STRIP_TAC
5950 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
5951 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
5952 ==> f1 IN d1_fan(x,V,E)`)
5953 THEN RESA_TAC
5954 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
5955 THEN POP_ASSUM(fun th-> MRESA_TAC th[` (f1:real^3#real^3#real^3#real^3)`;` (y:real^3#real^3#real^3#real^3)`])
5956 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
5957 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
5958 THEN EXPAND_TAC"y"
5959 THEN REWRITE_TAC[pr2]
5960 THEN STRIP_TAC
5961 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
5962 THEN REWRITE_TAC[th]
5963 THEN EXPAND_TAC"y"
5964 THEN REWRITE_TAC[pr3]
5965 THEN STRIP_TAC)
5966 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5967 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5968 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5969 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5970 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5971 THEN REMOVE_ASSUM_TAC
5972 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5973 THEN ASM_REWRITE_TAC[]
5974 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5975 `v:real^3`;`u:real^3`; `w:real^3` ]
5976 THEN STRIP_TAC
5977 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5978 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5979 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
5980 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f20 IN ds2`)
5981 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5982 THEN STRIP_TAC
5983 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5984 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
5985 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`;` (f20:real^3#real^3#real^3#real^3)`]
5986 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5987 THEN ASM_MESON_TAC[];(*6*)
5988
5989
5990 SUBGOAL_THEN`?m. k=SUC (SUC m)/\ m>=0`ASSUME_TAC
5991 THENL(*7*)[
5992 EXISTS_TAC`k-2:num`
5993 THEN REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
5994 THEN POP_ASSUM MP_TAC
5995 THEN ARITH_TAC;(*7*)
5996
5997 POP_ASSUM MP_TAC
5998 THEN POP_ASSUM MP_TAC
5999 THEN POP_ASSUM MP_TAC
6000 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6001 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6002 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6003 THEN REPEAT RESA_TAC
6004 THEN POP_ASSUM MP_TAC
6005 THEN MRESAL_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC (SUC m):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`][POWER_1]
6006 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
6007 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6008 THEN REMOVE_ASSUM_TAC
6009 THEN REWRITE_TAC[COM_POWER;o_DEF]
6010 THEN POP_ASSUM MP_TAC
6011 THEN POP_ASSUM MP_TAC
6012 THEN REMOVE_ASSUM_TAC
6013 THEN POP_ASSUM MP_TAC
6014 THEN DISCH_THEN(LABEL_TAC"CHUYEN")
6015 THEN DISCH_TAC
6016 THEN REMOVE_THEN "CHUYEN" MP_TAC
6017 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
6018 THEN REMOVE_ASSUM_TAC
6019 THEN STRIP_TAC
6020 THEN MP_TAC(ARITH_RULE`(m + 1) + 1 < CARD (ds:real^3# real^3#real^3#real^3->bool)==> m< CARD ds -2`)
6021 THEN ASM_REWRITE_TAC[]
6022 THEN REMOVE_ASSUM_TAC
6023 THEN STRIP_TAC
6024 THEN ASM_TAC
6025 THEN SPEC_TAC (`m:num`,`m:num`)
6026 THEN INDUCT_TAC
6027
6028 THENL(*8*)[
6029
6030 ASM_REWRITE_TAC[POWER;I_DEF]
6031 THEN REPEAT STRIP_TAC
6032 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6033 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
6034 ==> f1 IN d1_fan(x,V,E)`)
6035 THEN RESA_TAC
6036 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
6037 THEN POP_ASSUM(fun th-> MRESA1_TAC th` y:real^3#real^3#real^3#real^3`)
6038
6039 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
6040 THEN POP_ASSUM(fun th-> MRESA_TAC th[` (f1:real^3#real^3#real^3#real^3)`;` (f1_fan x V E y:real^3#real^3#real^3#real^3)`])
6041 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
6042 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
6043 THEN EXPAND_TAC"y"
6044 THEN REWRITE_TAC[pr2;f1_fan]
6045 THEN STRIP_TAC
6046 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
6047 THEN REWRITE_TAC[th]
6048 THEN EXPAND_TAC"y"
6049 THEN REWRITE_TAC[pr3;f1_fan]
6050 THEN STRIP_TAC)
6051 THEN POP_ASSUM MP_TAC
6052 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC THEN ASSUME_TAC th)
6053 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`]
6054 THEN REMOVE_ASSUM_TAC
6055 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
6056 THEN POP_ASSUM MP_TAC
6057 THEN REWRITE_TAC[]
6058 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6059 THEN RESA_TAC
6060 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6061 `v:real^3`;`u:real^3`; `w:real^3` ]
6062 THEN SUBGOAL_THEN`((x,v:real^3,w,sigma_fan x V E1 v w)=f1_fan x V E1 x')`ASSUME_TAC
6063 THENL(*9*)[
6064 ASM_REWRITE_TAC[f1_fan;PAIR_EQ]
6065 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6066 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6067 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
6068 THEN POP_ASSUM MP_TAC
6069 THEN FIND_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[SYM th;UNION;IN_ELIM_THM;] THEN ASM_REWRITE_TAC[IN_SING])` E UNION {{v:real^3,w}}= E1`
6070 THEN RESA_TAC;(*9*)
6071 SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w) IN face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)`ASSUME_TAC
6072 THENL(*10*)[
6073
6074 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
6075 THEN EXISTS_TAC`0:num`
6076 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*10*)
6077
6078 POP_ASSUM MP_TAC
6079 THEN ASM_REWRITE_TAC[]
6080 THEN STRIP_TAC
6081 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6082 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
6083 THEN FIND_ASSUM(MP_TAC)`x' IN d1_fan (x:real^3,V,E1)`
6084 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`x' = (x'',v',v,(w1:real^3)):real^3#real^3#real^3#real^3`
6085 THEN ASM_REWRITE_TAC[]
6086 THEN STRIP_TAC
6087 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`f1_fan x V E1 x':real^3#real^3#real^3#real^3`;`x':real^3#real^3#real^3#real^3`]
6088 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`x':real^3#real^3#real^3#real^3`]
6089 THEN FIND_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC THEN ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[]
6090 THEN STRIP_TAC
6091 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
6092 )`x' = (x'',v',v,(w1:real^3)):real^3#real^3#real^3#real^3`
6093 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC)
6094 THEN ASM_MESON_TAC[]](*10*)](*9*);(*8*)
6095
6096 POP_ASSUM MP_TAC
6097 THEN DISCH_THEN(LABEL_TAC"A")
6098 THEN REPEAT STRIP_TAC
6099 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6100 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6101 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6102 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"NHO")
6103 THEN REPEAT STRIP_TAC
6104 THEN POP_ASSUM MP_TAC
6105 THEN REMOVE_THEN "A" MP_TAC
6106 THEN MP_TAC(ARITH_RULE`SUC m < CARD (ds:real^3# real^3#real^3#real^3->bool) - 2==> m < CARD ds - 2`)
6107 THEN RESA_TAC
6108 THEN ASM_REWRITE_TAC[ARITH_RULE`m>=0`]
6109 THEN STRIP_TAC
6110 THEN ABBREV_TAC`y1=(f1_fan (x:real^3) V E POWER SUC(m)) y`
6111 THEN STRIP_TAC
6112 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6113 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
6114 ==> f1 IN d1_fan(x,V,E)`)
6115 THEN RESA_TAC
6116 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC m:num`;]
6117 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
6118 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
6119 THEN POP_ASSUM(fun th-> MRESA1_TAC th` y1:real^3#real^3#real^3#real^3`)
6120 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
6121 THEN POP_ASSUM(fun th-> MRESA_TAC th[` (f1:real^3#real^3#real^3#real^3)`;` (f1_fan x V E y1:real^3#real^3#real^3#real^3)`])
6122 THEN POP_ASSUM MP_TAC
6123 THEN REMOVE_ASSUM_TAC
6124 THEN POP_ASSUM(fun th-> MP_TAC th  THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN ASSUME_TAC th THEN STRIP_TAC)
6125 THEN ASM_REWRITE_TAC[f1_fan]
6126 THEN STRIP_TAC
6127 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
6128 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
6129 THEN REWRITE_TAC[pr2;]
6130 THEN STRIP_TAC
6131 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
6132 THEN REWRITE_TAC[pr3;th]
6133 THEN STRIP_TAC)
6134 THEN POP_ASSUM MP_TAC
6135 THEN REMOVE_THEN "NHO" MP_TAC
6136 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"AN") THEN DISCH_THEN(LABEL_TAC"NHO") THEN STRIP_TAC THEN ASSUME_TAC th)
6137 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
6138 THEN REMOVE_ASSUM_TAC
6139 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v'':real^3`)
6140 THEN POP_ASSUM MP_TAC
6141 THEN REWRITE_TAC[]
6142 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6143 THEN RESA_TAC
6144 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6145 `v:real^3`;`u:real^3`; `w:real^3` ]
6146 THEN SUBGOAL_THEN`((x,v:real^3,w,sigma_fan x V E1 v w)=f1_fan x V E1 (x,sigma_fan x V E1 v w,v,sigma_fan x V E1 v'' v))`ASSUME_TAC
6147 THENL(*9*)[
6148
6149 ASM_REWRITE_TAC[f1_fan;PAIR_EQ]
6150 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6151 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6152 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
6153 THEN POP_ASSUM MP_TAC
6154 THEN FIND_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[SYM th;UNION;IN_ELIM_THM;] THEN ASM_REWRITE_TAC[IN_SING])` E UNION {{v:real^3,w}}= E1`
6155 THEN RESA_TAC;(*9*)
6156
6157 SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w) IN face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)`ASSUME_TAC
6158 THENL(*10*)[
6159
6160 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
6161 THEN EXISTS_TAC`0:num`
6162 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*10*)
6163
6164 POP_ASSUM MP_TAC
6165 THEN ASM_REWRITE_TAC[]
6166 THEN STRIP_TAC
6167 THEN SUBGOAL_THEN`x,v'',v,sigma_fan x V E1 v'' v IN d1_fan (x:real^3,V,E1)`ASSUME_TAC
6168 THENL(*11*)[
6169
6170 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6171 THEN EXISTS_TAC`x:real^3`
6172 THEN EXISTS_TAC`v'':real^3`
6173 THEN EXISTS_TAC`v:real^3`
6174 THEN EXISTS_TAC`sigma_fan x V E1 v'' v:real^3`
6175 THEN ASM_REWRITE_TAC[]
6176 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM;] THEN ASM_REWRITE_TAC[IN_SING])` E UNION {{v:real^3,w}}= E1`;(*11*)
6177
6178 MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6179 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
6180 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`f1_fan x V E1 (x,v'',v,sigma_fan x V E1 v'' v):real^3#real^3#real^3#real^3`;`(x,v'',v,sigma_fan x V E1 v'' v):real^3#real^3#real^3#real^3`]
6181 THEN POP_ASSUM MP_TAC
6182 THEN SUBGOAL_THEN`(x,v'',v,sigma_fan x V E1 v'' v)=tran x V E1 (y1:real^3#real^3#real^3#real^3)`ASSUME_TAC
6183 THENL(*12*)[
6184 ASM_REWRITE_TAC[tran];(*12*)
6185
6186 ASM_REWRITE_TAC[]
6187 THEN REMOVE_THEN "NHO" MP_TAC
6188 THEN FIND_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC 
6189 THEN ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[]
6190 THEN STRIP_TAC
6191 THEN POP_ASSUM (fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
6192 THEN POP_ASSUM MP_TAC
6193 THEN DISCH_THEN(LABEL_TAC"NHO")
6194 THEN ASSUME_TAC (SYM th)
6195 THEN POP_ASSUM MP_TAC
6196 THEN DISCH_THEN(LABEL_TAC"AN")
6197 )`y1 = (x''',v'',v,(w1':real^3)):real^3#real^3#real^3#real^3`
6198 THEN MRESAL_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`;][POWER_1]
6199 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` THEN MRESA1_TAC th`y1:real^3#real^3#real^3#real^3`)
6200 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
6201 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6202 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6203 ;`ds1:real^3#real^3#real^3#real^3->bool`
6204 ;`ds2:real^3#real^3#real^3#real^3->bool`
6205 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6206 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m:num`]
6207 THEN POP_ASSUM MP_TAC
6208 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6209 THEN MRESA_TAC AAUHTVE[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`;`( \ t. res (t x V E ) (d1_fan (x:real^3,V,E)) )`]
6210 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6211 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6212 THEN MP_TAC (SET_RULE`{f1, f2:real^3#real^3#real^3#real^3, f3} SUBSET ds==> f2 IN ds`) 
6213 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6214 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E (f1_fan x V E y1)):real^3#real^3#real^3#real^3`;`f1_fan x V E y1:real^3#real^3#real^3#real^3`;]
6215 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E y1):real^3#real^3#real^3#real^3`;` y1:real^3#real^3#real^3#real^3`;]
6216 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
6217 THEN MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y1:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;]
6218 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x'''':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
6219 THEN MRESA_TAC lemma_segment_orbit[`d1_fan (x:real^3,V,E)`;`res (f1_fan x V E) (d1_fan ((x:real^3),V,E))`;`(y:real^3#real^3#real^3#real^3)`]
6220 THEN POP_ASSUM MP_TAC
6221 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
6222 THEN REMOVE_ASSUM_TAC
6223 THEN POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[face] THEN STRIP_TAC
6224 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;lemma_def_inj_orbit])
6225 THEN REMOVE_ASSUM_TAC
6226 THEN MP_TAC(ARITH_RULE `SUC (m:num) < CARD (ds:real^3#real^3#real^3#real^3->bool) - 2 ==> CARD ds -1 < CARD ds /\ SUC (m:num) <= CARD (ds:real^3#real^3#real^3#real^3->bool) - 1 /\ SUC( SUC(SUC (m:num))) <= CARD (ds:real^3#real^3#real^3#real^3->bool) - 1`)
6227 THEN ASM_REWRITE_TAC[]
6228 THEN STRIP_TAC
6229 THEN STRIP_TAC
6230 THEN POP_ASSUM (fun th-> MRESA1_TAC th `CARD (ds:real^3#real^3#real^3#real^3->bool) -1 :num`)
6231 THEN SUBGOAL_THEN`!m'. m' < SUC m==> ~((f1_fan (x:real^3) V E POWER m') y=y1) /\ ~((f1_fan (x:real^3) V E POWER m') y=f2)` ASSUME_TAC
6232 THENL(*13*)[
6233 POP_ASSUM MP_TAC
6234 THEN DISCH_THEN(LABEL_TAC"LINH")
6235 THEN REPEAT STRIP_TAC
6236 THENL(*14*)[
6237
6238 POP_ASSUM MP_TAC
6239 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6240 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6241 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC m:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6242 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6243 THEN REMOVE_THEN "LINH"(fun th-> MRESA_TAC th [`SUC (m:num)`;`m':num`;]);(*14*)
6244
6245
6246 POP_ASSUM MP_TAC
6247 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6248 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6249 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC (SUC(SUC m:num))`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6250 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6251 THEN MP_TAC (ARITH_RULE`m'< SUC m ==> m'< SUC(SUC(SUC m)) `)
6252 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6253 THEN REMOVE_THEN "LINH"(fun th-> MRESA_TAC th [`SUC (SUC (SUC (m:num)))`;`m':num`;])
6254 THEN REMOVE_THEN "AN" MP_TAC
6255 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
6256 THEN EXPAND_TAC"y1"
6257 THEN POP_ASSUM MP_TAC
6258 THEN REWRITE_TAC[COM_POWER;o_DEF;SET_RULE`~(A=B)<=> ~(B=A)`]](*14*);(*13*)
6259
6260 POP_ASSUM MP_TAC
6261 THEN DISCH_THEN(LABEL_TAC"LINH")
6262 THEN SUBGOAL_THEN`!m'. m' < SUC m
6263             ==> (~(pr2 ((f1_fan x V E POWER m') y) = v'') /\
6264             pr3 ((f1_fan x V E POWER m') y) = v) \/
6265             (~(pr2 ((f1_fan x V E POWER m') y) = u) /\
6266             pr3 ((f1_fan x V E POWER m') y) = w) \/
6267 ~(pr3 ((f1_fan x V E POWER m') y) IN {v, w})` ASSUME_TAC
6268 THENL(*14*)[
6269
6270 REPEAT STRIP_TAC
6271 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`m':num`)
6272 THEN MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y1:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;]
6273 THEN MRESA_TAC condition_f1_fan_power_in_face_set[`m':num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3` ;` y:real^3#real^3#real^3#real^3`;`ds:real^3#real^3#real^3#real^3->bool`]
6274 THEN MP_TAC(SET_RULE`f1_fan x V E (f1_fan x V E y1) IN ds /\ (f1_fan x V E POWER m') y IN ds/\ ds SUBSET d1_fan (x,V,E)==> (f1_fan x V E POWER m') y IN d1_fan (x:real^3,V,E) /\ f1_fan x V E (f1_fan x V E y1) IN d1_fan (x:real^3,V,E)`)
6275 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6276 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`][PAIR_EQ]
6277 THEN POP_ASSUM MP_TAC
6278 THEN REMOVE_THEN "AN"(fun th-> REWRITE_TAC[SYM th;pr2;pr3])
6279 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`][PAIR_EQ;pr2;pr3]
6280 THEN POP_ASSUM MP_TAC
6281 THEN SET_TAC[];(*14*)
6282
6283 ASM_REWRITE_TAC[] THEN STRIP_TAC 
6284 THEN ASM_REWRITE_TAC[POWER] THEN STRIP_TAC
6285 THEN MRESAL_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m`; `x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;` ((f1_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) POWER SUC m) (tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y:real^3#real^3#real^3#real^3)))`;`tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y:real^3#real^3#real^3#real^3)`;][POWER]
6286 THEN POP_ASSUM MP_TAC
6287 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;tran])`x,(v':real^3),w',sigma_fan x V E v' w' = y`
6288 THEN ASM_REWRITE_TAC[]
6289 THEN REMOVE_THEN "NHO" MP_TAC
6290 THEN ASM_REWRITE_TAC[]
6291 THEN DISCH_TAC
6292 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)]
6293 THEN ASM_REWRITE_TAC[]
6294 THEN STRIP_TAC
6295 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`x':real^3#real^3#real^3#real^3`]
6296 THEN ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC THEN ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[]
6297 THEN STRIP_TAC
6298 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
6299 )
6300 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC)
6301 THEN ASM_MESON_TAC[]](*14*)](*13*)](*12*)](*11*)](*10*)](*9*)]
6302
6303 (*8*)](*7*)](*6*)](*5*)](*4*);(*3*)
6304
6305 ASM_REWRITE_TAC[]
6306 THEN MRESAL_TAC unique_tranf_fan
6307 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6308 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6309 ;`ds1:real^3#real^3#real^3#real^3->bool`
6310 ;`ds2:real^3#real^3#real^3#real^3->bool`
6311 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6312 ; `(face (hypermap1_of_fanx (x:real^3,V:real^3->bool,E)) (y:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3->bool`
6313 ;`(f:real^3#real^3#real^3#real^3->bool)`
6314 ;`(y:real^3#real^3#real^3#real^3)`;][face]
6315 THEN POP_ASSUM MATCH_MP_TAC 
6316 THEN POP_ASSUM MP_TAC
6317 THEN POP_ASSUM MP_TAC
6318 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;tran;face])
6319 THEN ASM_REWRITE_TAC[]
6320 THEN REPEAT STRIP_TAC
6321 THENL(*4*)[
6322 REWRITE_TAC[orbit_map;IN_ELIM_THM]
6323 THEN EXISTS_TAC`0`
6324 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*4*)
6325
6326 POP_ASSUM MP_TAC
6327 THEN ASM_REWRITE_TAC[]
6328 THEN STRIP_TAC
6329 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;face_set;set_of_orbits]
6330 THEN EXISTS_TAC`x''':real^3#real^3#real^3#real^3`
6331 THEN ASM_REWRITE_TAC[]
6332
6333 ]]]]);;
6334
6335
6336 let  DOMAIN_TRANF_FACE_DELETE_DS=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
6337 FAN(x,V,E)
6338  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6339 /\ fan80(x,V,E)
6340 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6341 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6342 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6343 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6344 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6345 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6346 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6347 /\ (x,w,v,u)=f10
6348 /\ (x,v,u,w)=f20
6349 /\ (x,u,w,v)=f30
6350 /\ E UNION {{v,w}}= E1
6351 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
6352       ==> tranf x V E E1 ds0 IN
6353           face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 DELETE ds2`,
6354
6355
6356 REWRITE_TAC[DELETE;IN_ELIM_THM;]
6357 THEN REPEAT STRIP_TAC
6358 THEN POP_ASSUM MP_TAC
6359 THEN POP_ASSUM MP_TAC
6360 THEN DISCH_THEN(LABEL_TAC"LINH")
6361 THEN DISCH_THEN(LABEL_TAC"LINK")
6362 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6363 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6364 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6365 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
6366 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
6367 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6368 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6369 THEN MRESAL_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6370 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ][DELETE;IN_ELIM_THM]
6371 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`]
6372 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6373 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
6374 THEN ASM_REWRITE_TAC[]
6375 THEN STRIP_TAC
6376 THEN MP_TAC(SET_RULE`y IN ds0/\ ds0 SUBSET d1_fan (x:real^3,V,E)==> y IN d1_fan (x,V,E)`)
6377 THEN ASM_REWRITE_TAC[]
6378 THEN STRIP_TAC
6379 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN STRIP_TAC 
6380 THEN POP_ASSUM(fun th-> MP_TAC (SYM th) THEN DISCH_THEN(LABEL_TAC"NHO"))
6381 THEN ASSUME_TAC th)
6382 THEN MP_TAC(SET_RULE`{v', w'} IN E /\ E UNION {{v, w}} = E1==> {v', w':real^3} IN E1 /\ {v, w:real^3} IN E1`)
6383 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6384 THENL(*1*)[
6385
6386 REWRITE_TAC[face_set;face;IN_ELIM_THM;set_of_orbits]
6387 THEN EXISTS_TAC`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`
6388 THEN ASM_REWRITE_TAC[]
6389 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th;tran;d1_fan;IN_ELIM_THM])
6390 THEN EXISTS_TAC`x:real^3`
6391 THEN EXISTS_TAC`v':real^3`
6392 THEN EXISTS_TAC`w':real^3`
6393 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
6394 THEN ASM_REWRITE_TAC[];(*1*)
6395
6396 REMOVE_THEN "LINH" MP_TAC
6397 THEN ASM_REWRITE_TAC[]
6398 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w) IN face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 (y:real^3#real^3#real^3#real^3))` ASSUME_TAC
6399 THENL(*2*)[
6400 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`ds1 = face (hypermap1_of_fanx (x,V,E1)) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`
6401 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`face (hypermap1_of_fanx (x,V,E1)) ((x:real^3),v,w,sigma_fan x V E1 v w) = ds1`
6402 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6403 THEN EXISTS_TAC`0:num`
6404 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*2*)
6405
6406 POP_ASSUM MP_TAC
6407 THEN ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6408 THEN STRIP_TAC
6409 THEN POP_ASSUM MP_TAC
6410 THEN SUBGOAL_THEN`tran x V E1 (y:real^3#real^3#real^3#real^3) IN d1_fan (x:real^3,V,E1)` ASSUME_TAC
6411 THENL(*3*)[
6412
6413 REMOVE_THEN "NHO" (fun th-> REWRITE_TAC[SYM th;tran;d1_fan;IN_ELIM_THM])
6414 THEN EXISTS_TAC`x:real^3`
6415 THEN EXISTS_TAC`v':real^3`
6416 THEN EXISTS_TAC`w':real^3`
6417 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
6418 THEN ASM_REWRITE_TAC[];(*3*)
6419
6420 MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`n:num`;`( \ t. res (t (x:real^3) V E1 ) (d1_fan (x:real^3, V:real^3->bool, (E1:(real^3->bool)->bool))))`]
6421 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
6422 THEN DISJ_CASES_TAC(ARITH_RULE`n=0\/ n=1\/ n:num>1`)
6423 THENL(*4*)[
6424
6425 REMOVE_THEN"NHO"(fun th-> ASM_REWRITE_TAC[SYM th;tran;POWER;I_DEF;EQ_PAIR_4])
6426 THEN STRIP_TAC
6427 THEN REMOVE_ASSUM_TAC
6428 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6429 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6430 THEN FIND_ASSUM MP_TAC`{v':real^3, w'} IN E`
6431 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6432 THEN ASM_REWRITE_TAC[];(*4*)
6433
6434 POP_ASSUM MP_TAC
6435 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w= f1_fan x V E1 (x,sigma_fan x V E1 v w,v, sigma_fan x V E1 (sigma_fan x V E1 v w) v )` ASSUME_TAC
6436 THENL(*5*)[
6437 REWRITE_TAC[f1_fan;EQ_PAIR_4]
6438 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6439 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);(*5*)
6440
6441 SUBGOAL_THEN`x,sigma_fan x V E1 v w,v,sigma_fan x V E1 (sigma_fan x V E1 v w) v IN
6442       d1_fan (x,V,E1)` ASSUME_TAC
6443 THENL(*6*)[
6444 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6445 THEN EXISTS_TAC`x:real^3`
6446 THEN EXISTS_TAC`sigma_fan x V E1 v w:real^3`
6447 THEN EXISTS_TAC`v:real^3`
6448 THEN EXISTS_TAC`sigma_fan x V E1 (sigma_fan x V E1 v w ) v :real^3`
6449 THEN ASM_REWRITE_TAC[]
6450 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`  (w:real^3)`;
6451 `v:real^3`]
6452 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6453 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`;`w:real^3`]
6454 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` sigma_fan x V E1 v (w:real^3)`;
6455 `v:real^3`];(*6*)
6456
6457
6458 SUBGOAL_THEN `f1= f1_fan x V E (x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v)` ASSUME_TAC
6459 THENL(*7*)[
6460
6461 REWRITE_TAC[f1_fan;EQ_PAIR_4]
6462 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`v:real^3`]
6463 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
6464 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`(x,v,u,sigma_fan x V E v u):real^3#real^3#real^3#real^3`;][pr2;pr3]
6465 THEN POP_ASSUM MATCH_MP_TAC
6466 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6467 THEN EXISTS_TAC`x:real^3`
6468 THEN EXISTS_TAC`v:real^3`
6469 THEN EXISTS_TAC`u:real^3`
6470 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
6471 THEN ASM_REWRITE_TAC[];(*7*)
6472
6473 SUBGOAL_THEN`x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v IN
6474       d1_fan (x,V,E)` ASSUME_TAC
6475 THENL(*8*)[
6476
6477 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6478 THEN EXISTS_TAC`x:real^3`
6479 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
6480 THEN EXISTS_TAC`v:real^3`
6481 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
6482 THEN ASM_REWRITE_TAC[]
6483 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
6484 `v:real^3`]
6485 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6486 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
6487 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` sigma_fan x V E v (u:real^3)`;`v:real^3`];(*8*)
6488
6489
6490 MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`;`(x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v):real^3#real^3#real^3#real^3`;]
6491 THEN STRIP_TAC
6492 THENL(*9*)[
6493
6494 ASM_REWRITE_TAC[POWER_1]
6495 THEN STRIP_TAC
6496 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
6497 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x:real^3,sigma_fan x V E1 v w,v,sigma_fan x V E1 (sigma_fan x V E1 v w) v)`;`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`])
6498 THEN POP_ASSUM MP_TAC
6499 THEN REMOVE_THEN "NHO"(fun th-> ASM_REWRITE_TAC[SYM th;tran;EQ_PAIR_4] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHO" ))
6500 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6501 `v:real^3`;`u:real^3`; `w:real^3` ]
6502 THEN STRIP_TAC
6503 THEN REMOVE_ASSUM_TAC
6504 THEN REMOVE_THEN"NHO" MP_TAC
6505 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6506 THEN POP_ASSUM MP_TAC
6507 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6508 THEN POP_ASSUM MP_TAC
6509 THEN ASM_REWRITE_TAC[]
6510 THEN STRIP_TAC
6511 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6512 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]
6513 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`];(*9*)
6514
6515 SUBGOAL_THEN`?m. n=SUC (SUC m)/\ m>=0`ASSUME_TAC
6516 THENL(*10*)[
6517 EXISTS_TAC`n-2:num`
6518 THEN REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
6519 THEN POP_ASSUM MP_TAC
6520 THEN ARITH_TAC;(*10*)
6521
6522 POP_ASSUM MP_TAC
6523 THEN STRIP_TAC
6524 THEN ASM_REWRITE_TAC[]
6525 THEN ONCE_REWRITE_TAC[COM_POWER]
6526 THEN REWRITE_TAC[o_DEF]
6527 THEN STRIP_TAC
6528 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`SUC m:num`;]
6529 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
6530 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
6531 THEN POP_ASSUM(fun th-> MRESA_TAC th[`(x:real^3,sigma_fan x V E1 v w,v,sigma_fan x V E1 (sigma_fan x V E1 v w) v)`;`(f1_fan x V E1 POWER SUC m) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`])
6532 THEN POP_ASSUM MP_TAC
6533 THEN ABBREV_TAC`y1=(x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v)`
6534 THEN DISJ_CASES_TAC(SET_RULE`~((y:real^3#real^3#real^3#real^3) IN ds)\/ y IN ds`)
6535 THENL(*11*)[
6536
6537 SUBGOAL_THEN`!m'. m' < SUC m==> ~((f1_fan (x:real^3) V E POWER m') y=y1) /\ ~((f1_fan (x:real^3) V E POWER m') y=f2)` ASSUME_TAC
6538
6539 THENL(*12*)[
6540 REPEAT STRIP_TAC
6541 THENL(*13*)[
6542
6543 MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`m':num`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y1:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;];(*13*)
6544
6545 MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`m':num`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f2:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;](*13*)];(*12*)
6546
6547
6548
6549
6550 POP_ASSUM MP_TAC
6551 THEN DISCH_THEN(LABEL_TAC"LINH")
6552 THEN SUBGOAL_THEN`!m'. m' < SUC m
6553             ==> (~(pr2 ((f1_fan x V E POWER m') y) = sigma_fan x V E v u) /\
6554             pr3 ((f1_fan x V E POWER m') y) = v) \/
6555             (~(pr2 ((f1_fan x V E POWER m') y) = u) /\
6556             pr3 ((f1_fan x V E POWER m') y) = w) \/
6557 ~(pr3 ((f1_fan x V E POWER m') y) IN {v, w})` ASSUME_TAC
6558 THENL(*13*)[
6559 REPEAT STRIP_TAC
6560 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`m':num`)
6561 THEN MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y1:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;]
6562 THEN MP_TAC(SET_RULE`f1_fan x V E (f1_fan x V E y1) IN ds /\ (f1_fan x V E POWER m') y IN ds0/\ ds SUBSET d1_fan (x,V,E) /\ ds0 SUBSET d1_fan (x,V,E)==> (f1_fan x V E POWER m') y IN d1_fan (x:real^3,V,E) /\ f1_fan x V E (f1_fan x V E y1) IN d1_fan (x:real^3,V,E)`)
6563 THEN FIND_ASSUM (fun th->REWRITE_TAC[SYM th])`f1 = f1_fan x V E (y1:real^3#real^3#real^3#real^3)`
6564 THEN MRESA_TAC condition_f1_fan_power_in_face_set[`m':num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3` ;` y:real^3#real^3#real^3#real^3`;`ds0:real^3#real^3#real^3#real^3->bool`]
6565 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6566 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`][PAIR_EQ]
6567 THEN POP_ASSUM MP_TAC
6568 THEN EXPAND_TAC"y1"
6569 THEN REWRITE_TAC[pr2;pr3]
6570 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`][PAIR_EQ;pr2;pr3]
6571 THEN POP_ASSUM MP_TAC
6572 THEN SET_TAC[];(*13*)
6573
6574 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
6575 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6576 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6577 ;`ds1:real^3#real^3#real^3#real^3->bool`
6578 ;`ds2:real^3#real^3#real^3#real^3->bool`
6579 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6580 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m:num`]
6581 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6582 THEN SUBGOAL_THEN`(x,sigma_fan x V E1 v w,v,sigma_fan x V E1 (sigma_fan x V E1 v w) v)=tran x V E1 (y1:real^3#real^3#real^3#real^3)`ASSUME_TAC
6583 THENL(*14*)[
6584
6585 EXPAND_TAC"y1"
6586 THEN REWRITE_TAC[tran]
6587 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6588 `v:real^3`;`u:real^3`; `w:real^3` ];(*14*)
6589
6590
6591 ASM_REWRITE_TAC[]
6592 THEN STRIP_TAC 
6593 THEN MRESA_TAC condition_f1_fan_power_in_face_set[`SUC m:num`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER (SUC m)) y):real^3#real^3#real^3#real^3` ;` y:real^3#real^3#real^3#real^3`;`ds0:real^3#real^3#real^3#real^3->bool`]
6594 THEN MP_TAC(SET_RULE` (f1_fan x V E POWER (SUC m)) y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)/\ E UNION {{v, w}} = E1 ==> (f1_fan x V E POWER (SUC m)) y IN d1_fan (x:real^3,V,E) /\ E SUBSET E1`)
6595 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6596 THEN MRESA_TAC INJ_TRAN_D1_FAN
6597 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
6598 `y1:real^3#real^3#real^3#real^3`;`(f1_fan x V E POWER (SUC m)) (y:real^3#real^3#real^3#real^3)`]
6599 THEN MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m`; `x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`y1:real^3#real^3#real^3#real^3`;` y:real^3#real^3#real^3#real^3`;]](*14*)](*13*)](*12*);(*11*)
6600
6601
6602 MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]
6603 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]](*11*)](*10*)](*9*)](*8*)](*7*)](*6*)](*5*)](*4*)](*3*)](*2*);(*1*)
6604
6605 REMOVE_THEN "LINH" MP_TAC
6606 THEN ASM_REWRITE_TAC[]
6607 THEN SUBGOAL_THEN`tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3) IN ds2` ASSUME_TAC
6608 THENL(*2*)[
6609
6610 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6611 THEN EXISTS_TAC`0:num`
6612 THEN ASM_REWRITE_TAC[ARITH_RULE`0 >=0 `;POWER;I_DEF];(*2*)
6613 POP_ASSUM MP_TAC
6614 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6615 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
6616 THEN STRIP_TAC
6617 THEN MP_TAC(SET_RULE`tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3) IN {f10, (f20:real^3#real^3#real^3#real^3), f30}==> tran x V E1 y =f10 \/ tran x V E1 y =f20 \/ tran x V E1 y = f30`)
6618 THEN ASM_REWRITE_TAC[]
6619 THEN STRIP_TAC
6620 THENL(*3*)[
6621 POP_ASSUM MP_TAC
6622 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran])
6623 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,w,v,u = f10:real^3#real^3#real^3#real^3`
6624 THEN STRIP_TAC
6625 THEN REMOVE_ASSUM_TAC
6626 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6627 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6628 THEN FIND_ASSUM MP_TAC`{w, v:real^3} IN E`
6629 THEN FIND_ASSUM MP_TAC`~({w, v:real^3} IN E)`
6630 THEN SET_TAC[];(*3*)
6631
6632 POP_ASSUM MP_TAC
6633 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran]THEN ASSUME_TAC (SYM(th)))
6634 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,v,u,w = f20:real^3#real^3#real^3#real^3`
6635 THEN STRIP_TAC
6636 THEN REMOVE_ASSUM_TAC
6637 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6638 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6639 THEN SUBGOAL_THEN `f1=y:real^3#real^3#real^3#real^3`ASSUME_TAC
6640 THENL(*4*)[
6641 ASM_REWRITE_TAC[]
6642 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`(x,v,u,sigma_fan x V E v u):real^3#real^3#real^3#real^3`;][pr2;pr3]
6643 THEN POP_ASSUM MATCH_MP_TAC
6644 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6645 THEN EXISTS_TAC`x:real^3`
6646 THEN EXISTS_TAC`v:real^3`
6647 THEN EXISTS_TAC`u:real^3`
6648 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
6649 THEN ASM_REWRITE_TAC[];(*4*)
6650
6651
6652 MP_TAC(SET_RULE`f1=y /\ f1 IN ds ==> (y:real^3#real^3#real^3#real^3) IN ds`)
6653 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6654 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]
6655 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]](*4*);(*3*)
6656
6657 POP_ASSUM MP_TAC
6658 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran]THEN ASSUME_TAC (SYM(th)))
6659 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
6660 THEN STRIP_TAC
6661 THEN REMOVE_ASSUM_TAC
6662 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6663 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6664 THEN SUBGOAL_THEN `f2=y:real^3#real^3#real^3#real^3`ASSUME_TAC
6665 THENL(*4*)[
6666 ASM_REWRITE_TAC[]
6667 THEN MRESA_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f2:real^3#real^3#real^3#real^3`;`(x,u,w,w1):real^3#real^3#real^3#real^3`;]
6668 THEN POP_ASSUM MATCH_MP_TAC
6669 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
6670 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6671 THEN EXISTS_TAC`x:real^3`
6672 THEN EXISTS_TAC`u:real^3`
6673 THEN EXISTS_TAC`w:real^3`
6674 THEN EXISTS_TAC`v :real^3`
6675 THEN ASM_REWRITE_TAC[];(*4*)
6676
6677 MP_TAC(SET_RULE`f2=y /\ f2 IN ds ==> (y:real^3#real^3#real^3#real^3) IN ds`)
6678 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6679 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]
6680 THEN MRESA_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`;` (y:real^3#real^3#real^3#real^3)`]]]]]);;
6681
6682
6683
6684 let EQ_CARD_FACE_FAN_AND_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
6685 FAN(x,V,E)
6686  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6687 /\ fan80(x,V,E)
6688 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6689 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6690 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6691 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6692 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6693 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6694 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6695 /\ (x,w,v,u)=f10
6696 /\ (x,v,u,w)=f20
6697 /\ (x,u,w,v)=f30
6698 /\ E UNION {{v,w}}= E1
6699 ==> CARD ((face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 ) DELETE ds2 )= CARD (face_set (hypermap1_of_fanx (x,V,E)) DELETE ds) `,
6700
6701 REPEAT STRIP_TAC
6702 THEN MATCH_MP_TAC CARD_IMAGE_INJ_EQ
6703 THEN EXISTS_TAC`tranf (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (E1:(real^3->bool)->bool):(real^3#real^3#real^3#real^3->bool)->real^3#real^3#real^3#real^3->bool`
6704 THEN MRESAL1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`[FINITE_DELETE;EXISTS_UNIQUE]
6705 THEN STRIP_TAC
6706 THENL[
6707 REPEAT STRIP_TAC
6708 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
6709 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6710 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6711 ;`ds1:real^3#real^3#real^3#real^3->bool`
6712 ;`ds2:real^3#real^3#real^3#real^3->bool`
6713 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6714 ;`(x':real^3#real^3#real^3#real^3->bool)`;];
6715
6716 REPEAT STRIP_TAC
6717 THEN MRESA_TAC SUR_TRANF_FACE_DELETE_DS
6718 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6719 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6720 ;`ds1:real^3#real^3#real^3#real^3->bool`
6721 ;`ds2:real^3#real^3#real^3#real^3->bool`
6722 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6723 ;`(y:real^3#real^3#real^3#real^3->bool)`;]
6724 THEN EXISTS_TAC`ds0:real^3#real^3#real^3#real^3->bool`
6725 THEN ASM_REWRITE_TAC[]
6726 THEN STRIP_TAC
6727 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6728 THEN STRIP_TAC
6729 THEN MRESA_TAC INJ_TRANF_FACE_DELETE_DS
6730 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6731 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6732 ;`ds1:real^3#real^3#real^3#real^3->bool`
6733 ;`ds2:real^3#real^3#real^3#real^3->bool`
6734 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6735 ;`(y':real^3#real^3#real^3#real^3->bool)`;`(ds0:real^3#real^3#real^3#real^3->bool)`]]);;
6736
6737
6738
6739
6740
6741 let CARD_DART_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w.
6742 FAN(x,V,E)
6743  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6744 /\ fan80(x,V,E)
6745 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6746 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6747 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6748 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6749 /\ sigma_fan x V E u w = v
6750 /\ ~(v=w)
6751 /\ E UNION {{v,w}}=E1
6752 ==> 
6753 CARD (dart (hypermap1_of_fanx (x,V,E1)))
6754 = CARD (dart (hypermap1_of_fanx (x,V,E))) +2`,
6755
6756 REPEAT STRIP_TAC
6757 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6758 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6759 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6760 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
6761 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
6762 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6763 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6764 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6765 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
6766 THEN ASM_REWRITE_TAC[]
6767 THEN STRIP_TAC
6768 THEN MRESAL_TAC card_eq_image_in_d_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`;
6769 `d1_fan (x,V,E1):real^3#real^3#real^3#real^3->bool`][SET_RULE`d1_fan (x,V,E1) SUBSET d1_fan (x,V,E1)`]
6770 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6771 THEN MRESAL_TAC card_eq_image_in_d_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;
6772 `d1_fan (x,V,E):real^3#real^3#real^3#real^3->bool`][SET_RULE`d1_fan (x,V,E) SUBSET d1_fan (x,V,E)`]
6773 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6774 THEN MRESA_TAC DART_FANADD_EQ_DART_FAN_ADD_2DART[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6775 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6776 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6777 THEN MRESA_TAC FINITE_IMAGE[`pr23:real^3#real^3#real^3#real^3->real^3#real^3`;`(d1_fan ((x:real^3),V,E))`]
6778 THEN MRESA_TAC CARD_UNION[`IMAGE pr23 (d1_fan ((x:real^3),V,E))`;`{(v,w), (w,(v:real^3))}`]
6779 THEN POP_ASSUM MP_TAC
6780 THEN ASM_SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
6781                  IN_INSERT; NOT_IN_EMPTY;PAIR_EQ;SET_RULE`v = w /\ w = v <=> v=w`;ARITH_RULE`SUC(SUC 0)=2`]
6782 THEN STRIP_TAC
6783 THEN POP_ASSUM MATCH_MP_TAC
6784 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM;NOT_IN_EMPTY;PR23_OF_D1_FAN;SET_RULE`x' IN {(v,w), (w,v)}
6785 <=> x'=(v,w) \/ x'=(w,v)`]
6786 THEN GEN_TAC
6787 THEN STRIP_TAC
6788 THEN POP_ASSUM MP_TAC
6789 THEN ASM_REWRITE_TAC[PAIR_EQ]
6790 THEN STRIP_TAC
6791 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6792 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6793 THEN REMOVE_ASSUM_TAC
6794 THEN POP_ASSUM MP_TAC
6795 THEN ASM_REWRITE_TAC[]
6796 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6797 THEN ASM_REWRITE_TAC[]);;
6798
6799
6800 let     ZSZIUQE_LEMMA=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
6801 FAN(x,V,E)
6802  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6803 /\ fan80(x,V,E)
6804 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6805 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6806 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6807 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6808 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6809 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6810 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6811 /\ (x,w,v,u)=f10
6812 /\ (x,v,u,w)=f20
6813 /\ (x,u,w,v)=f30
6814 /\ E UNION {{v,w}}= E1
6815 ==> N_FAN (x,V,E1)< N_FAN(x,V,E)`,
6816
6817 REPEAT STRIP_TAC
6818 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6819 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6820 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6821 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
6822 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
6823 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6824 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6825 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6826 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
6827 THEN ASM_REWRITE_TAC[]
6828 THEN STRIP_TAC
6829 THEN REWRITE_TAC[N_FAN]
6830 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`
6831 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`
6832 THEN MRESA_TAC NSUM_CONST[`3:num`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E1)))`]
6833 THEN MRESA_TAC NSUM_CONST[`3:num`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E)))`]
6834 THEN SUBGOAL_THEN`!y.  y IN (face_set (hypermap1_of_fanx ((x:real^3),V,E1)))==> (\x. CARD x - 3 + 3) y=(\x. CARD x ) y` ASSUME_TAC
6835 THENL[
6836 ASM_REWRITE_TAC[]
6837 THEN REPEAT STRIP_TAC
6838 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3->bool`]
6839 THEN POP_ASSUM MP_TAC
6840 THEN ARITH_TAC;
6841 SUBGOAL_THEN`!y.  y IN (face_set (hypermap1_of_fanx ((x:real^3),V,E)))==> (\x. CARD x - 3 + 3) y=(\x. CARD x ) y` ASSUME_TAC
6842 THENL[
6843 ASM_REWRITE_TAC[]
6844 THEN REPEAT STRIP_TAC
6845 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`y:real^3#real^3#real^3#real^3->bool`]
6846 THEN POP_ASSUM MP_TAC
6847 THEN ARITH_TAC;
6848 MP_TAC(SET_RULE` E UNION {{v,w:real^3}}= E1
6849 ==> {v,w} IN E1`)
6850 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6851 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
6852 `(v:real^3)`]
6853 THEN MRESA_TAC NSUM_EQ[`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f - 3+3)`;`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f)`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E1)))`]
6854 THEN MRESA_TAC NSUM_EQ[`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f - 3+3)`;`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f)`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E)))`]
6855 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E1:(real^3->bool)->bool)`]
6856 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6857 THEN MRESA_TAC AAUHTVE[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`;`( \ t. res (t x V E ) (d1_fan (x:real^3,V,E)) )`]
6858 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6859 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6860 THEN MRESA_TAC AAUHTVE[`x:real^3`;` V:real^3->bool`;` (E1:(real^3->bool)->bool)`;`( \ t. res (t x V E1 ) (d1_fan (x:real^3,V,E1)) )`]
6861 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6862 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6863 THEN MRESA_TAC card_partition_formula[`dart (hypermap1_of_fanx (x:real^3,V,E1))`;`face_map (hypermap1_of_fanx (x:real^3,V,E1))`]
6864 THEN MRESA_TAC NSUM_ADD[`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f - 3)`;`(\(f:real^3#real^3#real^3#real^3->bool).  3)`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E1)))`]
6865 THEN POP_ASSUM MP_TAC
6866 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[face_set]
6867 THEN ASM_REWRITE_TAC[]
6868 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6869 THEN STRIP_TAC
6870 THEN MRESA_TAC card_partition_formula[`dart (hypermap1_of_fanx (x:real^3,V,E))`;`face_map (hypermap1_of_fanx (x:real^3,V,E))`]
6871 THEN MRESA_TAC NSUM_ADD[`(\(f:real^3#real^3#real^3#real^3->bool).  CARD f - 3)`;`(\(f:real^3#real^3#real^3#real^3->bool).  3)`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E)))`]
6872 THEN POP_ASSUM MP_TAC
6873 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[face_set]
6874 THEN ASM_REWRITE_TAC[]
6875 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6876 THEN STRIP_TAC
6877 THEN MRESA_TAC CARD_DART_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6878 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6879 THEN POP_ASSUM MP_TAC
6880 THEN MRESA_TAC EQ_CARD_FACE_FAN_AND_FANADD
6881 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6882 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
6883 ;`ds1:real^3#real^3#real^3#real^3->bool`
6884 ;`ds2:real^3#real^3#real^3#real^3->bool`
6885 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`]
6886 THEN MRESA_TAC CARD_MINUS_ONE[`(face_set (hypermap1_of_fanx ((x:real^3),V,E)))`;`ds:real^3#real^3#real^3#real^3->bool`]
6887 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6888 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
6889 THEN MRESA_TAC CARD_MINUS_ONE[`(face_set (hypermap1_of_fanx ((x:real^3),V,E1)))`;`ds1:real^3#real^3#real^3#real^3->bool`]
6890 THEN SUBGOAL_THEN `ds2 IN (face_set (hypermap1_of_fanx ((x:real^3),V,E1))) DELETE (ds1:real^3#real^3#real^3#real^3->bool)`ASSUME_TAC
6891 THENL[
6892 REWRITE_TAC[DELETE;IN_ELIM_THM]
6893 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6894 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
6895 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6896 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];
6897 MRESAL_TAC CARD_MINUS_ONE[`(face_set (hypermap1_of_fanx ((x:real^3),V,E1))) DELETE (ds1:real^3#real^3#real^3#real^3->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`][FINITE_DELETE]
6898 THEN ARITH_TAC]]]);;
6899
6900
6901 let ZSZIUQE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
6902 FAN(x,V,E)
6903  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6904 /\ fan80(x,V,E)
6905 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6906 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6907 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6908 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6909 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6910 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6911 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6912 /\ (x,w,v,u)=f10
6913 /\ (x,v,u,w)=f20
6914 /\ (x,u,w,v)=f30
6915 /\ E UNION {{v,w}}= E1
6916 ==> ~(ds1= ds2)/\ CARD ds2=3 /\ ds2={f10,f20,f30} /\  N_FAN (x,V,E1)< N_FAN(x,V,E)`,
6917 REPEAT STRIP_TAC
6918 THENL[
6919 POP_ASSUM MP_TAC
6920 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6921 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];
6922 MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6923 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];
6924 MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6925 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];
6926 MRESA_TAC ZSZIUQE_LEMMA[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6927 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]]);;
6928
6929
6930 let FAN80_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
6931 FAN(x,V,E)
6932  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6933 /\ fan80(x,V,E)
6934 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6935 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
6936 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6937 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6938 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6939 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6940 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6941 /\ (x,w,v,u)=f10
6942 /\ (x,v,u,w)=f20
6943 /\ (x,u,w,v)=f30
6944 /\ E UNION {{v,w}}= E1
6945 ==> fan80(x,V,E1)`,
6946
6947 REPEAT STRIP_TAC
6948 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6949 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6950 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
6951 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
6952 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
6953 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6954 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6955 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
6956 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
6957 THEN ASM_REWRITE_TAC[fan80]
6958 THEN STRIP_TAC
6959 THEN REPEAT GEN_TAC
6960 THEN FIND_ASSUM (fun th-> GEN_REWRITE_TAC(LAND_CONV  o ONCE_DEPTH_CONV)[SYM th] THEN REWRITE_TAC[IN_ELIM_THM;UNION;IN_SING])`E UNION {{v, w:real^3}} = E1`
6961 THEN STRIP_TAC
6962 THENL(*1*)[
6963 FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
6964 THEN REWRITE_TAC[fan80]
6965 THEN STRIP_TAC
6966 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`u':real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH"))
6967 THEN DISJ_CASES_TAC(SET_RULE`
6968 ~(v' IN {v, w:real^3})\/ (v'=v/\ u'=u)\/ (v'=v/\ ~(u'=u))\/ (v'=w/\ u'= inverse1_sigma_fan x V E w u)\/ (v'=w/\ ~(u'=inverse1_sigma_fan x V E w u))`)
6969 THENL(*2*)[
6970  MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6971 `v:real^3`; `w:real^3` ]
6972 THEN POP_ASSUM MP_TAC
6973 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
6974 THEN ASM_REWRITE_TAC[]
6975 THEN STRIP_TAC
6976 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`u':real^3`] );(*2*)
6977
6978 POP_ASSUM MP_TAC
6979 THEN STRIP_TAC
6980 THENL(*3*)(*4GOAL*)[
6981
6982 ASM_REWRITE_TAC[]
6983 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6984 `v:real^3`;`u:real^3`; `w:real^3` ]
6985 THEN MATCH_MP_TAC properties_of_fully_surrounded1_fan
6986 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
6987 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`];(*3*)
6988
6989 POP_ASSUM MP_TAC
6990 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6991 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
6992 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`];(*3*)
6993
6994
6995 ASM_REWRITE_TAC[]
6996 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH"))
6997 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
6998 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
6999 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
7000 THEN REMOVE_ASSUM_TAC
7001 THEN POP_ASSUM MP_TAC
7002 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
7003 THEN POP_ASSUM MP_TAC
7004 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7005 THEN ASM_REWRITE_TAC[]
7006 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7007 THEN STRIP_TAC
7008 THEN STRIP_TAC
7009 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
7010 THEN POP_ASSUM MP_TAC
7011 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7012 THEN ASM_REWRITE_TAC[]
7013 THEN STRIP_TAC
7014 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7015 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`]
7016 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
7017 THEN POP_ASSUM MP_TAC
7018 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7019 THEN ASM_REWRITE_TAC[]
7020 THEN STRIP_TAC
7021 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
7022 ==>
7023 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
7024 THEN RESA_TAC
7025 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (inverse1_sigma_fan x V E w u:real^3)`;
7026 `(w:real^3)`]
7027 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`;`u:real^3`]
7028 THEN POP_ASSUM MP_TAC
7029 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
7030 THEN ASM_REWRITE_TAC[]
7031 THEN STRIP_TAC
7032 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
7033       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
7034 /\ &0<= azim x w v u
7035 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
7036 `)
7037 THEN ASM_SIMP_TAC[azim]
7038 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC (SYM th) THEN DISCH_THEN(LABEL_TAC"YEUEMLINH"))
7039 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`] )
7040 THEN STRIP_TAC
7041 THEN MP_TAC(REAL_ARITH`
7042 azim x w (inverse1_sigma_fan x V E w u) v <=
7043  azim x w (inverse1_sigma_fan x V E w u) u
7044 /\ azim x w (inverse1_sigma_fan x V E w u) u < pi
7045 ==> azim x w (inverse1_sigma_fan x V E w u) (v:real^3) < pi`)
7046 THEN ASM_REWRITE_TAC[]
7047 THEN STRIP_TAC
7048 THEN ASM_REWRITE_TAC[]
7049 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
7050       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
7051 /\ azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
7052 ==> &0 < azim x w (inverse1_sigma_fan x V E w u) v
7053 `)
7054 THEN ASM_REWRITE_TAC[];(*3*)
7055 POP_ASSUM MP_TAC
7056 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7057 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7058 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`]](*3*)](*2*);(*1*)
7059
7060
7061
7062 MP_TAC(SET_RULE`{v', u':real^3} = {v, w}==> (v'=v /\ u'=w) \/ (v'=w /\ u'=v)`)
7063 THEN ASM_REWRITE_TAC[]
7064 THEN STRIP_TAC
7065 THENL[
7066 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7067 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7068 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`;
7069 `v:real^3`;`u:real^3`; `w:real^3` ;]
7070 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
7071 THEN REWRITE_TAC[fan80]
7072 THEN STRIP_TAC
7073 THEN POP_ASSUM(fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH")) 
7074 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
7075 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
7076 THEN MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][DE_MORGAN_THM;]
7077 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
7078 THEN ABBREV_TAC`u1=sigma_fan x V E v u`
7079 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7080 `(v:real^3)`]
7081 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
7082 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
7083 `(v:real^3)`]
7084 THEN POP_ASSUM MP_TAC
7085 THEN ASM_REWRITE_TAC[]
7086 THEN STRIP_TAC
7087 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`u1:real^3`]
7088 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`v:real^3`;`u:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH"))
7089 THEN MP_TAC(REAL_ARITH` azim x v u w + azim x v w u1< pi/\ &0 <= azim x v u w /\ &0 <= azim x v w u1
7090 ==> azim x v w (u1:real^3)<pi`)
7091 THEN ASM_SIMP_TAC[azim]
7092 THEN MP_TAC(REAL_ARITH` &0<= azim x v w u1 ==> azim x v w u1 = &0\/ &0<azim x v w (u1:real^3)`)
7093 THEN ASM_SIMP_TAC[azim]
7094 THEN STRIP_TAC
7095 THEN MP_TAC(SET_RULE`{v, u1} IN E/\ E UNION {{v, w:real^3}} = E1==>{v, w} IN E1 /\ {v, u1} IN E1`)
7096 THEN ASM_REWRITE_TAC[]
7097 THEN STRIP_TAC
7098 THEN MRESA_TAC UNIQUE_AZIM_0_POINT_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`(v:real^3)`;`(w:real^3)`;`u1:real^3`]
7099 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
7100 THEN FIND_ASSUM MP_TAC`{v,w:real^3} IN E`
7101 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7102 THEN ASM_REWRITE_TAC[];
7103 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7104 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7105 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`;
7106 `v:real^3`;`u:real^3`; `w:real^3` ;]
7107 THEN MRESA_TAC condition_azim_le_pi[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]]]);;
7108
7109
7110
7111
7112
7113
7114 let FANADD_CONFORMING=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7115 FAN(x,V,E)
7116  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7117 /\ fan80(x,V,E)
7118 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7119 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7120 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7121 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7122 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7123 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7124 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7125 /\ (x,w,v,u)=f10
7126 /\ (x,v,u,w)=f20
7127 /\ (x,u,w,v)=f30
7128 /\ E UNION {{v,w}}= E1
7129 /\ (!E1. FAN(x,V,E1)  /\ 
7130          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
7131          fan80(x,V,E1)/\ 
7132          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7133 ==>
7134 conforming_fan (x,V,E1)`,
7135
7136 REPEAT STRIP_TAC
7137 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(E1:(real^3->bool)->bool)`)
7138 THEN POP_ASSUM MATCH_MP_TAC
7139 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7140 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7141 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7142 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7143 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7144 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7145 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7146 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7147 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7148 THEN ASM_REWRITE_TAC[]
7149 THEN STRIP_TAC
7150 THEN MRESA_TAC ZSZIUQE_LEMMA[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7151 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7152 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7153 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]);;
7154
7155
7156
7157
7158 let dartset_leads_in_fanadd_topological_component_yfan =prove( `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
7159 FAN(x,V,E)
7160  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7161 /\ fan80(x,V,E)
7162 /\ (!E1. FAN(x,V,E1)  /\ 
7163          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
7164          fan80(x,V,E1)/\ 
7165          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7166 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7167 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7168 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7169 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7170 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7171 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7172 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7173 /\ (x,w,v,u)=f10
7174 /\ (x,v,u,w)=f20
7175 /\ (x,u,w,v)=f30
7176 /\ E UNION {{v,w}}= E1
7177 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
7178 ==> dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) IN topological_component_yfan (x,V,E1)`,
7179 REPEAT STRIP_TAC
7180 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7181 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7182 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7183 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7184 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7185 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7186 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7187 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7188 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7189 THEN ASM_REWRITE_TAC[]
7190 THEN STRIP_TAC
7191 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7192 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7193 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
7194 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7195 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
7196 ;`ds1:real^3#real^3#real^3#real^3->bool`
7197 ;`ds2:real^3#real^3#real^3#real^3->bool`
7198 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
7199 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;]
7200 THEN MP_TAC(SET_RULE`tranf (x:real^3) V (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool) IN face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 DELETE ds2
7201 ==> tranf (x:real^3) V E E1 (ds0:real^3#real^3#real^3#real^3->bool) IN face_set (hypermap1_of_fanx ((x:real^3),V,E1))`)
7202 THEN ASM_REWRITE_TAC[]
7203 THEN STRIP_TAC
7204 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf (x:real^3) V (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)`]);;
7205
7206
7207
7208
7209
7210 let INVARANT_SIGMA_FAN_ADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
7211 FAN(x,V,E)
7212  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7213 /\ fan80(x,V,E)
7214 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7215 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7216 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7217 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7218 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7219 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
7220 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
7221 /\ (x,w,v,u)=f10
7222 /\ (x,v,u,w)=f20
7223 /\ (x,u,w,v)=f30
7224 /\ E UNION {{v,w}}= E1
7225 /\ ~(y IN ds)
7226 /\ y IN d_fan(x,V,E)
7227 ==> 
7228 sigma_fan x V E1 (pr2(y)) (pr3(y))= sigma_fan x V E (pr2(y)) (pr3(y))`,
7229
7230 REPEAT STRIP_TAC
7231 THEN POP_ASSUM MP_TAC
7232 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7233 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7234 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7235 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7236 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7237 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7238 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7239 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7240 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7241 THEN ASM_REWRITE_TAC[fan80]
7242 THEN STRIP_TAC
7243 THEN STRIP_TAC
7244 THEN POP_ASSUM(fun th-> MP_TAC th THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM] 
7245 THEN STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[] THEN STRIP_TAC)
7246 THEN ASM_REWRITE_TAC[pr2;pr3]
7247 THEN DISJ_CASES_TAC(SET_RULE`
7248 ~(v' IN {v, w:real^3})\/ (v'=v/\ w'=u)\/ (v'=v/\ ~(w'=u))\/ (v'=w/\ w'= inverse1_sigma_fan x V E w u)\/ (v'=w/\ ~(w'=inverse1_sigma_fan x V E w u))`)
7249 THENL[
7250  MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7251 `v:real^3`; `w:real^3` ]
7252 THEN POP_ASSUM MP_TAC
7253 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
7254 THEN ASM_REWRITE_TAC[]
7255 THEN STRIP_TAC
7256 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`] );(*1*)
7257
7258 POP_ASSUM MP_TAC
7259 THEN STRIP_TAC
7260 THENL[
7261 SUBGOAL_THEN`y= f1:real^3#real^3#real^3#real^3`ASSUME_TAC
7262 THENL[
7263 ASM_REWRITE_TAC[]
7264 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7265 THEN EXISTS_TAC`x:real^3`
7266 THEN EXISTS_TAC`V:real^3->bool`
7267 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7268 THEN ASM_REWRITE_TAC[pr3;pr2]
7269 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7270 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
7271 MP_TAC(SET_RULE`y=(f1:real^3#real^3#real^3#real^3) /\ f1 IN ds ==> y IN ds`)
7272 THEN ASM_REWRITE_TAC[]
7273 THEN POP_ASSUM MP_TAC
7274 THEN ASM_REWRITE_TAC[]
7275 THEN SET_TAC[]];
7276
7277 POP_ASSUM MP_TAC
7278 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7279 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7280 `v:real^3`;`u:real^3`; `w:real^3` ;`w':real^3`];
7281
7282
7283 SUBGOAL_THEN`y=f3:real^3#real^3#real^3#real^3`ASSUME_TAC
7284 THENL[
7285 ASM_REWRITE_TAC[]
7286 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7287 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7288 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7289 THEN EXISTS_TAC`x:real^3`
7290 THEN EXISTS_TAC`V:real^3->bool`
7291 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7292 THEN ASM_REWRITE_TAC[pr3;pr2;PAIR_EQ]
7293 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
7294 THENL[
7295 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7296 THEN EXISTS_TAC`x:real^3`
7297 THEN EXISTS_TAC`V:real^3->bool`
7298 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7299 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
7300 THEN ASM_REWRITE_TAC[]
7301 THEN ASM_TAC
7302 THEN REWRITE_TAC[pr2;pr3]
7303 THEN REPEAT STRIP_TAC
7304 THEN ASM_REWRITE_TAC[]
7305 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
7306 THEN EXISTS_TAC`x:real^3`
7307 THEN EXISTS_TAC`u:real^3`
7308 THEN EXISTS_TAC`w:real^3`
7309 THEN EXISTS_TAC`v:real^3`
7310 THEN ASM_REWRITE_TAC[];
7311 MP_TAC(SET_RULE`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3
7312 ==> f1_fan x V E f2= f1_fan x V E (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`)
7313 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[pr2;pr3])
7314  THEN STRIP_TAC
7315 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;])`f1_fan x V E (f2:real^3#real^3#real^3#real^3) = (f3:real^3#real^3#real^3#real^3)`
7316 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;f1_fan])
7317 THEN ASM_TAC
7318 THEN REWRITE_TAC[pr2;pr3]
7319 THEN REPEAT STRIP_TAC
7320 THEN ASM_REWRITE_TAC[]];
7321
7322 MP_TAC(SET_RULE`y=(f3:real^3#real^3#real^3#real^3) /\ f3 IN ds ==> y IN ds`)
7323 THEN ASM_REWRITE_TAC[]
7324 THEN POP_ASSUM MP_TAC
7325 THEN ASM_REWRITE_TAC[]
7326 THEN SET_TAC[]];
7327
7328 POP_ASSUM MP_TAC
7329 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7330 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7331 `v:real^3`;`u:real^3`; `w:real^3` ;`w':real^3`]]]);;
7332
7333
7334
7335
7336 let lemma_yfanadd_aff_ge=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7337 FAN(x,V,E)
7338  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7339 /\ fan80(x,V,E)
7340 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7341 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7342 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7343 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7344 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7345 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7346 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7347 /\ (x,w,v,u)=f10
7348 /\ (x,v,u,w)=f20
7349 /\ (x,u,w,v)=f30
7350 /\ E UNION {{v,w}}= E1
7351 ==> yfan(x,V,E) SUBSET yfan(x,V,E1) UNION aff_ge {x} {v, w}`,
7352
7353 REPEAT STRIP_TAC
7354 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2;]
7355 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;DIFF;UNION;UNIONS;IN_ELIM_THM;GSYM FORALL_NOT_THM;IN_SING;DE_MORGAN_THM;SUBSET])
7356 THEN REPEAT STRIP_TAC
7357 THEN ASM_REWRITE_TAC[SET_RULE`x' IN (:real^3)`]
7358 THEN DISJ_CASES_TAC(SET_RULE`~(x' IN aff_ge {x} {v, w:real^3})\/ (x' IN aff_ge {x} {v, w:real^3})`)
7359 THENL[
7360 ASM_REWRITE_TAC[]
7361 THEN REPEAT STRIP_TAC
7362 THEN POP_ASSUM MP_TAC
7363 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `u':real^3->bool`th))
7364 THEN DISJ_CASES_TAC(SET_RULE`~(x' IN (u':real^3->bool))\/ (x' IN (u':real^3->bool))`)
7365 THENL[
7366 ASM_REWRITE_TAC[];
7367
7368 ASM_REWRITE_TAC[]
7369 THEN REPEAT STRIP_TAC
7370 THEN DISJ_CASES_TAC(SET_RULE`~(e = {v, w})\/ (e = {v, w:real^3})`)
7371 THENL[
7372
7373 ASM_REWRITE_TAC[];
7374 ASM_REWRITE_TAC[]
7375 THEN REMOVE_ASSUM_TAC
7376 THEN POP_ASSUM MP_TAC
7377 THEN ONCE_REWRITE_TAC[CONTRAPOS_THM]
7378 THEN STRIP_TAC THEN 
7379 POP_ASSUM(fun th->  ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7380 THEN ASM_REWRITE_TAC[]]];
7381
7382 ASM_REWRITE_TAC[]]);;
7383
7384
7385
7386 let lemma_yfanadd_aff_gt= prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7387 FAN(x,V,E)
7388  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7389 /\ fan80(x,V,E)
7390 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7391 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7392 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7393 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7394 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7395 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7396 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7397 /\ (x,w,v,u)=f10
7398 /\ (x,v,u,w)=f20
7399 /\ (x,u,w,v)=f30
7400 /\ E UNION {{v,w}}= E1
7401 ==> yfan(x,V,E) SUBSET yfan(x,V,E1) UNION aff_gt {x} {v, w}`,
7402
7403
7404 REPEAT STRIP_TAC
7405 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7406 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7407 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7408 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7409 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7410 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7411 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7412 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
7413 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7414 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
7415 ` (v:real^3)`]
7416 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
7417 ` (w:real^3)`]
7418 THEN POP_ASSUM MP_TAC
7419 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
7420 THEN ASM_REWRITE_TAC[]
7421 THEN STRIP_TAC
7422 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
7423 THEN MRESA_TAC lemma_yfanadd_aff_ge[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7424 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7425 THEN SUBGOAL_THEN`aff_ge {x} {w} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
7426 THENL[
7427 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
7428 THEN REPEAT STRIP_TAC
7429 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` w:real^3`]
7430 THEN EXISTS_TAC `{w,v'}:real^3->bool`
7431 THEN ASM_REWRITE_TAC[]
7432 THEN REMOVE_ASSUM_TAC
7433 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
7434 ` (w:real^3)`]
7435 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(w:real^3)`;` (v':real^3)`]
7436 THEN ASM_TAC THEN SET_TAC[IN];
7437 SUBGOAL_THEN`aff_ge {x} {v} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
7438 THENL[
7439 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
7440 THEN REPEAT STRIP_TAC
7441 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`]
7442 THEN EXISTS_TAC `{v,v'}:real^3->bool`
7443 THEN ASM_REWRITE_TAC[]
7444 THEN REMOVE_ASSUM_TAC
7445 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
7446 ` (v:real^3)`]
7447 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (v':real^3)`]
7448 THEN ASM_TAC THEN SET_TAC[IN];
7449 POP_ASSUM MP_TAC
7450 THEN POP_ASSUM MP_TAC
7451 THEN POP_ASSUM MP_TAC
7452 THEN REWRITE_TAC[yfan;SUBSET;UNION;IN_ELIM_THM]
7453 THEN REPEAT STRIP_TAC
7454 THEN POP_ASSUM (fun th->
7455 POP_ASSUM MP_TAC
7456 THEN POP_ASSUM MP_TAC
7457 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7458 THEN REWRITE_TAC[th]
7459 THEN ASSUME_TAC th)
7460 THEN STRIP_TAC
7461 THENL[
7462
7463 ASM_REWRITE_TAC[];
7464 ASM_REWRITE_TAC[];
7465
7466 REPEAT STRIP_TAC
7467 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7468 THEN ASM_REWRITE_TAC[]
7469 THEN POP_ASSUM MP_TAC
7470 THEN POP_ASSUM MP_TAC
7471 THEN POP_ASSUM MP_TAC
7472 THEN SET_TAC[];
7473
7474
7475 STRIP_TAC
7476 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7477 THEN ASM_REWRITE_TAC[]
7478 THEN POP_ASSUM MP_TAC
7479 THEN POP_ASSUM MP_TAC
7480 THEN POP_ASSUM MP_TAC
7481 THEN SET_TAC[]]]]);;
7482
7483
7484
7485
7486
7487 let lemma_yfanadd_aff_gt1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7488 FAN(x,V,E)
7489  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7490 /\ fan80(x,V,E)
7491 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7492 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7493 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7494 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7495 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7496 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7497 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7498 /\ (x,w,v,u)=f10
7499 /\ (x,v,u,w)=f20
7500 /\ (x,u,w,v)=f30
7501 /\ E UNION {{v,w}}= E1
7502 ==>  yfan(x,V,E1) SUBSET yfan(x,V,E)`,
7503
7504 REPEAT STRIP_TAC
7505 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2]
7506 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;IN_ELIM_THM;IN_SING;UNION])
7507 THEN SET_TAC[]);;
7508
7509
7510
7511
7512 let YFANADD_AFF_GT=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7513 FAN(x,V,E)
7514  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7515 /\ fan80(x,V,E)
7516 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7517 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7518 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7519 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7520 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7521 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7522 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7523 /\ (x,w,v,u)=f10
7524 /\ (x,v,u,w)=f20
7525 /\ (x,u,w,v)=f30
7526 /\ E UNION {{v,w}}= E1
7527 ==> yfan(x,V,E) = yfan(x,V,E1) UNION aff_gt {x} {v, w}`,
7528
7529 REPEAT STRIP_TAC
7530 THEN MRESA_TAC lemma_yfanadd_aff_gt[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7531 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7532 THEN MRESA_TAC lemma_yfanadd_aff_gt1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7533 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7534 THEN MRESA_TAC condition_aff_gt_subset_yfan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
7535 THEN POP_ASSUM MP_TAC
7536 THEN POP_ASSUM MP_TAC
7537 THEN POP_ASSUM MP_TAC
7538 THEN SET_TAC[]);;
7539
7540
7541
7542
7543
7544 let dartset_leads_into_fanadd1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7545 FAN(x,V,E)
7546  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7547 /\ fan80(x,V,E)
7548 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7549 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7550 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7551 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7552 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7553 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7554 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7555 /\ (x,w,v,u)=f10
7556 /\ (x,v,u,w)=f20
7557 /\ (x,u,w,v)=f30
7558 /\ E UNION {{v,w}}= E1
7559 ==> dartset_leads_into_fan x V E1 ds1 SUBSET  dartset_leads_into_fan x V E ds`,
7560
7561
7562 REPEAT STRIP_TAC
7563 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7564 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7565 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7566 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7567 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7568 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7569 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7570 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7571 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7572 THEN ASM_REWRITE_TAC[]
7573 THEN STRIP_TAC
7574 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7575 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7576 THEN ABBREV_TAC`y=(x,sigma_fan x V E v u,v:real^3,sigma_fan x V E (sigma_fan x V E v u) v )`
7577 THEN SUBGOAL_THEN `f1=f1_fan x V E (y:real^3#real^3#real^3#real^3)` ASSUME_TAC
7578 THENL(*1*)[
7579 POP_ASSUM(fun th-> REWRITE_TAC[SYM th;f1_fan;EQ_PAIR_4])
7580 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`v:real^3`]
7581 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
7582 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`(x,v,u,sigma_fan x V E v u):real^3#real^3#real^3#real^3`;][pr2;pr3]
7583 THEN POP_ASSUM MATCH_MP_TAC
7584 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
7585 THEN EXISTS_TAC`x:real^3`
7586 THEN EXISTS_TAC`v:real^3`
7587 THEN EXISTS_TAC`u:real^3`
7588 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
7589 THEN ASM_REWRITE_TAC[];(*1*)
7590
7591 SUBGOAL_THEN`x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v IN
7592       d1_fan (x:real^3,V,E)` ASSUME_TAC
7593 THENL(*2*)[
7594 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7595 THEN EXISTS_TAC`x:real^3`
7596 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7597 THEN EXISTS_TAC`v:real^3`
7598 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
7599 THEN ASM_REWRITE_TAC[]
7600 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
7601 `v:real^3`]
7602 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7603 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
7604 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` sigma_fan x V E v (u:real^3)`;`v:real^3`];(*2*)
7605 POP_ASSUM MP_TAC
7606 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7607 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`;`(x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v):real^3#real^3#real^3#real^3`;]
7608 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
7609 `ds:real^3#real^3#real^3#real^3->bool`]
7610 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
7611 THEN SUBGOAL_THEN `(x,v,w,sigma_fan x V E1 v w)=f1_fan x V E1 (y:real^3#real^3#real^3#real^3)` ASSUME_TAC
7612 THENL(*3*)[
7613 EXPAND_TAC"y"
7614 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
7615 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7616 `v:real^3`;`u:real^3`; `w:real^3` ]
7617 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7618 THEN MP_TAC(SET_RULE`E UNION {{v, w:real^3}} = E1==>{v, w}IN E1`)
7619 THEN ASM_REWRITE_TAC[]
7620 THEN STRIP_TAC
7621 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
7622 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);(*3*)
7623
7624 SUBGOAL_THEN`x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v IN
7625       d1_fan (x:real^3,V,E1)` ASSUME_TAC
7626 THENL(*4*)[
7627 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7628 THEN EXISTS_TAC`x:real^3`
7629 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7630 THEN EXISTS_TAC`v:real^3`
7631 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
7632 THEN ASM_REWRITE_TAC[]
7633 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
7634 `v:real^3`]
7635 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7636 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
7637 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` sigma_fan x V E v (u:real^3)`;`v:real^3`]
7638 THEN POP_ASSUM MP_TAC
7639 THEN RESA_TAC
7640 THEN MP_TAC(SET_RULE`E UNION {{v, w:real^3}} = E1 /\ {v, sigma_fan x V E v u} IN E ==> {v, sigma_fan x V E v u} IN E1`)
7641 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7642 THEN ASM_REWRITE_TAC[]
7643 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7644 `v:real^3`; `w:real^3` ]
7645 THEN POP_ASSUM MP_TAC
7646 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7647 THEN RESA_TAC
7648 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`sigma_fan x V E v u:real^3`;`v:real^3`][SET_RULE`~(A IN {B,C}) <=> ~(A=B)/\ ~(C=A)`])
7649 THEN POP_ASSUM MP_TAC
7650 THEN DISJ_CASES_TAC(SET_RULE`(sigma_fan x V E v u = w:real^3) \/ ~(sigma_fan x V E v u = w)`)
7651 THENL(*5*)[
7652 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7653 THEN FIND_ASSUM MP_TAC`{v, w:real^3} IN E`
7654 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7655 THEN ASM_REWRITE_TAC[];(*5*)
7656
7657 ASM_REWRITE_TAC[]
7658 THEN RESA_TAC](*5*);(*4*)
7659
7660
7661 POP_ASSUM MP_TAC
7662 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7663 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN ds1:real^3#real^3#real^3#real^3->bool`ASSUME_TAC
7664 THENL(*5*)[
7665 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) = ds1:real^3#real^3#real^3#real^3->bool`
7666 THEN EXISTS_TAC`0`
7667 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*5*)
7668
7669  MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7670 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7671 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`;`(x,sigma_fan x V E v u,v,sigma_fan x V E (sigma_fan x V E v u) v):real^3#real^3#real^3#real^3`;]
7672 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
7673 `ds1:real^3#real^3#real^3#real^3->bool`]
7674 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
7675 THEN FIND_ASSUM MP_TAC `(y:real^3#real^3#real^3#real^3) IN d1_fan (x,V,E)`
7676 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] 
7677 THEN STRIP_TAC
7678 THEN ASM_REWRITE_TAC[pr2;pr3]
7679 THEN POP_ASSUM MP_TAC
7680 THEN DISCH_THEN(LABEL_TAC"EM")
7681 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
7682 THEN POP_ASSUM MP_TAC
7683 THEN DISCH_THEN(LABEL_TAC"LINH")
7684 THEN MP_TAC(SET_RULE`{v', w'} IN E /\ E UNION {{v, w}} = E1 ==> {v':real^3, w'} IN E1`)
7685 THEN RESA_TAC
7686 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
7687 THEN POP_ASSUM MP_TAC
7688 THEN DISCH_THEN(LABEL_TAC"LINH1")
7689 THEN MP_TAC(REAL_ARITH`&0<h /\ &0< pi /\ &0< h'==> &0< (min (min (h:real) (h':real)) (pi/ &2))/ &2 /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2 < (pi/ &2) /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2< h /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2< h'`)
7690 THEN ASM_REWRITE_TAC[PI_WORKS;]
7691 THEN STRIP_TAC
7692 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
7693 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(min (min (h:real) (h':real)) (pi/ &2))/ &2`[SET_RULE`~(A={})<=> ?y. y IN A`])
7694 THEN SUBGOAL_THEN`y' IN
7695       rw_dart_fan x V E1 (x,v',w',sigma_fan x V E1 v' w')
7696       (cos (min (min h h') (pi / &2) / &2))`
7697 ASSUME_TAC
7698 THENL(*6*)[
7699 POP_ASSUM MP_TAC
7700 THEN 
7701   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
7702 `(v':real^3)`]
7703 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
7704 THEN DISCH_TAC
7705 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
7706 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7707 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
7708 THEN DISCH_TAC
7709 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
7710 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7711 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
7712 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7713 `v:real^3`; `w:real^3` ]
7714 THEN POP_ASSUM MP_TAC
7715 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7716 THEN RESA_TAC
7717 THEN POP_ASSUM (fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`])
7718 THEN POP_ASSUM MP_TAC
7719 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7720 THEN ASM_REWRITE_TAC[SET_RULE`~(v' IN {v, w}) <=> ~(v =v') /\ ~(v' = w)`]
7721 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7722 `(v:real^3)`]
7723 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
7724 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (sigma_fan x V E v u:real^3)`;`(v:real^3)`]
7725 THEN POP_ASSUM MP_TAC
7726 THEN RESA_TAC
7727 THEN REMOVE_THEN "EM" (fun th-> MP_TAC th THEN ASSUME_TAC(th))
7728 THEN EXPAND_TAC"y"
7729 THEN REWRITE_TAC[EQ_PAIR_4]
7730 THEN STRIP_TAC
7731 THEN REMOVE_ASSUM_TAC
7732 THEN REMOVE_ASSUM_TAC
7733 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
7734 THEN POP_ASSUM MP_TAC
7735 THEN POP_ASSUM MP_TAC
7736 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`~(v:real^3 = sigma_fan x V E v u)`
7737 THEN DISJ_CASES_TAC(SET_RULE`(sigma_fan x V E v u = w:real^3) \/ ~(sigma_fan x V E v u = w)`)
7738 THENL(*7*)[
7739 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7740 THEN FIND_ASSUM MP_TAC`{v, w:real^3} IN E`
7741 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7742 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`~({w, v:real^3} IN E)`;(*7*)
7743 POP_ASSUM (fun th-> REWRITE_TAC[th])
7744 THEN STRIP_TAC
7745 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
7746 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
7747
7748 REMOVE_THEN"LINH"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y':real^3`])
7749 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7750 THEN REMOVE_THEN"LINH1"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y':real^3`])
7751 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7752 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7753 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7754 THEN MRESA_TAC CONNECTED_COMPONENT_MONO[`yfan (x:real^3,(V:real^3->bool),E1)`;`(yfan (x:real^3,(V:real^3->bool),E1) UNION aff_gt {x} {v:real^3, w})`;`y':real^3`]
7755 THEN POP_ASSUM MATCH_MP_TAC
7756 THEN SET_TAC[]]]]]]]);;
7757
7758
7759
7760
7761
7762 let dartset_leads_into_fanadd2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
7763 FAN(x,V,E)
7764  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7765 /\ fan80(x,V,E)
7766 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7767 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7768 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7769 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7770 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7771 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7772 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7773 /\ (x,w,v,u)=f10
7774 /\ (x,v,u,w)=f20
7775 /\ (x,u,w,v)=f30
7776 /\ E UNION {{v,w}}= E1
7777 ==> dartset_leads_into_fan x V E1 ds2 SUBSET  dartset_leads_into_fan x V E ds`,
7778
7779 REPEAT STRIP_TAC
7780 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7781 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7782 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7783 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7784 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7785 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7786 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7787 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7788 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7789 THEN ASM_REWRITE_TAC[]
7790 THEN STRIP_TAC
7791 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7792 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7793 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
7794 `ds:real^3#real^3#real^3#real^3->bool`]
7795 THEN POP_ASSUM (fun th-> MRESA1_TAC th `f2:real^3#real^3#real^3#real^3`)
7796 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7797 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7798 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7799 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7800 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f30 IN ds2`)
7801 THEN RESA_TAC
7802 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
7803 `ds2:real^3#real^3#real^3#real^3->bool`]
7804 THEN POP_ASSUM (fun th-> MRESA1_TAC th `f30:real^3#real^3#real^3#real^3`)
7805 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
7806 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7807 THEN POP_ASSUM MP_TAC
7808 THEN DISCH_THEN(LABEL_TAC"LINH")
7809 THEN MP_TAC(SET_RULE`{u, w} IN E /\ E UNION {{v, w}} = E1 ==> {u:real^3, w} IN E1`)
7810 THEN RESA_TAC
7811 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7812 THEN POP_ASSUM MP_TAC
7813 THEN DISCH_THEN(LABEL_TAC"LINH1")
7814 THEN MP_TAC(REAL_ARITH`&0<h /\ &0< pi /\ &0< h'==> &0< (min (min (h:real) (h':real)) (pi/ &2))/ &2 /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2 < (pi/ &2) /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2< h /\ (min (min (h:real) (h':real)) (pi/ &2))/ &2< h'`)
7815 THEN ASM_REWRITE_TAC[PI_WORKS;]
7816 THEN STRIP_TAC
7817 THEN MRESA_TAC not_empty_rw_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7818 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(min (min (h:real) (h':real)) (pi/ &2))/ &2`[SET_RULE`~(A={})<=> ?y. y IN A`])
7819 THEN SUBGOAL_THEN`y IN
7820       rw_dart_fan x V E1 (x,u,w,sigma_fan x V E1 u w)
7821       (cos (min (min h h') (pi / &2) / &2))`
7822 ASSUME_TAC
7823 THENL[
7824 POP_ASSUM MP_TAC
7825 THEN 
7826   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7827 `(u:real^3)`]
7828
7829 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
7830 THEN DISCH_TAC
7831 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `u:real^3`th)
7832 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7833 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
7834 THEN DISCH_TAC
7835 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `u:real^3`th)
7836 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7837 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
7838 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;rw_dart_fan;w_dart_fan])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
7839 THEN ASM_REWRITE_TAC[]
7840 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7841 `v:real^3`; `w:real^3` ]
7842 THEN POP_ASSUM MP_TAC
7843 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7844 THEN RESA_TAC
7845 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
7846 THEN POP_ASSUM MP_TAC
7847 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7848 THEN 
7849   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7850 `(v:real^3)`]
7851 THEN ASM_REWRITE_TAC[SET_RULE`~(v' IN {v, w}) <=> ~(v =v') /\ ~(v' = w)`]
7852 THEN STRIP_TAC
7853 THEN ASM_REWRITE_TAC[];
7854 REMOVE_THEN"LINH"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y:real^3`])
7855 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7856 THEN REMOVE_THEN"LINH1"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y:real^3`])
7857 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7858 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7859 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7860 THEN MRESA_TAC CONNECTED_COMPONENT_MONO[`yfan (x:real^3,(V:real^3->bool),E1)`;`(yfan (x:real^3,(V:real^3->bool),E1) UNION aff_gt {x} {v:real^3, w})`;`y:real^3`]
7861 THEN POP_ASSUM MATCH_MP_TAC
7862 THEN SET_TAC[]]);;
7863
7864
7865
7866
7867
7868 let INTERS_HALF_SPACE_DS_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
7869 FAN(x,V,E)
7870  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7871 /\ fan80(x,V,E)
7872 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7873 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
7874 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7875 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7876 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7877 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7878 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7879 /\ (x,w,v,u)=f10
7880 /\ (x,v,u,w)=f20
7881 /\ (x,u,w,v)=f30
7882 /\ E UNION {{v,w}}= E1
7883 /\ (!E1. FAN(x,V,E1)  /\ 
7884          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
7885          fan80(x,V,E1)/\ 
7886          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7887 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} =U1
7888 ==> U1 INTER aff_gt {x, v, w} {u} SUBSET dartset_leads_into_fan x V E1 ds2`,
7889
7890 REPEAT STRIP_TAC
7891 THEN POP_ASSUM MP_TAC
7892 THEN DISCH_THEN(LABEL_TAC"EM")
7893 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7894 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7895 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
7896 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
7897 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
7898 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7899 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7900 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
7901 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
7902 THEN ASM_REWRITE_TAC[]
7903 THEN STRIP_TAC
7904 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7905 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7906 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7907 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7908 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7909 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7910 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7911 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7912 THEN POP_ASSUM MP_TAC
7913 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
7914 THEN STRIP_TAC
7915 THEN REMOVE_ASSUM_TAC
7916 THEN REMOVE_ASSUM_TAC
7917 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds2:real^3#real^3#real^3#real^3->bool`)
7918 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7919 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
7920 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
7921 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
7922 THEN REPEAT STRIP_TAC
7923 THEN POP_ASSUM MP_TAC
7924 THEN POP_ASSUM MP_TAC
7925 THEN POP_ASSUM MP_TAC
7926 THEN POP_ASSUM MP_TAC
7927 THEN DISCH_THEN(LABEL_TAC"LINH")
7928 THEN REPEAT STRIP_TAC
7929 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
7930 THEN ASM_REWRITE_TAC[]
7931 THEN STRIP_TAC
7932 THEN POP_ASSUM (fun th-> MP_TAC th THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`] THEN ASSUME_TAC th THEN STRIP_TAC)
7933 THEN MP_TAC(SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}==> y =f10\/ y =f20\/ y =f30`)
7934 THEN RESA_TAC
7935
7936 THENL[
7937
7938 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,w,v,u = f10:real^3#real^3#real^3#real^3`
7939 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
7940 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7941 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7942 `v:real^3`;`u:real^3`; `w:real^3` ]
7943 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7944 THEN ASM_REWRITE_TAC[];
7945
7946 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,v,u,w = f20:real^3#real^3#real^3#real^3`
7947 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {v, u} IN E==> {v, u} IN E1`)
7948 THEN RESA_TAC
7949 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
7950 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7951 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7952 `v:real^3`;`u:real^3`; `w:real^3` ]
7953 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, v, u} {w}`)
7954 THEN POP_ASSUM MATCH_MP_TAC
7955 THEN SUBGOAL_THEN `x,v,u,sigma_fan x V E v u IN d1_fan (x,V,E)` ASSUME_TAC
7956 THENL[
7957 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7958 THEN EXISTS_TAC`x:real^3`
7959 THEN EXISTS_TAC`v:real^3`
7960 THEN EXISTS_TAC`u:real^3`
7961 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7962 THEN ASM_REWRITE_TAC[];
7963 MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`(x,v,u,sigma_fan x V E v u):real^3#real^3#real^3#real^3`;][pr2;pr3]
7964 THEN EXISTS_TAC`(x,v,u:real^3, sigma_fan x (V:real^3->bool) E v u)`
7965 THEN ASM_REWRITE_TAC[f1_fan]
7966 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
7967 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`]
7968 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)];
7969
7970 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
7971 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {u,w} IN E==> {u,w} IN E1`)
7972 THEN RESA_TAC
7973 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7974 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7975 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7976 `v:real^3`; `w:real^3` ]
7977 THEN POP_ASSUM MP_TAC
7978 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7979 THEN RESA_TAC
7980 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
7981 THEN POP_ASSUM MP_TAC
7982 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7983 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7984 `(u:real^3)`]
7985 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7986 `(v:real^3)`]
7987 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
7988 THEN RESA_TAC
7989 THEN RESA_TAC
7990 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, u,w} {v}`)
7991 THEN POP_ASSUM MATCH_MP_TAC
7992 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
7993 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
7994 THENL[
7995 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7996 THEN EXISTS_TAC`x:real^3`
7997 THEN EXISTS_TAC`V:real^3->bool`
7998 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7999 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
8000 THEN ASM_REWRITE_TAC[]
8001 THEN ASM_TAC
8002 THEN REWRITE_TAC[pr2;pr3]
8003 THEN REPEAT STRIP_TAC
8004 THEN ASM_REWRITE_TAC[]
8005 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
8006 THEN EXISTS_TAC`x:real^3`
8007 THEN EXISTS_TAC`u:real^3`
8008 THEN EXISTS_TAC`w:real^3`
8009 THEN EXISTS_TAC`v:real^3`
8010 THEN ASM_REWRITE_TAC[];
8011
8012 MP_TAC(SET_RULE`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3
8013 ==> f1_fan x V E f2= f1_fan x V E (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`)
8014 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[pr2;pr3])
8015  THEN STRIP_TAC
8016 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;f1_fan])
8017 THEN ASM_REWRITE_TAC[]
8018 THEN ASM_TAC
8019 THEN REWRITE_TAC[pr2;pr3]
8020 THEN REPEAT STRIP_TAC
8021 THEN ASM_REWRITE_TAC[]
8022 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]]]);;
8023
8024
8025
8026
8027
8028
8029 let inverse1_sigma_fan_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
8030 FAN(x,V,E)
8031  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8032 /\ fan80(x,V,E)
8033 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8034 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8035 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8036 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8037 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8038 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8039 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8040 /\ (x,w,v,u)=f10
8041 /\ (x,v,u,w)=f20
8042 /\ (x,u,w,v)=f30
8043 /\ E UNION {{v,w}}= E1
8044 ==> inverse1_sigma_fan x V E1 w v =  inverse1_sigma_fan x V E w u`,
8045
8046 REPEAT STRIP_TAC
8047 THEN POP_ASSUM MP_TAC
8048 THEN DISCH_THEN(LABEL_TAC"EM")
8049 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8050 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8051 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8052 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8053 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8054 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8055 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8056 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8057 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8058 THEN ASM_REWRITE_TAC[]
8059 THEN STRIP_TAC
8060 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8061 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8062 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8063 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8064 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8065 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8066 THEN MATCH_MP_TAC MONO_SIGMA_FAN
8067 THEN EXISTS_TAC`x:real^3`
8068 THEN EXISTS_TAC`V:real^3->bool`
8069 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
8070 THEN EXISTS_TAC`w:real^3`
8071 THEN ASM_REWRITE_TAC[]
8072 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8073 THEN REMOVE_ASSUM_TAC
8074 THEN REMOVE_ASSUM_TAC
8075 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8076 THEN POP_ASSUM MP_TAC
8077 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8078 THEN RESA_TAC
8079 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, w:real^3} IN E /\ E UNION {{v,w}}= E1
8080 ==> {inverse1_sigma_fan x V E w u, w} IN E1`)
8081 THEN RESA_TAC
8082 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8083 THEN REMOVE_ASSUM_TAC
8084 THEN REMOVE_ASSUM_TAC
8085 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8086 THEN POP_ASSUM MP_TAC
8087 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8088 THEN RESA_TAC
8089 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8090 THEN RESA_TAC
8091 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8092 THEN ASM_REWRITE_TAC[]
8093 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8094 THEN REMOVE_ASSUM_TAC
8095 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8096 THEN POP_ASSUM MP_TAC
8097 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8098 THEN RESA_TAC
8099 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
8100 `v:real^3`;`u:real^3`; `w:real^3` ;`inverse1_sigma_fan x V E w u:real^3`]
8101 THEN POP_ASSUM MP_TAC
8102 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8103 THEN RESA_TAC);;
8104
8105
8106
8107 let aff_gt_eq_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
8108 FAN(x,V,E)
8109  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8110 /\ fan80(x,V,E)
8111 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8112 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8113 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8114 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8115 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8116 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8117 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8118 /\ (x,w,v,u)=f10
8119 /\ (x,v,u,w)=f20
8120 /\ (x,u,w,v)=f30
8121 /\ E UNION {{v,w}}= E1
8122 ==> aff_gt {x, w, inverse1_sigma_fan x V E1 w v} {v} = aff_gt {x, w, inverse1_sigma_fan x V E w u} {u}`,
8123
8124
8125
8126 REPEAT STRIP_TAC
8127 THEN POP_ASSUM MP_TAC
8128 THEN DISCH_THEN(LABEL_TAC"EM")
8129 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8130 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8131 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8132 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8133 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8134 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8135 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8136 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8137 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8138 THEN ASM_REWRITE_TAC[]
8139 THEN STRIP_TAC
8140 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8141 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8142 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8143 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8144 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8145 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8146 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8147 THEN REMOVE_ASSUM_TAC
8148 THEN REMOVE_ASSUM_TAC
8149 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8150 THEN POP_ASSUM MP_TAC
8151 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8152 THEN RESA_TAC
8153 THEN POP_ASSUM MP_TAC
8154 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8155 THEN RESA_TAC
8156 THEN MP_TAC(SET_RULE`{w:real^3,inverse1_sigma_fan x V E w u } IN E /\ E UNION {{v,w}}= E1
8157 ==> {w:real^3,inverse1_sigma_fan x V E w u} IN E1`)
8158 THEN RESA_TAC
8159 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8160 THEN RESA_TAC
8161 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8162 THEN REMOVE_ASSUM_TAC
8163 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8164 THEN POP_ASSUM MP_TAC
8165 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8166 THEN RESA_TAC
8167 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8168 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8169 THEN POP_ASSUM MP_TAC
8170 THEN REWRITE_TAC[fan80]
8171 THEN STRIP_TAC
8172 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
8173 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
8174 THEN POP_ASSUM MP_TAC
8175 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
8176 THEN RESA_TAC
8177 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`v:real^3`;]
8178 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`(v:real^3)`;`w:real^3`]
8179 THEN POP_ASSUM MP_TAC
8180 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
8181 THEN RESA_TAC
8182 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`v:real^3`;`inverse1_sigma_fan x V E w u:real^3`; ]
8183 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`v :real^3`;]
8184 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8185 THEN REMOVE_ASSUM_TAC
8186 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8187 THEN POP_ASSUM MP_TAC
8188 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8189 THEN RESA_TAC
8190 THEN FIND_ASSUM MP_TAC`fan80 (x,V:real^3->bool,E)`
8191 THEN REWRITE_TAC[fan80]
8192 THEN STRIP_TAC
8193 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
8194 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
8195 THEN POP_ASSUM MP_TAC
8196 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
8197 THEN RESA_TAC
8198 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(u:real^3)`;`w:real^3`]
8199 THEN POP_ASSUM MP_TAC
8200 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
8201 THEN RESA_TAC
8202
8203 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`u:real^3`;`inverse1_sigma_fan x V E w u:real^3`; ]
8204 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`u :real^3`;]);;
8205
8206
8207
8208 let f2_EQ_F30_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
8209 FAN(x,V,E)
8210  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8211 /\ fan80(x,V,E)
8212 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8213 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8214 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8215 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8216 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8217 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8218 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8219 /\ (x,w,v,u)=f10
8220 /\ (x,v,u,w)=f20
8221 /\ f30=(x,u,w,v)
8222 /\ E UNION {{v,w}}= E1
8223 ==> f30= f2`,
8224
8225
8226 REPEAT STRIP_TAC
8227 THEN POP_ASSUM MP_TAC
8228 THEN DISCH_THEN(LABEL_TAC"EM")
8229 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8230 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8231 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8232 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8233 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8234 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8235 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8236 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8237 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E)`)
8238 THEN ASM_REWRITE_TAC[]
8239 THEN STRIP_TAC
8240 THEN POP_ASSUM MP_TAC
8241 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
8242 THEN STRIP_TAC
8243 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;pr2;pr3] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]));;
8244
8245
8246
8247
8248
8249 let CONDITION_DART_IN_NODE=prove(`!x V E f y y1. FAN (x,V,E) 
8250 /\(!v. v IN V ==> CARD (set_of_edge v V E) > 1)
8251 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
8252 /\ y IN f 
8253 /\ y1 IN d1_fan(x,V,E)
8254 /\ pr2 y1= pr2 y
8255 ==> y1 IN f`,
8256
8257 REWRITE_TAC[d1_fan;IN_ELIM_THM]
8258 THEN REPEAT STRIP_TAC
8259 THEN POP_ASSUM MP_TAC
8260 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8261 THEN MRESA_TAC node_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;]
8262 THEN MP_TAC(SET_RULE`y IN f /\ f SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V,E)`)
8263 THEN ASM_REWRITE_TAC[]
8264 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
8265 THEN STRIP_TAC
8266 THEN MRESAL_TAC rep_node_set_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;`y:real^3#real^3#real^3#real^3`][pr2;pr3]
8267 THEN RESA_TAC
8268 THEN MRESA_TAC ORBITS_EQ_SET_EDGE_FAN[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;` (w':real^3)`] 
8269 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
8270 THEN REMOVE_ASSUM_TAC
8271 THEN REMOVE_ASSUM_TAC
8272 THEN REMOVE_ASSUM_TAC
8273 THEN REMOVE_ASSUM_TAC
8274 THEN REMOVE_ASSUM_TAC
8275 THEN REMOVE_ASSUM_TAC
8276 THEN REMOVE_ASSUM_TAC
8277 THEN REMOVE_ASSUM_TAC
8278 THEN REMOVE_ASSUM_TAC
8279 THEN REMOVE_ASSUM_TAC
8280 THEN POP_ASSUM MP_TAC
8281 THEN REWRITE_TAC[set_of_orbits_points_fan;IN_ELIM_THM]
8282 THEN RESA_TAC
8283 THEN EXISTS_TAC`i:num`
8284 THEN ASM_REWRITE_TAC[power_map_points ]
8285 THEN ARITH_TAC);;
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295 let INTERS_HALF_SPACE_DS_FANADD2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
8296 FAN(x,V,E)
8297  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8298 /\ fan80(x,V,E)
8299 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8300 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8301 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8302 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8303 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8304 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8305 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8306 /\ (x,w,v,u)=f10
8307 /\ (x,v,u,w)=f20
8308 /\ (x,u,w,v)=f30
8309 /\ E UNION {{v,w}}= E1
8310 /\ (!E1. FAN(x,V,E1)  /\ 
8311          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
8312          fan80(x,V,E1)/\ 
8313          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8314 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} =U1
8315 ==> U1 INTER aff_gt {x, v, w} {sigma_fan x V E v u} SUBSET dartset_leads_into_fan x V E1 ds1`,
8316
8317
8318 REPEAT STRIP_TAC
8319 THEN POP_ASSUM MP_TAC
8320 THEN DISCH_THEN(LABEL_TAC"EM")
8321 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8322 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8323 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8324 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8325 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8326 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8327 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8328 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8329 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8330 THEN ASM_REWRITE_TAC[]
8331 THEN STRIP_TAC
8332 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8333 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8334 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8335 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8336 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8337 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8338 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8339 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8340 THEN POP_ASSUM MP_TAC
8341 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
8342 THEN STRIP_TAC
8343 THEN REMOVE_ASSUM_TAC
8344 THEN REMOVE_ASSUM_TAC
8345 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds1:real^3#real^3#real^3#real^3->bool`)
8346 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
8347 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
8348 THEN REPEAT STRIP_TAC
8349 THEN POP_ASSUM MP_TAC
8350 THEN POP_ASSUM MP_TAC
8351 THEN POP_ASSUM MP_TAC
8352 THEN POP_ASSUM MP_TAC
8353 THEN DISCH_THEN(LABEL_TAC"LINH")
8354 THEN STRIP_TAC
8355 THEN DISCH_THEN(LABEL_TAC"LINH1")
8356 THEN STRIP_TAC
8357 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8358 THEN ASM_REWRITE_TAC[]
8359 THEN STRIP_TAC
8360 THEN POP_ASSUM (fun th-> MP_TAC th THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`] THEN ASSUME_TAC th THEN STRIP_TAC)
8361 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
8362 THEN MP_TAC(SET_RULE`y IN ds1/\ ds1 SUBSET d1_fan (x,V,E1)==> y IN d1_fan (x,V:real^3->bool,E1)`)
8363 THEN ASM_REWRITE_TAC[]
8364 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM;pr2;pr3;f1_fan]
8365 THEN RESA_TAC
8366 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
8367 THEN MP_TAC(ARITH_RULE`3 <= ( CARD (ds1:real^3#real^3#real^3#real^3->bool)):num
8368 ==> ~((CARD (ds1:real^3#real^3#real^3#real^3->bool)):num =0)`)
8369 THEN RESA_TAC
8370 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`]
8371 THEN MRESA_TAC orbit_cyclic[`(res (f1_fan x V E1) (d1_fan (x:real^3,V,E1)))`;`(CARD (ds1:real^3#real^3#real^3#real^3->bool)):num`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`]
8372 THEN USE_THEN "LINH1" MP_TAC
8373 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;] THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN STRIP_TAC)`face (hypermap1_of_fanx (x,V:real^3->bool,E1)) (x,v,w,sigma_fan x V E1 v w) = ds1`
8374 THEN POP_ASSUM MP_TAC
8375 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w) IN d1_fan(x:real^3,V,E1)`ASSUME_TAC
8376 THENL(*1*)[
8377 ASM_REWRITE_TAC[face;d1_fan;IN_ELIM_THM]
8378 THEN EXISTS_TAC`x:real^3`
8379 THEN EXISTS_TAC`v:real^3`
8380 THEN EXISTS_TAC`w:real^3`
8381 THEN EXISTS_TAC`sigma_fan x V E1 v (w:real^3)`
8382 THEN ASM_REWRITE_TAC[];(*1*)
8383
8384
8385 MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8386 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`)
8387 THEN DISCH_THEN(LABEL_TAC"YEU")
8388 THEN DISJ_CASES_TAC(SET_RULE`(v' IN {v,w:real^3}) \/ ~(v' IN {v,w})`)
8389 THENL(*2*)[
8390
8391 POP_ASSUM MP_TAC
8392 THEN REWRITE_TAC[SET_RULE`A IN {B,C}<=> A=B\/ A=C`]
8393 THEN STRIP_TAC
8394 THENL(*3*)[
8395
8396 MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8397 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8398 THEN MRESAL_TAC SRPRNPL[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;][simple_hypermap]
8399 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(x,v,w,sigma_fan x V E1 v w:real^3)`)
8400 THEN MP_TAC(SET_RULE`y IN ds1/\ ds1 SUBSET d1_fan (x,V,E1)==> y IN d1_fan (x,V:real^3->bool,E1)`)
8401 THEN RESA_TAC
8402 THEN SUBGOAL_THEN`node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) IN
8403       node_set (hypermap1_of_fanx (x,V:real^3->bool,E1))` ASSUME_TAC
8404 THENL(*4*)[
8405 ASM_REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
8406 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E1 v w:real^3)`
8407 THEN ASM_REWRITE_TAC[node];(*4*)
8408
8409
8410 SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN
8411       node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w:real^3)`ASSUME_TAC
8412 THENL(*5*)[
8413 ASM_REWRITE_TAC[node;orbit_map;IN_ELIM_THM]
8414 THEN EXISTS_TAC`0:num`
8415 THEN REWRITE_TAC[POWER;I_DEF]
8416 THEN ARITH_TAC;(*5*)
8417
8418
8419  MRESAL_TAC CONDITION_DART_IN_NODE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`node (hypermap1_of_fanx (x,V:real^3->bool,E1)) (x,v,w,sigma_fan x V E1 v w)`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][pr2]
8420 THEN MP_TAC(SET_RULE`y IN
8421       node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)/\
8422 node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) INTER
8423       ds1 =
8424       {(x,v,w,sigma_fan x V E1 v w)}
8425 /\ y IN ds1==> y IN {(x,v,w,sigma_fan x V E1 v w)} 
8426 `)
8427 THEN ASM_REWRITE_TAC[IN_SING;EQ_PAIR_4]
8428 THEN STRIP_TAC
8429 THEN REMOVE_THEN "YEU" MP_TAC
8430 THEN ASM_REWRITE_TAC[POWER;I_DEF;EQ_PAIR_4]
8431 THEN RESA_TAC
8432 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
8433 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8434 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8435 `v:real^3`;`u:real^3`; `w:real^3` ]](*5*)](*4*);(*3*)
8436
8437
8438
8439 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
8440 THEN REMOVE_ASSUM_TAC
8441 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
8442 THEN POP_ASSUM MP_TAC
8443 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
8444 THEN STRIP_TAC
8445 THEN SUBGOAL_THEN`x,w,inverse1_sigma_fan x V E1 w v,v IN d1_fan (x,V,E1)`ASSUME_TAC
8446 THENL(*4*)[
8447
8448 REWRITE_TAC[d1_fan;IN_ELIM_THM]
8449 THEN EXISTS_TAC`x:real^3`
8450 THEN EXISTS_TAC`w:real^3`
8451 THEN EXISTS_TAC`inverse1_sigma_fan x V E1 w v:real^3`
8452 THEN EXISTS_TAC`v:real^3`
8453 THEN ASM_REWRITE_TAC[];(*4*)
8454
8455 MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8456 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8457 THEN MRESAL_TAC SRPRNPL[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;][simple_hypermap]
8458 THEN POP_ASSUM (fun th-> MRESA1_TAC th `x,w,inverse1_sigma_fan x V E1 w v,v:real^3`)
8459 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E1 w v,v:real^3) =f1_fan x V E1 (x,v,w,sigma_fan x V E1 v w)` ASSUME_TAC
8460 THENL(*5*)[
8461 REWRITE_TAC[f1_fan];(*5*)
8462
8463 SUBGOAL_THEN`x:real^3,v,w,sigma_fan x V E1 v w IN ds1`ASSUME_TAC
8464 THENL(*6*)[
8465
8466 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;IN_ELIM_THM;orbit_map])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w:real^3) = ds1`
8467 THEN EXISTS_TAC`0:num`
8468 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8469 THEN ARITH_TAC;(*6*)
8470
8471 MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`((x,w,inverse1_sigma_fan x V E1 w v,v):real^3#real^3#real^3#real^3)` ;`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;`ds1:real^3#real^3#real^3#real^3->bool`]
8472 THEN POP_ASSUM MP_TAC
8473 THEN REMOVE_ASSUM_TAC
8474 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8475 THEN STRIP_TAC
8476 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E1)`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`;`(x,w,inverse1_sigma_fan x V E1 w v,v):real^3#real^3#real^3#real^3`;]
8477 THEN MP_TAC(SET_RULE`y IN ds1/\ ds1 SUBSET d1_fan (x,V,E1)==> y IN d1_fan (x,V:real^3->bool,E1)`)
8478 THEN RESA_TAC
8479 THEN SUBGOAL_THEN`node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v) IN
8480       node_set (hypermap1_of_fanx (x,V:real^3->bool,E1))` ASSUME_TAC
8481 THENL(*7*)[
8482
8483
8484 ASM_REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
8485 THEN EXISTS_TAC`(x,w,inverse1_sigma_fan x V E1 w v,v:real^3)`
8486 THEN ASM_REWRITE_TAC[node];(*7*)
8487
8488 SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E1 w v,v)IN
8489       node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v:real^3)`ASSUME_TAC
8490 THENL(*8*)[
8491
8492 ASM_REWRITE_TAC[node;orbit_map;IN_ELIM_THM]
8493 THEN EXISTS_TAC`0:num`
8494 THEN REWRITE_TAC[POWER;I_DEF]
8495 THEN ARITH_TAC;(*8*)
8496
8497  MRESAL_TAC CONDITION_DART_IN_NODE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`node (hypermap1_of_fanx (x,V:real^3->bool,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v)`;`(x,w,inverse1_sigma_fan x V E1 w v,v):real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][pr2]
8498 THEN MP_TAC(SET_RULE`y IN
8499       node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v)/\
8500 node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v) INTER
8501       ds1 =
8502       {(x,w,inverse1_sigma_fan x V E1 w v,v)}
8503 /\ y IN ds1==> y IN {(x,w,inverse1_sigma_fan x V E1 w v,v:real^3)} 
8504 `)
8505 THEN ASM_REWRITE_TAC[IN_SING;EQ_PAIR_4]
8506 THEN STRIP_TAC
8507 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`]
8508 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8509 THEN MRESA_TAC aff_gt_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8510 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8511 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, w, inverse1_sigma_fan x V E w u} {u}`)
8512 THEN POP_ASSUM MATCH_MP_TAC
8513 THEN EXISTS_TAC`(x, w, inverse1_sigma_fan x V E w u,u:real^3)`
8514 THEN REWRITE_TAC[pr2;pr3;f1_fan]
8515 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8516 THEN REMOVE_ASSUM_TAC
8517 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8518 THEN POP_ASSUM MP_TAC
8519 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8520 THEN RESA_TAC
8521 THEN POP_ASSUM MP_TAC
8522 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8523 THEN POP_ASSUM MP_TAC
8524 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8525 THEN RESA_TAC
8526 THEN STRIP_TAC
8527 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
8528 THEN POP_ASSUM MP_TAC
8529 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8530 THEN RESA_TAC
8531 THEN SUBGOAL_THEN`x,w,inverse1_sigma_fan x V E w u,u= f1_fan x V E ((x,u,w,sigma_fan x V E u w):real^3#real^3#real^3#real^3)`
8532 ASSUME_TAC
8533 THENL(*9*)[REWRITE_TAC[f1_fan;EQ_PAIR_4];(*9*)
8534
8535
8536 POP_ASSUM(fun th-> REWRITE_TAC[th])
8537 THEN MATCH_MP_TAC condition_f1_fan_in_face_set
8538 THEN EXISTS_TAC`x:real^3`
8539 THEN EXISTS_TAC`V:real^3->bool`
8540 THEN EXISTS_TAC`E:(real^3->bool)->bool`
8541 THEN EXISTS_TAC`(x,u,w,sigma_fan x V E u w:real^3)`
8542 THEN ASM_REWRITE_TAC[]
8543 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8544 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8545 ](*9*)](*8*)](*7*)](*6*)](*5*)](*4*)](*3*);(*2*)
8546
8547
8548 MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
8549 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8550 THEN FIND_ASSUM MP_TAC`{v', w':real^3} IN E1`
8551 THEN FIND_ASSUM( fun th-> GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SYM th;UNION;IN_ELIM_THM])`E UNION {{v, w:real^3}}=E1`
8552 THEN STRIP_TAC
8553 THENL(*3*)[
8554
8555
8556 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8557 `v:real^3`; `w:real^3` ]
8558 THEN POP_ASSUM MP_TAC
8559 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8560 THEN RESA_TAC
8561 THEN POP_ASSUM (fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`])
8562 THEN POP_ASSUM MP_TAC
8563 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8564 THEN RESA_TAC
8565 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x, v', w'} {sigma_fan x V E1 v' w':real^3}`)
8566 THEN POP_ASSUM MATCH_MP_TAC
8567 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
8568 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
8569 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
8570 THEN DISJ_CASES_TAC(SET_RULE`~(x,v',w',sigma_fan x V E v' w' IN ds)\/ x,v',w',sigma_fan x V E v' w' IN (ds:real^3#real^3#real^3#real^3->bool)`)
8571 THENL(*4*)[
8572
8573 SUBGOAL_THEN`~(ds = face (hypermap1_of_fanx (x,V,E)) (x,v',w',sigma_fan x V E v' w':real^3))`ASSUME_TAC
8574 THENL(*5*)[
8575
8576 POP_ASSUM MP_TAC
8577 THEN MATCH_MP_TAC MONO_NOT
8578 THEN RESA_TAC
8579 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
8580 THEN EXISTS_TAC`0:num`
8581 THEN REWRITE_TAC[POWER;I_DEF]
8582 THEN ARITH_TAC;(*5*)
8583
8584 ABBREV_TAC`ds0=face (hypermap1_of_fanx (x,V,E)) (x,v',w',sigma_fan x V E v' (w':real^3))`
8585 THEN SUBGOAL_THEN`ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
8586 THENL(*6*)[
8587
8588 REWRITE_TAC[face_set; set_of_orbits;IN_ELIM_THM]
8589 THEN EXISTS_TAC`(x,v',w':real^3,sigma_fan x V E v' w')`
8590 THEN ASM_REWRITE_TAC[]
8591 THEN EXPAND_TAC "ds0"
8592 THEN REWRITE_TAC[face]
8593 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
8594 THEN EXISTS_TAC`x:real^3`
8595 THEN EXISTS_TAC`v':real^3`
8596 THEN EXISTS_TAC`w':real^3`
8597 THEN EXISTS_TAC`sigma_fan x V E v' w':real^3`
8598 THEN ASM_REWRITE_TAC[];(*6*)
8599
8600 MRESAL_TAC DOMAIN_TRANF_FACE_DELETE_DS
8601 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8602 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
8603 ;`ds1:real^3#real^3#real^3#real^3->bool`
8604 ;`ds2:real^3#real^3#real^3#real^3->bool`
8605 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
8606 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;][DELETE;IN_ELIM_THM]
8607 THEN REMOVE_ASSUM_TAC
8608 THEN POP_ASSUM MP_TAC
8609 THEN MRESA_TAC unique_tranf_fan
8610 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8611 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
8612 ;`ds1:real^3#real^3#real^3#real^3->bool`
8613 ;`ds2:real^3#real^3#real^3#real^3->bool`
8614 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
8615 ; `(face (hypermap1_of_fanx (x:real^3,V:real^3->bool,E)) (y:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3->bool`
8616 ;`(ds1:real^3#real^3#real^3#real^3->bool)`
8617 ;`((x,v',w':real^3,sigma_fan x V E v' w'):real^3#real^3#real^3#real^3)`;]
8618 THEN POP_ASSUM MATCH_MP_TAC
8619 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;tran]
8620 THEN REMOVE_THEN "YEU" MP_TAC
8621 THEN RESA_TAC
8622 THEN REMOVE_THEN "LINH1" MP_TAC
8623 THEN ASM_REWRITE_TAC[]
8624 THEN STRIP_TAC
8625 THEN MRESAL_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`(f1_fan x V E1 POWER k) (x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`][]
8626 THEN REMOVE_ASSUM_TAC
8627 THEN REMOVE_ASSUM_TAC
8628 THEN EXPAND_TAC "ds0"
8629 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;face;IN_ELIM_THM;orbit_map])
8630 THEN EXISTS_TAC`0:num`
8631 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8632 THEN ARITH_TAC](*6*)](*5*);(*4*)
8633
8634 ASM_REWRITE_TAC[]](*4*);(*3*)
8635
8636 POP_ASSUM MP_TAC
8637 THEN REWRITE_TAC[IN_SING]
8638 THEN POP_ASSUM MP_TAC
8639 THEN SET_TAC[]]]]);;
8640
8641
8642
8643
8644
8645
8646 let lemmaINTERS_HALF_SPACE_DS_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
8647 FAN(x,V,E)
8648  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8649 /\ fan80(x,V,E)
8650 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8651 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8652 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8653 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8654 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8655 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8656 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8657 /\ (x,w,v,u)=f10
8658 /\ (x,v,u,w)=f20
8659 /\ (x,u,w,v)=f30
8660 /\ E UNION {{v,w}}= E1
8661 /\ (!E1. FAN(x,V,E1)  /\ 
8662          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
8663          fan80(x,V,E1)/\ 
8664          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8665 /\  aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}=U1
8666 ==> U1 INTER aff_gt {x, v, w} {u} SUBSET dartset_leads_into_fan x V E1 ds2`,
8667
8668
8669
8670 REPEAT STRIP_TAC
8671 THEN POP_ASSUM MP_TAC
8672 THEN DISCH_THEN(LABEL_TAC"EM")
8673 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8674 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8675 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8676 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8677 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8678 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8679 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8680 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8681 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8682 THEN ASM_REWRITE_TAC[]
8683 THEN STRIP_TAC
8684 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8685 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8686 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8687 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8688 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8689 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8690 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8691 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8692 THEN POP_ASSUM MP_TAC
8693 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
8694 THEN STRIP_TAC
8695 THEN REMOVE_ASSUM_TAC
8696 THEN REMOVE_ASSUM_TAC
8697 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds2:real^3#real^3#real^3#real^3->bool`)
8698 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8699 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8700 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
8701 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
8702 THEN REPEAT STRIP_TAC
8703 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8704 THEN ASM_REWRITE_TAC[]
8705 THEN STRIP_TAC
8706 THEN POP_ASSUM (fun th-> MP_TAC th THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`] THEN ASSUME_TAC th THEN STRIP_TAC)
8707 THEN MP_TAC(SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}==> y =f10\/ y =f20\/ y =f30`)
8708 THEN RESA_TAC
8709 THENL[
8710
8711 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,w,v,u = f10:real^3#real^3#real^3#real^3`
8712 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
8713 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8714 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8715 `v:real^3`;`u:real^3`; `w:real^3` ]
8716 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8717 THEN ASM_REWRITE_TAC[];
8718
8719 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,v,u,w = f20:real^3#real^3#real^3#real^3`
8720 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {v, u} IN E==> {v, u} IN E1`)
8721 THEN RESA_TAC
8722 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
8723 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8724 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8725 `v:real^3`;`u:real^3`; `w:real^3` ]
8726 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`]
8727 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
8728 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
8729 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8730
8731
8732
8733 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3;f1_fan])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
8734 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {u,w} IN E==> {u,w} IN E1`)
8735 THEN RESA_TAC
8736 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
8737 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8738 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8739 `v:real^3`; `w:real^3` ]
8740 THEN POP_ASSUM MP_TAC
8741 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8742 THEN RESA_TAC
8743 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
8744 THEN POP_ASSUM MP_TAC
8745 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8746 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
8747 `(u:real^3)`]
8748 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
8749 `(v:real^3)`]
8750 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
8751 THEN RESA_TAC
8752 THEN RESA_TAC]);;
8753
8754
8755
8756
8757
8758
8759
8760
8761 let lemmaINTERS_HALF_SPACE_DS_FANADD2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
8762 FAN(x,V,E)
8763  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8764 /\ fan80(x,V,E)
8765 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8766 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8767 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8768 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8769 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8770 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8771 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8772 /\ (x,w,v,u)=f10
8773 /\ (x,v,u,w)=f20
8774 /\ (x,u,w,v)=f30
8775 /\ E UNION {{v,w}}= E1
8776 /\ (!E1. FAN(x,V,E1)  /\ 
8777          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
8778          fan80(x,V,E1)/\ 
8779          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8780 /\  aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}=U1
8781 ==> U1 INTER aff_gt {x, v, w} {sigma_fan x V E v u} SUBSET dartset_leads_into_fan x V E1 ds1`,
8782
8783 REPEAT STRIP_TAC
8784 THEN POP_ASSUM MP_TAC
8785 THEN DISCH_THEN(LABEL_TAC"EM")
8786 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8787 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8788 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8789 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8790 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8791 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8792 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8793 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8794 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8795 THEN ASM_REWRITE_TAC[]
8796 THEN STRIP_TAC
8797 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8798 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8799 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8800 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8801 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8802 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8803
8804 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8805 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8806 THEN POP_ASSUM MP_TAC
8807 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER;SUBSET])
8808 THEN REPEAT STRIP_TAC
8809 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
8810 THEN RESA_TAC
8811 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8812 `v:real^3`;`u:real^3`; `w:real^3` ]
8813 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
8814 `v:real^3`]
8815 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
8816 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
8817 `v:real^3`]
8818 THEN REMOVE_ASSUM_TAC
8819 THEN POP_ASSUM MP_TAC
8820 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8821 THEN STRIP_TAC
8822 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {sigma_fan x V E v u,v} IN E ==> { sigma_fan x V E v u,v} IN E1`)
8823 THEN RESA_TAC
8824 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
8825 THEN DISCH_TAC
8826 THEN POP_ASSUM (fun th -> MP_TAC th
8827 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
8828 THEN DISCH_TAC
8829 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
8830
8831 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`sigma_fan x V E v u:real^3`;`v:real^3`;`w:real^3`]
8832 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`sigma_fan x V E v u:real^3`;`v:real^3`;`w:real^3`]
8833 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`sigma_fan x V E v u:real^3`;` v:real^3`;` w:real^3`]
8834 THEN POP_ASSUM MP_TAC
8835 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8836 THEN STRIP_TAC
8837 THEN MP_TAC(SET_RULE` x' IN aff_gt {x, sigma_fan x V E v u,v} {w} /\
8838 x' IN aff_gt {x, w, sigma_fan x V E v u} {v}
8839 /\ x' IN aff_gt {x, v, w} {sigma_fan x V E v u}
8840
8841 /\ aff_gt {x, sigma_fan x V E v u, v} {w} INTER
8842  aff_gt {x, v, w} {sigma_fan x V E v u} INTER
8843  aff_gt {x, w, sigma_fan x V E v u} {v} SUBSET
8844  dart_leads_into x V E1 v w
8845 ==> (x':real^3) IN dart_leads_into x V E1 v w`)
8846 THEN RESA_TAC
8847 THEN POP_ASSUM MP_TAC
8848 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
8849 THEN RESA_TAC
8850 THEN SUBGOAL_THEN`(x,v,w:real^3,sigma_fan x V E v u:real^3) IN ds1` ASSUME_TAC
8851 THENL[
8852 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;IN_ELIM_THM;orbit_map])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w:real^3) = ds1`
8853 THEN EXISTS_TAC`0:num`
8854 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8855 THEN ARITH_TAC;
8856 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
8857 `ds1:real^3#real^3#real^3#real^3->bool`]
8858 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`[pr2;pr3])]);;
8859
8860
8861
8862 let aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_1=prove(`!a x y z w:real^3.
8863 azim a x y z < pi
8864 /\ &0< azim a x y z 
8865 /\ azim a x y w < pi
8866 /\ &0< azim a x y w 
8867 /\ DISJOINT {a, x} {w}
8868 /\ ~collinear {a, x, w}
8869 /\ ~coplanar {a, x, y, z}
8870 ==> aff_gt {a,x,y}{z} INTER aff{a,x,w} SUBSET aff_gt {a,x} {w}`,
8871
8872 REPEAT STRIP_TAC
8873 THEN POP_ASSUM (fun th-> MP_TAC th
8874 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
8875 THEN  RESA_TAC THEN ASSUME_TAC th)
8876 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`a:real^3`;`x:real^3`;`z:real^3`;`y:real^3`]
8877 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`z:real^3`;`y:real^3`]
8878 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8879 THEN REWRITE_TAC[AFFINE_HULL_3;aff;INTER;SUBSET;IN_ELIM_THM]
8880 THEN MRESAL_TAC  AFF_GT_2_1[`a:real^3`;`x:real^3`;`w:real^3`][IN_ELIM_THM]
8881 THEN REPEAT STRIP_TAC
8882 THEN EXISTS_TAC`u:real`
8883 THEN EXISTS_TAC`v:real`
8884 THEN EXISTS_TAC`w':real`
8885 THEN ASM_REWRITE_TAC[]
8886 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[th])
8887 THEN REWRITE_TAC[VECTOR_ARITH`(u % a + v % x + w' % w) - a=  v % (x-a) + w' % (w-a) +((u+v +w')- &1)% a`]
8888 THEN REPEAT STRIP_TAC
8889 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th;VECTOR_ARITH`v % (x - a) + w' % (w - a) + (&1 - &1) % a=v % (x - a) + w' % (w - a)`;])
8890 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL;DOT_CROSS_SELF;REAL_ARITH`v * &0 +A=A`]
8891 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`w:real^3`;`y:real^3`]
8892 THEN STRIP_TAC
8893 THEN MRESA_TAC REAL_LT_LCANCEL_IMP[`((x - a) cross (y - a)) dot (w - a:real^3)`;`&0`;`w':real`]
8894 THEN POP_ASSUM MATCH_MP_TAC
8895 THEN POP_ASSUM MP_TAC
8896 THEN REAL_ARITH_TAC);;
8897
8898
8899
8900
8901
8902 let aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_14=prove(`!a x y z:real^3.
8903 ~coplanar {a, x, y, z}
8904 ==> aff_gt {a,x,y}{z} INTER aff{a,x,z} SUBSET aff_gt {a,x} {z}`,
8905
8906 REPEAT STRIP_TAC
8907 THEN POP_ASSUM (fun th-> MP_TAC th
8908 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
8909 THEN  RESA_TAC THEN ASSUME_TAC th)
8910 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`a:real^3`;`x:real^3`;`z:real^3`;`y:real^3`]
8911 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`z:real^3`;`y:real^3`]
8912 THEN REWRITE_TAC[AFFINE_HULL_3;aff;INTER;SUBSET;IN_ELIM_THM]
8913 THEN MRESA_TAC notcoplanar_disjoint[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8914 THEN MRESA_TAC notcoplanar_disjoints[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8915 THEN MP_TAC(SET_RULE`~(a=z) /\ ~(x=z:real^3)==>DISJOINT {a, x} {z}`)
8916 THEN RESA_TAC
8917 THEN MRESAL_TAC  AFF_GT_2_1[`a:real^3`;`x:real^3`;`z:real^3`][IN_ELIM_THM]
8918 THEN MRESAL_TAC  AFF_GT_3_1[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`][IN_ELIM_THM]
8919 THEN REPEAT STRIP_TAC
8920 THEN EXISTS_TAC`u:real`
8921 THEN EXISTS_TAC`v:real`
8922 THEN EXISTS_TAC`w:real`
8923 THEN ASM_REWRITE_TAC[]
8924 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th] THEN MP_TAC th)
8925 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % a + t2 % x + t3 % y + t4 % z = u % a + v % x + w % z
8926 <=> ((u+v+w)-(t1+t2+t3+t4))%a+(w-t4)%(z-a)= t3%(y-a)+(t2-v)%(x-a)`;VECTOR_ARITH`(&1 - &1) % a +A=A`]
8927 THEN DISJ_CASES_TAC(REAL_ARITH`~(w-t4= &0)\/ w=t4:real`)
8928 THENL[
8929 STRIP_TAC
8930 THEN MP_TAC(SET_RULE`(w - t4) % (z - a:real^3) = t3 % (y - a) + (t2 - v) % (x - a)
8931 ==> (inv (w-t4))%((w - t4) % (z - a)) =(inv (w-t4))%( t3 % (y - a) + (t2 - v) % (x - a))`)
8932 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8933 THEN MRESA1_TAC REAL_MUL_LINV `w-t4:real`
8934 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
8935 THEN STRIP_TAC
8936 THEN FIND_ASSUM MP_TAC`~(coplanar{a, x, y, z:real^3})`
8937 THEN REWRITE_TAC[COPLANAR_DET_EQ_0]
8938 THEN ASM_REWRITE_TAC[DET_3;VECTOR_3;VECTOR_ADD_COMPONENT;VECTOR_MUL_COMPONENT]
8939 THEN REAL_ARITH_TAC;
8940
8941 ASM_REWRITE_TAC[]]);;
8942
8943
8944
8945
8946 let lemmaINTERS_HALF_SPACE_DS_FANADD3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
8947 FAN(x,V,E)
8948  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8949 /\ fan80(x,V,E)
8950 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8951 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
8952 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8953 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8954 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8955 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8956 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8957 /\ (x,w,v,u)=f10
8958 /\ (x,v,u,w)=f20
8959 /\ (x,u,w,v)=f30
8960 /\ E UNION {{v,w}}= E1
8961 /\ (!E1. FAN(x,V,E1)  /\ 
8962          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
8963          fan80(x,V,E1)/\ 
8964          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8965 /\ U1= aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}
8966
8967 ==> U1 INTER aff {x,v,w} SUBSET  aff_gt {x} {v, w} `,
8968
8969 REPEAT STRIP_TAC
8970 THEN POP_ASSUM MP_TAC
8971 THEN DISCH_THEN(LABEL_TAC"EM")
8972 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8973 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8974 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
8975 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
8976 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
8977 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8978 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8979 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
8980 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
8981 THEN ASM_REWRITE_TAC[]
8982 THEN STRIP_TAC
8983 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8984 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8985 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8986 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
8987 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
8988 THEN DISCH_TAC
8989 THEN POP_ASSUM (fun th -> MP_TAC th
8990 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
8991 THEN DISCH_TAC
8992 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
8993 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8994 `v:real^3`;`u:real^3`; `w:real^3` ]
8995 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
8996 THEN RESA_TAC
8997 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
8998 THEN DISCH_TAC
8999 THEN POP_ASSUM (fun th -> MP_TAC th
9000 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9001 THEN DISCH_TAC
9002 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
9003 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
9004 THEN RESA_TAC
9005 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9006 `(v:real^3)`]
9007 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9008 `v:real^3`]
9009 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9010 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9011 `v:real^3`]
9012 THEN REMOVE_ASSUM_TAC
9013 THEN POP_ASSUM MP_TAC
9014 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9015 THEN STRIP_TAC
9016 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9017 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`sigma_fan x V E v u:real^3`;`v:real^3`;`u:real^3`]
9018 THEN POP_ASSUM MP_TAC
9019 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9020 THEN STRIP_TAC
9021 THEN MRESA_TAC aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_1[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E v u:real^3`;`w:real^3`]
9022 THEN POP_ASSUM MP_TAC
9023 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9024 THEN DISCH_TAC
9025 THEN POP_ASSUM (fun th -> MP_TAC th
9026 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9027 THEN DISCH_TAC
9028 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
9029 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
9030 THEN POP_ASSUM MP_TAC
9031 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
9032 THEN STRIP_TAC
9033 THEN MRESA_TAC aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_14[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`;]
9034 THEN POP_ASSUM MP_TAC
9035 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
9036 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
9037 THEN SET_TAC[]);;
9038
9039
9040
9041
9042
9043
9044 let aff_3_rep_cross_dot=prove(`!x:real^3  v:real^3 u:real^3.
9045 ~collinear {x,v,u} 
9046
9047 ==> aff {x,v,u} ={y:real^3|   (((v-x) cross (u-x)) dot (y-x)) = &0}`,
9048  REWRITE_TAC[AFFINE_HULL_3;aff;IN_ELIM_THM;EXTENSION]
9049 THEN REPEAT STRIP_TAC
9050 THEN EQ_TAC
9051 THENL[
9052 STRIP_TAC
9053 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % v + w % u) - x= ((u'+v'+w)- &1)%x + v'%(v-x)+ w%(u-x)`
9054 ;VECTOR_ARITH`(&1- &1)%X+A=A`;DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
9055 THEN REAL_ARITH_TAC;
9056 DISCH_THEN(LABEL_TAC"ME")
9057 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`u:real^3`]properties_coordinate) THEN RESA_TAC
9058 THEN MRESA_TAC ORTHONORMAL_IMP_SPANNING[`e1_fan (x:real^3) (v:real^3) (u:real^3)`;`e2_fan (x:real^3)( v:real^3) (u:real^3)`;`e3_fan (x:real^3) (v:real^3) (u:real^3)`;]
9059 THEN POP_ASSUM MP_TAC
9060 THEN ASM_REWRITE_TAC[SPAN_3;EXTENSION] 
9061  THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(x':real^3)-(x:real^3)`th) THEN ASSUME_TAC(th))
9062 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(u:real^3)-(x:real^3)`th)THEN ASSUME_TAC(th))
9063 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(v:real^3)-(x:real^3)`th))
9064 THEN REWRITE_TAC[SET_RULE`(x:real^3) IN (:real^3)`;IN_ELIM_THM]
9065 THEN REPEAT STRIP_TAC
9066 THEN ABBREV_TAC`e1=e1_fan x v u:real^3`
9067 THEN ABBREV_TAC`e2=e2_fan x v u:real^3`
9068 THEN ABBREV_TAC`e3=e3_fan x v u:real^3`
9069 THEN ONCE_REWRITE_TAC[VECTOR_ARITH`x' = u' % x + v' % v + w % u <=> x'-x = ((u'+v'+w)- &1)%x+ v'%(v-x)+ w%(u-x)`]
9070 THEN MRESA_TAC ORTHONORMAL_CROSS[`e1:real^3`;`e2:real^3`;`e3:real^3`;]
9071 THEN REMOVE_THEN "ME" MP_TAC
9072 THEN ASM_REWRITE_TAC[CROSS_LMUL;CROSS_RMUL;CROSS_LADD;CROSS_RADD;CROSS_REFL;]
9073 THEN REDUCE_VECTOR_TAC
9074 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
9075 THEN ASM_REWRITE_TAC[]
9076 THEN ASM_REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9077 THEN ASM_REWRITE_TAC[]
9078 THEN FIND_ASSUM MP_TAC`orthonormal e1 e2 (e3:real^3)`
9079 THEN REWRITE_TAC[orthonormal]
9080 THEN STRIP_TAC
9081 THEN ASM_REWRITE_TAC[]
9082 THEN ONCE_REWRITE_TAC[DOT_SYM]
9083 THEN ASM_REWRITE_TAC[]
9084 THEN REDUCE_ARITH_TAC
9085 THEN FIND_ASSUM MP_TAC`(v - x) dot (e2:real^3) = &0:real`
9086 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9087 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9088 THEN ASM_REWRITE_TAC[]
9089 THEN ONCE_REWRITE_TAC[DOT_SYM]
9090 THEN ASM_REWRITE_TAC[]
9091 THEN REDUCE_ARITH_TAC
9092 THEN RESA_TAC
9093 THEN FIND_ASSUM MP_TAC`(u - x) dot (e2:real^3) = &0:real`
9094 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`u - x = u'' % e1 + v'' % e2 + w' % e3:real^3`
9095 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9096 THEN ASM_REWRITE_TAC[]
9097 THEN ONCE_REWRITE_TAC[DOT_SYM]
9098 THEN ASM_REWRITE_TAC[]
9099 THEN REDUCE_ARITH_TAC
9100 THEN RESA_TAC
9101 THEN REDUCE_ARITH_TAC
9102 THEN FIND_ASSUM MP_TAC`(v - x) dot (e1:real^3) = &0:real`
9103 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9104 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9105 THEN ASM_REWRITE_TAC[]
9106 THEN ONCE_REWRITE_TAC[DOT_SYM]
9107 THEN ASM_REWRITE_TAC[]
9108 THEN REDUCE_ARITH_TAC
9109 THEN RESA_TAC
9110 THEN REWRITE_TAC[REAL_ARITH`u' * w' * --v''' + w * u'' * v''' = (w * u''-u' * w') * v''':real `]
9111 THEN REDUCE_ARITH_TAC
9112 THEN FIND_ASSUM MP_TAC`&0 < (u - x) dot (e1:real^3)`
9113 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`u - x = u'' % e1 + v'' % e2 + w' % e3:real^3`
9114 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9115 THEN ASM_REWRITE_TAC[]
9116 THEN ONCE_REWRITE_TAC[DOT_SYM]
9117 THEN ASM_REWRITE_TAC[]
9118 THEN REDUCE_ARITH_TAC
9119 THEN RESA_TAC
9120 THEN REDUCE_ARITH_TAC
9121 THEN FIND_ASSUM MP_TAC`dist (v,x) % e3 = v - x  :real^3`
9122 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9123 THEN POP_ASSUM MP_TAC
9124 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9125 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9126 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9127 THEN STRIP_TAC
9128 THEN REDUCE_VECTOR_TAC
9129 THEN STRIP_TAC
9130 THEN MP_TAC(SET_RULE`dist (v,x:real^3) % e3 = w % (e3:real^3) ==> dist (v,x) % e3 dot e3 = w % e3 dot e3`)
9131 THEN POP_ASSUM( fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9132 THEN REWRITE_TAC[DOT_LMUL]
9133 THEN ASM_REWRITE_TAC[]
9134 THEN REDUCE_ARITH_TAC
9135 THEN STRIP_TAC
9136 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;dist])
9137 THEN MRESA_TAC collinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;]
9138 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
9139 THEN RESA_TAC
9140 THEN MP_TAC(REAL_ARITH`&0 < u''==> ~(u''= &0)`)
9141 THEN RESA_TAC
9142 THEN ASM_REWRITE_TAC[REAL_ENTIRE]
9143 THEN RESA_TAC
9144 THEN MP_TAC(ISPEC`(norm(v-x:real^3))`REAL_MUL_LINV)
9145 THEN RESA_TAC
9146 THEN MP_TAC(ISPEC`u'':real`REAL_MUL_LINV)
9147 THEN RESA_TAC
9148 THEN REDUCE_VECTOR_TAC
9149 THEN EXISTS_TAC`&1- (w''-u''' * inv(u'':real) * w') * inv(norm(v-x:real^3))- u''' * inv(u'':real)`
9150 THEN EXISTS_TAC`(w''-u''' * inv(u'':real) * w') * inv(norm(v-x:real^3))`
9151 THEN EXISTS_TAC`u''' * inv(u'':real)`
9152 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - (w'' - u''' * inv u'' * w') * inv (norm (v - x)) - u''' * inv u'' +
9153  (w'' - u''' * inv u'' * w') * inv (norm (v - x)) +
9154  u''' * inv u'' =
9155  &1`;VECTOR_ARITH`(&1- &1) %A+B+C=B+C`;VECTOR_ARITH`A%(B+C)=A %B+ A%C`;VECTOR_ARITH`A %B %C=(A*B)%C`
9156 ;REAL_ARITH`(A*B)*C=A*(B*C)`]
9157 THEN VECTOR_ARITH_TAC]);;
9158
9159
9160
9161
9162
9163
9164
9165 let SPACE3_EQ_UNION_3SET=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
9166 FAN(x,V,E)
9167  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9168 /\ fan80(x,V,E)
9169 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9170 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9171 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9172 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9173 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9174 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9175 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9176 /\ (x,w,v,u)=f10
9177 /\ (x,v,u,w)=f20
9178 /\ (x,u,w,v)=f30
9179 /\ E UNION {{v,w}}= E1
9180 ==> aff {x,v,w} UNION aff_gt {x, v, w} {sigma_fan x V E v u} UNION aff_gt {x, v, w} {u}= (:real^3) `,
9181
9182 REPEAT STRIP_TAC
9183 THEN POP_ASSUM MP_TAC
9184 THEN DISCH_THEN(LABEL_TAC"EM")
9185 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9186 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9187 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9188 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9189 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9190 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9191 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9192 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9193 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9194 THEN ASM_REWRITE_TAC[]
9195 THEN STRIP_TAC
9196 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9197 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9198 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9199 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9200 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9201 `v:real^3`;`u:real^3`; `w:real^3` ]
9202 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9203 THEN RESA_TAC
9204 THEN POP_ASSUM (fun th-> MP_TAC th
9205 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9206 THEN RESA_TAC THEN ASSUME_TAC th)
9207 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9208 THEN DISCH_TAC
9209 THEN POP_ASSUM (fun th -> MP_TAC th
9210 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9211 THEN DISCH_TAC
9212 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`v:real^3`])
9213 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9214 THEN DISCH_TAC
9215 THEN POP_ASSUM (fun th -> MP_TAC th
9216 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9217 THEN DISCH_TAC
9218 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
9219 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
9220 THEN POP_ASSUM MP_TAC
9221 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,d,b,c}`]
9222 THEN STRIP_TAC
9223 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
9224 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `w:real^3`;`u:real^3`;`v:real^3`]
9225 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
9226 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
9227 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9228 `v:real^3`;`u:real^3`; `w:real^3` ]
9229 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9230 THEN DISCH_TAC
9231 THEN POP_ASSUM (fun th -> MP_TAC th
9232 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9233 THEN DISCH_TAC
9234 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9235 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9236 `v:real^3`]
9237 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9238 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9239 `v:real^3`]
9240 THEN REMOVE_ASSUM_TAC
9241 THEN POP_ASSUM MP_TAC
9242 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9243 THEN STRIP_TAC
9244 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {sigma_fan x V E v u, v} IN E ==> {sigma_fan x V E v u, v} IN E1`)
9245 THEN RESA_TAC
9246 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`sigma_fan x V E v u:real^3`;`v:real^3`;`w:real^3`]
9247 THEN POP_ASSUM MP_TAC
9248 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,c,b,d}`]
9249 THEN STRIP_TAC
9250 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`sigma_fan x V E v u`;`w:real^3`]
9251 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `v:real^3`;`sigma_fan x V E v u:real^3`;`w:real^3`]
9252 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`;`sigma_fan x V E v u:real^3`]
9253 THEN POP_ASSUM MP_TAC
9254 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,b,d,c}`]
9255 THEN RESA_TAC
9256 THEN MRESA_TAC aff_3_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`]
9257 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION;DOT_LNEG]
9258 THEN GEN_TAC
9259 THEN EQ_TAC
9260 THENL[SET_TAC[];
9261 REAL_ARITH_TAC]);;
9262
9263
9264
9265 let lemmaU1_subset_U=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U U1.
9266 FAN(x,V,E)
9267  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9268 /\ fan80(x,V,E)
9269 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9270 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9271 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9272 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9273 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9274 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9275 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9276 /\ (x,w,v,u)=f10
9277 /\ (x,v,u,w)=f20
9278 /\ (x,u,w,v)=f30
9279 /\ E UNION {{v,w}}= E1
9280 /\ (!E1. FAN(x,V,E1)  /\ 
9281          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9282          fan80(x,V,E1)/\ 
9283          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9284 /\ U1= aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}
9285 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9286 ==> U1 SUBSET U `,
9287 REPEAT STRIP_TAC
9288 THEN POP_ASSUM MP_TAC
9289 THEN DISCH_THEN(LABEL_TAC"EM")
9290 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9291 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9292 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9293 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9294 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9295 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9296 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9297 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9298 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9299 THEN ASM_REWRITE_TAC[]
9300 THEN STRIP_TAC
9301 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9302 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9303 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9304 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9305
9306 THEN MRESA_TAC lemmaINTERS_HALF_SPACE_DS_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9307 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
9308 THEN MRESA_TAC lemmaINTERS_HALF_SPACE_DS_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9309 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
9310 THEN MRESA_TAC lemmaINTERS_HALF_SPACE_DS_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9311 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
9312 THEN MRESA_TAC SPACE3_EQ_UNION_3SET
9313 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9314 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9315 THEN ASM_TAC
9316 THEN SET_TAC[]);;
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327 let open_subsetU=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
9328 FAN(x,V,E)
9329  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9330 /\ fan80(x,V,E)
9331 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9332 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9333 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9334 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9335 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9336 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9337 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9338 /\ (x,w,v,u)=f10
9339 /\ (x,v,u,w)=f20
9340 /\ (x,u,w,v)=f30
9341 /\ E UNION {{v,w}}= E1
9342 /\ (!E1. FAN(x,V,E1)  /\ 
9343          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9344          fan80(x,V,E1)/\ 
9345          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9346 /\  U=aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}
9347 ==> open U`,
9348 REPEAT STRIP_TAC
9349 THEN POP_ASSUM MP_TAC
9350 THEN DISCH_THEN(LABEL_TAC"EM")
9351 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9352 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9353 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9354 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9355 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9356 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9357 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9358 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9359 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9360 THEN ASM_REWRITE_TAC[]
9361 THEN STRIP_TAC
9362 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9363 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9364 THEN MATCH_MP_TAC OPEN_INTER
9365 THEN STRIP_TAC
9366 THENL[
9367  MATCH_MP_TAC OPEN_AFF_GT_3_1
9368 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9369 THEN DISCH_TAC
9370 THEN POP_ASSUM (fun th -> MP_TAC th
9371 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9372 THEN DISCH_TAC
9373 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
9374 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`v:real^3`;`u:real^3`;`w:real^3`]
9375 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9376 THEN ASM_REWRITE_TAC[];
9377
9378 MATCH_MP_TAC OPEN_INTER
9379 THEN STRIP_TAC
9380 THENL[
9381  MATCH_MP_TAC OPEN_AFF_GT_3_1
9382 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9383 THEN DISCH_TAC
9384 THEN POP_ASSUM (fun th -> MP_TAC th
9385 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9386 THEN DISCH_TAC
9387 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
9388 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9389 `v:real^3`]
9390 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9391 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9392 `v:real^3`]
9393 THEN REMOVE_ASSUM_TAC
9394 THEN POP_ASSUM MP_TAC
9395 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9396 THEN STRIP_TAC
9397 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`sigma_fan x V E v u:real^3`;`v:real^3`;`u:real^3`]
9398 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9399 THEN ASM_REWRITE_TAC[];
9400
9401
9402 MATCH_MP_TAC OPEN_INTER
9403 THEN STRIP_TAC
9404 THENL[ MATCH_MP_TAC OPEN_AFF_GT_3_1
9405 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9406 THEN RESA_TAC
9407 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9408 `v:real^3`;`u:real^3`; `w:real^3` ]
9409 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9410 THEN DISCH_TAC
9411 THEN POP_ASSUM (fun th -> MP_TAC th
9412 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9413 THEN DISCH_TAC
9414 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9415 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9416 `v:real^3`]
9417 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9418 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9419 `v:real^3`]
9420 THEN REMOVE_ASSUM_TAC
9421 THEN POP_ASSUM MP_TAC
9422 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9423 THEN STRIP_TAC
9424 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {sigma_fan x V E v u, v} IN E ==> {sigma_fan x V E v u, v} IN E1`)
9425 THEN RESA_TAC
9426 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)` ;`sigma_fan x V E v u:real^3`;`v:real^3`;`w:real^3`]
9427 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9428 THEN ASM_REWRITE_TAC[];
9429  MATCH_MP_TAC OPEN_AFF_GT_3_1
9430 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9431 THEN RESA_TAC
9432 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9433 `v:real^3`;`u:real^3`; `w:real^3` ]
9434 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9435 THEN DISCH_TAC
9436 THEN POP_ASSUM (fun th -> MP_TAC th
9437 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9438 THEN DISCH_TAC
9439 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9440 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9441 `v:real^3`]
9442 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9443 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9444 `v:real^3`]
9445 THEN REMOVE_ASSUM_TAC
9446 THEN POP_ASSUM MP_TAC
9447 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9448 THEN STRIP_TAC
9449 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {sigma_fan x V E v u, v} IN E ==> {sigma_fan x V E v u, v} IN E1`)
9450 THEN RESA_TAC
9451 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)` ;`sigma_fan x V E v u:real^3`;`v:real^3`;`w:real^3`]]]]);;
9452
9453
9454
9455 let eq_aff_gt_3_fanadd_edge=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
9456 FAN(x,V,E)
9457  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9458 /\ fan80(x,V,E)
9459 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9460 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9461 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9462 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9463 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9464 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9465 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9466 /\ (x,w,v,u)=f10
9467 /\ (x,v,u,w)=f20
9468 /\ (x,u,w,v)=f30
9469 /\ E UNION {{v,w}}= E1
9470 /\ (!E1. FAN(x,V,E1)  /\ 
9471          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9472          fan80(x,V,E1)/\ 
9473          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9474 ==> aff_gt {x, v, u} {sigma_fan x V E v u}= aff_gt {x, v, u} {w}`,
9475 REPEAT STRIP_TAC
9476 THEN POP_ASSUM MP_TAC
9477 THEN DISCH_THEN(LABEL_TAC"EM")
9478 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9479 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9480 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9481 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9482 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9483 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9484 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9485 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9486 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9487 THEN ASM_REWRITE_TAC[]
9488 THEN STRIP_TAC
9489 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9490 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9491 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9492 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9493 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9494 THEN DISCH_TAC
9495 THEN POP_ASSUM (fun th -> MP_TAC th
9496 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9497 THEN DISCH_TAC
9498 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
9499 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9500 `v:real^3`]
9501 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
9502 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
9503 `v:real^3`]
9504 THEN REMOVE_ASSUM_TAC
9505 THEN POP_ASSUM MP_TAC
9506 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9507 THEN STRIP_TAC
9508 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)` ;`sigma_fan x V E v u:real^3`;`v:real^3`;`u:real^3`]
9509 THEN POP_ASSUM MP_TAC
9510 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9511 THEN ASM_REWRITE_TAC[]
9512 THEN STRIP_TAC
9513 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E v u`]
9514 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `v:real^3`;`sigma_fan x V E v u:real^3`;`u:real^3`]
9515 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E v u:real^3`;]
9516 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9517 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9518 `v:real^3`;`u:real^3`; `w:real^3` ]
9519 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
9520 THEN RESA_TAC
9521 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9522 THEN REWRITE_TAC[fan80]
9523 THEN STRIP_TAC
9524 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v:real^3`;`u:real^3`])
9525 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,w} IN E1`)
9526 THEN RESA_TAC
9527 THEN POP_ASSUM MP_TAC
9528 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9529 THEN STRIP_TAC
9530 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)` ;`sigma_fan x V E1 v u:real^3`;`v:real^3`;`u:real^3`]
9531 THEN POP_ASSUM MP_TAC
9532 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9533 THEN ASM_REWRITE_TAC[]
9534 THEN STRIP_TAC
9535 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E1 v u`]
9536 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `v:real^3`;`sigma_fan x V E1 v u:real^3`;`u:real^3`]
9537 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;]
9538 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9539 THEN ASM_REWRITE_TAC[]);;
9540
9541
9542
9543
9544
9545 let aff_gt_add_subset_U1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
9546 FAN(x,V,E)
9547  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9548 /\ fan80(x,V,E)
9549 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9550 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9551 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9552 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9553 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9554 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9555 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9556 /\ (x,w,v,u)=f10
9557 /\ (x,v,u,w)=f20
9558 /\ (x,u,w,v)=f30
9559 /\ E UNION {{v,w}}= E1
9560 /\ (!E1. FAN(x,V,E1)  /\ 
9561          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9562          fan80(x,V,E1)/\ 
9563          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9564 /\ U1= aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}
9565 ==> aff_gt {x} {v,w} SUBSET U1 `,
9566
9567 REPEAT STRIP_TAC
9568 THEN POP_ASSUM MP_TAC
9569 THEN DISCH_THEN(LABEL_TAC"EM")
9570 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9571 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9572 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9573 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9574 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9575 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9576 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9577 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9578 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9579 THEN ASM_REWRITE_TAC[]
9580 THEN STRIP_TAC
9581 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9582 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9583 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9584 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9585 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> { v,w} IN E1`)
9586 THEN RESA_TAC
9587 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9588 `(v:real^3)`]
9589 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
9590 THEN MRESA_TAC eq_aff_gt_3_fanadd_edge[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9591 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9592 THEN MRESAL_TAC AFF_GT_MONO_LEFT[`{x,w:real^3}`;`{x,u,w:real^3}`;`{v:real^3}`][SET_RULE`{x, w} SUBSET {x, u, w:real^3}`]
9593 THEN MRESAL_TAC AFF_GT_MONO_LEFT[`{x,v:real^3}`;`{x,v,u:real^3}`;`{w:real^3}`][SET_RULE`{x, v} SUBSET {x, v, u:real^3}`]
9594 THEN MRESAL_TAC AFF_GT_MONO_LEFT[`{x,v:real^3}`;`{x,v,sigma_fan x V E v u:real^3}`;`{w:real^3}`][SET_RULE`{x, v} SUBSET {x, v, sigma_fan x V E v u:real^3}`]
9595 THEN MRESAL_TAC AFF_GT_MONO_LEFT[`{x,w:real^3}`;`{x,sigma_fan x V E v u,w:real^3}`;`{v:real^3}`][SET_RULE`{x, w} SUBSET {x, sigma_fan x V E v u, w:real^3}`]
9596 THEN ASM_TAC
9597 THEN SET_TAC[]);;
9598
9599
9600
9601 let lemma_rep_U_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U U1.
9602 FAN(x,V,E)
9603  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9604 /\ fan80(x,V,E)
9605 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9606 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9607 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9608 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9609 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9610 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9611 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9612 /\ (x,w,v,u)=f10
9613 /\ (x,v,u,w)=f20
9614 /\ (x,u,w,v)=f30
9615 /\ E UNION {{v,w}}= E1
9616 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9617 /\ (!E1. FAN(x,V,E1)  /\ 
9618          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9619          fan80(x,V,E1)/\ 
9620          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9621 /\  U1= aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v}
9622 ==> U= U1 UNION dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2`,
9623
9624 REPEAT STRIP_TAC
9625 THEN POP_ASSUM MP_TAC
9626 THEN DISCH_THEN(LABEL_TAC"EM")
9627 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9628 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9629 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9630 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9631 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9632 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9633 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9634 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9635 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9636 THEN ASM_REWRITE_TAC[]
9637 THEN STRIP_TAC
9638 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9639 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9640 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9641 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9642 THEN MRESA_TAC aff_gt_add_subset_U1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9643 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
9644 THEN MRESA_TAC lemmaU1_subset_U[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9645 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`;`U1:real^3->bool`]
9646 THEN POP_ASSUM MP_TAC
9647 THEN POP_ASSUM MP_TAC
9648 THEN SET_TAC[]);; 
9649
9650
9651 let dartset_leads_into_ds_open_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
9652 FAN(x,V,E)
9653  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9654 /\ fan80(x,V,E)
9655 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9656 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9657 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9658 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9659 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9660 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9661 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9662 /\ (x,w,v,u)=f10
9663 /\ (x,v,u,w)=f20
9664 /\ (x,u,w,v)=f30
9665 /\ E UNION {{v,w}}= E1
9666 /\ (!E1. FAN(x,V,E1)  /\ 
9667          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9668          fan80(x,V,E1)/\ 
9669          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9670 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
9671 ==> open U `,
9672
9673 REPEAT STRIP_TAC
9674 THEN POP_ASSUM MP_TAC
9675 THEN DISCH_THEN(LABEL_TAC"EM")
9676 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9677 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9678 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9679 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9680 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9681 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9682 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9683 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9684 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9685 THEN ASM_REWRITE_TAC[]
9686 THEN STRIP_TAC
9687 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9688 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9689 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9690 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9691 THEN MRESA_TAC lemma_rep_U_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9692 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`;`aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v:real^3}`]
9693 THEN MATCH_MP_TAC OPEN_UNION
9694 THEN MRESA_TAC open_subsetU[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9695 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`aff_gt {x, u, w} {v } INTER aff_gt {x, v,u} {sigma_fan x V E v u } INTER aff_gt {x, v, sigma_fan x V E v u } {w} INTER aff_gt {x, sigma_fan x V E v u,w} {v:real^3}`]
9696 THEN MATCH_MP_TAC OPEN_UNION
9697 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9698 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9699 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9700 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9701 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
9702 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`dartset_leads_into_fan x V E1 ds1`]
9703 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9704 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9705 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
9706 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`dartset_leads_into_fan x V E1 ds2`]);;
9707
9708
9709 let U_INTER_U2_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
9710 FAN(x,V,E)
9711  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9712 /\ fan80(x,V,E)
9713 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9714 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9715 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9716 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9717 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9718 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9719 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9720 /\ (x,w,v,u)=f10
9721 /\ (x,v,u,w)=f20
9722 /\ (x,u,w,v)=f30
9723 /\ E UNION {{v,w}}= E1
9724 /\ (!E1. FAN(x,V,E1)  /\ 
9725          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9726          fan80(x,V,E1)/\ 
9727          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9728 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9729 ==>
9730 U INTER
9731  UNIONS
9732  (topological_component_yfan (x,V,E1) DELETE
9733   dartset_leads_into_fan x V E1 ds1 DELETE
9734   dartset_leads_into_fan x V E1 ds2) = {}`,
9735
9736 REPEAT STRIP_TAC
9737 THEN POP_ASSUM MP_TAC
9738 THEN DISCH_THEN(LABEL_TAC"EM")
9739 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9740 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9741 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9742 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9743 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9744 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9745 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9746 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9747 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9748 THEN ASM_REWRITE_TAC[]
9749 THEN STRIP_TAC
9750 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9751 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9752 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9753 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9754 THEN ONCE_REWRITE_TAC[EXTENSION;]
9755 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM;UNION;DELETE] 
9756 THEN GEN_TAC
9757 THEN EQ_TAC
9758 THENL[
9759 REPEAT STRIP_TAC
9760 THENL[
9761  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9762 THEN FIND_ASSUM MP_TAC`u' IN topological_component_yfan (x:real^3,V,E1)`
9763 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9764 THEN STRIP_TAC
9765 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9766 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`x':real^3`]
9767 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9768 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9769 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
9770 THEN POP_ASSUM MP_TAC
9771 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
9772 THEN STRIP_TAC
9773 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9774 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y':real^3`;`x':real^3`];
9775
9776  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9777 THEN FIND_ASSUM MP_TAC`u' IN topological_component_yfan (x:real^3,V,E1)`
9778 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9779 THEN STRIP_TAC
9780 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9781 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`x':real^3`]
9782 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9783 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9784 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
9785 THEN POP_ASSUM MP_TAC
9786 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
9787 THEN STRIP_TAC
9788 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9789 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y':real^3`;`x':real^3`];
9790  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9791 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` f:real^3#real^3#real^3#real^3->bool`]
9792 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
9793 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
9794 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9795 ` (v:real^3)`]
9796 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
9797 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
9798 THEN MP_TAC(SET_RULE` aff_ge {x} {v, w} SUBSET xfan (x,V,E1) /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
9799 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
9800 THEN RESA_TAC
9801 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, w}/\ u' SUBSET yfan (x,V,E1) /\ x' IN u'==> ~(aff_gt {x} {v, w} INTER yfan(x,V:real^3->bool,E1)={})`)
9802 THEN ASM_REWRITE_TAC[]
9803 THEN POP_ASSUM MP_TAC
9804 THEN REWRITE_TAC[yfan]
9805 THEN SET_TAC[]];
9806 SET_TAC[]]);;
9807
9808
9809 let dartset_leads_into_fan_SUBSET_U=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
9810 FAN(x,V,E)
9811  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9812 /\ fan80(x,V,E)
9813 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9814 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9815 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9816 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9817 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9818 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9819 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9820 /\ (x,w,v,u)=f10
9821 /\ (x,v,u,w)=f20
9822 /\ (x,u,w,v)=f30
9823 /\ E UNION {{v,w}}= E1
9824 /\ (!E1. FAN(x,V,E1)  /\ 
9825          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
9826          fan80(x,V,E1)/\ 
9827          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9828 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
9829 ==> dartset_leads_into_fan x V E ds SUBSET U 
9830 `,
9831
9832 REPEAT STRIP_TAC
9833 THEN POP_ASSUM MP_TAC
9834 THEN DISCH_THEN(LABEL_TAC"EM")
9835 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9836 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9837 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
9838 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
9839 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
9840 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9841 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9842 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9843 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
9844 THEN ASM_REWRITE_TAC[]
9845 THEN STRIP_TAC
9846 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9847 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9848 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9849 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9850 THEN POP_ASSUM MP_TAC
9851 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9852 THEN REWRITE_TAC[GSYM UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN]
9853 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN]
9854 THEN DISCH_THEN(LABEL_TAC"MA")
9855 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9856 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9857 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
9858 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9859 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9860 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
9861 THEN SUBGOAL_THEN`yfan (x,V,E) =
9862       UNIONS ((topological_component_yfan (x,V,E1) DELETE (dartset_leads_into_fan x V E1 ds1))DELETE (dartset_leads_into_fan x V E1 ds2)) UNION (dartset_leads_into_fan x V E1 ds2) UNION (dartset_leads_into_fan x V E1 ds1) UNION aff_gt {x} {v, w}`
9863 ASSUME_TAC
9864 THENL(*1*)[
9865 ASM_REWRITE_TAC[UNIONS;DELETE;UNION;IN_ELIM_THM]
9866 THEN POP_ASSUM MP_TAC
9867 THEN POP_ASSUM MP_TAC
9868 THEN POP_ASSUM MP_TAC
9869 THEN SET_TAC[];(*1*)
9870
9871 POP_ASSUM MP_TAC
9872 THEN REWRITE_TAC[SET_RULE`A UNION B UNION C UNION D=A UNION (C UNION B UNION D)`]
9873 THEN ASM_REWRITE_TAC[]
9874 THEN STRIP_TAC
9875 THEN POP_ASSUM(fun th-> MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"LINH"))
9876 THEN REMOVE_THEN"MA"(fun th-> MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"MA"))
9877 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
9878 THEN POP_ASSUM MP_TAC
9879 THEN ASM_REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9880 THEN STRIP_TAC
9881 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
9882 THEN ASM_REWRITE_TAC[]
9883 THEN STRIP_TAC
9884 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9885 ` (v:real^3)`]
9886 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
9887 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
9888 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9889 THEN REWRITE_TAC[SUBSET]
9890 THEN GEN_TAC
9891 THEN MRESA_TAC dartset_leads_into_fanadd2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9892 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9893 THEN MP_TAC(SET_RULE`y' IN aff_gt {x} {v, w:real^3} /\ aff_gt {x} {v, w} SUBSET connected_component (yfan (x,V:real^3->bool,E)) y==> y' IN  connected_component (yfan (x,V,E)) y`)
9894 THEN RESA_TAC
9895 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan (x,V:real^3->bool,E)`;`y:real^3`;`y':real^3`]
9896 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9897 THEN STRIP_TAC
9898 THEN MRESA_TAC CONNECTED_COMPONENT_SUBSET[`yfan (x,V:real^3->bool,E)`;`y':real^3`]
9899 THEN MP_TAC(SET_RULE`connected_component (yfan (x,V,E)) y' SUBSET yfan (x,V,E)/\ x' IN connected_component (yfan (x,V,E)) y'
9900 ==> x' IN yfan (x,V:real^3->bool,E)`)
9901 THEN ASM_REWRITE_TAC[]
9902 THEN REMOVE_THEN "MA"(fun th-> REWRITE_TAC[SYM th]
9903 THEN REMOVE_THEN "LINH"(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM]))
9904 THEN STRIP_TAC
9905 THEN SUBGOAL_THEN`?e1 e2.
9906                open e1 /\
9907                open e2 /\
9908                (connected_component (yfan (x,V,E)) y') SUBSET e1 UNION e2 /\
9909                e1 INTER e2 INTER (connected_component (yfan (x,V:real^3->bool,E)) y') = {} /\
9910                ~(e1 INTER (connected_component (yfan (x,V,E)) y') = {}) /\
9911                ~(e2 INTER (connected_component (yfan (x,V,E)) y') = {})` ASSUME_TAC
9912 THENL(*2*)[
9913
9914  MRESA_TAC dartset_leads_into_ds_open_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9915 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`]
9916
9917 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9918 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9919 THEN EXISTS_TAC`U:real^3->bool`
9920 THEN EXISTS_TAC`UNIONS
9921       (topological_component_yfan (x,V:real^3->bool,E1) DELETE
9922        dartset_leads_into_fan x V E1 ds1 DELETE
9923        dartset_leads_into_fan x V E1 ds2)`
9924 THEN ASM_REWRITE_TAC[]
9925 THEN STRIP_TAC
9926 THENL(*3*)[
9927 MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`; 
9928 `dartset_leads_into_fan x V E1 ds1:real^3->bool`]
9929 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`; 
9930 `dartset_leads_into_fan x V E1 ds2:real^3->bool`]
9931 THEN MATCH_MP_TAC OPEN_UNIONS
9932 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
9933 THEN REPEAT STRIP_TAC
9934 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`; 
9935 `s:real^3->bool`];
9936
9937 STRIP_TAC
9938 THENL(*4*)[
9939
9940  MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9941 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
9942 THEN POP_ASSUM MP_TAC
9943 THEN MRESA_TAC UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;]
9944 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9945 THEN STRIP_TAC
9946 THEN POP_ASSUM( fun th-> REMOVE_THEN "EM" (fun th-> REWRITE_TAC[SYM th])
9947 THEN REMOVE_ASSUM_TAC
9948 THEN REMOVE_ASSUM_TAC
9949 THEN REMOVE_ASSUM_TAC
9950 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[th])
9951 THEN SET_TAC[];
9952
9953 STRIP_TAC
9954 THENL(*5*)[
9955
9956 MRESA_TAC U_INTER_U2_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9957 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`]
9958 THEN POP_ASSUM MP_TAC
9959 THEN SET_TAC[];(*5*)
9960
9961 MP_TAC(SET_RULE`y' IN aff_gt {x} {v, w} /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w:real^3}=U
9962 ==> y' IN U
9963 `)
9964 THEN RESA_TAC
9965 THEN SUBGOAL_THEN`y' IN connected_component (yfan (x,V:real^3->bool,E)) y'`ASSUME_TAC
9966 THENL(*6*)[
9967
9968 REWRITE_TAC[IN]
9969 THEN MATCH_MP_TAC CONNECTED_COMPONENT_REFL
9970 THEN ASM_REWRITE_TAC[]
9971 THEN MRESA_TAC condition_aff_gt_subset_yfan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v:real^3`;`u:real^3`;`w:real^3`;]
9972 THEN ASM_TAC
9973 THEN SET_TAC[];(*6*)
9974
9975 MP_TAC(SET_RULE`y' IN U /\ y' IN connected_component (yfan (x,V:real^3->bool,E)) y'==> ~(U INTER connected_component (yfan (x,V,E)) y' = {})`)
9976 THEN RESA_TAC
9977 THEN ASM_TAC
9978 THEN SET_TAC[]]]]];(*2*)
9979 MRESA_TAC CONNECTED_CONNECTED_COMPONENT[`yfan(x,V:real^3->bool,E)`;`y':real^3`]
9980 THEN POP_ASSUM MP_TAC
9981 THEN ASM_REWRITE_TAC[connected]]]);;
9982
9983
9984
9985
9986
9987
9988
9989
9990
9991
9992
9993 let rep_dartset_leads_into_fan_ds=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
9994 FAN(x,V,E)
9995  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9996 /\ fan80(x,V,E)
9997 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9998 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
9999 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10000 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10001 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10002 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10003 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10004 /\ (x,w,v,u)=f10
10005 /\ (x,v,u,w)=f20
10006 /\ (x,u,w,v)=f30
10007 /\ E UNION {{v,w}}= E1
10008 /\ (!E1. FAN(x,V,E1)  /\ 
10009          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
10010          fan80(x,V,E1)/\ 
10011          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10012 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
10013 ==> dartset_leads_into_fan x V E ds =U 
10014 `,
10015 REPEAT STRIP_TAC
10016 THEN POP_ASSUM MP_TAC
10017 THEN DISCH_THEN(LABEL_TAC"EM")
10018 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10019 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10020 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10021 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10022 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10023 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10024 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10025 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10026 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10027 THEN ASM_REWRITE_TAC[]
10028 THEN STRIP_TAC
10029 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10030 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10031 THEN MRESA_TAC dartset_leads_into_fan_SUBSET_U[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10032 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`]
10033 THEN MRESA_TAC dartset_leads_into_fanadd2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10034 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10035 THEN MRESA_TAC dartset_leads_into_fanadd1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10036 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10037 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
10038 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10039 THEN ASM_TAC
10040 THEN SET_TAC[]);;
10041
10042
10043
10044
10045
10046 let u_in_topological_component_yfanadd1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U.
10047 FAN(x,V,E)
10048  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10049 /\ fan80(x,V,E)
10050 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10051 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
10052 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10053 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10054 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10055 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10056 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10057 /\ (x,w,v,u)=f10
10058 /\ (x,v,u,w)=f20
10059 /\ (x,u,w,v)=f30
10060 /\ E UNION {{v,w}}= E1
10061 /\ (!E1. FAN (x,V,E1) /\
10062             (!v. v IN V ==> CARD (set_of_edge v V E1) > 1) /\
10063             fan80 (x,V,E1) /\
10064             N_FAN (x,V,E1) < N_FAN (x,V,E)
10065             ==> conforming_fan (x,V,E1))
10066 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
10067 ==> U IN topological_component_yfan (x,V,E)`,
10068
10069
10070 REPEAT STRIP_TAC
10071 THEN POP_ASSUM MP_TAC
10072 THEN DISCH_THEN(LABEL_TAC"EM")
10073 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10074 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10075 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10076 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10077 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10078 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10079 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10080 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10081 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10082 THEN ASM_REWRITE_TAC[]
10083 THEN STRIP_TAC
10084 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10085 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10086 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10087 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U:real^3->bool`]
10088 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10089 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]);;
10090
10091
10092
10093
10094
10095
10096
10097
10098
10099
10100
10101
10102 let dartset_leads_into_fan_eq_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
10103 FAN(x,V,E)
10104  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10105 /\ fan80(x,V,E)
10106 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10107 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
10108 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10109 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10110 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10111 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10112 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10113 /\ (x,w,v,u)=f10
10114 /\ (x,v,u,w)=f20
10115 /\ (x,u,w,v)=f30
10116 /\ E UNION {{v,w}}= E1
10117 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
10118 /\ (!E1. FAN(x,V,E1)  /\ 
10119          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
10120          fan80(x,V,E1)/\ 
10121          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10122
10123 ==> dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) = dartset_leads_into_fan x V E ds0`,
10124
10125 REPEAT STRIP_TAC
10126 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10127 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10128 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10129 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10130 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10131 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10132 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10133 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10134 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10135 THEN ASM_REWRITE_TAC[]
10136 THEN STRIP_TAC
10137 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10138 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10139 THEN MP_TAC(SET_RULE`ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds ==> ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))`)
10140 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10141 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`]
10142 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10143 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
10144 THEN POP_ASSUM MP_TAC
10145 THEN POP_ASSUM MP_TAC
10146 THEN DISCH_THEN(LABEL_TAC"MAT")
10147 THEN STRIP_TAC
10148 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
10149 `ds0:real^3#real^3#real^3#real^3->bool`]
10150 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
10151 THEN MP_TAC(SET_RULE`ds0 SUBSET d1_fan (x,V,E) /\ y IN ds0==> y IN d1_fan ((x:real^3),V,E)`)
10152 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10153 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN STRIP_TAC THEN POP_ASSUM (fun th-> MP_TAC (SYM th))
10154 THEN DISCH_THEN(LABEL_TAC"NHO") THEN ASSUME_TAC th)
10155 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E1)) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)) IN face_set (hypermap1_of_fanx (x:real^3,V,E1))` ASSUME_TAC
10156 THENL(*1*)[
10157 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
10158 THEN EXISTS_TAC`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`
10159 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th])
10160 THEN ASM_REWRITE_TAC[tran;d1_fan;IN_ELIM_THM]
10161 THEN EXISTS_TAC`x:real^3`
10162 THEN EXISTS_TAC`v':real^3`
10163 THEN EXISTS_TAC`w':real^3`
10164 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
10165 THEN ASM_REWRITE_TAC[]
10166 THEN MP_TAC(SET_RULE`{v', w'} IN E/\ E UNION {{v, w:real^3}} = E1==> {v', w'} IN E1`)
10167 THEN ASM_REWRITE_TAC[];(*1*)
10168
10169 SUBGOAL_THEN`tran x V E1 y IN face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 (y:real^3#real^3#real^3#real^3))`
10170 ASSUME_TAC
10171 THENL(*2*)[
10172 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
10173 THEN EXISTS_TAC`0:num`
10174 THEN REWRITE_TAC[POWER;I_DEF]
10175 THEN ARITH_TAC;(*2*)
10176
10177 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
10178 `face (hypermap1_of_fanx (x,V,E1)) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`]
10179 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
10180 THEN POP_ASSUM MP_TAC
10181 THEN DISCH_THEN(LABEL_TAC"NHOEM")
10182 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th;tran;pr2;pr3] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"LINH"))
10183 THEN MP_TAC(SET_RULE`{v', w'} IN E/\ E UNION {{v, w:real^3}} = E1==> {v', w'} IN E1`)
10184 THEN ASM_REWRITE_TAC[]
10185 THEN STRIP_TAC
10186 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
10187 THEN POP_ASSUM MP_TAC
10188 THEN DISCH_THEN(LABEL_TAC"NHO")
10189 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
10190 THEN POP_ASSUM MP_TAC
10191 THEN DISCH_THEN(LABEL_TAC"NHO1")
10192 THEN MATCH_MP_TAC unique_dart_leads_into
10193 THEN ASM_REWRITE_TAC[]
10194 THEN MP_TAC(REAL_ARITH`&0<h /\ &0< h'==> &0< min (h:real) (h':real)`)
10195 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10196 THEN EXISTS_TAC`min (h:real) (h':real)`
10197 THEN ASM_REWRITE_TAC[]
10198 THEN DISJ_CASES_TAC(SET_RULE`((y:real^3#real^3#real^3#real^3) IN ds)\/ ~(y IN ds)`)
10199 THENL(*3*)[
10200 MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
10201 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`]
10202 THEN POP_ASSUM MP_TAC
10203 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10204 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds0:real^3#real^3#real^3#real^3->bool`]
10205 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x''':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`]
10206 THEN POP_ASSUM MP_TAC
10207 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10208 THEN STRIP_TAC
10209 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10210 THEN STRIP_TAC
10211 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th; DELETE;IN_ELIM_THM] );(*3*)
10212
10213  REPEAT GEN_TAC THEN STRIP_TAC
10214 THEN  POP_ASSUM MP_TAC
10215 THEN MP_TAC(REAL_ARITH`s < min h h'==> s <  h' /\ s < h `)
10216 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10217 THEN  MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
10218 `(v':real^3)`]
10219 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
10220 THEN DISCH_TAC
10221 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
10222 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
10223 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
10224 THEN DISCH_TAC
10225 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
10226 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
10227 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
10228 THEN MRESA_TAC INVARANT_SIGMA_FAN_ADD
10229 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10230 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10231 ;`ds1:real^3#real^3#real^3#real^3->bool`
10232 ;`ds2:real^3#real^3#real^3#real^3->bool`
10233 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10234 ;`(y:real^3#real^3#real^3#real^3)`;]
10235 THEN POP_ASSUM MP_TAC
10236 THEN REMOVE_THEN"NHOEM" MP_TAC
10237 THEN REMOVE_THEN "LINH"(fun th-> REWRITE_TAC[SYM th;pr2;pr3;tran] THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"LINH"))
10238 THEN DISCH_THEN(LABEL_TAC"NHOEM")
10239 THEN STRIP_TAC
10240 THEN ASM_REWRITE_TAC[]
10241 THEN STRIP_TAC
10242 THEN REMOVE_THEN "NHO"(fun th-> MRESAL_TAC th[`s:real`;`y':real^3`][rw_dart_fan;w_dart_fan])
10243 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH"))
10244 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
10245 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10246 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10247 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10248 THEN POP_ASSUM MP_TAC
10249 THEN DISCH_THEN(LABEL_TAC"NHOLINH")
10250 THEN ASSUME_TAC(SET_RULE`yfan (x:real^3,(V:real^3->bool),E1) SUBSET yfan (x,V,E1) UNION aff_gt {x} {v, w}`)
10251 THEN MRESA_TAC CONNECTED_COMPONENT_MONO[`yfan (x:real^3,(V:real^3->bool),E1)`;`(yfan (x:real^3,(V:real^3->bool),E1) UNION aff_gt {x} {v:real^3, w})`;`y':real^3`]
10252 THEN POP_ASSUM MP_TAC
10253 THEN DISCH_THEN(LABEL_TAC"YEULINH")
10254 THEN REWRITE_TAC[EXTENSION]
10255 THEN GEN_TAC
10256 THEN EQ_TAC
10257 THENL(*4*)[
10258 POP_ASSUM MP_TAC
10259 THEN SET_TAC[];(*4*)
10260
10261
10262  GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN;connected_component ]
10263 THEN STRIP_TAC
10264 THEN DISJ_CASES_TAC(SET_RULE(`(t INTER aff_gt {x} {v:real^3, w}={}) \/ ~(t INTER aff_gt {x} {v, w}={})`))
10265 THENL(*5*)[
10266 MP_TAC(SET_RULE`t SUBSET yfan (x,V,E1) UNION aff_gt {x} {v, w}/\ t INTER aff_gt {x} {v, w} = {}
10267 ==> t SUBSET yfan (x,V:real^3->bool,E1)`)
10268 THEN ASM_REWRITE_TAC[IN;connected_component ]
10269 THEN STRIP_TAC
10270 THEN EXISTS_TAC`t:real^3->bool`
10271 THEN ASM_REWRITE_TAC[]
10272 THEN ASM_TAC
10273 THEN SET_TAC[IN];(*5*)
10274
10275 POP_ASSUM MP_TAC
10276 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?z. z IN A`;INTER;IN_ELIM_THM]
10277 THEN STRIP_TAC
10278 THEN SUBGOAL_THEN`z IN connected_component (yfan (x,V:real^3->bool,E1) UNION aff_gt {x} {v, w}) y'`
10279 ASSUME_TAC
10280 THENL(*6*)[
10281 ASM_REWRITE_TAC[IN;connected_component ]
10282 THEN EXISTS_TAC`t:real^3->bool`
10283 THEN ASM_REWRITE_TAC[]
10284 THEN ASM_TAC
10285 THEN SET_TAC[IN];(*6*)
10286 MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET dartset_leads_into_fan x V E ds /\ z IN aff_gt {x} {v, w}
10287 ==> z IN dartset_leads_into_fan x (V:real^3->bool) E ds`)
10288 THEN ASM_REWRITE_TAC[]
10289 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10290 THEN POP_ASSUM MP_TAC
10291 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10292 THEN STRIP_TAC
10293 THEN POP_ASSUM MP_TAC
10294 THEN DISCH_THEN(LABEL_TAC"EM")
10295 THEN ASM_REWRITE_TAC[]
10296 THEN STRIP_TAC
10297 THEN MP_TAC(SET_RULE`z IN connected_component (yfan (x,V,E1) UNION aff_gt {x} {v, w}) y''
10298 /\ z IN connected_component (yfan (x,V,E1) UNION aff_gt {x} {v, w}) y'
10299 ==> ~(connected_component (yfan (x,V,E1) UNION aff_gt {x} {v, w}) y' INTER connected_component (yfan (x,V:real^3->bool,E1) UNION aff_gt {x} {v, w}) y''={})`)
10300 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_OVERLAP]
10301 THEN STRIP_TAC
10302 THEN REMOVE_THEN"YEULINH" MP_TAC
10303 THEN POP_ASSUM MP_TAC
10304 THEN REMOVE_THEN"NHOLINH" (fun th-> REWRITE_TAC[SYM th])
10305 THEN REMOVE_THEN"EM" (fun th-> REWRITE_TAC[SYM th])
10306 THEN REMOVE_THEN"BELINH" (fun th-> REWRITE_TAC[SYM th])
10307 THEN STRIP_TAC
10308 THEN ASM_REWRITE_TAC[]
10309 THEN REMOVE_THEN "NHO1"(fun th-> MRESAL_TAC th[`s:real`;`y':real^3`][rw_dart_fan;w_dart_fan])
10310 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN MP_TAC(th) THEN DISCH_THEN(LABEL_TAC"BELINH"))
10311 THEN REMOVE_THEN "NHOEM"(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH12"))
10312 THEN REMOVE_THEN "MAT" MP_TAC
10313 THEN ASM_REWRITE_TAC[]
10314 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th;tran])
10315 THEN STRIP_TAC
10316 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH123"))
10317 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10318 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION
10319       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
10320       aff_gt {x} {v, w}:real^3->bool`]
10321 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10322 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10323 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10324 ` (v:real^3)`]
10325 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
10326 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10327 THEN MP_TAC(SET_RULE` aff_ge {x} {v, w} SUBSET xfan (x,V,E1) /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
10328 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10329 THEN RESA_TAC
10330 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10331 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10332 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10333 ;`ds1:real^3#real^3#real^3#real^3->bool`
10334 ;`ds2:real^3#real^3#real^3#real^3->bool`
10335 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10336 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;]
10337 THEN POP_ASSUM MP_TAC
10338 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10339 THEN STRIP_TAC
10340 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)`]
10341 THEN POP_ASSUM MP_TAC
10342 THEN REWRITE_TAC[yfan]
10343 THEN STRIP_TAC
10344 THEN STRIP_TAC
10345 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET xfan (x,V,E1)
10346 /\ dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) SUBSET (:real^3) DIFF xfan (x,V,E1) /\ dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) SUBSET
10347  dartset_leads_into_fan x V E1 ds1 UNION
10348  dartset_leads_into_fan x V E1 ds2 UNION
10349  aff_gt {x} {v, w}
10350 ==> dartset_leads_into_fan x V E1 (tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)) SUBSET
10351  dartset_leads_into_fan x V E1 ds1 UNION
10352  dartset_leads_into_fan x V E1 ds2`)
10353 THEN RESA_TAC
10354 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)`]
10355 THEN POP_ASSUM MP_TAC
10356 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10357 THEN STRIP_TAC
10358 THEN SUBGOAL_THEN`y''' IN dartset_leads_into_fan x V (E1:(real^3->bool)->bool) (tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))`
10359 ASSUME_TAC
10360 THENL(*7*)[
10361 ASM_REWRITE_TAC[IN]
10362 THEN MATCH_MP_TAC CONNECTED_COMPONENT_REFL
10363 THEN ASM_REWRITE_TAC[];(*7*)
10364 MP_TAC(SET_RULE`y''' IN dartset_leads_into_fan x V (E1:(real^3->bool)->bool) (tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))
10365 /\ dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) SUBSET
10366       dartset_leads_into_fan x V E1 ds1 UNION
10367       dartset_leads_into_fan x V E1 ds2
10368 ==> y''' IN dartset_leads_into_fan x V E1 ds1\/ y''' IN dartset_leads_into_fan x V E1 ds2`)
10369 THEN RESA_TAC
10370 THENL(*8*)[
10371
10372
10373 POP_ASSUM MP_TAC
10374 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10375 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10376 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`(ds1:real^3#real^3#real^3#real^3->bool)`]
10377 THEN POP_ASSUM MP_TAC
10378 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10379 THEN RESA_TAC
10380 THEN STRIP_TAC
10381 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y'''':real^3`;`y''':real^3`]
10382 THEN POP_ASSUM MP_TAC
10383 THEN REMOVE_ASSUM_TAC
10384 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10385 THEN POP_ASSUM MP_TAC
10386 THEN POP_ASSUM MP_TAC
10387 THEN POP_ASSUM MP_TAC
10388 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10389 THEN REPEAT STRIP_TAC
10390 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)`]
10391 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10392 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10393 THEN POP_ASSUM MP_TAC
10394 THEN ASM_REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10395 THEN STRIP_TAC
10396 THEN REMOVE_ASSUM_TAC
10397 THEN REMOVE_ASSUM_TAC
10398 THEN REMOVE_ASSUM_TAC
10399 THEN POP_ASSUM(fun th-> MRESA1_TAC th`dartset_leads_into_fan x V (E1:(real^3->bool)->bool) (tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))`)
10400 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds1:real^3#real^3#real^3#real^3->bool)`
10401 THEN MRESA1_TAC th`(tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))`)
10402 THEN POP_ASSUM MP_TAC
10403 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10404 THEN ASM_REWRITE_TAC[];(*8*)
10405
10406 POP_ASSUM MP_TAC
10407 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10408 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10409 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`(ds2:real^3#real^3#real^3#real^3->bool)`]
10410 THEN POP_ASSUM MP_TAC
10411 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10412 THEN RESA_TAC
10413 THEN STRIP_TAC
10414 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y'''':real^3`;`y''':real^3`]
10415 THEN POP_ASSUM MP_TAC
10416 THEN REMOVE_ASSUM_TAC
10417 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10418 THEN POP_ASSUM MP_TAC
10419 THEN POP_ASSUM MP_TAC
10420 THEN POP_ASSUM MP_TAC
10421 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10422 THEN REPEAT STRIP_TAC
10423 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool)`]
10424 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10425 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10426 THEN POP_ASSUM MP_TAC
10427 THEN ASM_REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10428 THEN STRIP_TAC
10429 THEN REMOVE_ASSUM_TAC
10430 THEN REMOVE_ASSUM_TAC
10431 THEN REMOVE_ASSUM_TAC
10432 THEN POP_ASSUM(fun th-> MRESA1_TAC th`dartset_leads_into_fan x V (E1:(real^3->bool)->bool) (tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))`)
10433 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds2:real^3#real^3#real^3#real^3->bool)`
10434 THEN MRESA1_TAC th`(tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (ds0:real^3#real^3#real^3#real^3->bool))`)
10435 THEN POP_ASSUM MP_TAC
10436 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10437 THEN ASM_REWRITE_TAC[]]]]]]]]]);;
10438
10439
10440
10441
10442
10443 let conforming_bijection_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
10444 FAN(x,V,E)
10445  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10446 /\ fan80(x,V,E)
10447 /\ (!E1. FAN(x,V,E1)  /\ 
10448          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
10449          fan80(x,V,E1)/\ 
10450          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10451 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10452 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
10453 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10454 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10455 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10456 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10457 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10458 /\ (x,w,v,u)=f10
10459 /\ (x,v,u,w)=f20
10460 /\ (x,u,w,v)=f30
10461 /\ E UNION {{v,w}}= E1
10462 ==>
10463
10464 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ 
10465                                                          s = dartset_leads_into_fan x V E f)`,
10466
10467 REPEAT STRIP_TAC
10468 THEN POP_ASSUM MP_TAC
10469 THEN DISCH_THEN(LABEL_TAC"EM")
10470 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10471 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10472 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10473 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10474 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10475 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10476 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10477 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10478 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10479 THEN ASM_REWRITE_TAC[]
10480 THEN STRIP_TAC
10481 THEN REWRITE_TAC[EXISTS_UNIQUE]
10482 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`s:real^3->bool`]
10483 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
10484 THEN ASM_REWRITE_TAC[]
10485 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
10486 THEN REPEAT STRIP_TAC
10487 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10488 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10489 THEN POP_ASSUM MP_TAC
10490 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10491 THEN REPEAT STRIP_TAC
10492 THEN REMOVE_ASSUM_TAC
10493 THEN REMOVE_ASSUM_TAC
10494 THEN REMOVE_ASSUM_TAC
10495 THEN POP_ASSUM MP_TAC
10496 THEN DISCH_THEN(LABEL_TAC"LINH1")
10497 THEN DISJ_CASES_TAC(SET_RULE`~(ds=y)\/ (y=ds:real^3#real^3#real^3#real^3->bool)`)
10498 THENL[
10499 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10500 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10501 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10502 ;`ds1:real^3#real^3#real^3#real^3->bool`
10503 ;`ds2:real^3#real^3#real^3#real^3->bool`
10504 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10505 ;`(y:real^3#real^3#real^3#real^3->bool)`;]
10506 THEN POP_ASSUM MP_TAC
10507 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10508 THEN STRIP_TAC
10509 THEN  MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (y:real^3#real^3#real^3#real^3->bool)`]
10510 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10511 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(y:real^3#real^3#real^3#real^3->bool)`]
10512 THEN POP_ASSUM MP_TAC
10513 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10514 THEN STRIP_TAC
10515 THEN DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
10516 THENL[
10517
10518 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10519 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10520 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10521 ;`ds1:real^3#real^3#real^3#real^3->bool`
10522 ;`ds2:real^3#real^3#real^3#real^3->bool`
10523 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10524 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
10525 THEN POP_ASSUM MP_TAC
10526 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10527 THEN STRIP_TAC
10528 THEN  MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`]
10529 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10530 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`]
10531 THEN POP_ASSUM MP_TAC
10532 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10533 THEN STRIP_TAC
10534 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`dartset_leads_into_fan x V E1 (tranf x V (E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool))`)
10535 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(tranf x V (E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool))` THEN MRESA1_TAC th`(tranf x V (E:(real^3->bool)->bool) E1 (y:real^3#real^3#real^3#real^3->bool))`)
10536 THEN POP_ASSUM MP_TAC
10537 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10538 THEN STRIP_TAC
10539 THEN MRESAL_TAC INJ_TRANF_FACE_DELETE_DS
10540 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10541 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10542 ;`ds1:real^3#real^3#real^3#real^3->bool`
10543 ;`ds2:real^3#real^3#real^3#real^3->bool`
10544 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10545 ;`(y:real^3#real^3#real^3#real^3->bool)`;`(f:real^3#real^3#real^3#real^3->bool)`][DELETE;IN_ELIM_THM];
10546
10547 REMOVE_THEN "LINH1" MP_TAC
10548 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10549 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}:real^3->bool`]
10550 THEN POP_ASSUM MP_TAC
10551 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10552 THEN POP_ASSUM MP_TAC
10553 THEN POP_ASSUM MP_TAC
10554 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10555 THEN STRIP_TAC
10556 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10557 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10558 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10559 ` (v:real^3)`]
10560 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
10561 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10562 THEN MP_TAC(SET_RULE` aff_ge {x} {v, w} SUBSET xfan (x,V,E1) /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
10563 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10564 THEN RESA_TAC
10565 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (y:real^3#real^3#real^3#real^3->bool)`]
10566 THEN POP_ASSUM MP_TAC
10567 THEN REWRITE_TAC[yfan]
10568 THEN POP_ASSUM MP_TAC
10569 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
10570 THEN POP_ASSUM MP_TAC
10571 THEN SET_TAC[]];
10572
10573
10574 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10575 THEN DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
10576 THENL[
10577 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10578 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10579 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10580 ;`ds1:real^3#real^3#real^3#real^3->bool`
10581 ;`ds2:real^3#real^3#real^3#real^3->bool`
10582 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10583 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
10584 THEN POP_ASSUM MP_TAC
10585 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10586 THEN STRIP_TAC
10587 THEN  MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`tranf x (V:real^3->bool) (E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`]
10588 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10589 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`]
10590 THEN POP_ASSUM MP_TAC
10591 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10592 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10593 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}:real^3->bool`]
10594 THEN STRIP_TAC
10595 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10596 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10597 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10598 ` (v:real^3)`]
10599 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
10600 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10601 THEN MP_TAC(SET_RULE` aff_ge {x} {v, w} SUBSET xfan (x,V,E1) /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
10602 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10603 THEN RESA_TAC
10604 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`]
10605 THEN POP_ASSUM MP_TAC
10606 THEN REWRITE_TAC[yfan]
10607 THEN POP_ASSUM MP_TAC
10608 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
10609 THEN POP_ASSUM MP_TAC
10610 THEN SET_TAC[];
10611 ASM_REWRITE_TAC[]]]);;
10612
10613
10614
10615
10616 let RADIAL_AFF_GT_1_2 = prove(`!x u v r.
10617      (DISJOINT {(x:real^B)} {u,v} /\ (r > &0) ) ==>
10618      radial_norm r x (aff_gt {x} {u,v} INTER normball x r)`,
10619 REWRITE_TAC[radial_norm]
10620 THEN REPEAT STRIP_TAC
10621 THENL[SET_TAC[];
10622 UNDISCH_TAC `(x:real^B) + u' IN aff_gt {x} {u, v} INTER normball x r`
10623 THEN ASM_SIMP_TAC[AFF_GT_1_2]
10624 THEN REWRITE_TAC[IN_ELIM_THM;IN_INTER]
10625 THEN REPEAT STRIP_TAC
10626 THENL[
10627 EXISTS_TAC `&1 + (t:real) * t1 - t`
10628 THEN EXISTS_TAC `(t:real) * t2`
10629 THEN EXISTS_TAC `(t:real) * t3`
10630 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 + t * t1 - t) + t * t2 + t * t3 = &1 + t * (t1 + t2 +t3)-t `; REAL_ARITH`&1 + t * &1 - t = &1`;VECTOR_ARITH`(&1 + t * t1 - t) % x + (t * t2) % u + (t * t3) % v=x + t % (t1 % x +  t2 % u + t3 % v) - t %x`;]
10631 THEN MP_TAC(REAL_ARITH`t> &0 ==> &0< t`) THEN RESA_TAC
10632 THEN SUBGOAL_THEN `&0 < t * t2 /\ &0 < t * t3` (fun t -> REWRITE_TAC[t])
10633 THENL[ ASM_MESON_TAC[REAL_LT_MUL];REMOVE_ASSUM_TAC
10634 THEN REMOVE_ASSUM_TAC
10635 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10636 THEN VECTOR_ARITH_TAC];
10637
10638
10639 MATCH_MP_TAC aff_normball
10640 THEN ASM_REWRITE_TAC[]]]);;
10641
10642
10643 let NORMBALL_SUBSET=prove(`!x r r'. r<= r' ==> normball x r SUBSET normball x r'`,
10644 REPEAT STRIP_TAC
10645 THEN REWRITE_TAC[SUBSET;IN_ELIM_THM;normball]
10646 THEN GEN_TAC
10647 THEN POP_ASSUM MP_TAC
10648 THEN REAL_ARITH_TAC);;
10649
10650
10651 let RADIAL_NORM_CO=prove(`!r r' (x:real^3) C. r' <= r /\ &0< r' ==> (radial_norm r x (C INTER (normball x r))) ==> (radial_norm r' x (C INTER (normball x r')))`,
10652 REWRITE_TAC[radial_norm]
10653 THEN REPEAT STRIP_TAC
10654 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`r':real`;`r:real`] 
10655 THENL[
10656 ASM_TAC
10657 THEN SET_TAC[];
10658 POP_ASSUM MP_TAC
10659 THEN POP_ASSUM MP_TAC
10660 THEN POP_ASSUM MP_TAC
10661 THEN POP_ASSUM MP_TAC
10662 THEN POP_ASSUM MP_TAC
10663 THEN DISCH_THEN(LABEL_TAC"A")
10664 THEN REPEAT STRIP_TAC
10665 THEN MP_TAC(SET_RULE`x + u IN C INTER normball x r'
10666 /\ normball x r' SUBSET normball x r
10667 ==> (x:real^3) + u IN C INTER normball x r`)
10668 THEN RESA_TAC
10669 THEN MP_TAC(REAL_ARITH`t * norm u < r' /\ r'<=r /\ t> &0 /\ &0< r' ==> &0< r /\  &0<=t /\  &0<t /\  t * norm (u:real^3) < r /\ ~(r'= &0)`)
10670 THEN RESA_TAC
10671 THEN MRESA1_TAC REAL_LT_INV`r':real`
10672 THEN MRESA1_TAC REAL_MUL_LINV`r':real`
10673 THEN MRESA_TAC REAL_LT_MUL[`r:real`;`inv r':real`]
10674 THEN MRESA_TAC REAL_LT_MUL[`t :real`;` r * inv r':real`]
10675 THEN MRESA_TAC REAL_LT_LMUL[` r * inv r':real`;`t * norm (u :real^3)`;`r' :real`;]
10676 THEN MP_TAC(REAL_ARITH`&0 < t * r * inv r'/\  (r * inv r') * t * norm (u:real^3) < (r * inv r') * r' ==> t * r * inv r' > &0 /\ &0 <= t * r * inv r'/\ (t * r * inv r') * norm u < r* (inv r' * r')`)
10677 THEN RESA_TAC
10678 THEN POP_ASSUM MP_TAC
10679 THEN REWRITE_TAC[REAL_ARITH`A * &1=A`]
10680 THEN STRIP_TAC
10681 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th`u:real^3`)
10682 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`t:real`[INTER;IN_ELIM_THM] THEN MRESAL1_TAC th`t * r  * inv (r'):real`[INTER;IN_ELIM_THM])
10683 THEN POP_ASSUM MP_TAC
10684 THEN MRESA1_TAC REAL_ABS_REFL `t:real`
10685 THEN MRESA1_TAC REAL_ABS_REFL `t * r * inv r':real`
10686 THEN ASM_REWRITE_TAC[normball;IN_ELIM_THM;dist;VECTOR_ARITH`(A+B)-A=B:real^3`;NORM_MUL]]);;
10687
10688
10689 let tranf_eq_image_of_tran=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0.
10690 FAN(x,V,E)
10691  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10692 /\ fan80(x,V,E)
10693 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10694 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
10695 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10696 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10697 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10698 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10699 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10700 /\ (x,w,v,u)=f10
10701 /\ (x,v,u,w)=f20
10702 /\ (x,u,w,v)=f30
10703 /\ E UNION {{v,w}}= E1
10704 /\ ds0 IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds
10705 ==> tranf x V E E1 ds0= IMAGE (tran x V E1) ds0`,
10706 REPEAT STRIP_TAC
10707 THEN POP_ASSUM MP_TAC
10708 THEN DISCH_THEN(LABEL_TAC"EM")
10709 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10710 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10711 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10712 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10713 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10714 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10715 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10716 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10717 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10718 THEN ASM_REWRITE_TAC[]
10719 THEN STRIP_TAC
10720 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10721 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10722 THEN MP_TAC(SET_RULE`ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds ==> ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))`)
10723 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"LINH")
10724 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`]
10725 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10726 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
10727 THEN MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10728 THEN RESA_TAC
10729 THEN SUBGOAL_THEN`tran x (V:real^3->bool) E1 (y:real^3#real^3#real^3#real^3) IN d1_fan (x,V:real^3->bool,E1)`
10730 ASSUME_TAC
10731 THENL[
10732 POP_ASSUM MP_TAC
10733 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
10734 THEN RESA_TAC
10735 THEN REWRITE_TAC[tran]
10736 THEN EXISTS_TAC`x:real^3`
10737 THEN EXISTS_TAC`v':real^3`
10738 THEN EXISTS_TAC`w':real^3`
10739 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
10740 THEN ASM_REWRITE_TAC[]
10741 THEN ASM_TAC
10742 THEN SET_TAC[];
10743 SUBGOAL_THEN`~(y IN ds:real^3#real^3#real^3#real^3->bool)` ASSUME_TAC
10744 THENL[ 
10745 FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
10746 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
10747 THEN RESA_TAC
10748 THEN STRIP_TAC
10749 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
10750 THEN REWRITE_TAC[orbit_map;IN_ELIM_THM]
10751 THEN USE_THEN"EM"MP_TAC
10752 THEN REWRITE_TAC[DELETE;face_set;IN_ELIM_THM;set_of_orbits]
10753 THEN ASM_REWRITE_TAC[]
10754 THEN STRIP_TAC
10755 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10756 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
10757 THEN POP_ASSUM MP_TAC
10758 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10759 THEN REMOVE_ASSUM_TAC
10760 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10761 THEN REMOVE_ASSUM_TAC
10762 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10763 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10764 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10765 THEN SET_TAC[];
10766
10767 ASM_REWRITE_TAC[IMAGE;face;orbit_map;EXTENSION;IN_ELIM_THM]
10768 THEN USE_THEN"LINH"MP_TAC
10769 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
10770 THEN ASM_REWRITE_TAC[]
10771 THEN STRIP_TAC
10772 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10773 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
10774 THEN REWRITE_TAC[orbit_map;IN_ELIM_THM]
10775 THEN EQ_TAC
10776 THEN REPEAT STRIP_TAC
10777 THENL[
10778
10779
10780 EXISTS_TAC`(res (f1_fan x V E) (d1_fan (x,V,E)) POWER n) (y:real^3#real^3#real^3#real^3)`
10781 THEN STRIP_TAC
10782 THENL[
10783 EXISTS_TAC`n:num`
10784 THEN ASM_REWRITE_TAC[];
10785
10786 ASM_REWRITE_TAC[]
10787 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10788 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
10789 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10790 THEN POP_ASSUM (fun th-> MRESA1_TAC th`tran (x:real^3) (V:real^3->bool) E1 (y:real^3#real^3#real^3#real^3)` )
10791 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
10792 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10793 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10794 ;`ds1:real^3#real^3#real^3#real^3->bool`
10795 ;`ds2:real^3#real^3#real^3#real^3->bool`
10796 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10797 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]];
10798
10799
10800 EXISTS_TAC`n:num`
10801 THEN ASM_REWRITE_TAC[]
10802 THEN ASM_REWRITE_TAC[]
10803 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10804 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
10805 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10806 THEN POP_ASSUM (fun th-> MRESA1_TAC th`tran (x:real^3) (V:real^3->bool) E1 (y:real^3#real^3#real^3#real^3)` )
10807 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
10808 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10809 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
10810 ;`ds1:real^3#real^3#real^3#real^3->bool`
10811 ;`ds2:real^3#real^3#real^3#real^3->bool`
10812 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10813 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]
10814 ]]])
10815 ;;
10816
10817
10818 let azim_fanadd_eq=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ds0 y.
10819 FAN(x,V,E)
10820  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10821 /\ fan80(x,V,E)
10822 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10823 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
10824 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10825 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10826 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10827 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10828 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10829 /\ (x,w,v,u)=f10
10830 /\ (x,v,u,w)=f20
10831 /\ (x,u,w,v)=f30
10832 /\ E UNION {{v,w}}= E1
10833 /\ ds0 IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds
10834 /\ y IN ds0
10835 ==> azim_fan x V E1 (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y))
10836 = azim_fan x V E (pr2 y) (pr3 y)`,
10837
10838
10839
10840 REPEAT STRIP_TAC
10841 THEN POP_ASSUM MP_TAC
10842 THEN DISCH_THEN(LABEL_TAC"EM")
10843 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10844 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10845 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
10846 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
10847 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
10848 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10849 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10850 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
10851 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
10852 THEN ASM_REWRITE_TAC[]
10853 THEN STRIP_TAC
10854 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10855 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
10856 THEN MP_TAC(SET_RULE`ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds ==> ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))`)
10857 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"LINH")
10858 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds0:real^3#real^3#real^3#real^3->bool`]
10859 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10860 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`ds0:real^3#real^3#real^3#real^3->bool` ]
10861 THEN MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10862 THEN RESA_TAC
10863 THEN POP_ASSUM MP_TAC
10864 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
10865 THEN STRIP_TAC
10866 THEN ASM_REWRITE_TAC[tran;pr2;pr3;azim_fan]
10867 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
10868 `(v':real^3)`]
10869 THEN REMOVE_ASSUM_TAC
10870 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v':real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E1) > 1`
10871 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v':real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E) > 1`
10872 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
10873 THEN RESA_TAC
10874 THEN RESA_TAC
10875 THEN DISJ_CASES_TAC(SET_RULE`~(v' IN {v, w})\/ (v' = v /\ ~(u=w')) \/ (v' = v /\ (u=w')) \/ (v' = w /\ ~(w'=inverse1_sigma_fan x (V:real^3->bool) E w u )) \/ (v' = w /\ (w'=inverse1_sigma_fan x V E w u ))`)
10876 THENL[
10877
10878 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10879 `v:real^3`; `w:real^3` ]
10880 THEN POP_ASSUM MP_TAC
10881 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10882 THEN ASM_REWRITE_TAC[]
10883 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10884 THEN STRIP_TAC
10885 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`]);
10886 POP_ASSUM MP_TAC
10887 THEN STRIP_TAC
10888 THENL[
10889
10890 POP_ASSUM MP_TAC
10891 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10892 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`w':real^3`];
10893
10894 SUBGOAL_THEN`f1=y:real^3#real^3#real^3#real^3`
10895 ASSUME_TAC
10896 THENL[
10897  MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10898 THEN RESA_TAC
10899 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`;][pr2;pr3];
10900 POP_ASSUM MP_TAC
10901 THEN RESA_TAC
10902 THEN REMOVE_THEN "LINH" MP_TAC
10903 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10904 THEN STRIP_TAC
10905 THEN REMOVE_THEN "EM" MP_TAC
10906 THEN RESA_TAC
10907 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
10908 THEN POP_ASSUM MP_TAC
10909 THEN REMOVE_ASSUM_TAC
10910 THEN POP_ASSUM MP_TAC
10911 THEN RESA_TAC
10912 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10913 THEN REMOVE_ASSUM_TAC
10914 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10915 THEN FIND_ASSUM MP_TAC`ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
10916 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10917 THEN STRIP_TAC
10918 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x'':real^3#real^3#real^3#real^3`;`f1:real^3#real^3#real^3#real^3`][face]
10919 THEN POP_ASSUM MP_TAC
10920 THEN POP_ASSUM MP_TAC
10921 THEN RESA_TAC
10922 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10923 THEN RESA_TAC
10924 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10925 THEN ASM_REWRITE_TAC[]
10926 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10927 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10928 THEN SET_TAC[]];
10929
10930
10931 POP_ASSUM MP_TAC
10932 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10933 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`w':real^3`];
10934
10935
10936 SUBGOAL_THEN`f3=y:real^3#real^3#real^3#real^3`
10937 ASSUME_TAC
10938 THENL[
10939  MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10940 THEN RESA_TAC
10941 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f3:real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`;][pr2;pr3]
10942 THEN POP_ASSUM MATCH_MP_TAC
10943 THEN REWRITE_TAC[PAIR_EQ]
10944 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
10945 THENL[
10946 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
10947 THEN EXISTS_TAC`x:real^3`
10948 THEN EXISTS_TAC`V:real^3->bool`
10949 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10950 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
10951 THEN ASM_REWRITE_TAC[]
10952 THEN ASM_TAC
10953 THEN REWRITE_TAC[pr2;pr3]
10954 THEN REPEAT STRIP_TAC
10955 THEN ASM_REWRITE_TAC[]
10956 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
10957 THEN EXISTS_TAC`x:real^3`
10958 THEN EXISTS_TAC`u:real^3`
10959 THEN EXISTS_TAC`w:real^3`
10960 THEN EXISTS_TAC`v:real^3`
10961 THEN ASM_REWRITE_TAC[];
10962
10963 MP_TAC(SET_RULE`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3
10964 ==> f1_fan x V E f2= f1_fan x V E (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`)
10965 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[])
10966 THEN ASM_REWRITE_TAC[]
10967  THEN STRIP_TAC
10968 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;f1_fan])
10969 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`(x,u,w,(v:real^3)) = f30:real^3#real^3#real^3#real^3`
10970 THEN REWRITE_TAC[]];
10971
10972 POP_ASSUM MP_TAC
10973 THEN RESA_TAC
10974 THEN REMOVE_THEN "LINH" MP_TAC
10975 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10976 THEN STRIP_TAC
10977 THEN REMOVE_THEN "EM" MP_TAC
10978 THEN RESA_TAC
10979 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x'':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`][face]
10980 THEN POP_ASSUM MP_TAC
10981 THEN REMOVE_ASSUM_TAC
10982 THEN POP_ASSUM MP_TAC
10983 THEN RESA_TAC
10984 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10985 THEN REMOVE_ASSUM_TAC
10986 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10987 THEN FIND_ASSUM MP_TAC`ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
10988 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10989 THEN STRIP_TAC
10990 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x'':real^3#real^3#real^3#real^3`;`f3:real^3#real^3#real^3#real^3`][face]
10991 THEN POP_ASSUM MP_TAC
10992 THEN POP_ASSUM MP_TAC
10993 THEN RESA_TAC
10994 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10995 THEN RESA_TAC
10996 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10997 THEN ASM_REWRITE_TAC[]
10998 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10999 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
11000 THEN SET_TAC[]]]]);;
11001
11002
11003
11004
11005 let eventally_measurable_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 f.
11006 FAN(x,V,E)
11007  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11008 /\ fan80(x,V,E)
11009 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11010 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
11011 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11012 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11013 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11014 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11015 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11016 /\ (x,w,v,u)=f10
11017 /\ (x,v,u,w)=f20
11018 /\ (x,u,w,v)=f30
11019 /\ E UNION {{v,w}}= E1
11020 /\ (!E1. FAN(x,V,E1)  /\ 
11021          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
11022          fan80(x,V,E1)/\ 
11023          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1)) 
11024 /\ f IN face_set (hypermap1_of_fanx (x,V,E))
11025  ==> let U = dartset_leads_into_fan x V E f in
11026                ((!r. measurable (ball (x,r) INTER U)) /\
11027                eventually_radial x U)  `,
11028
11029
11030
11031 REPEAT STRIP_TAC
11032 THEN POP_ASSUM MP_TAC
11033 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11034 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11035 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11036 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11037 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
11038 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11039 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11040 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11041 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
11042 THEN ASM_REWRITE_TAC[]
11043 THEN STRIP_TAC
11044 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11045 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11046 THEN POP_ASSUM MP_TAC
11047 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
11048 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
11049 THEN REPEAT STRIP_TAC
11050 THEN POP_ASSUM MP_TAC
11051 THEN REMOVE_ASSUM_TAC
11052 THEN POP_ASSUM MP_TAC
11053 THEN DISCH_THEN(LABEL_TAC"LINH")
11054 THEN STRIP_TAC
11055 THENL(*1*)[
11056 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
11057 THENL(*2*)[
11058 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
11059 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11060 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
11061 ;`ds1:real^3#real^3#real^3#real^3->bool`
11062 ;`ds2:real^3#real^3#real^3#real^3->bool`
11063 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11064 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
11065 THEN POP_ASSUM MP_TAC
11066 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11067 THEN STRIP_TAC
11068 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11069 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`]
11070 THEN POP_ASSUM MP_TAC
11071 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11072 THEN STRIP_TAC
11073 THEN REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`);(*2*)
11074
11075 MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11076 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}:real^3->bool`]
11077 THEN REWRITE_TAC[SET_RULE`A INTER (B UNION C UNION D)=(A INTER B) UNION (A INTER C) UNION (A INTER D)`]
11078 THEN MATCH_MP_TAC MEASURABLE_UNION
11079 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11080 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11081 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11082 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11083 THEN REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th` (ds1:real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th` (ds2:real^3#real^3#real^3#real^3->bool)`)
11084 THEN MATCH_MP_TAC MEASURABLE_UNION
11085 THEN ASM_REWRITE_TAC[MEASURABLE_BALL_AFF_GT]];(*1*)
11086
11087
11088 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
11089 THENL(*2*)[
11090 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
11091 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11092 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
11093 ;`ds1:real^3#real^3#real^3#real^3->bool`
11094 ;`ds2:real^3#real^3#real^3#real^3->bool`
11095 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11096 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
11097 THEN POP_ASSUM MP_TAC
11098 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11099 THEN STRIP_TAC
11100 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11101 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`]
11102 THEN POP_ASSUM MP_TAC
11103 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11104 THEN STRIP_TAC
11105 THEN REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`);(*2*)
11106
11107 MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11108 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}:real^3->bool`]
11109 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11110 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11111 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11112 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11113 THEN REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th` (ds1:real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th` (ds2:real^3#real^3#real^3#real^3->bool)`)
11114 THEN ASM_TAC
11115 THEN REWRITE_TAC[SET_RULE`A INTER (B UNION C UNION D)=(A INTER B) UNION (A INTER C) UNION (A INTER D)`;eventually_radial;radial;ball_eq_normball;]
11116 THEN REPEAT STRIP_TAC
11117 THEN REMOVE_ASSUM_TAC
11118 THEN POP_ASSUM MP_TAC
11119 THEN REMOVE_ASSUM_TAC
11120 THEN POP_ASSUM MP_TAC
11121 THEN REMOVE_ASSUM_TAC
11122 THEN REMOVE_ASSUM_TAC
11123 THEN POP_ASSUM MP_TAC
11124 THEN DISCH_THEN(LABEL_TAC"LINH1")
11125 THEN STRIP_TAC
11126 THEN DISCH_THEN(LABEL_TAC"LINH2")
11127 THEN EXISTS_TAC`min r (r':real)`
11128 THEN MP_TAC(REAL_ARITH`r> &0 /\ r' > &0==> min r (r':real)> &0 /\ &0< min r (r':real)/\ min r r' <= r /\ min r r' <= r'`)
11129 THEN RESA_TAC
11130 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`min r r':real`;`r:real`] 
11131 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`min r r':real`;`r':real`]
11132 THEN REWRITE_TAC[SET_RULE`A INTER B SUBSET B`;SET_RULE`(B UNION C UNION D) INTER A=(B INTER A) UNION (C INTER A) UNION (D INTER A)`]
11133 THEN REWRITE_TAC[UNION;IN_ELIM_THM]
11134 THEN REPEAT STRIP_TAC
11135 THEN MP_TAC(REAL_ARITH`t  * norm u' < min r r'==>  t * norm u' <  r'  /\  t * norm (u':real^3) < r`)
11136 THEN RESA_TAC
11137 THENL[
11138
11139 MRESAL_TAC RADIAL_NORM_CO[`r:real`;`min r r':real`;`x:real^3`;`dartset_leads_into_fan x V E1 (ds1:real^3#real^3#real^3#real^3->bool)`][radial_norm]
11140 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11141 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`);(**)
11142
11143 MRESAL_TAC RADIAL_NORM_CO[`r':real`;`min r r':real`;`x:real^3`;`dartset_leads_into_fan x V E1 (ds2:real^3#real^3#real^3#real^3->bool)`][radial_norm;SET_RULE`A INTER B SUBSET B`]
11144 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11145 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`);
11146
11147
11148 MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w:real^3} IN E1`) THEN RESA_TAC
11149 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
11150 THEN MRESAL_TAC RADIAL_AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`;`min r r':real`;][radial_norm]
11151 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11152 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`)]]]);;
11153
11154
11155
11156 let SOL_AFF_GT_2_1=prove(`!x:real^3 v:real^3 u:real^3.
11157 ~collinear {x,v,u}==>   sol x (aff_gt {x} {v,u})= &0`,
11158 REPEAT STRIP_TAC
11159 THEN MRESA_TAC  MEASURABLE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`]
11160 THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]th3) THEN RESA_TAC
11161 THEN MRESAL_TAC RADIAL_AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`;][REAL_ARITH`&1> &0`]
11162 THEN MRESAL_TAC sol[`x:real^3`;`aff_gt {x} {v,u}:real^3->bool`;`&1`][REAL_ARITH`&1> &0`;SET_RULE`{} INTER normball x (&1)={}`; MEASURABLE_AFF_GT_2_1_INTER_BALL]
11163 THEN MRESA_TAC MEASURE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`]
11164 THEN REAL_ARITH_TAC);;
11165
11166
11167
11168 let inverse1_sigma_fan_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
11169 FAN(x,V,E)
11170  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11171 /\ fan80(x,V,E)
11172 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11173 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
11174 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11175 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11176 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11177 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11178 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11179 /\ (x,w,v,u)=f10
11180 /\ (x,v,u,w)=f20
11181 /\ (x,u,w,v)=f30
11182 /\ E UNION {{v,w}}= E1
11183 ==> inverse1_sigma_fan x V E1 v (sigma_fan x V E v u) =  w`,
11184
11185 REPEAT STRIP_TAC
11186 THEN POP_ASSUM MP_TAC
11187 THEN DISCH_THEN(LABEL_TAC"EM")
11188 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11189 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11190 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11191 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11192 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
11193 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11194 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11195 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11196 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
11197 THEN ASM_REWRITE_TAC[]
11198 THEN STRIP_TAC
11199 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11200 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11201 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11202 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11203 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11204 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11205 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11206 THEN EXISTS_TAC`x:real^3`
11207 THEN EXISTS_TAC`V:real^3->bool`
11208 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11209 THEN EXISTS_TAC`v:real^3`
11210 THEN ASM_REWRITE_TAC[]
11211 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11212 `v:real^3`]
11213 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
11214 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
11215 `v:real^3`]
11216 THEN MP_TAC(SET_RULE`{v, sigma_fan x V E v u:real^3} IN E /\ E UNION {{v,w}}= E1
11217 ==> {v, sigma_fan x V E v u} IN E1/\ {v,w} IN E1`)
11218 THEN RESA_TAC
11219 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11220 THEN REMOVE_ASSUM_TAC
11221 THEN REMOVE_ASSUM_TAC
11222 THEN POP_ASSUM(fun th-> MRESA1_TAC th `sigma_fan x V E v u:real^3`)
11223 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11224 THEN REMOVE_ASSUM_TAC
11225 THEN POP_ASSUM(fun th-> MRESA1_TAC th `sigma_fan x V E v u:real^3`)
11226 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`
11227 ;`v:real^3`;`u:real^3`; `w:real^3`]);;
11228
11229
11230
11231 let inverse1_sigma_fan_FANADD2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
11232 FAN(x,V,E)
11233  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11234 /\ fan80(x,V,E)
11235 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11236 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
11237 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11238 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11239 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11240 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11241 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11242 /\ (x,w,v,u)=f10
11243 /\ (x,v,u,w)=f20
11244 /\ (x,u,w,v)=f30
11245 /\ E UNION {{v,w}}= E1
11246 ==> inverse1_sigma_fan x V E1 v w=u`,
11247 REPEAT STRIP_TAC
11248 THEN POP_ASSUM MP_TAC
11249 THEN DISCH_THEN(LABEL_TAC"EM")
11250 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11251 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11252 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11253 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11254 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
11255 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11256 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11257 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11258 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
11259 THEN ASM_REWRITE_TAC[]
11260 THEN STRIP_TAC
11261 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11262 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11263 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11264 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11265 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11266 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11267 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11268 THEN EXISTS_TAC`x:real^3`
11269 THEN EXISTS_TAC`V:real^3->bool`
11270 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11271 THEN EXISTS_TAC`v:real^3`
11272 THEN ASM_REWRITE_TAC[]
11273 THEN MP_TAC(SET_RULE`{v, u:real^3} IN E /\ E UNION {{v,w}}= E1
11274 ==> {v, u} IN E1/\ {v,w} IN E1`)
11275 THEN RESA_TAC
11276 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11277 THEN REMOVE_ASSUM_TAC
11278 THEN REMOVE_ASSUM_TAC
11279 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
11280 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11281 THEN REMOVE_ASSUM_TAC
11282 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
11283 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`
11284 ;`v:real^3`;`u:real^3`; `w:real^3`]);;
11285
11286
11287
11288 let inverse1_sigma_fan_FANADD3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
11289 FAN(x,V,E)
11290  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11291 /\ fan80(x,V,E)
11292 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11293 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
11294 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11295 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11296 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11297 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11298 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11299 /\ (x,w,v,u)=f10
11300 /\ (x,v,u,w)=f20
11301 /\ (x,u,w,v)=f30
11302 /\ E UNION {{v,w}}= E1
11303 ==> inverse1_sigma_fan x V E1 u v=w`,
11304 REPEAT STRIP_TAC
11305 THEN POP_ASSUM MP_TAC
11306 THEN DISCH_THEN(LABEL_TAC"EM")
11307 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11308 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11309 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11310 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11311 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
11312 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11313 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11314 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11315 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
11316 THEN ASM_REWRITE_TAC[]
11317 THEN STRIP_TAC
11318 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11319 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11320 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11321 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11322 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11323 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11324 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11325 THEN EXISTS_TAC`x:real^3`
11326 THEN EXISTS_TAC`V:real^3->bool`
11327 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11328 THEN EXISTS_TAC`u:real^3`
11329 THEN ASM_REWRITE_TAC[]
11330 THEN MP_TAC(SET_RULE`{v, u:real^3} IN E /\ { u:real^3,w} IN E /\ E UNION {{v,w}}= E1
11331 ==>  {u,w} IN E1/\ {v,w} IN E1/\ {v,u} IN E1 `)
11332 THEN RESA_TAC
11333 THEN POP_ASSUM MP_TAC
11334 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11335 THEN STRIP_TAC
11336 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11337 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`u:real^3`]
11338 THEN REMOVE_ASSUM_TAC
11339 THEN REMOVE_ASSUM_TAC
11340 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11341 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`u:real^3`]
11342 THEN REMOVE_ASSUM_TAC
11343 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11344 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11345 `v:real^3`; `w:real^3` ]
11346 THEN POP_ASSUM MP_TAC
11347 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11348 THEN RESA_TAC
11349 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
11350 THEN POP_ASSUM MP_TAC
11351 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11352 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11353 `(u:real^3)`]
11354 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11355 `(v:real^3)`]
11356 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
11357 THEN RESA_TAC
11358 THEN RESA_TAC);;
11359
11360
11361
11362
11363
11364 let DS1_DS2_EQ_DS_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ed1 ed2.
11365 FAN(x,V,E)
11366  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11367 /\ fan80(x,V,E)
11368 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11369 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
11370 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11371 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11372 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11373 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
11374 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
11375 /\ (x,w,v,u)=f10
11376 /\ (x,v,u,w)=f20
11377 /\ (x,u,w,v)=f30
11378 /\ E UNION {{v,w}}= E1
11379 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
11380 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
11381 ==> (ds1 UNION ds2) DELETE ed1 DELETE ed2 SUBSET IMAGE (tran x V E1) ds`,
11382 REPEAT STRIP_TAC
11383 THEN POP_ASSUM MP_TAC
11384 THEN DISCH_THEN(LABEL_TAC"EM")
11385 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11386 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11387 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11388 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11389 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
11390 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11391 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11392 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11393 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11394
11395 THEN  MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11396 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11397 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
11398 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
11399 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
11400 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
11401 THEN ASM_REWRITE_TAC[]
11402 THEN STRIP_TAC
11403 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
11404 THEN RESA_TAC
11405 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11406 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11407 THEN REWRITE_TAC[face;IN_ELIM_THM]
11408 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN ds1:real^3#real^3#real^3#real^3->bool`ASSUME_TAC
11409 THENL(*1*)[
11410
11411 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
11412 THEN EXISTS_TAC`0`
11413 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*1*)
11414
11415 MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
11416 THEN MP_TAC(ARITH_RULE`3<= CARD (ds1:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds1=0)`)
11417 THEN RESA_TAC
11418 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`]
11419 THEN MRESA_TAC orbit_cyclic[`(res (f1_fan x V E1) (d1_fan (x:real^3,V,E1)))`;`(CARD (ds1:real^3#real^3#real^3#real^3->bool)):num`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`]
11420 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
11421 THEN MP_TAC(ARITH_RULE`3<= CARD (ds2:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds2=0)`)
11422 THEN RESA_TAC
11423 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`;`(x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3`]
11424 THEN MRESA_TAC orbit_cyclic[`(res (f1_fan x V E1) (d1_fan (x:real^3,V,E1)))`;`(CARD (ds2:real^3#real^3#real^3#real^3->bool)):num`;`(x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3`]
11425 THEN MP_TAC(SET_RULE`x,v,w,sigma_fan x V E1 v w IN ds1 /\ ds1 SUBSET d1_fan (x:real^3,V,E1)==> x,v,w,sigma_fan x V E1 v w IN d1_fan (x,V,E1)`)
11426 THEN ASM_REWRITE_TAC[]
11427 THEN STRIP_TAC
11428 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
11429 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
11430 THEN RESA_TAC
11431 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x':real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`]
11432 THEN POP_ASSUM MP_TAC
11433 THEN REWRITE_TAC[face]
11434 THEN ASM_REWRITE_TAC[]
11435 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
11436 THEN RESA_TAC
11437 THEN REWRITE_TAC[orbit_map;IMAGE;IN_ELIM_THM;UNION;DELETE;SUBSET]
11438 THEN GEN_TAC
11439 THEN REPEAT STRIP_TAC
11440 THENL(*1*)[
11441
11442 EXISTS_TAC`(res (f1_fan x V E) (d1_fan (x,V,E)) POWER k)
11443       f2:real^3#real^3#real^3#real^3`
11444 THEN STRIP_TAC
11445 THENL(*2*)[
11446
11447 EXISTS_TAC`k:num`
11448 THEN ASM_REWRITE_TAC[ARITH_RULE`k:num>=0`];(*2*)
11449
11450 MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
11451 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3` )
11452 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11453 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3` )
11454 THEN DISJ_CASES_TAC(ARITH_RULE`k=0 \/ k>0`)
11455 THENL(*3*)[
11456
11457 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF])
11458 THEN SET_TAC[];(*3*)
11459
11460  SUBGOAL_THEN`?m. k= SUC m`ASSUME_TAC
11461 THENL(*4*)[
11462 EXISTS_TAC`k-1:num`
11463 THEN POP_ASSUM MP_TAC
11464 THEN ARITH_TAC;(*4*)
11465
11466 POP_ASSUM MP_TAC
11467 THEN RESA_TAC
11468 THEN REWRITE_TAC[POWER;o_DEF;]
11469 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
11470 THENL(*5*)[
11471 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11472 THEN EXISTS_TAC`x:real^3`
11473 THEN EXISTS_TAC`V:real^3->bool`
11474 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11475 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11476 THEN ASM_REWRITE_TAC[]
11477 THEN ASM_TAC
11478 THEN REWRITE_TAC[pr2;pr3]
11479 THEN REPEAT STRIP_TAC
11480 THEN ASM_REWRITE_TAC[]
11481 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11482 THEN EXISTS_TAC`x:real^3`
11483 THEN EXISTS_TAC`u:real^3`
11484 THEN EXISTS_TAC`w:real^3`
11485 THEN EXISTS_TAC`v:real^3`
11486 THEN ASM_REWRITE_TAC[];(*5*)
11487
11488 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
11489 THEN REWRITE_TAC[f1_fan]
11490 THEN ASM_REWRITE_TAC[]
11491 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11492 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11493 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,v) =
11494  tran x (V:real^3->bool) E1
11495  (x,w,inverse1_sigma_fan x V E w u,u:real^3)`
11496 ASSUME_TAC
11497 THENL(*6*)[
11498 REWRITE_TAC[tran]
11499 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
11500 THEN REMOVE_ASSUM_TAC
11501 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11502 THEN POP_ASSUM MP_TAC
11503 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11504 THEN RESA_TAC;(*6*)
11505
11506 POP_ASSUM(fun th-> REWRITE_TAC[th])
11507 THEN ONCE_REWRITE_TAC[SET_RULE`x=y <=> y=x`]
11508 THEN ABBREV_TAC`y=(x,w,inverse1_sigma_fan x V E w u,u:real^3)`
11509 THEN SUBGOAL_THEN`y IN d1_fan (x,V:real^3->bool,E)` ASSUME_TAC
11510 THENL(*7*)[
11511
11512 POP_ASSUM(fun th-> REWRITE_TAC[SYM th; d1_fan;IN_ELIM_THM])
11513 THEN EXISTS_TAC`x:real^3`
11514 THEN EXISTS_TAC`w:real^3`
11515 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
11516 THEN EXISTS_TAC`u:real^3`
11517 THEN ASM_REWRITE_TAC[]
11518 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11519 THEN REMOVE_ASSUM_TAC
11520 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
11521 THEN POP_ASSUM MP_TAC
11522 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11523 THEN RESA_TAC
11524 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11525 THEN REMOVE_ASSUM_TAC
11526 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
11527 THEN POP_ASSUM MP_TAC
11528 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11529 THEN RESA_TAC;(*7*)
11530
11531
11532 MRESAL_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
11533 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11534 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
11535 ;`ds1:real^3#real^3#real^3#real^3->bool`
11536 ;`ds2:real^3#real^3#real^3#real^3->bool`
11537 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11538 ;`(y:real^3#real^3#real^3#real^3)`;`m:num`][f1_fan;]
11539 THEN POP_ASSUM MATCH_MP_TAC
11540 THEN REWRITE_TAC[GSYM f1_fan]
11541 THEN ABBREV_TAC`y1=(x,sigma_fan x V E v u,v:real^3,sigma_fan x V E (sigma_fan x V E v u) v)`
11542 THEN SUBGOAL_THEN`!m'. m' < m ==> (!k. k <= m'==> ~((f1_fan (x:real^3) V E POWER k) y=y1) /\ ~((f1_fan (x:real^3) V E POWER k) y=f2))` ASSUME_TAC
11543 THENL(*8*)[
11544
11545
11546 INDUCT_TAC
11547 THENL(*9*)[
11548
11549 STRIP_TAC
11550 THEN GEN_TAC
11551 THEN REWRITE_TAC[ARITH_RULE`k<=0 <=> k=0`]
11552 THEN STRIP_TAC
11553 THEN ASM_REWRITE_TAC[]
11554 THEN REWRITE_TAC[POWER;I_DEF]
11555 THEN EXPAND_TAC"y"
11556 THEN EXPAND_TAC"y1"
11557 THEN REWRITE_TAC[EQ_PAIR_4]
11558 THEN REPEAT STRIP_TAC
11559 THENL(*10*)[
11560
11561 REMOVE_ASSUM_TAC
11562 THEN REMOVE_ASSUM_TAC
11563 THEN POP_ASSUM (fun th-> ASSUME_TAC (SYM th))
11564 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11565 `v:real^3`]
11566 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
11567 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (w:real^3)`;
11568 `v:real^3`]
11569 THEN REMOVE_ASSUM_TAC
11570 THEN POP_ASSUM MP_TAC
11571 THEN REWRITE_TAC[]
11572 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11573 THEN ASM_REWRITE_TAC[];(*10*)
11574
11575 FIND_ASSUM MP_TAC`pr2 f2=u:real^3`
11576 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2])
11577 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (w:real^3)`;
11578 `u:real^3`]](*10*);(*9*)
11579
11580
11581
11582 POP_ASSUM MP_TAC
11583 THEN DISCH_THEN(LABEL_TAC"A")
11584 THEN STRIP_TAC
11585 THEN GEN_TAC
11586 THEN MP_TAC(ARITH_RULE`SUC m' < m ==> m' < m:num`)
11587 THEN RESA_TAC
11588 THEN REWRITE_TAC[ARITH_RULE`k <= SUC m'<=> k <= m' \/ k = SUC m'`]
11589 THEN STRIP_TAC
11590 THENL(*10*)[
11591
11592 REMOVE_THEN "A" MP_TAC
11593 THEN ASM_REWRITE_TAC[]
11594 THEN STRIP_TAC
11595 THEN POP_ASSUM(fun th-> MRESA1_TAC th`k':num`);(*10*)
11596
11597 REMOVE_THEN "A" MP_TAC
11598 THEN ASM_REWRITE_TAC[ARITH_RULE`k<= m' <=> k < SUC m'`]
11599 THEN DISCH_THEN(LABEL_TAC"LINH")
11600 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
11601 THENL(*11*)[
11602
11603 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11604 THEN EXISTS_TAC`x:real^3`
11605 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11606 THEN EXISTS_TAC`v:real^3`
11607 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
11608 THEN ASM_REWRITE_TAC[]
11609 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11610 `v:real^3`]
11611 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
11612 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
11613 `v:real^3`]
11614 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11615 THEN ASM_REWRITE_TAC[];(*11*)
11616
11617
11618 SUBGOAL_THEN`!k. k < SUC m'
11619             ==> (~(pr2 ((f1_fan x V E POWER k) y) = sigma_fan x V E v u) /\
11620             pr3 ((f1_fan x V E POWER k) y) = v) \/
11621             (~(pr2 ((f1_fan x V E POWER k) y) = u) /\
11622             pr3 ((f1_fan x V E POWER k) y) = w) \/
11623 ~(pr3 ((f1_fan x V E POWER k) y) IN {v, w})` ASSUME_TAC
11624 THENL(*12*)[
11625
11626
11627 REPEAT STRIP_TAC
11628 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`k'':num`)
11629 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k'':num`;]
11630 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
11631 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER k'') y):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`][PAIR_EQ]
11632 THEN POP_ASSUM MP_TAC
11633 THEN EXPAND_TAC"y1"
11634 THEN REWRITE_TAC[pr2;pr3]
11635 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER k'') y):real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`][PAIR_EQ;pr2;pr3]
11636 THEN POP_ASSUM MP_TAC
11637 THEN SET_TAC[];(*12*)
11638
11639 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
11640 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11641 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
11642 ;`ds1:real^3#real^3#real^3#real^3->bool`
11643 ;`ds2:real^3#real^3#real^3#real^3->bool`
11644 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11645 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m':num`]
11646 THEN SUBGOAL_THEN`~(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) ((f1_fan x V E POWER SUC m') y) = tran x V E1 (y1:real^3#real^3#real^3#real^3)) /\
11647  ~(tran x V E1((f1_fan x V E POWER SUC m') y) = tran x V E1 (f2:real^3#real^3#real^3#real^3))`ASSUME_TAC
11648 THENL(*13*)[
11649
11650 ASM_REWRITE_TAC[]
11651 THEN SUBGOAL_THEN`tran x (V:real^3->bool) (E1:(real^3->bool)->bool) (y:real^3#real^3#real^3#real^3)= f1_fan x V E1(f1_fan x V E1  (tran x (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)))  `
11652 ASSUME_TAC
11653 THENL(*14*)[
11654
11655 EXPAND_TAC"y"
11656 THEN EXPAND_TAC"y1"
11657 THEN REWRITE_TAC[tran;f1_fan]
11658 THEN MRESA_TAC inverse1_sigma_fan_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11659 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11660 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
11661 THEN REMOVE_ASSUM_TAC
11662 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11663 THEN POP_ASSUM MP_TAC
11664 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11665 THEN RESA_TAC
11666 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
11667 `v:real^3`;`u:real^3`; `w:real^3` ;`inverse1_sigma_fan x V E w u:real^3`];(*14*)
11668
11669         
11670
11671 ASM_REWRITE_TAC[]
11672 THEN REPEAT STRIP_TAC
11673 THENL(*15*)[
11674 POP_ASSUM MP_TAC
11675 THEN REWRITE_TAC[POWER;o_DEF]
11676 THEN STRIP_TAC
11677 THEN MRESAL_TAC card_orbit_le[`f1_fan (x:real^3) V (E1:(real^3->bool)->bool)`;`SUC(SUC(SUC m'))`;`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3))`][ARITH_RULE`~(SUC (SUC (SUC m')) = 0)`;POWER;o_DEF]
11678 THEN MP_TAC(ARITH_RULE`SUC m':num < m /\ SUC m=k /\ k< CARD (ds1:real^3#real^3#real^3#real^3->bool)
11679 ==> SUC(SUC (SUC m'))< CARD ds1`)
11680 THEN ASM_REWRITE_TAC[]
11681 THEN REWRITE_TAC[face]
11682 THEN ASM_REWRITE_TAC[]
11683 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`k= SUC m:num`
11684 THEN RESA_TAC
11685 THEN POP_ASSUM MP_TAC
11686 THEN POP_ASSUM MP_TAC
11687 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w)= (f1_fan x V E1  (tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)))  `
11688 ASSUME_TAC
11689 THENL(*16*)[
11690 EXPAND_TAC"y1"
11691 THEN REWRITE_TAC[tran;f1_fan]
11692 THEN MRESA_TAC inverse1_sigma_fan_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11693 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11694 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11695 `v:real^3`;`u:real^3`; `w:real^3` ];(*16*)
11696
11697 SUBGOAL_THEN`tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3) IN d1_fan (x:real^3,V,E1)`
11698 ASSUME_TAC
11699 THENL(*17*)[
11700
11701 REWRITE_TAC[d1_fan;IN_ELIM_THM;tran]
11702 THEN EXISTS_TAC`x:real^3`
11703 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11704 THEN EXISTS_TAC`v:real^3`
11705 THEN EXISTS_TAC`sigma_fan x V E1 (sigma_fan x V E v u) v:real^3`
11706 THEN ASM_REWRITE_TAC[]
11707 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11708 `v:real^3`]
11709 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
11710 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
11711 `v:real^3`]
11712 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11713 THEN EXPAND_TAC"y1"
11714 THEN ASM_REWRITE_TAC[]
11715 THEN MP_TAC(SET_RULE`{v:real^3, sigma_fan x V E v u} IN E /\ E UNION {{v, w}} = E1 ==> {v, sigma_fan x V E v u} IN E1`)
11716 THEN ASM_REWRITE_TAC[];(*17*)
11717
11718
11719 MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11720 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11721 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`;`tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3):real^3#real^3#real^3#real^3`;]
11722
11723 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`;`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3`;`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`;]
11724 THEN POP_ASSUM MP_TAC
11725 THEN REWRITE_TAC[face]
11726 THEN POP_ASSUM MP_TAC
11727 THEN POP_ASSUM MP_TAC
11728 THEN POP_ASSUM MP_TAC
11729 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC(SYM th))
11730 THEN STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC
11731 THEN ASM_REWRITE_TAC[orbit_map]
11732 THEN STRIP_TAC
11733 THEN SUBGOAL_THEN`{(f1_fan x V E1 POWER n) (tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)) | n >= 0}=ds1`
11734 ASSUME_TAC
11735 THENL(*18*)[
11736
11737 ASM_REWRITE_TAC[]
11738 THEN REWRITE_TAC[face;orbit_map]
11739 THEN POP_ASSUM MP_TAC
11740 THEN ASM_REWRITE_TAC[]
11741 THEN STRIP_TAC
11742 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
11743 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
11744 THEN GEN_TAC
11745 THEN EQ_TAC
11746 THENL(*19*)[
11747
11748 REPEAT STRIP_TAC
11749 THEN EXISTS_TAC`(n:num)`
11750 THEN ASM_REWRITE_TAC[]
11751 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11752 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`);(*19*)
11753 REPEAT STRIP_TAC
11754 THEN EXISTS_TAC`(n:num)`
11755 THEN ASM_REWRITE_TAC[]
11756 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11757 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y1:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`)](*19*);(*18*)
11758
11759
11760
11761 POP_ASSUM (fun th-> REWRITE_TAC[th])
11762 THEN ASM_REWRITE_TAC[]
11763 THEN REWRITE_TAC[face]
11764 THEN ASM_REWRITE_TAC[]
11765 THEN REWRITE_TAC[face;orbit_map]
11766 THEN ASM_REWRITE_TAC[]
11767 THEN ARITH_TAC](*18*)](*17*)](*16*);(*15*)
11768
11769 POP_ASSUM MP_TAC
11770 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
11771 THEN STRIP_TAC
11772 THEN SUBGOAL_THEN`tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y:real^3#real^3#real^3#real^3) IN d1_fan (x:real^3,V,E1)`
11773 ASSUME_TAC
11774 THENL(*16*)[
11775 EXPAND_TAC "y"
11776 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM;tran]
11777 THEN EXISTS_TAC`x:real^3`
11778 THEN EXISTS_TAC`w:real^3`
11779 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
11780 THEN EXISTS_TAC`sigma_fan x V E1 w (inverse1_sigma_fan x V E w u):real^3`
11781 THEN ASM_REWRITE_TAC[]
11782 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11783 THEN REMOVE_ASSUM_TAC
11784 THEN REMOVE_ASSUM_TAC
11785 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
11786 THEN POP_ASSUM MP_TAC
11787 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11788 THEN RESA_TAC
11789 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, w:real^3} IN E /\ E UNION {{v,w}}= E1
11790 ==> {inverse1_sigma_fan x V E w u, w} IN E1`)
11791 THEN RESA_TAC;(*16*)
11792
11793 MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11794 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
11795 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11796 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11797
11798 THEN MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC m'`; `x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`;`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (f2:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`;` (tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (y:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3`;]
11799 THEN POP_ASSUM MP_TAC
11800 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
11801 THENL(*17*)[
11802
11803 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11804 THEN EXISTS_TAC`x:real^3`
11805 THEN EXISTS_TAC`V:real^3->bool`
11806 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11807 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11808 THEN ASM_REWRITE_TAC[]
11809 THEN ASM_TAC
11810 THEN REWRITE_TAC[pr2;pr3]
11811 THEN REPEAT STRIP_TAC
11812 THEN ASM_REWRITE_TAC[]
11813 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11814 THEN EXISTS_TAC`x:real^3`
11815 THEN EXISTS_TAC`u:real^3`
11816 THEN EXISTS_TAC`w:real^3`
11817 THEN EXISTS_TAC`v:real^3`
11818 THEN ASM_REWRITE_TAC[];(*17*)
11819 REWRITE_TAC[tran]
11820 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
11821 THEN ASM_REWRITE_TAC[]
11822 THEN EXPAND_TAC"y"
11823 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11824 `v:real^3`; `w:real^3` ]
11825 THEN POP_ASSUM MP_TAC
11826 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11827 THEN RESA_TAC
11828 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
11829 THEN POP_ASSUM MP_TAC
11830 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11831 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11832 `(u:real^3)`]
11833 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11834 `(v:real^3)`]
11835 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
11836 THEN RESA_TAC
11837 THEN RESA_TAC
11838 THEN REWRITE_TAC[SET_RULE`f30 IN {f10, f20, f30}`]
11839 THEN REWRITE_TAC[SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}<=> y =f10\/ y =f20\/ y =f30`]
11840 THEN RESA_TAC
11841 THENL(*18*)[
11842
11843 POP_ASSUM MP_TAC
11844 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,w,v,u = f10:real^3#real^3#real^3#real^3`
11845 THEN STRIP_TAC
11846 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11847 THEN REMOVE_ASSUM_TAC
11848 THEN REMOVE_ASSUM_TAC
11849 THEN POP_ASSUM(fun th -> MP_TAC(ISPEC `u:real^3` th))
11850 THEN REMOVE_ASSUM_TAC
11851 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
11852 THEN ASM_REWRITE_TAC[]
11853 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11854 THEN ASM_REWRITE_TAC[];(*18*)
11855
11856 POP_ASSUM MP_TAC
11857 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,v,u,w = f20:real^3#real^3#real^3#real^3`
11858 THEN STRIP_TAC
11859 THEN REMOVE_ASSUM_TAC
11860 THEN REMOVE_ASSUM_TAC
11861 THEN POP_ASSUM MP_TAC
11862 THEN ASM_REWRITE_TAC[]
11863 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
11864 `(v:real^3)`];(*18*)
11865
11866 POP_ASSUM MP_TAC
11867 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;EQ_PAIR_4])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
11868 THEN STRIP_TAC
11869 THEN REMOVE_ASSUM_TAC
11870 THEN REMOVE_ASSUM_TAC
11871 THEN POP_ASSUM MP_TAC
11872 THEN ASM_REWRITE_TAC[]](*18*)](*17*)](*16*)](*15*)](*14*);(*13*)
11873
11874
11875 POP_ASSUM MP_TAC
11876 THEN SET_TAC[]](*13*)](*12*)](*11*)](*10*)](*9*);(*8*)
11877
11878
11879 SUBGOAL_THEN`!k.  k < m==> ~((f1_fan (x:real^3) V E POWER k) y=y1) /\ ~((f1_fan (x:real^3) V E POWER k) y=f2)` ASSUME_TAC
11880 THENL(*9*)[
11881
11882 POP_ASSUM MP_TAC
11883 THEN DISCH_THEN(LABEL_TAC"LINH1")
11884 THEN GEN_TAC 
11885 THEN DISJ_CASES_TAC(ARITH_RULE`m=0 \/ m>0`)
11886 THENL(*10*)[
11887 ASM_REWRITE_TAC[]
11888 THEN ARITH_TAC;(*10*)
11889 MP_TAC(ARITH_RULE`m>0==> m-1< m`)
11890 THEN RESA_TAC
11891 THEN STRIP_TAC
11892 THEN MP_TAC(ARITH_RULE`k'<m:num ==> k'<= m-1`)
11893 THEN RESA_TAC
11894 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m-1:num`)
11895 THEN POP_ASSUM (fun th-> MRESA1_TAC th`k':num`)](*10*);(*9*)
11896
11897 POP_ASSUM MP_TAC
11898 THEN DISCH_THEN(LABEL_TAC"LINH1")
11899 THEN REPEAT STRIP_TAC
11900 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m':num`)
11901 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;]
11902 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
11903 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`][PAIR_EQ]
11904 THEN POP_ASSUM MP_TAC
11905 THEN EXPAND_TAC"y1"
11906 THEN REWRITE_TAC[pr2;pr3]
11907
11908 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`][PAIR_EQ;pr2;pr3]
11909 THEN POP_ASSUM MP_TAC
11910 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
11911 THENL(*10*)[
11912
11913 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11914 THEN EXISTS_TAC`x:real^3`
11915 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11916 THEN EXISTS_TAC`v:real^3`
11917 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
11918 THEN ASM_REWRITE_TAC[]
11919 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11920 `v:real^3`]
11921 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
11922 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
11923 `v:real^3`]
11924 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11925 THEN ASM_REWRITE_TAC[];(*10*)
11926
11927 ASM_REWRITE_TAC[]
11928 THEN SET_TAC[]](*10*)](*9*)](*8*)]]]]]];(*1*)
11929
11930
11931
11932 ASM_REWRITE_TAC[]
11933 THEN MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11934 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11935 THEN POP_ASSUM MP_TAC
11936 THEN REWRITE_TAC[face;]
11937 THEN ASM_REWRITE_TAC[]
11938 THEN STRIP_TAC
11939 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
11940 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
11941 THENL(*2*)[
11942
11943 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11944 THEN EXISTS_TAC`x:real^3`
11945 THEN EXISTS_TAC`V:real^3->bool`
11946 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11947 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11948 THEN ASM_REWRITE_TAC[]
11949 THEN ASM_TAC
11950 THEN REWRITE_TAC[pr2;pr3]
11951 THEN REPEAT STRIP_TAC
11952 THEN ASM_REWRITE_TAC[]
11953 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11954 THEN EXISTS_TAC`x:real^3`
11955 THEN EXISTS_TAC`u:real^3`
11956 THEN EXISTS_TAC`w:real^3`
11957 THEN EXISTS_TAC`v:real^3`
11958 THEN ASM_REWRITE_TAC[];(*2*)
11959
11960 SUBGOAL_THEN`x,w,v,sigma_fan x V E1 w v IN d1_fan (x,V:real^3->bool,E1):real^3#real^3#real^3#real^3->bool`ASSUME_TAC
11961 THENL(*3*)[
11962
11963 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11964 THEN EXISTS_TAC`x:real^3`
11965 THEN EXISTS_TAC`w:real^3`
11966 THEN EXISTS_TAC`v:real^3`
11967 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
11968 THEN ASM_REWRITE_TAC[]
11969 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11970 THEN ASM_TAC
11971 THEN SET_TAC[];(*3*)
11972
11973 MP_TAC(ARITH_RULE`k<3==> k=0 \/ k= SUC 0\/ k = SUC(SUC 0)`)
11974 THEN RESA_TAC
11975 THENL(*4*)[
11976 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF])
11977 THEN SET_TAC[];(*4*)
11978
11979
11980 ASM_REWRITE_TAC[POWER;I_DEF;o_DEF]
11981 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
11982 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF;f1_fan])
11983 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11984 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
11985 THEN EXISTS_TAC`(x,v,u,sigma_fan x V E v u:real^3)`
11986 THEN ASM_REWRITE_TAC[tran]
11987 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`
11988 ;`v:real^3`;`u:real^3`; `w:real^3`]
11989 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)`ASSUME_TAC
11990 THENL(*5*)[
11991 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11992 THEN EXISTS_TAC`x:real^3`
11993 THEN EXISTS_TAC`V:real^3->bool`
11994 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11995 THEN ASM_REWRITE_TAC[PAIR_EQ]
11996 THEN ASM_REWRITE_TAC[pr2;pr3]
11997 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11998 THEN EXISTS_TAC`x:real^3`
11999 THEN EXISTS_TAC`v:real^3`
12000 THEN EXISTS_TAC`u:real^3`
12001 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12002 THEN ASM_REWRITE_TAC[];(*5*)
12003
12004 FIND_ASSUM(MP_TAC)`f1 IN ds:real^3#real^3#real^3#real^3->bool`
12005 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
12006 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM]
12007 THEN STRIP_TAC
12008 THEN EXISTS_TAC`n:num`
12009 THEN ASM_REWRITE_TAC[f1_fan]](*5*);(*4*)
12010
12011
12012  MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12013 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF;f1_fan])
12014 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12015 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12016 THEN MRESA_TAC inverse1_sigma_fan_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12017 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12018 THEN EXISTS_TAC`(x:real^3,u:real^3,w:real^3,v:real^3)`
12019 THEN REWRITE_TAC[tran]
12020 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12021 `v:real^3`; `w:real^3` ]
12022 THEN POP_ASSUM MP_TAC
12023 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12024 THEN RESA_TAC
12025 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
12026 THEN POP_ASSUM MP_TAC
12027 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12028 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12029 `(u:real^3)`]
12030 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12031 `(v:real^3)`]
12032 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
12033 THEN RESA_TAC
12034 THEN RESA_TAC
12035 THEN EXISTS_TAC`0:num`
12036 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]
12037 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12038 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12039 ]]]]]);;
12040
12041
12042
12043
12044
12045 let DS1_DS2_EQ_DS_FANADD2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ed1 ed2.
12046 FAN(x,V,E)
12047  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12048 /\ fan80(x,V,E)
12049 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12050 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
12051 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12052 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12053 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12054 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
12055 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
12056 /\ (x,w,v,u)=f10
12057 /\ (x,v,u,w)=f20
12058 /\ (x,u,w,v)=f30
12059 /\ E UNION {{v,w}}= E1
12060 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
12061 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
12062 ==> IMAGE (tran x V E1) ds SUBSET (ds1 UNION ds2) DELETE ed1 DELETE ed2 `,
12063
12064
12065
12066 REPEAT STRIP_TAC
12067 THEN POP_ASSUM MP_TAC
12068 THEN DISCH_THEN(LABEL_TAC"EM")
12069 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12070 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12071 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12072 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12073 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
12074 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12075 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12076 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12077 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12078
12079 THEN  MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12080 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12081 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
12082 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
12083 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
12084 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
12085 THEN ASM_REWRITE_TAC[]
12086 THEN STRIP_TAC
12087 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
12088 THEN RESA_TAC
12089 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12090 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12091 THEN REWRITE_TAC[face;IN_ELIM_THM]
12092 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN ds1:real^3#real^3#real^3#real^3->bool`ASSUME_TAC
12093 THENL(*1*)[
12094 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
12095 THEN EXISTS_TAC`0`
12096 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*1*)
12097
12098 SUBGOAL_THEN`x,w,v,sigma_fan x V E1 w v IN d1_fan (x,V:real^3->bool,E1):real^3#real^3#real^3#real^3->bool`ASSUME_TAC
12099 THENL(*2*)[
12100
12101 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12102 THEN EXISTS_TAC`x:real^3`
12103 THEN EXISTS_TAC`w:real^3`
12104 THEN EXISTS_TAC`v:real^3`
12105 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
12106 THEN ASM_REWRITE_TAC[]
12107 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12108 THEN ASM_TAC
12109 THEN SET_TAC[];(*2*)
12110
12111 MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
12112 THEN MP_TAC(ARITH_RULE`3<= CARD (ds:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds=0)`)
12113 THEN RESA_TAC
12114 THEN MP_TAC(SET_RULE`x,v,w,sigma_fan x V E1 v w IN ds1 /\ ds1 SUBSET d1_fan (x:real^3,V,E1)==> x,v,w,sigma_fan x V E1 v w IN d1_fan (x,V,E1)`)
12115 THEN ASM_REWRITE_TAC[]
12116 THEN STRIP_TAC
12117 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
12118 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
12119 THEN RESA_TAC
12120 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x':real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`]
12121 THEN POP_ASSUM MP_TAC
12122 THEN REWRITE_TAC[face]
12123 THEN ASM_REWRITE_TAC[]
12124 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
12125 THEN RESA_TAC
12126 THEN MRESAL_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`f2:real^3#real^3#real^3#real^3`][face]
12127 THEN MRESA_TAC orbit_cyclic[`(res (f1_fan x V E) (d1_fan (x:real^3,V,E)))`;`(CARD (ds:real^3#real^3#real^3#real^3->bool)):num`;`f2:real^3#real^3#real^3#real^3`]
12128 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[th])
12129 THEN ASM_REWRITE_TAC[orbit_map;IMAGE;IN_ELIM_THM;UNION;DELETE;SUBSET]
12130 THEN GEN_TAC
12131 THEN REPEAT STRIP_TAC
12132 THENL(*32GOAL*)[
12133
12134 DISJ_CASES_TAC(ARITH_RULE`k=0\/ k>0`)
12135 THENL(*4*)[
12136 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF] THEN REPEAT STRIP_TAC)
12137 THEN POP_ASSUM MP_TAC
12138 THEN RESA_TAC
12139 THEN SUBGOAL_THEN(`(?n. n >= 0 /\
12140       tran x V E1 (f2:real^3#real^3#real^3#real^3) =
12141       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12142       (x,w,v,sigma_fan x V E1 w v:real^3))`)
12143 ASSUME_TAC
12144 THENL(*5*)[
12145
12146 EXISTS_TAC`SUC(SUC 0:num)`
12147 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(SUC 0)>=0`]
12148 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`SUC(SUC 0):num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12149 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF;f1_fan])
12150 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12151 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12152 THEN MRESA_TAC inverse1_sigma_fan_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12153 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12154 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
12155 THENL(*6*)[
12156
12157 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12158 THEN EXISTS_TAC`x:real^3`
12159 THEN EXISTS_TAC`V:real^3->bool`
12160 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12161 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12162 THEN ASM_REWRITE_TAC[]
12163 THEN ASM_TAC
12164 THEN REWRITE_TAC[pr2;pr3]
12165 THEN REPEAT STRIP_TAC
12166 THEN ASM_REWRITE_TAC[]
12167 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12168 THEN EXISTS_TAC`x:real^3`
12169 THEN EXISTS_TAC`u:real^3`
12170 THEN EXISTS_TAC`w:real^3`
12171 THEN EXISTS_TAC`v:real^3`
12172 THEN ASM_REWRITE_TAC[];(*6*)
12173
12174 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12175 THEN REWRITE_TAC[tran]
12176 THEN ASM_REWRITE_TAC[]
12177 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12178 `v:real^3`; `w:real^3` ]
12179 THEN POP_ASSUM MP_TAC
12180 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12181 THEN RESA_TAC
12182 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
12183 THEN POP_ASSUM MP_TAC
12184 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12185 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12186 `(u:real^3)`]
12187 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12188 `(v:real^3)`]
12189 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
12190 THEN RESA_TAC
12191 THEN RESA_TAC](*6*);(*5*)
12192
12193 ASM_REWRITE_TAC[]](*5*);(*4*)
12194
12195
12196 MP_TAC(ARITH_RULE`k< CARD ds /\  3<= CARD (ds:real^3#real^3#real^3#real^3->bool) ==> SUC k = CARD ds \/ SUC k < CARD ds`)
12197 THEN RESA_TAC
12198 THEN POP_ASSUM MP_TAC
12199 THEN ONCE_REWRITE_TAC[orbit_map]
12200 THEN RESA_TAC
12201 THENL(*5*)[
12202
12203
12204  MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`CARD (ds:real^3#real^3#real^3#real^3->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12205 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12206 THEN POP_ASSUM MP_TAC
12207 THEN REMOVE_ASSUM_TAC
12208 THEN REMOVE_ASSUM_TAC
12209 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12210 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12211 THEN POP_ASSUM MP_TAC
12212 THEN REMOVE_ASSUM_TAC
12213 THEN REMOVE_ASSUM_TAC
12214 THEN REWRITE_TAC[orbit_map]
12215 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;COM_POWER;o_DEF])
12216 THEN REMOVE_ASSUM_TAC
12217 THEN REMOVE_ASSUM_TAC
12218 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12219 THEN RESA_TAC
12220 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
12221 THEN STRIP_TAC
12222 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;]
12223 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12224 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12225 THEN POP_ASSUM(fun th-> MRESA_TAC th[` (f1:real^3#real^3#real^3#real^3)`;` (x''':real^3#real^3#real^3#real^3)`])
12226 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12227 THEN SUBGOAL_THEN`(?n. n >= 0 /\
12228       tran x V E1 (f1:real^3#real^3#real^3#real^3) =
12229       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12230       (x,w,v:real^3,sigma_fan x V E1 w v))`
12231 ASSUME_TAC
12232 THENL(*6*)[
12233 EXISTS_TAC`SUC(0:num)`
12234 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(0)>=0`]
12235 THEN ASM_REWRITE_TAC[POWER;I_DEF;o_DEF]
12236 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12237 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF;f1_fan])
12238 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12239 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12240 THEN ASM_REWRITE_TAC[tran]
12241 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (E1:(real^3->bool)->bool)`
12242 ;`v:real^3`;`u:real^3`; `w:real^3`]
12243 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)`ASSUME_TAC
12244 THENL(*7*)[
12245 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12246 THEN EXISTS_TAC`x:real^3`
12247 THEN EXISTS_TAC`V:real^3->bool`
12248 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12249 THEN ASM_REWRITE_TAC[PAIR_EQ]
12250 THEN ASM_REWRITE_TAC[pr2;pr3]
12251 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12252 THEN EXISTS_TAC`x:real^3`
12253 THEN EXISTS_TAC`v:real^3`
12254 THEN EXISTS_TAC`u:real^3`
12255 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12256 THEN ASM_REWRITE_TAC[];(*7*)
12257
12258 FIND_ASSUM(MP_TAC)`f1 IN ds:real^3#real^3#real^3#real^3->bool`
12259 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[th])](*7*);(*6*)
12260
12261
12262 ASM_REWRITE_TAC[]](*6*);(*5*)
12263
12264
12265 MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12266 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3` )
12267 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12268 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3` )
12269 THEN POP_ASSUM MP_TAC
12270 THEN SUBGOAL_THEN`?m. k= SUC m`ASSUME_TAC
12271 THENL(*6*)[
12272
12273 EXISTS_TAC`k-1:num`
12274 THEN FIND_ASSUM MP_TAC`k:num>0`
12275 THEN ARITH_TAC;(*6*)
12276
12277 POP_ASSUM MP_TAC
12278 THEN RESA_TAC
12279 THEN RESA_TAC
12280 THEN ASM_REWRITE_TAC[POWER;o_DEF;]
12281 THEN SUBGOAL_THEN`(?n. n >= 0 /\
12282       tran x V E1 ((f1_fan x V E POWER m) f3) =
12283       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12284       (x,v,w,sigma_fan x V E1 v w:real^3))`ASSUME_TAC
12285 THENL(*7*)[
12286
12287 EXISTS_TAC`SUC m:num`
12288 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC m>=0`;POWER;o_DEF;f1_fan]
12289 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12290 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12291 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,v) =
12292  tran x (V:real^3->bool) E1
12293  (x,w,inverse1_sigma_fan x V E w u,u:real^3)`
12294 ASSUME_TAC
12295 THENL(*8*)[
12296
12297 REWRITE_TAC[tran]
12298 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
12299 THEN REMOVE_ASSUM_TAC
12300 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
12301 THEN POP_ASSUM MP_TAC
12302 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12303 THEN RESA_TAC;(*8*)
12304 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12305 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,u:real^3)= f1_fan x V E f2`
12306 ASSUME_TAC
12307 THENL(*9*)[
12308
12309  SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
12310 THENL(*10*)[
12311
12312 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12313 THEN EXISTS_TAC`x:real^3`
12314 THEN EXISTS_TAC`V:real^3->bool`
12315 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12316 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12317 THEN ASM_REWRITE_TAC[]
12318 THEN ASM_TAC
12319 THEN REWRITE_TAC[pr2;pr3]
12320 THEN REPEAT STRIP_TAC
12321 THEN ASM_REWRITE_TAC[]
12322 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12323 THEN EXISTS_TAC`x:real^3`
12324 THEN EXISTS_TAC`u:real^3`
12325 THEN EXISTS_TAC`w:real^3`
12326 THEN EXISTS_TAC`v:real^3`
12327 THEN ASM_REWRITE_TAC[];(*10*)
12328 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12329 THEN REWRITE_TAC[f1_fan]
12330 THEN ASM_REWRITE_TAC[]](*10*);(*9*)
12331
12332
12333 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
12334 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[SYM th])
12335 THEN ASM_REWRITE_TAC[]
12336 THEN ABBREV_TAC`y=(x,w,inverse1_sigma_fan x V E w u,u:real^3)`
12337 THEN SUBGOAL_THEN`y IN d1_fan (x,V:real^3->bool,E)` ASSUME_TAC
12338 THENL(*10*)[
12339
12340 POP_ASSUM(fun th-> REWRITE_TAC[SYM th; d1_fan;IN_ELIM_THM])
12341 THEN EXISTS_TAC`x:real^3`
12342 THEN EXISTS_TAC`w:real^3`
12343 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
12344 THEN EXISTS_TAC`u:real^3`
12345 THEN ASM_REWRITE_TAC[]
12346 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
12347 THEN REMOVE_ASSUM_TAC
12348 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12349 THEN POP_ASSUM MP_TAC
12350 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12351 THEN RESA_TAC
12352 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12353 THEN REMOVE_ASSUM_TAC
12354 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12355 THEN POP_ASSUM MP_TAC
12356 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12357 THEN RESA_TAC;(*10*)
12358
12359 MRESAL_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
12360 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12361 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
12362 ;`ds1:real^3#real^3#real^3#real^3->bool`
12363 ;`ds2:real^3#real^3#real^3#real^3->bool`
12364 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
12365 ;`(y:real^3#real^3#real^3#real^3)`;`m:num`][f1_fan;]
12366 THEN POP_ASSUM MATCH_MP_TAC
12367 THEN REWRITE_TAC[GSYM f1_fan]
12368 THEN ABBREV_TAC`y1=(x,sigma_fan x V E v u,v:real^3,sigma_fan x V E (sigma_fan x V E v u) v)`
12369 THEN SUBGOAL_THEN`!m'. m' < m ==> ~((f1_fan (x:real^3) V E POWER m') y=y1) /\ ~((f1_fan (x:real^3) V E POWER m') y=f2)` ASSUME_TAC
12370
12371 THENL(*11*)[
12372
12373 STRIP_TAC
12374 THEN SUBGOAL_THEN`y= f1_fan x V E(f1_fan x V E(f1_fan (x:real^3) V E y1))` ASSUME_TAC
12375 THENL(*12*)[
12376
12377 EXPAND_TAC "y"
12378 THEN EXPAND_TAC "y1"
12379 THEN REWRITE_TAC[f1_fan]
12380 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
12381 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12382 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`]
12383 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`);(*12*)
12384
12385 SUBGOAL_THEN`(f1_fan (x:real^3) V E POWER SUC (SUC 0)) y1 = f2`ASSUME_TAC
12386 THENL(*13*)[
12387
12388 EXPAND_TAC "y1"
12389 THEN REWRITE_TAC[f1_fan;POWER;I_DEF;o_DEF]
12390 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
12391 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12392 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`]
12393 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
12394 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12395 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];(*13*)
12396
12397 ASM_REWRITE_TAC[]
12398 THEN REPEAT STRIP_TAC
12399 THENL(*14*)[
12400
12401 MRESAL_TAC card_orbit_le[`f1_fan (x:real^3) V (E:(real^3->bool)->bool)`;`SUC(SUC(SUC m'))`;` (y1:real^3#real^3#real^3#real^3)`][ARITH_RULE`~(SUC (SUC (SUC m')) = 0)`;POWER;o_DEF]
12402 THEN MP_TAC(ARITH_RULE`m':num < m /\ SUC m=k /\ SUC k< CARD (ds:real^3#real^3#real^3#real^3->bool)
12403 ==> SUC(SUC (SUC m'))< CARD ds`)
12404 THEN ASM_REWRITE_TAC[orbit_map]
12405 THEN FIND_ASSUM (fun th -> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)`k= SUC m:num`
12406 THEN POP_ASSUM MP_TAC
12407 THEN RESA_TAC
12408 THEN POP_ASSUM MP_TAC
12409 THEN POP_ASSUM MP_TAC
12410 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
12411 THENL(*15*)[
12412 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12413 THEN EXISTS_TAC`x:real^3`
12414 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12415 THEN EXISTS_TAC`v:real^3`
12416 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
12417 THEN ASM_REWRITE_TAC[]
12418 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
12419 `v:real^3`]
12420 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
12421 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
12422 `v:real^3`]
12423 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12424 THEN ASM_REWRITE_TAC[];(*15*)
12425
12426 MRESA_TAC IMAGE_F1_POWER_IN_FACE_IMP_IN_FACE[`SUC (SUC 0)`;`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f2:real^3#real^3#real^3#real^3`;`(y1:real^3#real^3#real^3#real^3)`;]
12427 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`f2:real^3#real^3#real^3#real^3`;` (y1:real^3#real^3#real^3#real^3)`;]
12428 THEN POP_ASSUM MP_TAC
12429 THEN REWRITE_TAC[face]
12430 THEN ASM_REWRITE_TAC[]
12431 THEN REWRITE_TAC[orbit_map]
12432 THEN RESA_TAC
12433 THEN SUBGOAL_THEN`{(f1_fan x V E POWER n) ((y1:real^3#real^3#real^3#real^3)) | n >= 0}={(res (f1_fan x V E) (d1_fan (x,V,E)) POWER n) y1 | n >= 0}`
12434 ASSUME_TAC
12435 THENL(*16*)[
12436  REWRITE_TAC[EXTENSION;IN_ELIM_THM]
12437 THEN GEN_TAC
12438 THEN EQ_TAC
12439 THENL(*17*)[
12440 REPEAT STRIP_TAC
12441 THEN EXISTS_TAC`(n:num)`
12442 THEN ASM_REWRITE_TAC[]
12443 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12444 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y1:real^3#real^3#real^3#real^3)`);(*17*)
12445
12446 REPEAT STRIP_TAC
12447 THEN EXISTS_TAC`(n:num)`
12448 THEN ASM_REWRITE_TAC[]
12449 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12450 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y1:real^3#real^3#real^3#real^3)`)](*17*);(*16*)
12451
12452 ASM_REWRITE_TAC[]
12453 THEN ARITH_TAC](*16*)](*15*);(*14*)
12454
12455 POP_ASSUM MP_TAC
12456 THEN POP_ASSUM MP_TAC
12457 THEN POP_ASSUM MP_TAC
12458 THEN REWRITE_TAC[POWER;o_DEF;I_DEF]
12459 THEN STRIP_TAC
12460 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
12461 THEN REPEAT STRIP_TAC
12462 THEN MRESAL_TAC card_orbit_le[`f1_fan (x:real^3) V (E:(real^3->bool)->bool)`;`(SUC m')`;` (f2:real^3#real^3#real^3#real^3)`][ARITH_RULE`~( (SUC m')= 0)`;POWER;o_DEF]
12463 THEN POP_ASSUM MP_TAC
12464 THEN REWRITE_TAC[orbit_map]
12465 THEN STRIP_TAC
12466 THEN MP_TAC(ARITH_RULE`m':num < m /\ SUC m=k /\ SUC k< CARD (ds:real^3#real^3#real^3#real^3->bool)
12467 ==> (SUC m')< CARD ds`)
12468 THEN ASM_REWRITE_TAC[orbit_map]
12469 THEN FIND_ASSUM (fun th -> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)`k= SUC m:num`
12470 THEN POP_ASSUM MP_TAC
12471 THEN RESA_TAC
12472 THEN POP_ASSUM MP_TAC
12473 THEN POP_ASSUM MP_TAC
12474 THEN SUBGOAL_THEN`{(f1_fan x V E POWER n) ((f2:real^3#real^3#real^3#real^3)) | n >= 0}={(res (f1_fan x V E) (d1_fan (x,V,E)) POWER n) f2 | n >= 0}`
12475 ASSUME_TAC
12476 THENL(*15*)[
12477
12478  REWRITE_TAC[EXTENSION;IN_ELIM_THM]
12479 THEN GEN_TAC
12480 THEN EQ_TAC
12481 THENL(*16*)[
12482 REPEAT STRIP_TAC
12483 THEN EXISTS_TAC`(n:num)`
12484 THEN ASM_REWRITE_TAC[]
12485 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12486 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`);(*16*)
12487
12488 REPEAT STRIP_TAC
12489 THEN EXISTS_TAC`(n:num)`
12490 THEN ASM_REWRITE_TAC[]
12491 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12492 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)](*16*);(*15*)
12493
12494 ASM_REWRITE_TAC[]
12495 THEN ARITH_TAC](*15*)](*14*)](*13*)](*12*);(*11*)
12496
12497 POP_ASSUM MP_TAC
12498 THEN DISCH_THEN(LABEL_TAC"LINH1")
12499 THEN REPEAT STRIP_TAC
12500 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m':num`)
12501 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;]
12502 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
12503 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`y1:real^3#real^3#real^3#real^3`][PAIR_EQ]
12504 THEN POP_ASSUM MP_TAC
12505 THEN EXPAND_TAC"y1"
12506 THEN REWRITE_TAC[pr2;pr3]
12507 THEN MRESAL_TAC EQ_PAIR_IMP_EQ_4_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`((f1_fan x V E POWER m') y):real^3#real^3#real^3#real^3`;`f2:real^3#real^3#real^3#real^3`][PAIR_EQ;pr2;pr3]
12508 THEN POP_ASSUM MP_TAC
12509 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
12510 THENL(*12*)[
12511 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12512 THEN EXISTS_TAC`x:real^3`
12513 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12514 THEN EXISTS_TAC`v:real^3`
12515 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
12516 THEN ASM_REWRITE_TAC[]
12517 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
12518 `v:real^3`]
12519 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
12520 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (sigma_fan x V E v u:real^3)`;
12521 `v:real^3`]
12522 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12523 THEN ASM_REWRITE_TAC[];(*12*)
12524
12525 ASM_REWRITE_TAC[]
12526 THEN SET_TAC[]](*12*)](*11*)](*10*)](*9*)](*8*);(*7*)
12527
12528 ASM_REWRITE_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
12529
12530 POP_ASSUM MP_TAC
12531 THEN POP_ASSUM MP_TAC
12532 THEN POP_ASSUM MP_TAC
12533 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12534 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12535 THEN STRIP_TAC
12536 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`]
12537 THEN POP_ASSUM(fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3`)
12538 THEN POP_ASSUM MP_TAC
12539 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
12540 THEN RESA_TAC
12541 THEN ASM_REWRITE_TAC[tran]
12542 THEN RESA_TAC
12543 THEN REWRITE_TAC[EQ_PAIR_4]
12544 THEN STRIP_TAC
12545 THEN REMOVE_ASSUM_TAC
12546 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12547 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12548 THEN REMOVE_ASSUM_TAC
12549 THEN REMOVE_ASSUM_TAC
12550 THEN REMOVE_ASSUM_TAC
12551 THEN POP_ASSUM MP_TAC
12552 THEN REWRITE_TAC[]
12553 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12554 THEN ASM_REWRITE_TAC[];(*3*)
12555
12556 POP_ASSUM MP_TAC
12557 THEN POP_ASSUM MP_TAC
12558 THEN POP_ASSUM MP_TAC
12559 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12560 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12561 THEN STRIP_TAC
12562 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`]
12563 THEN POP_ASSUM(fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3`)
12564 THEN POP_ASSUM MP_TAC
12565 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
12566 THEN RESA_TAC
12567 THEN ASM_REWRITE_TAC[tran]
12568 THEN RESA_TAC
12569 THEN REWRITE_TAC[EQ_PAIR_4]
12570 THEN STRIP_TAC
12571 THEN REMOVE_ASSUM_TAC
12572 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12573 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12574 THEN REMOVE_ASSUM_TAC
12575 THEN REMOVE_ASSUM_TAC
12576 THEN REMOVE_ASSUM_TAC
12577 THEN POP_ASSUM MP_TAC
12578 THEN ASM_REWRITE_TAC[]]]]);;
12579
12580
12581
12582
12583 let DS1_DS2_EQ_DS_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 ed1 ed2.
12584 FAN(x,V,E)
12585  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12586 /\ fan80(x,V,E)
12587 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12588 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
12589 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12590 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12591 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12592 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
12593 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
12594 /\ (x,w,v,u)=f10
12595 /\ (x,v,u,w)=f20
12596 /\ (x,u,w,v)=f30
12597 /\ E UNION {{v,w}}= E1
12598 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
12599 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
12600 ==> IMAGE (tran x V E1) ds = (ds1 UNION ds2) DELETE ed1 DELETE ed2 `,
12601 REPEAT STRIP_TAC
12602 THEN MRESA_TAC DS1_DS2_EQ_DS_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12603 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(ed1:real^3#real^3#real^3#real^3)`;`(ed2:real^3#real^3#real^3#real^3)`]
12604 THEN MRESA_TAC DS1_DS2_EQ_DS_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12605 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(ed1:real^3#real^3#real^3#real^3)`;`(ed2:real^3#real^3#real^3#real^3)`]
12606 THEN POP_ASSUM MP_TAC
12607 THEN POP_ASSUM MP_TAC
12608 THEN SET_TAC[]);;
12609
12610 let azim_fanadd_eq_ds=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
12611 FAN(x,V,E)
12612  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12613 /\ fan80(x,V,E)
12614 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12615 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
12616 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12617 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12618 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12619 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
12620 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
12621 /\ (x,w,v,u)=f10
12622 /\ (x,v,u,w)=f20
12623 /\ (x,u,w,v)=f30
12624 /\ E UNION {{v,w}}= E1
12625 /\ y IN ds
12626 /\ ~(y=f1)
12627 /\ ~(y=f3)
12628 ==> azim_fan x V E1 (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y))
12629 = azim_fan x V E (pr2 y) (pr3 y)`,
12630
12631 REPEAT STRIP_TAC
12632 THEN POP_ASSUM MP_TAC
12633 THEN DISCH_THEN(LABEL_TAC"EM")
12634 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12635 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12636 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12637 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12638 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
12639 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12640 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12641 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12642 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12643 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
12644 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E) /\ y IN ds==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds /\ y IN d1_fan (x,V,E)`)
12645 THEN RESA_TAC
12646 THEN POP_ASSUM (fun th-> ASSUME_TAC(th) THEN MP_TAC th 
12647 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM])
12648 THEN STRIP_TAC
12649 THEN ASM_REWRITE_TAC[tran;pr2;pr3;azim_fan]
12650 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
12651 `(v':real^3)`]
12652 THEN REMOVE_ASSUM_TAC
12653 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v':real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E1) > 1`
12654 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v':real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E) > 1`
12655 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
12656 THEN RESA_TAC
12657 THEN RESA_TAC
12658 THEN DISJ_CASES_TAC(SET_RULE`~(v' IN {v, w})\/ (v' = v /\ ~(u=w')) \/ (v' = v /\ (u=w')) \/ (v' = w /\ ~(w'=inverse1_sigma_fan x (V:real^3->bool) E w u )) \/ (v' = w /\ (w'=inverse1_sigma_fan x V E w u ))`)
12659
12660 THENL[
12661
12662 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12663 `v:real^3`; `w:real^3` ]
12664 THEN POP_ASSUM MP_TAC
12665 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12666 THEN ASM_REWRITE_TAC[]
12667 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12668 THEN STRIP_TAC
12669 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`]);
12670
12671 POP_ASSUM MP_TAC
12672 THEN STRIP_TAC
12673 THENL[
12674
12675 POP_ASSUM MP_TAC
12676 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12677 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`w':real^3`];
12678
12679 SUBGOAL_THEN`(x',v',w',w1)=f1:real^3#real^3#real^3#real^3` ASSUME_TAC
12680 THENL[
12681 ASM_REWRITE_TAC[]
12682 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12683 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12684 THEN EXISTS_TAC`x:real^3`
12685 THEN EXISTS_TAC`V:real^3->bool`
12686 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12687 THEN ASM_REWRITE_TAC[]
12688 THEN REWRITE_TAC[pr2;pr3]
12689 THEN ASM_REWRITE_TAC[]
12690 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12691 THEN EXISTS_TAC`x:real^3`
12692 THEN EXISTS_TAC`v:real^3`
12693 THEN EXISTS_TAC`u:real^3`
12694 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12695 THEN ASM_REWRITE_TAC[];
12696
12697 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] )
12698 THEN SET_TAC[]];
12699
12700
12701
12702 POP_ASSUM MP_TAC
12703 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12704 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`w':real^3`];
12705
12706 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12707 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12708 THEN SUBGOAL_THEN`x,
12709  w,
12710  inverse1_sigma_fan x V E w u,
12711  sigma_fan x V E w (inverse1_sigma_fan x V E w u)=f1_fan x V E f2:real^3#real^3#real^3#real^3` ASSUME_TAC
12712 THENL[
12713 SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
12714 THENL[
12715
12716 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12717 THEN EXISTS_TAC`x:real^3`
12718 THEN EXISTS_TAC`V:real^3->bool`
12719 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12720 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12721 THEN ASM_REWRITE_TAC[]
12722 THEN ASM_TAC
12723 THEN REWRITE_TAC[pr2;pr3]
12724 THEN REPEAT STRIP_TAC
12725 THEN ASM_REWRITE_TAC[]
12726 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12727 THEN EXISTS_TAC`x:real^3`
12728 THEN EXISTS_TAC`u:real^3`
12729 THEN EXISTS_TAC`w:real^3`
12730 THEN EXISTS_TAC`v:real^3`
12731 THEN ASM_REWRITE_TAC[];
12732 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12733 THEN REWRITE_TAC[f1_fan]
12734 THEN ASM_REWRITE_TAC[]
12735 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
12736 THEN REMOVE_ASSUM_TAC
12737 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12738 THEN POP_ASSUM MP_TAC
12739 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12740 THEN RESA_TAC];
12741
12742 POP_ASSUM MP_TAC
12743 THEN ASM_REWRITE_TAC[]
12744 THEN POP_ASSUM MP_TAC
12745 THEN ASM_REWRITE_TAC[]
12746 THEN STRIP_TAC
12747 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] )
12748 THEN SET_TAC[]]]]);;
12749
12750
12751
12752
12753
12754
12755
12756
12757 let TXFBALB=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
12758 FAN(x,V,E)
12759  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12760 /\ fan80(x,V,E)
12761 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12762 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
12763 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12764 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12765 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12766 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
12767 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
12768 /\ (x,w,v,u)=f10
12769 /\ (x,v,u,w)=f20
12770 /\ (x,u,w,v)=f30
12771 /\ E UNION {{v,w}}= E1
12772 /\ (!E1. FAN(x,V,E1)  /\ 
12773          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
12774          fan80(x,V,E1)/\ 
12775          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
12776 ==> conforming_solid_angle_fan(x,V,E)`,
12777
12778
12779
12780 REPEAT STRIP_TAC
12781 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12782 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12783 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
12784 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
12785 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
12786 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12787 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12788 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
12789 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
12790 THEN ASM_REWRITE_TAC[]
12791 THEN STRIP_TAC
12792 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12793 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12794 THEN POP_ASSUM MP_TAC
12795 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
12796 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
12797 THEN REPEAT STRIP_TAC
12798 THEN POP_ASSUM MP_TAC
12799 THEN REMOVE_ASSUM_TAC
12800 THEN POP_ASSUM MP_TAC
12801 THEN DISCH_THEN(LABEL_TAC"LINH")
12802 THEN STRIP_TAC
12803 THEN MRESA_TAC eventally_measurable_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12804 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`;]
12805 THEN POP_ASSUM MP_TAC
12806 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
12807 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
12808 THEN REPEAT STRIP_TAC
12809 THENL(*1*)[
12810 POP_ASSUM MP_TAC
12811 THEN POP_ASSUM(fun th-> MRESA1_TAC th`r:real`);(*1*)
12812
12813
12814 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
12815 THENL(*2*)[
12816
12817 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
12818 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12819 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
12820 ;`ds1:real^3#real^3#real^3#real^3->bool`
12821 ;`ds2:real^3#real^3#real^3#real^3->bool`
12822 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
12823 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
12824 THEN POP_ASSUM MP_TAC
12825 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
12826 THEN STRIP_TAC
12827 THEN MRESA_TAC dartset_leads_into_fan_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12828 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(f:real^3#real^3#real^3#real^3->bool)`]
12829 THEN POP_ASSUM MP_TAC
12830 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
12831 THEN STRIP_TAC
12832 THEN REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th` tranf x (V:real^3->bool)( E:(real^3->bool)->bool) E1 (f:real^3#real^3#real^3#real^3->bool)`)
12833 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
12834 THEN MRESAL_TAC tranf_eq_image_of_tran[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12835 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`f:real^3#real^3#real^3#real^3->bool` ][DELETE;IN_ELIM_THM]
12836 THEN SUBGOAL_THEN` (!x' y. x' IN f /\ y IN (f:real^3#real^3#real^3#real^3->bool) /\ tran x V E1 x' = tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) y ==> x' = y)`
12837 ASSUME_TAC
12838 THENL(*3*)[
12839
12840 REPEAT STRIP_TAC
12841 THEN MP_TAC(SET_RULE`x' IN f /\ y IN (f:real^3#real^3#real^3#real^3->bool)
12842 /\ f SUBSET d1_fan (x,V,E)/\  E UNION {{v, w:real^3}} = E1 ==> E SUBSET E1/\  x' IN d1_fan (x,V,E) /\ y IN d1_fan (x,V,E) `)
12843 THEN RESA_TAC
12844 THEN MRESA_TAC INJ_TRAN_D1_FAN
12845 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
12846 `x':real^3#real^3#real^3#real^3`;`(y:real^3#real^3#real^3#real^3)`];(*3*)
12847
12848
12849 MRESA_TAC SUM_IMAGE[`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool)):real^3#real^3#real^3#real^3 -> real^3#real^3#real^3#real^3`;`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`f:real^3#real^3#real^3#real^3->bool`]
12850 THEN REWRITE_TAC[o_DEF; ]
12851 THEN SUBGOAL_THEN `(!y. y IN f
12852            ==> azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y)) -
12853                pi =
12854                azim_fan x V E (pr2 y) (pr3 y) - pi)`
12855 ASSUME_TAC
12856 THENL(*4*)[
12857
12858 REPEAT STRIP_TAC
12859 THEN MRESAL_TAC azim_fanadd_eq[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12860 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`f:real^3#real^3#real^3#real^3->bool`;`(y:real^3#real^3#real^3#real^3)` ][DELETE;IN_ELIM_THM];(*4*)
12861
12862 MRESA_TAC SUM_EQ[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y)) - pi)`;`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`f:real^3#real^3#real^3#real^3->bool`]](*4*)](*3*);(*2*)
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872 MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12873 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}:real^3->bool`]
12874 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12875 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12876 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12877 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12878 THEN REMOVE_THEN"LINH"(fun th-> MRESAL1_TAC th` (ds1:real^3#real^3#real^3#real^3->bool)`[eventually_radial;radial;ball_eq_normball] THEN MRESAL1_TAC th` (ds2:real^3#real^3#real^3#real^3->bool)`[eventually_radial;radial;ball_eq_normball])
12879 THEN MP_TAC(REAL_ARITH`r> &0 /\ r' > &0==> min r (r':real)> &0 /\ &0< min r (r':real)/\ min r r' <= r /\ min r r' <= r'`)
12880 THEN RESA_TAC
12881 THEN MRESAL_TAC RADIAL_NORM_CO[`r:real`;`min r r':real`;`x:real^3`;`dartset_leads_into_fan x V E1 (ds1:real^3#real^3#real^3#real^3->bool)`][radial_norm]
12882 THEN MRESAL_TAC RADIAL_NORM_CO[`r':real`;`min r r':real`;`x:real^3`;`dartset_leads_into_fan x V E1 (ds2:real^3#real^3#real^3#real^3->bool)`][radial_norm]
12883 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `min r r':real` th) THEN REWRITE_TAC[SET_RULE`A INTER B=B INTER A`] THEN STRIP_TAC)`!r. measurable (normball x r INTER dartset_leads_into_fan (x:real^3) V E1 ds1)`
12884 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `min r r':real` th) THEN REWRITE_TAC[SET_RULE`A INTER B=B INTER A`] THEN STRIP_TAC)`!r. measurable (normball x r INTER dartset_leads_into_fan (x:real^3) V E1 ds2)`
12885 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
12886 THEN FIND_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[conforming_bijection_fan;EXISTS_UNIQUE] THEN STRIP_TAC )`conforming_bijection_fan (x:real^3,V,E1)`
12887 THEN POP_ASSUM(fun th-> MRESA1_TAC th`dartset_leads_into_fan x V E1 (ds1:real^3#real^3#real^3#real^3->bool)`)
12888
12889 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds1:real^3#real^3#real^3#real^3->bool)`
12890 THEN MRESA1_TAC th`(ds2:real^3#real^3#real^3#real^3->bool)`)
12891 THEN SUBGOAL_THEN`dartset_leads_into_fan x V E1 f' INTER
12892       dartset_leads_into_fan x V E1 (ds2:real^3#real^3#real^3#real^3->bool) =
12893       {}`
12894 ASSUME_TAC
12895 THENL(*4*)[
12896
12897 POP_ASSUM MP_TAC
12898 THEN DISCH_THEN(LABEL_TAC"LINH1")
12899 THEN REWRITE_TAC[SET_RULE`A INTER B ={} <=> ~(?z. z IN A /\ z IN B)`]
12900 THEN STRIP_TAC
12901 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`f':real^3#real^3#real^3#real^3->bool`]
12902 THEN POP_ASSUM MP_TAC
12903 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
12904 THEN STRIP_TAC
12905 THEN POP_ASSUM (fun th-> MP_TAC(SYM th) THEN STRIP_TAC)
12906 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`z:real^3`]
12907 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
12908 THEN POP_ASSUM MP_TAC
12909 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
12910 THEN STRIP_TAC
12911 THEN POP_ASSUM (fun th-> MP_TAC(SYM th) THEN STRIP_TAC)
12912 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y':real^3`;`z:real^3`]
12913 THEN REMOVE_THEN "LINH1" MP_TAC
12914 THEN RESA_TAC
12915 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12916 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;];(*4*)
12917
12918
12919 MRESAL_TAC SOL_DISJOINT_UNION[`x:real^3`;`dartset_leads_into_fan (x:real^3) V E1 ds1`; `dartset_leads_into_fan (x:real^3) V E1 ds2`;`min (r:real) r'`][radial_norm;DISJOINT]
12920 THEN MRESAL_TAC MEASURABLE_UNION[`(dartset_leads_into_fan (x:real^3) V E1 ds1 INTER normball x (min r r'))`;`(dartset_leads_into_fan (x:real^3) V E1 ds2 INTER normball x (min r r'))`][SET_RULE`(A INTER C) UNION (B INTER C)=(A UNION B) INTER C`]
12921 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w:real^3} IN E1`) THEN RESA_TAC
12922 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
12923 `(v:real^3)`]
12924 THEN MRESA_TAC  MEASURABLE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`w:real^3`;`(min r r'):real`]
12925 THEN MRESAL_TAC RADIAL_UNION[`min r r':real`;`x:real^3`;`dartset_leads_into_fan (x:real^3) V E1 ds1 INTER normball x (min r r')`; `dartset_leads_into_fan (x:real^3) V E1 ds2 INTER normball x (min r r')`][radial_norm;SET_RULE`(A INTER C) UNION (B INTER C)=(A UNION B) INTER C`]
12926 THEN MRESAL_TAC RADIAL_AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`;`(min r r'):real`;][REAL_ARITH`&1> &0`]
12927 THEN MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
12928 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
12929 THEN MP_TAC(SET_RULE` aff_ge {x} {v, w} SUBSET xfan (x,V,E1) /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
12930 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
12931 THEN RESA_TAC
12932 THEN MRESAL_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` (f':real^3#real^3#real^3#real^3->bool)`][yfan]
12933 THEN MRESAL_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;` (ds2:real^3#real^3#real^3#real^3->bool)`][yfan]
12934 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET xfan (x,V,E1)/\
12935 dartset_leads_into_fan x V E1 f' SUBSET (:real^3) DIFF xfan (x,V,E1)/\ 
12936 dartset_leads_into_fan x V E1 ds2 SUBSET (:real^3) DIFF xfan (x,V,E1)
12937 ==> (dartset_leads_into_fan x V E1 f' UNION
12938        dartset_leads_into_fan x V E1 ds2) INTER
12939       aff_gt {x} {v, w:real^3} =
12940       {}`)
12941 THEN RESA_TAC
12942 THEN MRESAL_TAC SOL_DISJOINT_UNION[`x:real^3`;`dartset_leads_into_fan (x:real^3) V E1 ds1 UNION dartset_leads_into_fan (x:real^3) V E1 ds2`;`aff_gt {x} {v, w:real^3}`; `min (r:real) r'`;][radial_norm;DISJOINT; SET_RULE`(A UNION B) UNION C= A UNION B UNION C`]
12943 THEN MRESA_TAC SOL_AFF_GT_2_1 [`x:real^3`;`v:real^3`;`w:real^3`]
12944 THEN REWRITE_TAC[REAL_ARITH`((&2 * pi + sum f' (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) +
12945   &2 * pi +
12946   sum ds2 (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) +
12947  &0= &4 * pi + (sum f' (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi) +
12948   sum ds2 (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) `]
12949 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
12950 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
12951 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12952 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
12953 THEN SUBGOAL_THEN`(f':real^3#real^3#real^3#real^3->bool) INTER ds2 ={}`
12954 ASSUME_TAC
12955 THENL(*5*)[
12956 POP_ASSUM MP_TAC
12957 THEN DISCH_THEN(LABEL_TAC"LINH1")
12958 THEN REWRITE_TAC[SET_RULE`A INTER B ={} <=> ~(?z. z IN A /\ z IN B)`]
12959 THEN STRIP_TAC
12960 THEN FIND_ASSUM(fun th -> MP_TAC th THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits] THEN STRIP_TAC)`f' IN face_set (hypermap1_of_fanx (x:real^3,V,E1))`
12961 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E1)`;`x':real^3#real^3#real^3#real^3`;`z:real^3#real^3#real^3#real^3`][face]
12962 THEN POP_ASSUM MP_TAC
12963 THEN POP_ASSUM MP_TAC
12964 THEN RESA_TAC
12965 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
12966 THEN FIND_ASSUM(fun th -> MP_TAC th THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits] THEN STRIP_TAC)`ds2 IN face_set (hypermap1_of_fanx (x:real^3,V,E1))`
12967 THEN MRESAL_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V,E1)`;`x'':real^3#real^3#real^3#real^3`;`z:real^3#real^3#real^3#real^3`][face]
12968 THEN POP_ASSUM MP_TAC
12969 THEN POP_ASSUM MP_TAC
12970 THEN RESA_TAC
12971 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
12972 THEN RESA_TAC
12973 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);(*5*)
12974
12975
12976
12977
12978
12979 MRESAL_TAC SUM_UNION[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`(f':real^3#real^3#real^3#real^3->bool)`;`(ds2:real^3#real^3#real^3#real^3->bool)`;][DISJOINT]
12980 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
12981 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
12982 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
12983 THEN MP_TAC(SET_RULE`f' SUBSET d1_fan (x,V,E1)/\ ds2 SUBSET d1_fan (x,V,E1)
12984 ==> f' UNION ds2 SUBSET d1_fan(x:real^3,V,E1)
12985 `)
12986 THEN RESA_TAC
12987 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E1:(real^3->bool)->bool)`]
12988 THEN MRESA_TAC FINITE_SUBSET[`((f' UNION ds2 ):real^3#real^3#real^3#real^3->bool)`;`d1_fan(x:real^3,V,E1)`]
12989 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN ds1` ASSUME_TAC
12990 THENL(*6*)[
12991 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w:real^3,sigma_fan x V E1 v w) = ds1`
12992 THEN EXISTS_TAC`0:num`
12993 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*6*)
12994
12995 MP_TAC(SET_RULE`x,v,w,sigma_fan x V E1 v w IN ds1 ==> x,v,w,sigma_fan x V E1 v w IN ds1 UNION ds2`)
12996 THEN RESA_TAC
12997 THEN MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`((f' UNION ds2 ):real^3#real^3#real^3#real^3->bool)`;`( (x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
12998 THEN MRESA_TAC FINITE_DELETE[`(f' UNION ds2 ):real^3#real^3#real^3#real^3->bool`;`(x,v,w,sigma_fan x V E1 v w:real^3)`]
12999 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E1 w v) IN
13000       (f' UNION ds2) DELETE (x,v,w,sigma_fan x V E1 v w:real^3)`ASSUME_TAC
13001 THENL(*7*)[
13002 ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;EQ_PAIR_4]
13003 THEN MATCH_MP_TAC(SET_RULE`A IN C ==> A IN B UNION C`)
13004 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])`face (hypermap1_of_fanx (x,V,E1)) (x,w,v:real^3,sigma_fan x V E1 w v) = ds2`
13005 THEN EXISTS_TAC`0:num`
13006 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*7*)
13007
13008
13009
13010
13011
13012 MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`((f' UNION ds2 ):real^3#real^3#real^3#real^3->bool) DELETE (x,v,w:real^3,sigma_fan x V E1 v w)`;`( (x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
13013 THEN MRESA_TAC DS1_DS2_EQ_DS_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13014 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`]
13015 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13016 THEN SUBGOAL_THEN` (!x' y. x' IN ds /\ y IN (ds:real^3#real^3#real^3#real^3->bool) /\ tran x V E1 x' = tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) y ==> x' = y)`
13017 ASSUME_TAC
13018 THENL(*8*)[
13019
13020 REPEAT STRIP_TAC
13021 THEN MP_TAC(SET_RULE`x' IN ds /\ y IN (ds:real^3#real^3#real^3#real^3->bool)
13022 /\ ds SUBSET d1_fan (x,V,E)/\  E UNION {{v, w:real^3}} = E1 ==> E SUBSET E1/\  x' IN d1_fan (x,V,E) /\ y IN d1_fan (x,V,E) `)
13023 THEN RESA_TAC
13024 THEN MRESA_TAC INJ_TRAN_D1_FAN
13025 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
13026 `x':real^3#real^3#real^3#real^3`;`(y:real^3#real^3#real^3#real^3)`];(*8*)
13027
13028
13029 MRESA_TAC SUM_IMAGE[`(tran (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool)):real^3#real^3#real^3#real^3 -> real^3#real^3#real^3#real^3`;`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`ds:real^3#real^3#real^3#real^3->bool`]
13030 THEN REWRITE_TAC[o_DEF; ]
13031 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
13032 THEN MRESA_TAC FINITE_SUBSET[`(ds:real^3#real^3#real^3#real^3->bool)`;`d1_fan(x:real^3,V,E)`]
13033 THEN MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`(ds:real^3#real^3#real^3#real^3->bool)`;`(f1:real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
13034 THEN MRESA_TAC FINITE_DELETE[`(ds ):real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`]
13035 THEN SUBGOAL_THEN`f3 IN ds DELETE f1:real^3#real^3#real^3#real^3` ASSUME_TAC
13036 THENL(*9*)[
13037 ASM_REWRITE_TAC[IN_ELIM_THM;DELETE;]
13038 THEN STRIP_TAC
13039 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13040 THEN FIND_ASSUM MP_TAC`pr2 f3=w:real^3`
13041 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`pr2 f3=v:real^3`
13042 THEN ASM_REWRITE_TAC[];(*9*)
13043
13044  MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`(ds:real^3#real^3#real^3#real^3->bool) DELETE f1`;`(f3:real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
13045 THEN MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran (x:real^3) V E1 y)) (pr3 (tran x V E1 y)) - pi)`;`(ds:real^3#real^3#real^3#real^3->bool)`;`(f1:real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
13046 THEN MRESAL_TAC SUM_DELETE[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran (x:real^3) V E1 y)) (pr3 (tran x V E1 y)) - pi)`;`(ds:real^3#real^3#real^3#real^3->bool) DELETE f1`;`(f3:real^3#real^3#real^3#real^3)`;][REAL_ARITH`A=B-C<=> B=A+C`]
13047 THEN SUBGOAL_THEN `(!y. y IN ds DELETE f1 DELETE f3
13048            ==> azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y)) -
13049                pi =
13050                azim_fan x V E (pr2 y) (pr3 y) - pi)`
13051 ASSUME_TAC
13052 THENL(*10*)[
13053
13054 REWRITE_TAC[DELETE;IN_ELIM_THM]
13055 THEN REPEAT STRIP_TAC
13056 THEN MRESAL_TAC azim_fanadd_eq_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13057 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool`;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(y:real^3#real^3#real^3#real^3)` ][DELETE;IN_ELIM_THM];(*10*)
13058
13059 MRESA_TAC SUM_EQ[`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E1:(real^3->bool)->bool) (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y)) - pi)`;`(\(y:real^3#real^3#real^3#real^3). azim_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (pr2 y) (pr3 y) - pi)`;`(ds:real^3#real^3#real^3#real^3->bool) DELETE f1 DELETE f3`]
13060 THEN REWRITE_TAC[REAL_ARITH`&4 * pi +
13061  (((sum (ds DELETE f1 DELETE f3) (\y. azim_fan x V E (pr2 y) (pr3 y) - pi) +
13062     azim_fan x V E1 (pr2 (tran x V E1 f3)) (pr3 (tran x V E1 f3)) - pi) +
13063    azim_fan x V E1 (pr2 (tran x V E1 f1)) (pr3 (tran x V E1 f1)) - pi) +
13064   azim_fan x V E1 (pr2 (x,w,v,sigma_fan x V E1 w v))
13065   (pr3 (x,w,v,sigma_fan x V E1 w v)) -
13066   pi) +
13067  azim_fan x V E1 (pr2 (x,v,w,sigma_fan x V E1 v w))
13068  (pr3 (x,v,w,sigma_fan x V E1 v w)) -
13069  pi =
13070  &2 * pi +
13071  (sum (ds DELETE f1 DELETE f3) (\y. azim_fan x V E (pr2 y) (pr3 y) - pi) +
13072   azim_fan x V E w (pr3 f3) - pi) +
13073  azim_fan x V E v u - pi
13074 <=> azim_fan x V E1 (pr2 (tran x V E1 f3)) (pr3 (tran x V E1 f3)) +
13075    azim_fan x V E1 (pr2 (tran x V E1 f1)) (pr3 (tran x V E1 f1))+
13076   azim_fan x V E1 (pr2 (x,w,v,sigma_fan x V E1 w v))
13077   (pr3 (x,w,v,sigma_fan x V E1 w v))  +
13078  azim_fan x V E1 (pr2 (x,v,w,sigma_fan x V E1 v w))
13079  (pr3 (x,v,w,sigma_fan x V E1 v w))  =
13080  azim_fan x V E w (pr3 f3) +
13081  azim_fan x V E v u`;pr2;pr3]
13082 THEN SUBGOAL_THEN`(x,v,u,sigma_fan x V E v u)=f1:real^3#real^3#real^3#real^3` ASSUME_TAC
13083 THENL(*11*)[
13084 ASM_REWRITE_TAC[]
13085 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13086 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13087 THEN EXISTS_TAC`x:real^3`
13088 THEN EXISTS_TAC`V:real^3->bool`
13089 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13090 THEN ASM_REWRITE_TAC[]
13091 THEN REWRITE_TAC[pr2;pr3]
13092 THEN ASM_REWRITE_TAC[]
13093 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13094 THEN EXISTS_TAC`x:real^3`
13095 THEN EXISTS_TAC`v:real^3`
13096 THEN EXISTS_TAC`u:real^3`
13097 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
13098 THEN ASM_REWRITE_TAC[];(*11*)
13099
13100 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13101 THEN SUBGOAL_THEN`x,
13102  w,
13103  inverse1_sigma_fan x V E w u,
13104  sigma_fan x V E w (inverse1_sigma_fan x V E w u)=f1_fan x V E f2:real^3#real^3#real^3#real^3` ASSUME_TAC
13105 THENL(*12*)[
13106 SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
13107 THENL(*13*)[
13108 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13109 THEN EXISTS_TAC`x:real^3`
13110 THEN EXISTS_TAC`V:real^3->bool`
13111 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13112 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13113 THEN ASM_REWRITE_TAC[]
13114 THEN ASM_TAC
13115 THEN REWRITE_TAC[pr2;pr3]
13116 THEN REPEAT STRIP_TAC
13117 THEN ASM_REWRITE_TAC[]
13118 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13119 THEN EXISTS_TAC`x:real^3`
13120 THEN EXISTS_TAC`u:real^3`
13121 THEN EXISTS_TAC`w:real^3`
13122 THEN EXISTS_TAC`v:real^3`
13123 THEN ASM_REWRITE_TAC[];(*13*)
13124 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
13125 THEN REWRITE_TAC[f1_fan]
13126 THEN ASM_REWRITE_TAC[]
13127 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13128 THEN REMOVE_ASSUM_TAC
13129 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13130 THEN POP_ASSUM MP_TAC
13131 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13132 THEN RESA_TAC](*13*);(*12*)
13133
13134 POP_ASSUM MP_TAC
13135 THEN ASM_REWRITE_TAC[]
13136 THEN STRIP_TAC
13137 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;tran;azim_fan])
13138 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v:real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E1) > 1`
13139 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `v:real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E) > 1`
13140 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
13141 THEN RESA_TAC
13142 THEN RESA_TAC
13143 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
13144 `(w:real^3)`]
13145 THEN POP_ASSUM MP_TAC
13146 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13147 THEN RESA_TAC
13148 THEN POP_ASSUM MP_TAC
13149 THEN REMOVE_ASSUM_TAC
13150 THEN REMOVE_ASSUM_TAC
13151 THEN STRIP_TAC
13152 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `w:real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E1) > 1`
13153 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `w:real^3` th))`!v. v IN (V:real^3->bool) ==> CARD (set_of_edge v V E) > 1`
13154 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(w:real^3) IN V`
13155 THEN RESA_TAC
13156 THEN RESA_TAC
13157 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13158 THEN REMOVE_ASSUM_TAC
13159 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13160 THEN POP_ASSUM MP_TAC
13161 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13162 THEN POP_ASSUM MP_TAC
13163 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13164 THEN ASM_REWRITE_TAC[]
13165 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13166 THEN RESA_TAC
13167 THEN RESA_TAC
13168 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13169 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13170 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
13171 THEN REMOVE_ASSUM_TAC
13172 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
13173 THEN POP_ASSUM MP_TAC
13174 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13175 THEN RESA_TAC
13176 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13177 `v:real^3`;`u:real^3`; `w:real^3` ]
13178 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13179 `v:real^3`;`u:real^3`; `w:real^3` ]
13180 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13181 `v:real^3`;`u:real^3`; `w:real^3` ]
13182 THEN MRESA_TAC angle_is_small_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`]
13183 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`u:real^3`;`v:real^3`]
13184 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
13185 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v u):real^3`;`v:real^3`]
13186 THEN POP_ASSUM MP_TAC
13187 THEN RESA_TAC
13188 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`(sigma_fan x V E v u):real^3`]
13189 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
13190 THEN POP_ASSUM MP_TAC
13191 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13192 THEN RESA_TAC
13193 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
13194 ==>
13195 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
13196 THEN RESA_TAC
13197 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
13198 THEN POP_ASSUM MP_TAC
13199 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV)[SET_RULE`{A,B}={B,A}`]
13200 THEN RESA_TAC
13201 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`(w:real^3)`]
13202 THEN POP_ASSUM MP_TAC
13203 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV)[SET_RULE`{A,B}={B,A}`]
13204 THEN RESA_TAC
13205 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (inverse1_sigma_fan x V E w u:real^3)`;`(w:real^3)`]
13206 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`v:real^3`;`u:real^3`]
13207 THEN REAL_ARITH_TAC
13208 ]]]]]]]]]]]);;
13209
13210
13211 let TRAN_IN_TRANF=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 f y.
13212 FAN(x,V,E)
13213  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13214 /\ fan80(x,V,E)
13215 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13216 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13217 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w /\ pr3 f1 = u 
13218 /\     pr3 f2 = w 
13219 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13220 /\ sigma_fan x V E u w = v
13221 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
13222 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
13223 /\ (x,w,v,u)=f10
13224 /\ (x,v,u,w)=f20
13225 /\ (x,u,w,v)=f30
13226 /\ E UNION {{v,w}}= E1
13227
13228 /\ f IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds 
13229 /\ y IN f
13230 ==>  tran x V E1 y IN tranf x V E E1 f`,
13231
13232 REPEAT STRIP_TAC
13233 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13234 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13235 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
13236 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
13237 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
13238 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13239 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13240 THEN MRESA_TAC unique_tranf_fan
13241 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13242 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` 
13243 ;`ds1:real^3#real^3#real^3#real^3->bool`
13244 ;`ds2:real^3#real^3#real^3#real^3->bool`
13245 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
13246 ; `f:real^3#real^3#real^3#real^3->bool`
13247 ;`(face (hypermap1_of_fanx (x,V,E1)) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3)):real^3#real^3#real^3#real^3->bool)`
13248 ;`(y:real^3#real^3#real^3#real^3)`;]
13249 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
13250 THEN EXISTS_TAC`0:num`
13251 THEN ASM_REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
13252
13253
13254
13255
13256 let TXFBALB_VERSION=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13257 FAN(x,V,E)
13258  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13259 /\ fan80(x,V,E)
13260 /\ ~(conforming_fan (x,V,E))
13261 /\ (!E1. FAN(x,V,E1)  /\ 
13262          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13263          fan80(x,V,E1)/\ 
13264          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13265 ==> conforming_solid_angle_fan(x,V,E)`,
13266 REPEAT STRIP_TAC
13267 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]       
13268 THEN MRESA_TAC nonconformin_fan_imp_exist_3point_in_face[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`ds:real^3#real^3#real^3#real^3->bool`]   
13269 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13270 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13271 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13272 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13273 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E1)) ((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`
13274 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E1)) ((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`
13275 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13276 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13277 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13278 THEN MRESA_TAC TXFBALB[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13279 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]);;
13280
13281
13282
13283 let conforming_bijection_fanadd_verrion=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13284 FAN(x,V,E)
13285  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13286 /\ fan80(x,V,E)
13287 /\ ~(conforming_fan (x,V,E))
13288 /\ (!E1. FAN(x,V,E1)  /\ 
13289          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13290          fan80(x,V,E1)/\ 
13291          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13292 ==>
13293 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ 
13294                                                          s = dartset_leads_into_fan x V E f)`,
13295
13296 REPEAT GEN_TAC
13297 THEN STRIP_TAC
13298 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]       
13299 THEN MRESA_TAC nonconformin_fan_imp_exist_3point_in_face[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`ds:real^3#real^3#real^3#real^3->bool`]   
13300 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13301 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13302 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13303 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13304 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E1)) ((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`
13305 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E1)) ((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`
13306 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13307 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13308 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13309 THEN MRESA_TAC conforming_bijection_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13310 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]);;
13311
13312 let OBHTHCD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13313 FAN(x,V,E)
13314  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13315 /\ fan80(x,V,E)
13316 /\ ~(conforming_fan (x,V,E))
13317 /\ (!E1. FAN(x,V,E1)  /\ 
13318          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13319          fan80(x,V,E1)/\ 
13320          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13321 ==>
13322 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ 
13323                                                          s = dartset_leads_into_fan x V E f)`,
13324
13325 REPEAT GEN_TAC
13326 THEN STRIP_TAC
13327 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]       
13328 THEN MRESA_TAC nonconformin_fan_imp_exist_3point_in_face[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`ds:real^3#real^3#real^3#real^3->bool`]   
13329 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13330 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13331 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13332 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13333 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E1)) ((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`
13334 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E1)) ((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`
13335 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13336 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13337 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13338 THEN MRESA_TAC conforming_bijection_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13339 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]);;
13340
13341
13342
13343 let inverse1_sigma_fan_FANADD4=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
13344 FAN(x,V,E)
13345  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13346 /\ fan80(x,V,E)
13347 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13348 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13349 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13350 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13351 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13352 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13353 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13354 /\ (x,w,v,u)=f10
13355 /\ (x,v,u,w)=f20
13356 /\ (x,u,w,v)=f30
13357 /\ E UNION {{v,w}}= E1
13358 ==> inverse1_sigma_fan x V E1 (inverse1_sigma_fan x V E w u) w = inverse1_sigma_fan x V E (inverse1_sigma_fan x V E w u) w`,
13359 REPEAT STRIP_TAC
13360 THEN POP_ASSUM MP_TAC
13361 THEN DISCH_THEN(LABEL_TAC"EM")
13362 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13363 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13364 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
13365 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
13366 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
13367 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13368 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13369 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
13370 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
13371 THEN ASM_REWRITE_TAC[]
13372 THEN STRIP_TAC
13373 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13374 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13375 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13376 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13377 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13378 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13379 THEN MATCH_MP_TAC MONO_SIGMA_FAN
13380 THEN EXISTS_TAC`x:real^3`
13381 THEN EXISTS_TAC`V:real^3->bool`
13382 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
13383 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
13384 THEN ASM_REWRITE_TAC[]
13385 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13386 THEN REMOVE_ASSUM_TAC
13387 THEN REMOVE_ASSUM_TAC
13388 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13389 THEN POP_ASSUM MP_TAC
13390 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13391 THEN RESA_TAC
13392 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u,w:real^3} IN E /\ E UNION {{v,w}}= E1
13393 ==>  {inverse1_sigma_fan x V E w u,w} IN E1`)
13394 THEN RESA_TAC
13395 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`inverse1_sigma_fan x V E w u:real^3`]
13396 THEN REMOVE_ASSUM_TAC
13397 THEN REMOVE_ASSUM_TAC
13398 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13399 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`inverse1_sigma_fan x V E w u:real^3`]
13400 THEN REMOVE_ASSUM_TAC
13401 THEN REMOVE_ASSUM_TAC
13402 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13403 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13404 THEN ASM_REWRITE_TAC[]
13405 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, inverse1_sigma_fan x V E
13406                                      (inverse1_sigma_fan x V E w u)
13407                                      w:real^3} IN E /\ E UNION {{v,w}}= E1
13408 ==>  {inverse1_sigma_fan x V E w u, inverse1_sigma_fan x V E
13409                                      (inverse1_sigma_fan x V E w u)
13410                                      w} IN E1`)
13411 THEN RESA_TAC
13412 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`inverse1_sigma_fan x V E w u:real^3`]
13413 THEN REMOVE_ASSUM_TAC
13414 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13415 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13416 `v:real^3`; `w:real^3` ]
13417 THEN POP_ASSUM MP_TAC
13418 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13419 THEN RESA_TAC
13420 THEN POP_ASSUM (fun th-> MRESA_TAC th[`inverse1_sigma_fan x V E w u:real^3`;`inverse1_sigma_fan x V E (inverse1_sigma_fan x V E w u) w:real^3`])
13421 THEN POP_ASSUM MP_TAC
13422 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13423 THEN ASM_REWRITE_TAC[]
13424 THEN DISJ_CASES_TAC(SET_RULE`~(inverse1_sigma_fan x V E w u IN {v, w}) \/ inverse1_sigma_fan x V E w u =v \/ inverse1_sigma_fan x V E w u =w`)
13425 THENL[
13426 RESA_TAC
13427 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`inverse1_sigma_fan x V E w u:real^3`]
13428 THEN REMOVE_ASSUM_TAC
13429 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`);
13430
13431
13432 POP_ASSUM MP_TAC
13433 THEN STRIP_TAC
13434 THENL[
13435 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13436 THEN REMOVE_ASSUM_TAC
13437 THEN REMOVE_ASSUM_TAC
13438 THEN REMOVE_ASSUM_TAC
13439 THEN REMOVE_ASSUM_TAC
13440 THEN REMOVE_ASSUM_TAC
13441 THEN REMOVE_ASSUM_TAC
13442 THEN REMOVE_ASSUM_TAC
13443 THEN POP_ASSUM MP_TAC
13444 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13445 THEN ASM_REWRITE_TAC[];
13446
13447 POP_ASSUM MP_TAC
13448 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (inverse1_sigma_fan x V E w u:real^3)`;
13449 `(w:real^3)`]
13450 THEN POP_ASSUM MP_TAC
13451 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13452 THEN ASM_REWRITE_TAC[]
13453 THEN RESA_TAC]]);;
13454
13455
13456 let conforming_diagonal_fanadd1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 z.
13457 FAN(x,V,E)
13458  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13459 /\ fan80(x,V,E)
13460 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13461 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13462 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13463 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13464 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13465 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13466 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13467 /\ (x,w,v,u)=f10
13468 /\ (x,v,u,w)=f20
13469 /\ (x,u,w,v)=f30
13470 /\ E UNION {{v,w}}= E1
13471 /\ (!E1. FAN(x,V,E1)  /\ 
13472          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13473          fan80(x,V,E1)/\ 
13474          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13475 /\ z IN ds
13476 /\ ~(f3=z)
13477 ==> ~collinear {x, pr2 f3, pr2 z} /\
13478                   (f3 = f1_fan x V E z \/
13479                    z = f1_fan x V E f3 \/
13480                    aff_gt {x} {pr2 f3, pr2 z} SUBSET
13481                    dartset_leads_into_fan x V E ds)`,
13482
13483 REPEAT GEN_TAC
13484 THEN STRIP_TAC
13485 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13486 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13487 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
13488 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
13489 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
13490 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13491 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13492 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
13493 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E) /\ z IN ds ==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds/\ z IN d1_fan(x,V,E)`)
13494 THEN ASM_REWRITE_TAC[]
13495 THEN STRIP_TAC
13496 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13497 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13498 THEN POP_ASSUM MP_TAC
13499 THEN REWRITE_TAC[conforming_fan;conforming_diagonal_fan;]
13500 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
13501 THEN STRIP_TAC
13502 THEN DISJ_CASES_TAC(SET_RULE`(z=f1:real^3#real^3#real^3#real^3)\/ z=f2 \/ (~(z=f1)/\ ~(z=f2))`)
13503 THENL(*1*)[
13504 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13505 THENL(*2*)[
13506 POP_ASSUM MP_TAC
13507 THEN ASM_REWRITE_TAC[]
13508 THEN MP_TAC(SET_RULE`E UNION {{v,w:real^3}}=E1==> {v,w:real^3} IN E1`)
13509 THEN RESA_TAC
13510 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
13511 `(v:real^3)`]
13512 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13513 THEN ASM_REWRITE_TAC[];(*2*)
13514
13515 ASM_REWRITE_TAC[]
13516 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
13517 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13518 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13519 THEN ASM_REWRITE_TAC[]](*2*);(*1*)
13520
13521 POP_ASSUM MP_TAC
13522 THEN STRIP_TAC
13523 THENL(*2*)[
13524
13525 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13526 THENL(*3*)[
13527
13528 POP_ASSUM MP_TAC
13529 THEN ASM_REWRITE_TAC[]
13530 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13531 `(u:real^3)`]
13532 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13533 THEN ASM_REWRITE_TAC[];(*3*)
13534
13535 ASM_REWRITE_TAC[]](*3*);(*2*)
13536
13537
13538 POP_ASSUM MP_TAC
13539 THEN POP_ASSUM MP_TAC
13540 THEN POP_ASSUM MP_TAC
13541 THEN DISCH_THEN(LABEL_TAC"LINH")
13542 THEN STRIP_TAC
13543 THEN STRIP_TAC
13544 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13545 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13546 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> E SUBSET E1/\ {v,w} IN E1`)
13547 THEN RESA_TAC
13548 THEN MRESA_TAC INJ_TRAN_D1_FAN
13549 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
13550 `f3:real^3#real^3#real^3#real^3`;`(z:real^3#real^3#real^3#real^3)`]
13551 THEN SUBGOAL_THEN`tran (x:real^3) V E1 (z:real^3#real^3#real^3#real^3) IN IMAGE (tran (x:real^3) (V:real^3->bool) E1) (ds:real^3#real^3#real^3#real^3->bool)` ASSUME_TAC
13552 THENL(*3*)[
13553
13554 REWRITE_TAC[IMAGE;IN_ELIM_THM]
13555 THEN EXISTS_TAC`z:real^3#real^3#real^3#real^3`
13556 THEN ASM_REWRITE_TAC[];(*3*)
13557
13558 POP_ASSUM MP_TAC
13559 THEN SUBGOAL_THEN`tran (x:real^3) V E1 (f3:real^3#real^3#real^3#real^3)=(x,w,inverse1_sigma_fan x V E1 w v,v)` ASSUME_TAC
13560 THENL(*4*)[
13561
13562 SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
13563 THENL(*5*)[
13564 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13565 THEN EXISTS_TAC`x:real^3`
13566 THEN EXISTS_TAC`V:real^3->bool`
13567 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13568 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13569 THEN ASM_REWRITE_TAC[]
13570 THEN ASM_TAC
13571 THEN REWRITE_TAC[pr2;pr3]
13572 THEN REPEAT STRIP_TAC
13573 THEN ASM_REWRITE_TAC[]
13574 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13575 THEN EXISTS_TAC`x:real^3`
13576 THEN EXISTS_TAC`u:real^3`
13577 THEN EXISTS_TAC`w:real^3`
13578 THEN EXISTS_TAC`v:real^3`
13579 THEN ASM_REWRITE_TAC[];(*5*)
13580 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan x V E f2 = f3:real^3#real^3#real^3#real^3`
13581 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th;f1_fan;tran] )
13582 THEN ASM_REWRITE_TAC[]
13583 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13584 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13585 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13586 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
13587 THEN REMOVE_ASSUM_TAC
13588 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
13589 THEN POP_ASSUM MP_TAC
13590 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13591 THEN RESA_TAC](*5*);(*4*)
13592
13593 SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E1 w v,v:real^3) =f1_fan x V E1 (x,v,w,sigma_fan x V E1 v w)` ASSUME_TAC
13594 THENL(*5*)[
13595 REWRITE_TAC[f1_fan];(*5*)
13596
13597 SUBGOAL_THEN`x:real^3,v,w,sigma_fan x V E1 v w IN ds1`ASSUME_TAC
13598 THENL(*6*)[
13599 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;face;IN_ELIM_THM;orbit_map])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w:real^3) = ds1`
13600 THEN EXISTS_TAC`0:num`
13601 THEN ASM_REWRITE_TAC[POWER;I_DEF]
13602 THEN ARITH_TAC;(*6*)
13603
13604 MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`((x,w,inverse1_sigma_fan x V E1 w v,v):real^3#real^3#real^3#real^3)` ;`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;`ds1:real^3#real^3#real^3#real^3->bool`]
13605 THEN POP_ASSUM MP_TAC
13606 THEN REMOVE_ASSUM_TAC
13607 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13608 THEN STRIP_TAC
13609 THEN MRESA_TAC DS1_DS2_EQ_DS_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13610 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;`((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`]
13611 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13612 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13613 THEN REWRITE_TAC[DELETE;IN_ELIM_THM;UNION]
13614 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13615 `v:real^3`;`u:real^3`; `w:real^3` ]
13616 THEN STRIP_TAC
13617 THENL(*7*)[
13618
13619 FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13620 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13621 THEN STRIP_TAC
13622 THEN REMOVE_THEN "LINH"(fun th-> MRESAL_TAC th[`ds1:real^3#real^3#real^3#real^3->bool`;`tran (x:real^3) V E1 (f3:real^3#real^3#real^3#real^3)`;`tran (x:real^3) V E1 (z:real^3#real^3#real^3#real^3)`][pr2;pr3;tran])
13623 THENL(*8*)(*3GOAL*)[
13624
13625 POP_ASSUM MP_TAC
13626 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
13627 THEN STRIP_TAC
13628 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13629 THEN REMOVE_ASSUM_TAC
13630 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13631 THEN REMOVE_ASSUM_TAC
13632 THEN REMOVE_ASSUM_TAC
13633 THEN REMOVE_ASSUM_TAC
13634 THEN POP_ASSUM MP_TAC
13635 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13636 THEN ASM_REWRITE_TAC[];(*8*)
13637
13638 POP_ASSUM MP_TAC
13639 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
13640 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13641 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13642 THEN MRESA_TAC inverse1_sigma_fan_FANADD4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13643 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
13644 THEN RESA_TAC
13645 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
13646 THENL(*9*)[
13647
13648 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13649 THEN EXISTS_TAC`x:real^3`
13650 THEN EXISTS_TAC`V:real^3->bool`
13651 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13652 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13653 THEN ASM_REWRITE_TAC[]
13654 THEN ASM_TAC
13655 THEN REWRITE_TAC[pr2;pr3]
13656 THEN REPEAT STRIP_TAC
13657 THEN ASM_REWRITE_TAC[]
13658 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13659 THEN EXISTS_TAC`x:real^3`
13660 THEN EXISTS_TAC`u:real^3`
13661 THEN EXISTS_TAC`w:real^3`
13662 THEN EXISTS_TAC`v:real^3`
13663 THEN ASM_REWRITE_TAC[];(*9*)
13664 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan x V E f2 = f3:real^3#real^3#real^3#real^3`
13665 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th;f1_fan;tran] )
13666 THEN ASM_REWRITE_TAC[]
13667 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13668 THEN REMOVE_ASSUM_TAC
13669 THEN REMOVE_ASSUM_TAC
13670 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13671 THEN POP_ASSUM MP_TAC
13672 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13673 THEN RESA_TAC
13674 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`inverse1_sigma_fan x V E w u:real^3`]
13675 THEN REMOVE_ASSUM_TAC
13676 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)](*9*);(*8*)
13677
13678 MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13679 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION
13680       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
13681       aff_gt {x} {v, w}:real^3->bool`]
13682 THEN REMOVE_ASSUM_TAC
13683 THEN POP_ASSUM MP_TAC
13684 THEN SET_TAC[]](*8*);(*7*)
13685
13686
13687 POP_ASSUM MP_TAC
13688 THEN POP_ASSUM MP_TAC
13689 THEN POP_ASSUM MP_TAC
13690 THEN REWRITE_TAC[SET_RULE`A IN {B,C,D}<=> A=B \/ A=C \/ A=D`]
13691 THEN STRIP_TAC
13692 THENL(*8*)(*3 GOAL*)[
13693
13694 ASM_REWRITE_TAC[];(*8*)
13695
13696 POP_ASSUM MP_TAC
13697 THEN FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13698 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13699 THEN STRIP_TAC
13700 THEN ASM_REWRITE_TAC[tran]
13701 THEN EXPAND_TAC"f20"
13702 THEN REWRITE_TAC[EQ_PAIR_4]
13703 THEN STRIP_TAC
13704 THEN REMOVE_ASSUM_TAC
13705 THEN REWRITE_TAC[pr2]
13706 THEN ASM_REWRITE_TAC[]
13707 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
13708 ` (v:real^3)`]
13709 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13710 THEN ASM_REWRITE_TAC[]
13711 THEN REMOVE_ASSUM_TAC
13712 THEN REMOVE_ASSUM_TAC
13713 THEN REMOVE_ASSUM_TAC
13714 THEN REMOVE_ASSUM_TAC
13715 THEN REMOVE_ASSUM_TAC
13716 THEN REMOVE_ASSUM_TAC
13717 THEN REMOVE_ASSUM_TAC
13718 THEN REMOVE_ASSUM_TAC
13719 THEN REMOVE_ASSUM_TAC
13720 THEN REMOVE_ASSUM_TAC
13721 THEN REMOVE_ASSUM_TAC
13722 THEN REMOVE_ASSUM_TAC
13723 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13724 THEN REMOVE_ASSUM_TAC
13725 THEN REMOVE_ASSUM_TAC
13726 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13727 THEN POP_ASSUM MP_TAC
13728 THEN ASM_REWRITE_TAC[]
13729 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)` ASSUME_TAC
13730 THENL(*9*)[
13731 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13732 THEN EXISTS_TAC`x:real^3`
13733 THEN EXISTS_TAC`V:real^3->bool`
13734 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13735 THEN ASM_REWRITE_TAC[pr2;pr3;]
13736 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13737 THEN EXISTS_TAC`x:real^3`
13738 THEN EXISTS_TAC`v:real^3`
13739 THEN EXISTS_TAC`u:real^3`
13740 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
13741 THEN ASM_REWRITE_TAC[];(*9*)
13742
13743 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13744 THEN ASM_REWRITE_TAC[]](*9*);(*8*)
13745 POP_ASSUM MP_TAC
13746 THEN FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13747 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13748 THEN STRIP_TAC
13749 THEN ASM_REWRITE_TAC[tran]
13750 THEN EXPAND_TAC"f30"
13751 THEN REWRITE_TAC[EQ_PAIR_4]
13752 THEN STRIP_TAC
13753 THEN REMOVE_ASSUM_TAC
13754 THEN REWRITE_TAC[pr2]
13755 THEN ASM_REWRITE_TAC[]
13756 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13757 ` (u:real^3)`]
13758 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13759 THEN ASM_REWRITE_TAC[]
13760 THEN REMOVE_ASSUM_TAC
13761 THEN REMOVE_ASSUM_TAC
13762 THEN REMOVE_ASSUM_TAC
13763 THEN REMOVE_ASSUM_TAC
13764 THEN REMOVE_ASSUM_TAC
13765 THEN REMOVE_ASSUM_TAC
13766 THEN REMOVE_ASSUM_TAC
13767 THEN REMOVE_ASSUM_TAC
13768 THEN REMOVE_ASSUM_TAC
13769 THEN REMOVE_ASSUM_TAC
13770 THEN REMOVE_ASSUM_TAC
13771 THEN REMOVE_ASSUM_TAC
13772 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13773 THEN REMOVE_ASSUM_TAC
13774 THEN REMOVE_ASSUM_TAC
13775 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13776 THEN POP_ASSUM MP_TAC
13777 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13778 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]]]]]]]]]);;
13779
13780
13781
13782
13783
13784
13785 let INDUCTION_FANADD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y.
13786 FAN(x,V,E)
13787  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13788 /\ fan80(x,V,E)
13789 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13790 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13791 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13792 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13793 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13794 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13795 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13796 /\ (x,w,v,u)=f10
13797 /\ (x,v,u,w)=f20
13798 /\ (x,u,w,v)=f30
13799 /\ E UNION {{v,w}}= E1
13800 /\ (!E1. FAN(x,V,E1)  /\ 
13801          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13802          fan80(x,V,E1)/\ 
13803          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13804 /\ y IN ds
13805 ==> ?f1 f2 f3. {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13806 /\ {pr2 f2, pr2 f3} IN E
13807 /\ ~({pr2 f3, pr2 f1 } IN E)
13808 /\ {pr2 f1, pr2 f2 } IN E
13809 /\ sigma_fan x V E (pr2 f2) (pr2 f3)=pr2 f1
13810 /\ pr2 f3= pr3 f2
13811 /\ pr2 f2= pr3 f1
13812 /\ y=f3`,
13813
13814 REPEAT STRIP_TAC
13815 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
13816 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13817 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
13818 THEN ABBREV_TAC`f2'=(f1_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) POWER (CARD (ds:real^3#real^3#real^3#real^3->bool) -1)) (y:real^3#real^3#real^3#real^3)`
13819 THEN ABBREV_TAC`f1'=(f1_fan (x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) POWER (CARD (ds:real^3#real^3#real^3#real^3->bool) -2)) (y:real^3#real^3#real^3#real^3)`
13820 THEN ABBREV_TAC`f4=f1_fan x V E (y:real^3#real^3#real^3#real^3)`
13821 THEN POP_ASSUM MP_TAC
13822 THEN DISCH_THEN(LABEL_TAC"VUT")
13823 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
13824 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
13825 THEN RESA_TAC
13826 THEN MRESA_TAC lemma_face_identity[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`x':real^3#real^3#real^3#real^3`;`y:real^3#real^3#real^3#real^3`]
13827 THEN POP_ASSUM MP_TAC
13828 THEN REWRITE_TAC[face]
13829 THEN ASM_REWRITE_TAC[]
13830 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
13831 THEN RESA_TAC
13832 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`;`y:real^3#real^3#real^3#real^3`]
13833 THEN POP_ASSUM MP_TAC
13834 THEN REWRITE_TAC[face]
13835 THEN ASM_REWRITE_TAC[]
13836 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
13837 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d1_fan(x,V,E)==> y IN d1_fan(x:real^3,V,E)`)
13838 THEN RESA_TAC
13839 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`CARD( ds:real^3#real^3#real^3#real^3->bool):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
13840 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13841 THEN REMOVE_ASSUM_TAC
13842 THEN REMOVE_ASSUM_TAC
13843 THEN REMOVE_ASSUM_TAC
13844 THEN MP_TAC(ARITH_RULE`CARD( ds:real^3#real^3#real^3#real^3->bool)>3 ==> CARD ds= SUC(CARD(ds)-1)`)
13845 THEN RESA_TAC
13846 THEN POP_ASSUM(fun th-> STRIP_TAC THEN POP_ASSUM(fun th1-> MP_TAC th1 THEN
13847 ONCE_REWRITE_TAC[th]
13848 THEN ASM_REWRITE_TAC[COM_POWER;o_DEF]
13849 THEN STRIP_TAC THEN MP_TAC th1))
13850 THEN MP_TAC(ARITH_RULE`CARD( ds:real^3#real^3#real^3#real^3->bool)>3 ==> CARD ds= SUC( SUC(CARD(ds)-2))`)
13851 THEN RESA_TAC
13852 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
13853 THEN ASM_REWRITE_TAC[COM_POWER;o_DEF]
13854 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC th)
13855 THEN STRIP_TAC
13856 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`CARD( ds:real^3#real^3#real^3#real^3->bool)-1:num`;]
13857 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13858 THEN POP_ASSUM MP_TAC
13859 THEN REMOVE_ASSUM_TAC
13860 THEN REMOVE_ASSUM_TAC
13861 THEN STRIP_TAC
13862 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`CARD( ds:real^3#real^3#real^3#real^3->bool)-2:num`;]
13863 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13864 THEN POP_ASSUM MP_TAC
13865 THEN REMOVE_ASSUM_TAC
13866 THEN REMOVE_ASSUM_TAC
13867 THEN STRIP_TAC
13868 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC(0):num`;]
13869 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(f1':real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF])
13870 THEN POP_ASSUM MP_TAC
13871 THEN REMOVE_ASSUM_TAC
13872 THEN REMOVE_ASSUM_TAC
13873 THEN STRIP_TAC
13874 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13875 THEN POP_ASSUM(fun th-> MRESA_TAC th[` (f1_fan x V E f1':real^3#real^3#real^3#real^3)`;` (f2':real^3#real^3#real^3#real^3)`])
13876 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(y:real^3#real^3#real^3#real^3)` ;`(f2':real^3#real^3#real^3#real^3)`]
13877 THEN MRESA_TAC IMAGE_F1_IN_FACE_IMP_IN_FACE[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`(f2':real^3#real^3#real^3#real^3)` ;`(f1':real^3#real^3#real^3#real^3)`]
13878 THEN MRESA_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f4:real^3#real^3#real^3#real^3)` ;`(y:real^3#real^3#real^3#real^3)`;`ds:real^3#real^3#real^3#real^3->bool`]
13879 THEN MP_TAC(SET_RULE`f1' IN ds /\ f2' IN ds /\ y IN ds /\ ds SUBSET d1_fan (x,V,E)==> {f1',f2',y} SUBSET (ds:real^3#real^3#real^3#real^3->bool)`)
13880 THEN RESA_TAC
13881 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13882 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f1':real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(f2':real^3#real^3#real^3#real^3)` THEN MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13883 THEN DISJ_CASES_TAC(SET_RULE`y=f1' \/ ~(y=f1':real^3#real^3#real^3#real^3)`)
13884 THENL(*1*)[
13885 MP_TAC(SET_RULE`f1'=y:real^3#real^3#real^3#real^3==> pr2 f1'= pr2 y`) 
13886 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
13887 THEN REWRITE_TAC[]
13888 THEN STRIP_TAC
13889 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(f2':real^3#real^3#real^3#real^3)`]
13890 THEN REMOVE_ASSUM_TAC
13891 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2':real^3#real^3#real^3#real^3)` ;`(f1':real^3#real^3#real^3#real^3)`]
13892 THEN POP_ASSUM MP_TAC
13893 THEN POP_ASSUM MP_TAC
13894 THEN RESA_TAC THEN RESA_TAC
13895 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` pr2 (y:real^3#real^3#real^3#real^3)`;
13896 ` pr2 (f2':real^3#real^3#real^3#real^3)`]
13897 THEN POP_ASSUM MP_TAC
13898 THEN POP_ASSUM MP_TAC
13899 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13900 THEN RESA_TAC THEN RESA_TAC
13901 THEN DISJ_CASES_TAC(SET_RULE`set_of_edge (pr2 (f2':real^3#real^3#real^3#real^3)) V E = {pr2 y} \/ ~(set_of_edge (pr2 (f2':real^3#real^3#real^3#real^3)) V E = {pr2 y})`)
13902 THENL(*2*)[
13903  MRESA_TAC CARD_SING[`(pr2 y):real^3`; `(set_of_edge (pr2 (f2':real^3#real^3#real^3#real^3)) V E):real^3->bool`]
13904 THEN POP_ASSUM MP_TAC
13905 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
13906 THEN FIND_ASSUM (fun th -> MP_TAC(ISPEC `(pr2 (f2':real^3#real^3#real^3#real^3))` th))`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
13907 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (f2':real^3#real^3#real^3#real^3)) IN V`
13908 THEN ARITH_TAC;(*2*)
13909
13910 MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` pr2 (f2':real^3#real^3#real^3#real^3)`;
13911 ` pr2 (y:real^3#real^3#real^3#real^3)`]
13912 THEN ASM_TAC THEN SET_TAC[]];(*1*)
13913
13914
13915
13916 DISJ_CASES_TAC(SET_RULE`f4=f1' \/ ~(f4=f1':real^3#real^3#real^3#real^3)`)
13917 THENL(*2*)[
13918 SUBGOAL_THEN(`((f1_fan (x:real^3) V E) POWER 3) f1'=f1'`) ASSUME_TAC
13919
13920 THENL(*3*)[
13921 ASM_SIMP_TAC[ARITH_RULE`3= SUC(2)/\ 2= SUC(1) /\ 1= SUC(0)`;POWER;I_DEF;o_DEF];(*3*)
13922
13923  SUBGOAL_THEN`face (hypermap1_of_fanx (x:real^3,V:real^3->bool,E)) f1'=orbit_map (f1_fan x V E) f1'`ASSUME_TAC
13924 THENL(*4*)[
13925 ASM_REWRITE_TAC[face;orbit_map;EXTENSION;IN_ELIM_THM]
13926 THEN GEN_TAC
13927 THEN EQ_TAC
13928 THEN STRIP_TAC
13929 THEN MRESAL_TAC into_domain_power_efn_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`n:num`;`( \ t. res (t x V E ) (d1_fan (x:real^3,V,E))) `][POWER_1;I_DEF]
13930 THEN POP_ASSUM(fun th-> MRESA1_TAC th `f1':real^3#real^3#real^3#real^3`)
13931 THEN EXISTS_TAC`n:num`
13932 THEN ASM_REWRITE_TAC[];(*4*)
13933
13934 MRESAL_TAC identity_face_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`f1':real^3#real^3#real^3#real^3`][]
13935 THEN MRESAL_TAC card_orbit_le[`f1_fan (x:real^3) V E`;`3`;`f1':real^3#real^3#real^3#real^3`][ARITH_RULE`~(3=0)`]
13936 THEN POP_ASSUM MP_TAC
13937 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM th])
13938 THEN FIND_ASSUM MP_TAC`CARD( ds:real^3#real^3#real^3#real^3->bool)>3`
13939 THEN ARITH_TAC](*4*)](*3*);(*2*)
13940
13941 POP_ASSUM MP_TAC
13942 THEN DISCH_THEN(LABEL_TAC"EMYEU")
13943 THEN EXISTS_TAC`f1':real^3#real^3#real^3#real^3`
13944 THEN EXISTS_TAC`f2':real^3#real^3#real^3#real^3`
13945 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
13946 THEN ASM_REWRITE_TAC[]
13947 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(f2':real^3#real^3#real^3#real^3)` ;`(f1':real^3#real^3#real^3#real^3)`]
13948 THEN MRESA_TAC properties_of_f1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(y:real^3#real^3#real^3#real^3)` ;`(f2':real^3#real^3#real^3#real^3)`]
13949 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)] 
13950 THEN POP_ASSUM MP_TAC
13951 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)]
13952 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th)
13953 THEN POP_ASSUM MP_TAC
13954 THEN POP_ASSUM MP_TAC
13955 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th) THEN ASSUME_TAC th)
13956 THEN STRIP_TAC
13957 THEN STRIP_TAC
13958 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[th] THEN MP_TAC th)
13959 THEN REPEAT STRIP_TAC THEN ASSUME_TAC (SYM th))
13960 THEN MRESA_TAC PROPERTIES_TRIANGLE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1'):real^3`;`(pr3 f1'):real^3`;` (pr2 y):real^3`]
13961 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
13962 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC 
13963 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
13964 THEN REPEAT STRIP_TAC
13965 THEN MRESA_TAC condition_f1_eq_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` (pr2 y):real^3`;`(pr2 f1'):real^3`;`(pr3 f1'):real^3`;]
13966 THEN REMOVE_THEN "EMYEU" MP_TAC
13967 THEN REMOVE_THEN"VUT"(fun th-> REWRITE_TAC[SYM th])
13968 THEN ASM_TAC
13969 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13970 THEN REPEAT (ASM_REWRITE_TAC[pr2;pr3] THEN STRIP_TAC THEN ASM_REWRITE_TAC[])
13971 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13972 THEN POP_ASSUM MP_TAC
13973 THEN REMOVE_ASSUM_TAC
13974 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
13975 THEN STRIP_TAC
13976 THEN MRESA_TAC MONO_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;` v'':real^3`;`v'''':real^3`;`w'':real^3`]]]);;
13977
13978 let conforming_diagonal_fan_ds_fanadd=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 y z.
13979 FAN(x,V,E)
13980  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13981 /\ fan80(x,V,E)
13982 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13983 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
13984 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13985 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13986 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13987 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13988 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13989 /\ (x,w,v,u)=f10
13990 /\ (x,v,u,w)=f20
13991 /\ (x,u,w,v)=f30
13992 /\ E UNION {{v,w}}= E1
13993 /\ (!E1. FAN(x,V,E1)  /\ 
13994          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
13995          fan80(x,V,E1)/\ 
13996          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13997 /\ y IN ds
13998 /\ z IN ds
13999 /\ ~(y=z)
14000 ==> ~collinear {x, pr2 y, pr2 z} /\
14001                   (y = f1_fan x V E z \/
14002                    z = f1_fan x V E y \/
14003                    aff_gt {x} {pr2 y, pr2 z} SUBSET
14004                    dartset_leads_into_fan x V E ds)`,
14005
14006 REPEAT GEN_TAC
14007 THEN STRIP_TAC
14008 THEN MRESA_TAC INDUCTION_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14009 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`y:real^3#real^3#real^3#real^3`]
14010 THEN POP_ASSUM MP_TAC
14011 THEN ABBREV_TAC`v'= pr2 (f1':real^3#real^3#real^3#real^3)`
14012 THEN ABBREV_TAC`u'= pr2 (f2':real^3#real^3#real^3#real^3)`
14013 THEN ABBREV_TAC`w'= pr2 (f3':real^3#real^3#real^3#real^3)`
14014 THEN ABBREV_TAC`E1'= E UNION {{v':real^3, w':real^3}}`
14015 THEN ABBREV_TAC`ds1'= face (hypermap1_of_fanx (x,V,E1')) ((x,v',w',sigma_fan x V E1' v' w'):real^3#real^3#real^3#real^3)`
14016 THEN ABBREV_TAC`ds2'= face (hypermap1_of_fanx (x,V,E1')) ((x,w',v',sigma_fan x V E1' w' v'):real^3#real^3#real^3#real^3)`
14017 THEN ABBREV_TAC`f10'= ((x,w',v',u'):real^3#real^3#real^3#real^3)`
14018 THEN ABBREV_TAC`f20'= ((x,v',u',w'):real^3#real^3#real^3#real^3)`
14019 THEN ABBREV_TAC`f30'= ((x,u',w',v'):real^3#real^3#real^3#real^3)`
14020 THEN STRIP_TAC
14021 THEN MRESA_TAC conforming_diagonal_fanadd1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1':(real^3->bool)->bool)`;
14022 `ds:real^3#real^3#real^3#real^3->bool`; `(f1':real^3#real^3#real^3#real^3)` ;`(f2':real^3#real^3#real^3#real^3)`;`(f3':real^3#real^3#real^3#real^3)`;`v':real^3`;`u':real^3`; `w':real^3`;`ds1':real^3#real^3#real^3#real^3->bool`;`ds2':real^3#real^3#real^3#real^3->bool` ;`(f10':real^3#real^3#real^3#real^3)`;`(f20':real^3#real^3#real^3#real^3)`;`(f30':real^3#real^3#real^3#real^3)`;`(z:real^3#real^3#real^3#real^3)`]
14023 THEN POP_ASSUM MP_TAC
14024 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14025 THEN ASM_REWRITE_TAC[]);;
14026
14027 let GGZWYRM=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14028 FAN(x,V,E)
14029  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14030 /\ fan80(x,V,E)
14031 /\ (!E1. FAN(x,V,E1)  /\ 
14032          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14033          fan80(x,V,E1)/\ 
14034          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14035 ==> conforming_diagonal_fan(x,V,E)`,
14036 REWRITE_TAC[conforming_diagonal_fan]
14037 THEN REPEAT GEN_TAC
14038 THEN STRIP_TAC
14039 THEN REPEAT GEN_TAC
14040 THEN STRIP_TAC
14041 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`(f):real^3#real^3#real^3#real^3->bool`]
14042 THEN MP_TAC(ARITH_RULE`3<= CARD (f:real^3#real^3#real^3#real^3->bool)==> CARD f=3 \/ CARD f>3`)
14043 THEN RESA_TAC
14044 THENL[
14045 POP_ASSUM MP_TAC
14046 THEN POP_ASSUM MP_TAC
14047 THEN POP_ASSUM MP_TAC
14048 THEN POP_ASSUM MP_TAC
14049 THEN POP_ASSUM MP_TAC
14050 THEN DISCH_THEN(LABEL_TAC"EM1")
14051 THEN DISCH_THEN(LABEL_TAC"EM2")
14052 THEN STRIP_TAC
14053 THEN STRIP_TAC
14054 THEN STRIP_TAC
14055 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
14056 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f2):real^3`;`(pr2 f1):real^3`]
14057 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f3):real^3`;`(pr2 f2):real^3`]
14058 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (pr2 f1):real^3`;`(pr2 f3):real^3`]
14059 THEN REPEAT DISCH_TAC
14060 THEN REMOVE_THEN"EM1" MP_TAC
14061 THEN REMOVE_THEN"EM2" MP_TAC
14062 THEN RESA_TAC
14063 THEN RESA_TAC
14064 THEN MP_TAC(SET_RULE`y IN {f1, f2, f3:real^3#real^3#real^3#real^3} /\ z IN {f1, f2, f3}/\ ~(y = z)
14065 ==> (y=f1 /\ z= f2) \/ (y=f1 /\ z= f3) \/ (y=f2 /\ z= f1) \/ (y=f2 /\ z= f3)\/ (y=f3 /\ z= f1) \/ (y=f3 /\ z= f2)` )
14066 THEN RESA_TAC
14067 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14068 THEN ASM_REWRITE_TAC[];
14069 MRESA_TAC nonconformin_fan_imp_exist_3point_in_face[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`f:real^3#real^3#real^3#real^3->bool`] 
14070 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
14071 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
14072 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
14073 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
14074 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E1)) ((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`
14075 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E1)) ((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`
14076 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
14077 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
14078 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
14079 THEN MRESA_TAC conforming_diagonal_fan_ds_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14080 `f:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`(y:real^3#real^3#real^3#real^3)`;`(z:real^3#real^3#real^3#real^3)`]
14081 ]);;
14082
14083 let  INTERS_HALF_SPACE_DS_FANADD3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U1.
14084 FAN(x,V,E)
14085  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14086 /\ fan80(x,V,E)
14087 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14088 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14089 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14090 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14091 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14092 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14093 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14094 /\ (x,w,v,u)=f10
14095 /\ (x,v,u,w)=f20
14096 /\ (x,u,w,v)=f30
14097 /\ E UNION {{v,w}}= E1
14098 /\ (!E1. FAN(x,V,E1)  /\ 
14099          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14100          fan80(x,V,E1)/\ 
14101          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14102 /\ U1=INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} 
14103 ==> U1 INTER aff {x, v, w} SUBSET aff_gt {x} {v, w}`,
14104 REPEAT STRIP_TAC
14105 THEN POP_ASSUM MP_TAC
14106 THEN DISCH_THEN(LABEL_TAC"EM")
14107 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14108 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14109 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14110 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14111 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14112 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14113 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14114 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14115 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14116 THEN ASM_REWRITE_TAC[]
14117 THEN STRIP_TAC
14118 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14119 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14120 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14121 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14122 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14123 THEN DISCH_TAC
14124 THEN POP_ASSUM (fun th -> MP_TAC th
14125 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14126 THEN DISCH_TAC
14127 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
14128 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14129 `v:real^3`;`u:real^3`; `w:real^3` ]
14130 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
14131 THEN RESA_TAC
14132 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14133 THEN DISCH_TAC
14134 THEN POP_ASSUM (fun th -> MP_TAC th
14135 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14136 THEN DISCH_TAC
14137 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
14138 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
14139 THEN RESA_TAC
14140 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14141 `(v:real^3)`]
14142 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
14143 `v:real^3`]
14144 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`u:real^3`]
14145 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`sigma_fan x V E v  (u:real^3)`;
14146 `v:real^3`]
14147 THEN REMOVE_ASSUM_TAC
14148 THEN POP_ASSUM MP_TAC
14149 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14150 THEN STRIP_TAC
14151 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14152 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`sigma_fan x V E v u:real^3`;`v:real^3`;`u:real^3`]
14153 THEN POP_ASSUM MP_TAC
14154 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14155 THEN STRIP_TAC
14156 THEN MRESA_TAC aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_1[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E v u:real^3`;`w:real^3`]
14157 THEN POP_ASSUM MP_TAC
14158 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14159 THEN DISCH_TAC
14160 THEN POP_ASSUM (fun th -> MP_TAC th
14161 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14162 THEN DISCH_TAC
14163 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
14164 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
14165 THEN POP_ASSUM MP_TAC
14166 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
14167 THEN STRIP_TAC
14168 THEN MRESA_TAC aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_14[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`;]
14169 THEN POP_ASSUM MP_TAC
14170 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
14171 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
14172 THEN REWRITE_TAC[INTERS;INTER;SUBSET;IN_ELIM_THM]
14173 THEN REPEAT STRIP_TAC
14174 THENL[
14175 POP_ASSUM MP_TAC
14176 THEN POP_ASSUM MP_TAC
14177 THEN POP_ASSUM MP_TAC
14178 THEN DISCH_THEN(LABEL_TAC"LINH1")
14179 THEN SUBGOAL_THEN`(?y. y IN ds /\
14180            aff_gt {x, v, u} {sigma_fan x V E v u} =
14181            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y):real^3})`
14182 ASSUME_TAC
14183 THENL[
14184 EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
14185 THEN ASM_REWRITE_TAC[]
14186 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
14187 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`]
14188 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);
14189 STRIP_TAC
14190 THEN POP_ASSUM(fun th-> MRESA1_TAC th`aff_gt {x, v, u} {sigma_fan x V E v u:real^3}`)
14191 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`x':real^3`)];
14192
14193 POP_ASSUM MP_TAC
14194 THEN POP_ASSUM MP_TAC
14195 THEN POP_ASSUM MP_TAC
14196 THEN POP_ASSUM MP_TAC
14197 THEN DISCH_THEN(LABEL_TAC"LINH1")
14198 THEN STRIP_TAC
14199 THEN SUBGOAL_THEN `(?y. y IN ds /\
14200            aff_gt {x, u, w} {v} =
14201            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y):real^3})`
14202 ASSUME_TAC
14203 THENL[
14204 EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
14205 THEN ASM_REWRITE_TAC[]
14206 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
14207 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
14208 THENL[
14209 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14210 THEN EXISTS_TAC`x:real^3`
14211 THEN EXISTS_TAC`V:real^3->bool`
14212 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14213 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14214 THEN ASM_REWRITE_TAC[]
14215 THEN ASM_TAC
14216 THEN REWRITE_TAC[pr2;pr3]
14217 THEN REPEAT STRIP_TAC
14218 THEN ASM_REWRITE_TAC[]
14219 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14220 THEN EXISTS_TAC`x:real^3`
14221 THEN EXISTS_TAC`u:real^3`
14222 THEN EXISTS_TAC`w:real^3`
14223 THEN EXISTS_TAC`v:real^3`
14224 THEN ASM_REWRITE_TAC[];
14225 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14226 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14227 THEN REWRITE_TAC[f1_fan]
14228 THEN ASM_REWRITE_TAC[pr3]];
14229 STRIP_TAC
14230 THEN POP_ASSUM(fun th-> MRESA1_TAC th`aff_gt {x, u, w} {v:real^3}`)
14231 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`x':real^3`)]]);;
14232
14233
14234 let lemma_HYUAZSE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30 U U1.
14235 FAN(x,V,E)
14236  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14237 /\ fan80(x,V,E)
14238 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14239 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14240 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14241 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14242 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14243 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14244 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14245 /\ (x,w,v,u)=f10
14246 /\ (x,v,u,w)=f20
14247 /\ (x,u,w,v)=f30
14248 /\ E UNION {{v,w}}= E1
14249 /\ (!E1. FAN(x,V,E1)  /\ 
14250          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14251          fan80(x,V,E1)/\ 
14252          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14253 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} = U1
14254 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
14255 ==> U1 SUBSET U`,
14256 REPEAT STRIP_TAC
14257 THEN POP_ASSUM MP_TAC
14258 THEN DISCH_THEN(LABEL_TAC"EM")
14259 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14260 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14261 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14262 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14263 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14264 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14265 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14266 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14267 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14268 THEN ASM_REWRITE_TAC[]
14269 THEN STRIP_TAC
14270 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14271 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14272 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14273 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14274
14275 THEN MRESA_TAC INTERS_HALF_SPACE_DS_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14276 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
14277 THEN MRESA_TAC INTERS_HALF_SPACE_DS_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14278 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
14279 THEN MRESA_TAC INTERS_HALF_SPACE_DS_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14280 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`U1:real^3->bool`]
14281 THEN MRESA_TAC SPACE3_EQ_UNION_3SET
14282 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14283 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14284 THEN POP_ASSUM MP_TAC
14285 THEN POP_ASSUM MP_TAC
14286 THEN POP_ASSUM MP_TAC
14287 THEN POP_ASSUM MP_TAC
14288 THEN SET_TAC[]);;
14289
14290
14291
14292 let DART_FANADD_SUBSET_HALFSPACE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14293 FAN(x,V,E)
14294  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14295 /\ fan80(x,V,E)
14296 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14297 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14298 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14299 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14300 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14301 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14302 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14303 /\ (x,w,v,u)=f10
14304 /\ (x,v,u,w)=f20
14305 /\ (x,u,w,v)=f30
14306 /\ E UNION {{v,w}}= E1
14307 /\ (!E1. FAN(x,V,E1)  /\ 
14308          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14309          fan80(x,V,E1)/\ 
14310          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14311 ==> dartset_leads_into_fan x V E1 ds1 SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14312
14313 REPEAT STRIP_TAC
14314 THEN POP_ASSUM MP_TAC
14315 THEN DISCH_THEN(LABEL_TAC"EM")
14316 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14317 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14318 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14319 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14320 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14321 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14322 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14323 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14324 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14325 THEN ASM_REWRITE_TAC[]
14326 THEN STRIP_TAC
14327 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14328 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14329 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
14330 THENL[
14331 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14332 THEN EXISTS_TAC`x:real^3`
14333 THEN EXISTS_TAC`V:real^3->bool`
14334 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14335 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14336 THEN ASM_REWRITE_TAC[]
14337 THEN ASM_TAC
14338 THEN REWRITE_TAC[pr2;pr3]
14339 THEN REPEAT STRIP_TAC
14340 THEN ASM_REWRITE_TAC[]
14341 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14342 THEN EXISTS_TAC`x:real^3`
14343 THEN EXISTS_TAC`u:real^3`
14344 THEN EXISTS_TAC`w:real^3`
14345 THEN EXISTS_TAC`v:real^3`
14346 THEN ASM_REWRITE_TAC[];
14347
14348 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14349 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14350 THEN REWRITE_TAC[f1_fan]
14351 THEN ASM_REWRITE_TAC[pr3]
14352 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14353 THEN REMOVE_ASSUM_TAC
14354 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14355 THEN POP_ASSUM MP_TAC
14356 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14357 THEN POP_ASSUM MP_TAC
14358 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14359 THEN ASM_REWRITE_TAC[]
14360 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14361 THEN STRIP_TAC
14362 THEN STRIP_TAC
14363 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
14364 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14365 THEN MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14366 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14367 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14368 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14369 THEN POP_ASSUM MP_TAC
14370 THEN REWRITE_TAC[conforming_fan;conforming_half_space_fan]
14371 THEN REPEAT STRIP_TAC
14372 THEN REMOVE_ASSUM_TAC
14373 THEN REMOVE_ASSUM_TAC
14374 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds1:real^3#real^3#real^3#real^3->bool`)
14375 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E1 ds1 =
14376       INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E1 y)} | y IN ds1}
14377 ==> (!y. y IN ds1 ==> dartset_leads_into_fan x V E1 ds1 SUBSET aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E1 y):real^3})`)
14378 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
14379 THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[SYM th])
14380 THEN DISCH_THEN(LABEL_TAC"LINH")
14381 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w:real^3) IN ds1`ASSUME_TAC
14382 THENL[
14383
14384 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])`face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) = ds1:real^3#real^3#real^3#real^3->bool`
14385 THEN EXISTS_TAC`0`
14386 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
14387 MRESAL_TAC condition_f1_fan_in_face_set[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`((x,w,inverse1_sigma_fan x V E1 w v,v):real^3#real^3#real^3#real^3)` ;`((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`;`ds1:real^3#real^3#real^3#real^3->bool`][f1_fan]
14388 THEN REMOVE_THEN "LINH"(fun th-> MRESAL1_TAC th `(x,w,inverse1_sigma_fan x V E1 w v,v:real^3)`[f1_fan;pr3;pr2] 
14389 THEN POP_ASSUM MP_TAC
14390 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
14391 THEN RESA_TAC
14392 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
14393 THEN REMOVE_ASSUM_TAC
14394 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14395 THEN POP_ASSUM MP_TAC
14396 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14397 THEN POP_ASSUM MP_TAC
14398 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14399 THEN ASM_REWRITE_TAC[]
14400 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14401 THEN STRIP_TAC
14402 THEN STRIP_TAC
14403 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`]
14404 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14405 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14406 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14407 THEN MRESAL1_TAC th `(x,v,w,sigma_fan x V E1 v w:real^3)`[f1_fan;pr3;pr2])
14408 THEN POP_ASSUM MP_TAC
14409 THEN POP_ASSUM MP_TAC
14410 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14411 THEN REWRITE_TAC[fan80]
14412 THEN STRIP_TAC
14413 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`])
14414 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`]
14415 THEN POP_ASSUM MP_TAC
14416 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14417 THEN RESA_TAC
14418 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`;`v:real^3`;]
14419 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`(v:real^3)`;`w:real^3`]
14420 THEN POP_ASSUM MP_TAC
14421 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
14422 THEN RESA_TAC
14423 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`v:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`; ]
14424 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`;`v :real^3`;]
14425 THEN POP_ASSUM MP_TAC
14426 THEN DISCH_THEN(LABEL_TAC"CHANGE")
14427 THEN STRIP_TAC
14428 THEN REMOVE_THEN "CHANGE" MP_TAC
14429 THEN RESA_TAC
14430 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14431 THEN REWRITE_TAC[fan80]
14432 THEN STRIP_TAC
14433 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14434 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
14435 THEN POP_ASSUM MP_TAC
14436 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14437 THEN RESA_TAC
14438 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`u:real^3`;]
14439 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(u:real^3)`;`w:real^3`]
14440 THEN POP_ASSUM MP_TAC
14441 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
14442 THEN RESA_TAC
14443 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`u:real^3`;`inverse1_sigma_fan x V E w u:real^3`; ]
14444 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`u :real^3`;]]]);;
14445
14446
14447
14448 let DART_FANADD_SUBSET_HALFSPACE1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14449 FAN(x,V,E)
14450  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14451 /\ fan80(x,V,E)
14452 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14453 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14454 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14455 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14456 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14457 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14458 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14459 /\ (x,w,v,u)=f10
14460 /\ (x,v,u,w)=f20
14461 /\ (x,u,w,v)=f30
14462 /\ E UNION {{v,w}}= E1
14463 /\ (!E1. FAN(x,V,E1)  /\ 
14464          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14465          fan80(x,V,E1)/\ 
14466          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14467 ==> dartset_leads_into_fan x V E1 ds2 SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14468 REPEAT STRIP_TAC
14469 THEN POP_ASSUM MP_TAC
14470 THEN DISCH_THEN(LABEL_TAC"EM")
14471 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14472 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14473 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14474 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14475 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14476 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14477 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14478 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14479 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14480 THEN ASM_REWRITE_TAC[]
14481 THEN STRIP_TAC
14482 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14483 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14484 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
14485 THENL[
14486 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14487 THEN EXISTS_TAC`x:real^3`
14488 THEN EXISTS_TAC`V:real^3->bool`
14489 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14490 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14491 THEN ASM_REWRITE_TAC[]
14492 THEN ASM_TAC
14493 THEN REWRITE_TAC[pr2;pr3]
14494 THEN REPEAT STRIP_TAC
14495 THEN ASM_REWRITE_TAC[]
14496 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14497 THEN EXISTS_TAC`x:real^3`
14498 THEN EXISTS_TAC`u:real^3`
14499 THEN EXISTS_TAC`w:real^3`
14500 THEN EXISTS_TAC`v:real^3`
14501 THEN ASM_REWRITE_TAC[];
14502
14503 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14504 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14505 THEN REWRITE_TAC[f1_fan]
14506 THEN ASM_REWRITE_TAC[pr3]
14507 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14508 THEN REMOVE_ASSUM_TAC
14509 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14510 THEN POP_ASSUM MP_TAC
14511 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14512 THEN POP_ASSUM MP_TAC
14513 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14514 THEN ASM_REWRITE_TAC[]
14515 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14516 THEN STRIP_TAC
14517 THEN STRIP_TAC
14518 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
14519 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14520 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14521 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14522 THEN MRESA_TAC ds2_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14523 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14524 THEN MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14525 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14526 THEN MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
14527 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14528 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14529 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14530 THEN REWRITE_TAC[SET_RULE`{pr2 y | y IN {f10, f20, f30}}={pr2 f10, pr2 f20, pr2 f30}`]
14531 THEN EXPAND_TAC"f10"
14532 THEN EXPAND_TAC"f20"
14533 THEN EXPAND_TAC"f30"
14534 THEN REWRITE_TAC[pr2]
14535 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14536 THEN DISCH_TAC
14537 THEN POP_ASSUM (fun th -> MP_TAC th
14538 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14539 THEN DISCH_TAC
14540 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`] THEN MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
14541 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`]
14542 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
14543 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`]
14544 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14545 THEN MP_TAC(SET_RULE`{u,w} IN E/\ E UNION {{v, w:real^3}} = E1==>{v, w} IN E1 /\ {u,w} IN E1`)
14546 THEN RESA_TAC
14547 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14548 `v:real^3`;`u:real^3`; `w:real^3` ]
14549 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14550 THEN DISCH_TAC
14551 THEN POP_ASSUM (fun th -> MP_TAC th
14552 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14553 THEN DISCH_TAC
14554 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`v:real^3`])
14555 THEN POP_ASSUM MP_TAC
14556 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14557 THEN RESA_TAC
14558 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`v:real^3`]
14559 THEN POP_ASSUM MP_TAC
14560 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14561 THEN RESA_TAC
14562 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
14563 `(w:real^3)`]
14564 THEN POP_ASSUM MP_TAC
14565 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14566 THEN RESA_TAC
14567 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14568 `(u:real^3)`]
14569 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
14570 THEN POP_ASSUM MP_TAC
14571 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14572 THEN RESA_TAC
14573 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
14574 THEN POP_ASSUM MP_TAC
14575 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
14576 THEN RESA_TAC
14577 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14578 THEN ASM_REWRITE_TAC[SET_RULE`A INTER B INTER C= A INTER C INTER B`]
14579 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14580 THEN REMOVE_ASSUM_TAC
14581 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
14582 THEN SUBGOAL_THEN`wedge x w v u SUBSET wedge x w (inverse1_sigma_fan x V E w u:real^3) u` ASSUME_TAC
14583 THENL[
14584 REWRITE_TAC[wedge;IN_ELIM_THM;SUBSET]
14585 THEN STRIP_TAC THEN STRIP_TAC
14586 THEN ASM_REWRITE_TAC[]
14587 THEN MP_TAC(REAL_ARITH`azim x w v x' < azim x w v (u:real^3)==> azim x w v x' <= azim x w v u`)
14588 THEN RESA_TAC
14589 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`w:real^3`;`v:real^3`;`x':real^3`;`u:real^3`]
14590 THEN POP_ASSUM MP_TAC
14591 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14592 THEN RESA_TAC
14593 THEN MP_TAC(REAL_ARITH`azim x w v x' < azim x w v (u:real^3)/\ azim x w v u = azim x w v x' + azim x w x' (u:real^3) /\ &0 < azim x w v x'  ==> &0< azim x w x' u /\ azim x w x' u < azim x w v u`)
14594 THEN RESA_TAC
14595 THEN POP_ASSUM MP_TAC
14596 THEN POP_ASSUM MP_TAC
14597 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14598 THEN STRIP_TAC
14599 THEN STRIP_TAC
14600 THEN MRESA_TAC azim_trangle_le_azim_face_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`; `w:real^3`;` (inverse1_sigma_fan x V E w u):real^3`]
14601 THEN POP_ASSUM MP_TAC
14602 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
14603 THEN RESA_TAC
14604 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
14605 /\ azim x w x' u < azim x w v u
14606 ==>
14607 azim x w x' u < azim x w (inverse1_sigma_fan x V E w u) u
14608 /\
14609 azim x w x' u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
14610 THEN RESA_TAC
14611 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(inverse1_sigma_fan x V E w u):real^3`;
14612 `(w:real^3)`]
14613 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`x':real^3`;`u:real^3`]
14614 THEN POP_ASSUM MP_TAC
14615 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
14616 THEN RESA_TAC
14617 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u:real^3) u =
14618       azim x w (inverse1_sigma_fan x V E w u) x' + azim x w x' u 
14619 /\ azim x w x' u < azim x w (inverse1_sigma_fan x V E w u) u
14620 /\ &0< azim x w x' u
14621 ==>
14622 &0 < azim x w (inverse1_sigma_fan x V E w u) x' /\
14623  azim x w (inverse1_sigma_fan x V E w u) x' <
14624  azim x w (inverse1_sigma_fan x V E w u) x' + azim x w x' u
14625 `)
14626 THEN ASM_REWRITE_TAC[];
14627 POP_ASSUM MP_TAC
14628 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(inverse1_sigma_fan x V E w u):real^3`;
14629 `(w:real^3)`]
14630 THEN REMOVE_THEN "YEU EM"(fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14631 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`u:real^3`]
14632 THEN POP_ASSUM MP_TAC
14633 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14634 THEN RESA_TAC
14635 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`]
14636 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`(inverse1_sigma_fan x V E w u):real^3`;`w:real^3`;`u:real^3`]
14637 THEN POP_ASSUM MP_TAC
14638 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
14639 THEN RESA_TAC
14640 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`]
14641 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14642 THEN SET_TAC[]]]);;
14643
14644 let DART_FANADD_SUBSET_HALFSPACE2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14645 FAN(x,V,E)
14646  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14647 /\ fan80(x,V,E)
14648 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14649 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14650 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14651 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14652 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14653 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14654 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14655 /\ (x,w,v,u)=f10
14656 /\ (x,v,u,w)=f20
14657 /\ (x,u,w,v)=f30
14658 /\ E UNION {{v,w}}= E1
14659 /\ (!E1. FAN(x,V,E1)  /\ 
14660          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14661          fan80(x,V,E1)/\ 
14662          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14663 ==> aff_gt {x} {v,w} SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14664 REPEAT STRIP_TAC
14665 THEN POP_ASSUM MP_TAC
14666 THEN DISCH_THEN(LABEL_TAC"EM")
14667 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14668 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14669 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14670 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14671 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14672 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14673 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14674 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14675 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14676 THEN ASM_REWRITE_TAC[]
14677 THEN STRIP_TAC
14678 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14679 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14680 THEN SUBGOAL_THEN`f2= (x, pr2 f2,pr3 f2,sigma_fan x V E (pr2 f2) (pr3 f2)):real^3#real^3#real^3#real^3`ASSUME_TAC
14681 THENL[
14682 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14683 THEN EXISTS_TAC`x:real^3`
14684 THEN EXISTS_TAC`V:real^3->bool`
14685 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14686 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14687 THEN ASM_REWRITE_TAC[]
14688 THEN ASM_TAC
14689 THEN REWRITE_TAC[pr2;pr3]
14690 THEN REPEAT STRIP_TAC
14691 THEN ASM_REWRITE_TAC[]
14692 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14693 THEN EXISTS_TAC`x:real^3`
14694 THEN EXISTS_TAC`u:real^3`
14695 THEN EXISTS_TAC`w:real^3`
14696 THEN EXISTS_TAC`v:real^3`
14697 THEN ASM_REWRITE_TAC[];
14698
14699 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14700 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14701 THEN REWRITE_TAC[f1_fan]
14702 THEN ASM_REWRITE_TAC[pr3]
14703 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14704 THEN REMOVE_ASSUM_TAC
14705 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14706 THEN POP_ASSUM MP_TAC
14707 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14708 THEN POP_ASSUM MP_TAC
14709 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14710 THEN ASM_REWRITE_TAC[]
14711 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14712 THEN STRIP_TAC
14713 THEN STRIP_TAC
14714 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`]
14715 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14716 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> { v,w} IN E1`)
14717 THEN RESA_TAC
14718 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14719 `(v:real^3)`]
14720 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
14721 THEN MATCH_MP_TAC(SET_RULE`A SUBSET B ==> C INTER A SUBSET B`)
14722 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
14723 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14724 THEN DISCH_TAC
14725 THEN POP_ASSUM (fun th -> MP_TAC th
14726 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14727 THEN DISCH_TAC
14728 THEN POP_ASSUM (fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14729 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(inverse1_sigma_fan x V E w u):real^3`;
14730 `(w:real^3)`]
14731 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
14732 `(u:real^3)`]
14733 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`u:real^3`;`inverse1_sigma_fan x V E w u:real^3`;]
14734 THEN POP_ASSUM MP_TAC
14735 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14736 THEN RESA_TAC
14737 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`]
14738 THEN MRESAL_TAC  aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`;`u:real^3`][IN_ELIM_THM]
14739 THEN POP_ASSUM MP_TAC
14740 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
14741 THEN RESA_TAC
14742 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14743 THEN ASM_REWRITE_TAC[SUBSET;IN_ELIM_THM]
14744 THEN REPEAT STRIP_TAC
14745 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(t1 % x + t2 % w + t3 % v) - x= ((t1+t2+t3)- &1) % x+ t2 % (w-x) +t3 % (v-x)`; VECTOR_ARITH`(&1 - &1) % x + t2 % (w - x) + t3 % (v - x)= t2 % (w - x) + t3 % (v - x)`;DOT_RMUL;DOT_RADD;DOT_CROSS_SELF;REAL_ARITH`A * &0 +B=B`]
14746 THEN MATCH_MP_TAC REAL_LT_MUL
14747 THEN ASM_REWRITE_TAC[]
14748 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`;`v:real^3`;`inverse1_sigma_fan x V E w u:real^3`;]
14749 THEN POP_ASSUM MATCH_MP_TAC
14750 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14751 THEN ASM_REWRITE_TAC[]
14752 THEN MP_TAC(SET_RULE`{w, inverse1_sigma_fan x V E w u} IN E /\ {u,w} IN E/\ E UNION {{v, w:real^3}} = E1==>{w, inverse1_sigma_fan x V E w u} IN E1 /\ {u,w} IN E1`)
14753 THEN RESA_TAC
14754 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14755 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14756 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
14757 THEN REMOVE_ASSUM_TAC
14758 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14759 THEN POP_ASSUM MP_TAC
14760 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14761 THEN RESA_TAC
14762 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14763 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14764 THEN POP_ASSUM (fun th -> MP_TAC th
14765 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14766 THEN DISCH_TAC
14767 THEN POP_ASSUM (fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])]);;
14768
14769
14770
14771 let DART_FANADD_SUBSET_HALFSPACE3= prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14772 FAN(x,V,E)
14773  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14774 /\ fan80(x,V,E)
14775 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14776 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14777 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14778 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14779 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14780 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14781 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14782 /\ (x,w,v,u)=f10
14783 /\ (x,v,u,w)=f20
14784 /\ (x,u,w,v)=f30
14785 /\ E UNION {{v,w}}= E1
14786 /\ (!E1. FAN(x,V,E1)  /\ 
14787          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14788          fan80(x,V,E1)/\ 
14789          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14790 ==> dartset_leads_into_fan x V E ds SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14791
14792
14793
14794
14795
14796 REPEAT STRIP_TAC
14797 THEN POP_ASSUM MP_TAC
14798 THEN DISCH_THEN(LABEL_TAC"EM")
14799 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14800 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14801 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14802 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14803 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14804 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14805 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14806 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14807 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14808 THEN ASM_REWRITE_TAC[]
14809 THEN STRIP_TAC
14810 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14811 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14812 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14813 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION
14814       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
14815       aff_gt {x} {v, w}:real^3->bool`]
14816 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14817 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14818 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14819 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14820 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14821 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14822 THEN POP_ASSUM MP_TAC
14823 THEN POP_ASSUM MP_TAC
14824 THEN POP_ASSUM MP_TAC
14825 THEN SET_TAC[]);;
14826
14827 let DART_FANADD_SUBSET_HALFSPACE4=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14828 FAN(x,V,E)
14829  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14830 /\ fan80(x,V,E)
14831 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14832 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14833 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14834 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14835 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14836 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14837 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14838 /\ (x,w,v,u)=f10
14839 /\ (x,v,u,w)=f20
14840 /\ (x,u,w,v)=f30
14841 /\ E UNION {{v,w}}= E1
14842 /\ (!E1. FAN(x,V,E1)  /\ 
14843          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14844          fan80(x,V,E1)/\ 
14845          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14846 ==> dartset_leads_into_fan x V E ds SUBSET INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds}`,
14847
14848
14849 REPEAT GEN_TAC
14850 THEN STRIP_TAC
14851 THEN REWRITE_TAC[SET_RULE`dartset_leads_into_fan x V E ds SUBSET INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} <=> (!y. y IN ds ==> dartset_leads_into_fan x V E ds SUBSET aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) })`]
14852 THEN REPEAT STRIP_TAC
14853 THEN MRESA_TAC INDUCTION_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14854 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`y:real^3#real^3#real^3#real^3`]
14855 THEN ABBREV_TAC`v'= pr2 (f1':real^3#real^3#real^3#real^3)`
14856 THEN ABBREV_TAC`u'= pr2 (f2':real^3#real^3#real^3#real^3)`
14857 THEN ABBREV_TAC`w'= pr2 (f3':real^3#real^3#real^3#real^3)`
14858 THEN ABBREV_TAC`E1'= E UNION {{v':real^3, w':real^3}}`
14859 THEN ABBREV_TAC`ds1'= face (hypermap1_of_fanx (x,V,E1')) ((x,v',w',sigma_fan x V E1' v' w'):real^3#real^3#real^3#real^3)`
14860 THEN ABBREV_TAC`ds2'= face (hypermap1_of_fanx (x,V,E1')) ((x,w',v',sigma_fan x V E1' w' v'):real^3#real^3#real^3#real^3)`
14861 THEN ABBREV_TAC`f10'= ((x,w',v',u'):real^3#real^3#real^3#real^3)`
14862 THEN ABBREV_TAC`f20'= ((x,v',u',w'):real^3#real^3#real^3#real^3)`
14863 THEN ABBREV_TAC`f30'= ((x,u',w',v'):real^3#real^3#real^3#real^3)`
14864 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1':(real^3->bool)->bool)`;
14865 `ds:real^3#real^3#real^3#real^3->bool`; `(f1':real^3#real^3#real^3#real^3)` ;`(f2':real^3#real^3#real^3#real^3)`;`(f3':real^3#real^3#real^3#real^3)`;`v':real^3`;`u':real^3`; `w':real^3`;`ds1':real^3#real^3#real^3#real^3->bool`;`ds2':real^3#real^3#real^3#real^3->bool` ;`(f10':real^3#real^3#real^3#real^3)`;`(f20':real^3#real^3#real^3#real^3)`;`(f30':real^3#real^3#real^3#real^3)`]);;
14866
14867 let DART_FANADD_EQ_HALFSPACE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 ds f1 f2 f3 v u w ds1 ds2 f10 f20 f30.
14868 FAN(x,V,E)
14869  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14870 /\ fan80(x,V,E)
14871 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14872 /\ {f1,f2,f3} SUBSET ds /\ f1_fan x V E f1=f2 /\ f1_fan x V E f2 =f3 /\ ~(f1_fan x V E f3 =f1)
14873 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14874 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14875 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14876 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14877 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14878 /\ (x,w,v,u)=f10
14879 /\ (x,v,u,w)=f20
14880 /\ (x,u,w,v)=f30
14881 /\ E UNION {{v,w}}= E1
14882 /\ (!E1. FAN(x,V,E1)  /\ 
14883          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14884          fan80(x,V,E1)/\ 
14885          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14886 ==> dartset_leads_into_fan x V E ds = INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds}`,
14887 REPEAT STRIP_TAC
14888 THEN POP_ASSUM MP_TAC
14889 THEN DISCH_THEN(LABEL_TAC"EM")
14890 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14891 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14892 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
14893 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`(\t. res (t x V E1) (d1_fan (x,V,E1)))`]
14894 THEN MRESA_TAC add_edge_imp_card_set_edge_ge1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
14895 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14896 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14897 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
14898 THEN MP_TAC(SET_RULE`{f1,f2,f3} SUBSET ds/\ ds SUBSET d1_fan (x:real^3,V,E)==> f1 IN d1_fan (x,V,E) /\ f2 IN d1_fan (x,V,E) /\ f3 IN d1_fan (x,V,E)/\ f1 IN ds /\ f2 IN ds /\ f3 IN ds`)
14899 THEN ASM_REWRITE_TAC[]
14900 THEN STRIP_TAC
14901 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14902 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14903 THEN MRESA_TAC rep_dartset_leads_into_fan_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14904 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION
14905       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
14906       aff_gt {x} {v, w}:real^3->bool`]
14907 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14908 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;]
14909 THEN MRESA_TAC lemma_HYUAZSE
14910 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14911 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`;`dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w:real^3}`;`INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN (ds:real^3#real^3#real^3#real^3->bool)}`]
14912 THEN POP_ASSUM MP_TAC
14913 THEN POP_ASSUM MP_TAC
14914 THEN SET_TAC[]);;
14915
14916
14917 let HYUAZSE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14918 FAN(x,V,E)
14919  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14920 /\ fan80(x,V,E)
14921 /\ (!E1. FAN(x,V,E1)  /\ 
14922          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\ 
14923          fan80(x,V,E1)/\ 
14924          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14925 ==> conforming_half_space_fan(x,V,E)`,
14926 REWRITE_TAC[conforming_half_space_fan]
14927 THEN REPEAT GEN_TAC
14928 THEN STRIP_TAC
14929 THEN REPEAT GEN_TAC
14930 THEN STRIP_TAC
14931 THEN MRESA_TAC CARD_FACE_SET_GE_3_FULLY_SURROUNDED_FAN[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`(f):real^3#real^3#real^3#real^3->bool`]
14932 THEN MP_TAC(ARITH_RULE`3<= CARD (f:real^3#real^3#real^3#real^3->bool)==> CARD f=3 \/ CARD f>3`)
14933 THEN RESA_TAC
14934 THENL[
14935 MRESA_TAC KVQWYDL_lemma10[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
14936 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th);])
14937 THEN MRESA_TAC CARD_FACE_SET_EQ_3_FULLY_SURROUNDED_FAN1[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`]
14938 THEN ASM_REWRITE_TAC[SET_RULE`INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)} | y IN {f1, f2, f3}}
14939 = aff_gt {x, pr2 f1, pr3 f1} {pr3 (f1_fan x V E f1)} INTER aff_gt {x, pr2 f2, pr3 f2} {pr3 (f1_fan x V E f2)} INTER aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3)}`;SET_RULE`{pr2 y | y IN {f1, f2, f3}}={pr2 f1, pr2 f2, pr2 f3}`]
14940
14941 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14942 THEN DISCH_TAC
14943 THEN POP_ASSUM (fun th -> MP_TAC th
14944 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14945 THEN DISCH_TAC
14946 THEN POP_ASSUM (fun th -> MRESA_TAC th [`pr2 f2:real^3`;`pr2 f3:real^3`])
14947 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(pr2 f1):real^3`;`(pr2 f2):real^3`;`(pr2 f3):real^3`]
14948 THEN MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`(pr3 f3):real^3`;`(pr3 f1):real^3`;`(pr3 f2):real^3`];
14949
14950
14951
14952 MRESA_TAC nonconformin_fan_imp_exist_3point_in_face[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`f:real^3#real^3#real^3#real^3->bool`] 
14953 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
14954 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
14955 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
14956 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
14957 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E1)) ((x,v,w,sigma_fan x V E1 v w):real^3#real^3#real^3#real^3)`
14958 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E1)) ((x,w,v,sigma_fan x V E1 w v):real^3#real^3#real^3#real^3)`
14959 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
14960 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
14961 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
14962 THEN MRESA_TAC DART_FANADD_EQ_HALFSPACE[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14963 `f:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`;`ds1:real^3#real^3#real^3#real^3->bool`;`ds2:real^3#real^3#real^3#real^3->bool` ;`(f10:real^3#real^3#real^3#real^3)`;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`]]);;
14964
14965
14966
14967
14968
14969 let PIIJBJK=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14970 FAN(x,V,E)
14971  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14972 /\ fan80(x,V,E)
14973 ==> conforming_fan(x,V,E)`,
14974
14975 REPEAT STRIP_TAC
14976 THEN DISJ_CASES_TAC(SET_RULE`~(conforming_fan (x,V,E))\/ (conforming_fan (x:real^3,V,E))`)
14977 THENL[
14978 ABBREV_TAC`S=  {(N_FAN(x':real^3,V',E1))| x'= x /\ V'= V /\ FAN(x,V,E1)/\ (!v. v IN V'==>CARD (set_of_edge v V' E1) > 1)
14979 /\ fan80(x',V',E1) /\ ~(conforming_fan (x',V',E1))}`
14980 THEN ABBREV_TAC`n= (minimal) (S:num->bool)`
14981 THEN SUBGOAL_THEN`?y. y IN (S:num->bool)`ASSUME_TAC
14982 THENL[
14983 EXPAND_TAC"S"
14984 THEN REWRITE_TAC[IN_ELIM_THM]
14985 THEN EXISTS_TAC`(N_FAN(x:real^3,V,E))`
14986 THEN EXISTS_TAC`x:real^3`
14987 THEN EXISTS_TAC`V:real^3->bool`
14988 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14989 THEN ASM_REWRITE_TAC[];
14990 POP_ASSUM MP_TAC
14991 THEN REWRITE_TAC[IN]
14992 THEN DISCH_TAC
14993 THEN MRESA1_TAC MINIMAL`S:num->bool`
14994 THEN SUBGOAL_THEN`n IN (S:num->bool)` ASSUME_TAC
14995 THENL[
14996 ASM_REWRITE_TAC[IN];
14997
14998 POP_ASSUM MP_TAC
14999 THEN EXPAND_TAC"S"
15000 THEN REWRITE_TAC[IN_ELIM_THM]
15001 THEN POP_ASSUM MP_TAC
15002 THEN DISCH_THEN(LABEL_TAC"LINHYEU")
15003 THEN STRIP_TAC
15004 THEN SUBGOAL_THEN`(!E2. FAN(x:real^3,V,E2)  /\ 
15005          (!v. v IN V==>CARD (set_of_edge v V E2) > 1) /\ 
15006          fan80(x,V,E2)/\ 
15007          N_FAN(x,V,E2)< N_FAN(x,V,E1) ==> conforming_fan (x,V,E2))
15008 `ASSUME_TAC
15009 THENL[
15010 REPEAT STRIP_TAC
15011 THEN REMOVE_THEN "LINHYEU"(fun th-> MRESA1_TAC th`N_FAN (x:real^3,V,E2)` )
15012 THEN MP_TAC(SET_RULE`~ (S (N_FAN (x:real^3,V,E2))) ==> ~(N_FAN (x,V,E2) IN S) `)
15013 THEN ASM_REWRITE_TAC[]
15014 THEN EXPAND_TAC"S"
15015 THEN REWRITE_TAC[IN_ELIM_THM;GSYM FORALL_NOT_THM;DE_MORGAN_THM]
15016 THEN STRIP_TAC
15017 THEN POP_ASSUM(fun th -> MRESA_TAC th[`x:real^3`;`V:real^3->bool`;`E2:(real^3->bool)->bool`]);
15018 MRESA_TAC nonconformin_fan_imp_n_fan_ge0[`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15019 THEN MRESA_TAC HYUAZSE[`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15020 THEN MRESA_TAC TXFBALB_VERSION
15021 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15022 THEN MRESA_TAC GGZWYRM
15023 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15024 THEN MRESA_TAC conforming_bijection_fanadd_verrion
15025 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15026 THEN FIND_ASSUM MP_TAC`~conforming_fan (x':real^3,V',E1)`
15027 THEN REWRITE_TAC[conforming_fan]
15028 THEN ASM_REWRITE_TAC[conforming_bijection_fan]]]];
15029 ASM_REWRITE_TAC[]]);;
15030
15031
15032 let expand_xfan_eq_aff_gt_aff_ge=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15033 FAN(x,V,E)
15034  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15035 /\ fan80(x,V,E)
15036 ==> UNIONS {y | ?e. e IN E /\ y = aff_ge {x} e}= (UNIONS {aff_gt {x} e | e IN E}) UNION (UNIONS {aff_ge {x} {v}| v IN V})`,
15037 REWRITE_TAC[UNIONS;UNION;]
15038 THEN ONCE_REWRITE_TAC[EXTENSION]
15039 THEN REWRITE_TAC[IN_ELIM_THM;]
15040 THEN REPEAT STRIP_TAC
15041 THEN EQ_TAC
15042 THENL[
15043 REPEAT STRIP_TAC
15044 THEN POP_ASSUM MP_TAC
15045 THEN POP_ASSUM MP_TAC
15046 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15047 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15048 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15049 `(v:real^3)`]
15050 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (w:real^3)`]
15051 THEN REWRITE_TAC[UNION]
15052 THEN RESA_TAC
15053 THEN REWRITE_TAC[IN_ELIM_THM]
15054 THEN STRIP_TAC
15055 THENL[
15056
15057
15058 SUBGOAL_THEN`(?u1. (?e. e IN E /\ u1 = aff_gt {x:real^3} e) /\ x' IN u1)`ASSUME_TAC
15059 THENL[
15060 EXISTS_TAC`aff_gt {x} {v, w:real^3}`
15061 THEN ASM_REWRITE_TAC[]
15062 THEN EXISTS_TAC`{v,w:real^3}`
15063 THEN ASM_REWRITE_TAC[];
15064 ASM_REWRITE_TAC[]];
15065
15066 SUBGOAL_THEN`(?u1. (?v. v IN V /\ u1 = aff_ge {x} {v:real^3}) /\ x' IN u1)` ASSUME_TAC
15067 THENL[
15068 EXISTS_TAC`aff_ge {x} {v:real^3}`
15069 THEN ASM_REWRITE_TAC[]
15070 THEN EXISTS_TAC`v:real^3`
15071 THEN ASM_REWRITE_TAC[];
15072 ASM_REWRITE_TAC[]];
15073
15074 SUBGOAL_THEN`(?u1. (?v. v IN V /\ u1 = aff_ge {x} {v:real^3}) /\ x' IN u1)` ASSUME_TAC
15075 THENL[
15076 EXISTS_TAC`aff_ge {x} {w:real^3}`
15077 THEN ASM_REWRITE_TAC[]
15078 THEN EXISTS_TAC`w:real^3`
15079 THEN ASM_REWRITE_TAC[]
15080 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
15081 `(w:real^3)`]
15082 THEN POP_ASSUM MP_TAC
15083 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15084 THEN RESA_TAC;
15085 ASM_REWRITE_TAC[]]];
15086
15087
15088 REPEAT STRIP_TAC
15089 THENL[
15090 POP_ASSUM MP_TAC
15091 THEN POP_ASSUM MP_TAC
15092 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15093 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15094 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15095 `(v:real^3)`]
15096 THEN RESA_TAC
15097 THEN RESA_TAC
15098 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
15099 THEN MP_TAC(SET_RULE`x' IN aff_gt {x} {v, w} /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
15100 ==> x' IN aff_ge {x:real^3} {v, w}`)
15101 THEN RESA_TAC
15102 THEN EXISTS_TAC`aff_ge {x:real^3} {v, w}`
15103 THEN ASM_REWRITE_TAC[]
15104 THEN EXISTS_TAC`{v,w:real^3}`
15105 THEN ASM_REWRITE_TAC[];
15106 POP_ASSUM MP_TAC
15107 THEN RESA_TAC
15108 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `v:real^3` th))`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
15109 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15110 THEN STRIP_TAC
15111 THEN MRESA_TAC exists_inf_element_fix_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u1:real^3`]
15112 THEN REMOVE_ASSUM_TAC
15113 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;`v:real^3`]
15114 THEN POP_ASSUM MP_TAC
15115 THEN RESA_TAC
15116 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (u':real^3)`]
15117 THEN MP_TAC(SET_RULE`aff_ge {x} {v, u'} =
15118       aff_gt {x} {v, u'} UNION aff_ge {x} {v} UNION aff_ge {x} {u'}
15119 /\ x' IN aff_ge {x} {v}
15120 ==> x' IN aff_ge {x} {v, u':real^3} `)
15121 THEN RESA_TAC
15122 THEN EXISTS_TAC`aff_ge {x} {v, u':real^3}`
15123 THEN ASM_REWRITE_TAC[]
15124 THEN EXISTS_TAC`{v,u':real^3}`
15125 THEN ASM_REWRITE_TAC[]]]);;
15126
15127
15128
15129 let properties12_fan7=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15130 FAN(x,V,E)
15131  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15132 /\ fan80(x,V,E)
15133 ==> (UNIONS {aff_gt {x} e | e IN E}) INTER (UNIONS {aff_ge {x} {v}| v IN V})={}`,
15134
15135 REWRITE_TAC[SET_RULE`A={} <=> ~(?y. y IN A)`;IN_ELIM_THM;UNIONS;INTER]
15136 THEN REPEAT STRIP_TAC
15137 THEN POP_ASSUM MP_TAC
15138 THEN POP_ASSUM MP_TAC
15139 THEN POP_ASSUM MP_TAC
15140 THEN POP_ASSUM MP_TAC
15141 THEN POP_ASSUM MP_TAC
15142 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15143 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15144 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15145 `(v':real^3)`]
15146 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v':real^3)`;` (w:real^3)`]
15147 THEN POP_ASSUM (fun th-> MP_TAC(SYM th) THEN STRIP_TAC)
15148 THEN RESA_TAC
15149 THEN RESA_TAC
15150 THEN REPEAT STRIP_TAC
15151 THEN POP_ASSUM MP_TAC
15152 THEN RESA_TAC
15153 THEN POP_ASSUM MP_TAC
15154 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `v:real^3` th))`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
15155 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15156 THEN STRIP_TAC
15157 THEN MRESA_TAC exists_inf_element_fix_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u1:real^3`]
15158 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u'':real^3)`;`v:real^3`]
15159 THEN POP_ASSUM MP_TAC
15160 THEN RESA_TAC
15161 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15162 THEN REWRITE_TAC[IN_ELIM_THM]
15163 THEN STRIP_TAC
15164 THEN SUBGOAL_THEN `v IN aff_gt {x} {v',w:real^3}` ASSUME_TAC
15165 THENL(*1*)[
15166 MRESA_TAC AFF_GT_1_2[`x:real^3`;`v':real^3`;`w:real^3`]
15167 THEN FIND_ASSUM MP_TAC`y IN aff_gt {x} {v', w:real^3}`
15168 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;IN_ELIM_THM])
15169 THEN RESA_TAC
15170 THEN MP_TAC(REAL_ARITH`&0 <= t2==> t2= &0 \/ &0 < t2`)
15171 THEN RESA_TAC
15172 THENL(*2*)[
15173 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th; REAL_ARITH`A+ &0=A`] THEN REPEAT STRIP_TAC)
15174 THEN POP_ASSUM MP_TAC
15175 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 % x + &0 % v = t1' % x + t2' % v' + t3 % w <=> t2' %(v'-x) + t3 %(w-x)= (&1-(t1'+t2'+t3))%x`;VECTOR_ARITH`t2' % (v' - x) + t3 % (w - x) = (&1 - &1) % x<=> t3 % w= (t3 +t2') % x + (-- t2') % v'  `]
15176 THEN FIND_ASSUM MP_TAC`~(w IN aff {x, v':real^3})`
15177 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15178 THEN MP_TAC(REAL_ARITH`&0< t3==> ~(t3= &0)`)
15179 THEN RESA_TAC
15180 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
15181 THEN REPEAT STRIP_TAC
15182 THEN MP_TAC(SET_RULE`t3 % w = (t3 + t2') % x + --t2' % v' ==> (inv (t3)) %(t3%w) = inv (t3)%((t3 + t2') % x + --t2' % v':real^3)`)
15183 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15184 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15185 THEN STRIP_TAC
15186 THEN SUBGOAL_THEN`?u1 v1. u1 + v1 = &1 /\ w = u1 % x + v1 % v':real^3` ASSUME_TAC
15187 THENL(*3*)[
15188 EXISTS_TAC`inv t3 * (t3 + t2'):real`
15189 THEN EXISTS_TAC`(inv t3 * --t2'):real`
15190 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3 * (t3 + t2') + inv t3 * --t2'= inv t3 * t3 `];(*3*)
15191
15192
15193 POP_ASSUM MP_TAC
15194 THEN ASM_REWRITE_TAC[]](*2*);
15195
15196 POP_ASSUM MP_TAC
15197 THEN POP_ASSUM MP_TAC
15198 THEN DISCH_THEN(LABEL_TAC"A")
15199 THEN STRIP_TAC
15200 THEN REMOVE_THEN "A" MP_TAC
15201 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v = t1' % x + t2' % v' + t3 % w
15202 <=> t2 % v = (t1'- t1) % x + t2' % v' + t3 % w`]
15203 THEN MP_TAC(REAL_ARITH`&0< t2 ==> ~(t2= &0)`)
15204 THEN RESA_TAC
15205 THEN MRESA1_TAC REAL_MUL_LINV`t2:real`
15206 THEN STRIP_TAC
15207 THEN MP_TAC(SET_RULE`t2 % v = (t1' - t1) % x + t2' % v' + t3 % w ==> (inv (t2)) %(t2 % v) = inv (t2)%((t1' - t1) % x + t2' % v' + t3 % w:real^3)`)
15208 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15209 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15210 THEN STRIP_TAC
15211 THEN MP_TAC(ISPEC`(t2:real)`REAL_LT_INV)
15212 THEN RESA_TAC
15213 THEN MP_TAC(ISPECL[`inv (t2:real)`;`(t2':real)`]REAL_LT_MUL)
15214 THEN RESA_TAC
15215 THEN MP_TAC(ISPECL[`inv (t2:real)`;`(t3:real)`]REAL_LT_MUL)
15216 THEN RESA_TAC
15217 THEN EXISTS_TAC`(inv t2 * (t1' - t1)):real`
15218 THEN EXISTS_TAC`(inv t2 * t2'):real`
15219 THEN EXISTS_TAC`(inv t2 * t3):real`
15220 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2 * (t1' - t1) + inv t2 * t2' + inv t2 * t3
15221 = inv t2 * (t2+(t1'+t2'+t3)- (t1+t2))`;REAL_ARITH`A+ &1 - &1=A`]];(*1*)
15222
15223 MP_TAC(SET_RULE`v IN aff_gt {x} {v', w} /\ aff_ge {x} {v', w} =
15224       aff_gt {x} {v', w} UNION aff_ge {x} {v'} UNION aff_ge {x} {w}
15225 ==> v IN aff_ge {x} {v', w:real^3}`)
15226 THEN RESA_TAC
15227 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v:real^3`; `u'':real^3`; `v':real^3`;`w:real^3`]properties_of_fan7)
15228 THEN RESA_TAC
15229 THENL[
15230
15231 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
15232 THEN REMOVE_ASSUM_TAC
15233 THEN POP_ASSUM MP_TAC
15234 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
15235 THEN STRIP_TAC
15236 THEN POP_ASSUM MP_TAC
15237 THEN REWRITE_TAC[VECTOR_ARITH`v = t1' % x + t2' % v + t3 % w
15238 <=> t3 % w = (--t1') % x +(&1 - t2') % v`]
15239 THEN MP_TAC(REAL_ARITH`&0< t3==> ~(t3= &0)`)
15240 THEN RESA_TAC
15241 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
15242 THEN REPEAT STRIP_TAC
15243 THEN MP_TAC(SET_RULE`t3 % w = (--t1') % x + (&1 -t2') % v ==> (inv (t3)) %(t3%w) = inv (t3)%((--t1') % x + (&1 -t2') % v:real^3)`)
15244 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15245 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15246 THEN STRIP_TAC
15247 THEN FIND_ASSUM MP_TAC`~(w IN aff {x, v:real^3})`
15248 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15249 THEN EXISTS_TAC`(inv t3 * --t1'):real`
15250 THEN EXISTS_TAC`(inv t3 * (&1 - t2')):real`
15251 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3 * --t1' + inv t3 * (&1 - t2')= inv t3 *( t3+ &1 -(t1'+t2' +t3))`;REAL_ARITH`A+ &1- &1=A`];
15252 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
15253 THEN REMOVE_ASSUM_TAC
15254 THEN POP_ASSUM MP_TAC
15255 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v':real^3`;`w:real^3`][IN_ELIM_THM]
15256 THEN STRIP_TAC
15257 THEN POP_ASSUM MP_TAC
15258 THEN REWRITE_TAC[VECTOR_ARITH`w = t1' % x + t2' % v + t3 % w
15259 <=> (t2') % v = (--t1') % x +(&1 - t3) % w`]
15260 THEN MP_TAC(REAL_ARITH`&0< t2' ==> ~(t2'= &0)`)
15261 THEN RESA_TAC
15262 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
15263 THEN REPEAT STRIP_TAC
15264 THEN MP_TAC(SET_RULE`t2' % v' = (--t1') % x + (&1 -t3) % w ==> (inv (t2')) %(t2' %v') = inv (t2')%((--t1') % x + (&1 -t3) % w:real^3)`)
15265 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15266 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15267 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
15268 `(w:real^3)`]
15269 THEN POP_ASSUM MP_TAC
15270 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15271 THEN RESA_TAC
15272 THEN STRIP_TAC
15273 THEN FIND_ASSUM MP_TAC`~(v' IN aff {w,x:real^3})`
15274 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15275 THEN EXISTS_TAC`(inv t2' * (&1 - t3)):real`
15276 THEN EXISTS_TAC`(inv t2' * --t1'):real`
15277 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2' * (&1 - t3) + inv t2' * --t1' = inv t2' *( t2'+ &1 -(t1'+t2' +t3))`;REAL_ARITH`A+ &1- &1=A`;VECTOR_ARITH`A+B=B+A:real^3`]]]);;
15278
15279
15280 let yfan_union_aff_gt_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15281 FAN(x,V,E)
15282  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15283 /\ fan80(x,V,E)
15284 ==> yfan(x,V,E) UNION (UNIONS {aff_gt {x} e | e IN E}) = (:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})`,
15285
15286 REPEAT STRIP_TAC
15287 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2;]
15288 THEN MRESA_TAC expand_xfan_eq_aff_gt_aff_ge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
15289 THEN MRESA_TAC  properties12_fan7[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
15290 THEN POP_ASSUM MP_TAC
15291 THEN SET_TAC[]);;
15292
15293
15294 let exists_point_in_dartset_leads_into_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15295 FAN(x,V,E)
15296  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15297 /\ fan80(x,V,E)
15298 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15299 ==> ?y. y IN dartset_leads_into_fan x V E ds`,
15300 REPEAT STRIP_TAC
15301 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15302 THEN POP_ASSUM MP_TAC
15303 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15304 THEN RESA_TAC
15305 THEN EXISTS_TAC`y:real^3`
15306 THEN MRESA_TAC CONNECTED_COMPONENT_REFL[`yfan(x:real^3,V:real^3->bool,E)`;`y:real^3`]
15307 THEN ASM_REWRITE_TAC[IN]);;
15308
15309
15310
15311
15312 let NEGLIGIBLE_AFF_3_FAN=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) z:real^3.
15313 FAN (x,V,E) ==>  negligible (UNIONS {aff {x, z, v} | v IN V} )`,
15314
15315 REPEAT STRIP_TAC
15316 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan1] THEN STRIP_TAC THEN ASSUME_TAC th)
15317 THEN MATCH_MP_TAC NEGLIGIBLE_UNIONS
15318 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3. aff {x:real^3,z:real^3,e})`;`V:(real^3->bool)`][IMAGE]
15319 THEN SUBGOAL_THEN`{aff {x, z, v} | v IN V} = {y | ?x'. x' IN V /\ y = aff {x, z, x':real^3}} `(fun th-> ASM_REWRITE_TAC[th])
15320 THENL[
15321 REWRITE_TAC[EXTENSION;IN_ELIM_THM];
15322 REWRITE_TAC[IN_ELIM_THM]
15323 THEN REPEAT STRIP_TAC
15324 THEN ASM_REWRITE_TAC[NEGLIGIBLE_AFF_3]]);;
15325
15326
15327
15328
15329 let MEASURE_AFF_3_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3.
15330 FAN (x,V,E) ==>  measure (UNIONS {aff {x, z, v} | v IN V})= &0`,
15331 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
15332 THEN POP_ASSUM MP_TAC
15333 THEN MESON_TAC[NEGLIGIBLE_AFF_3_FAN]);;
15334
15335
15336 let NEGLIGIBLE_AFF_3_UNION_INTER_BALL=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3  y:real^3 r:real.
15337 FAN (x,V,E) ==>
15338 negligible ((UNIONS {aff {x, z, v} | v IN V} ) INTER normball y r)`,
15339 REPEAT STRIP_TAC
15340 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
15341 THEN EXISTS_TAC `(UNIONS {aff {x, z, v:real^3} | v IN V} )`
15342 THEN ASM_SIMP_TAC[ SET_RULE`A INTER B SUBSET A`]
15343 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_3_FAN;]);;
15344
15345
15346 let MEASURE_AFF_3_UNION_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3 y:real^3 r:real.
15347 FAN (x,V,E) ==>  measure (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)= &0`,
15348 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
15349 THEN POP_ASSUM MP_TAC
15350 THEN MESON_TAC[NEGLIGIBLE_AFF_3_UNION_INTER_BALL]);;
15351
15352
15353 let HAS_MEASURE_AFF_3_UNION_INTER_BALL=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3 y:real^3 r:real.
15354 FAN (x,V,E) ==>  (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)  has_measure  &0`,
15355 REPEAT STRIP_TAC 
15356 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_3_UNION_INTER_BALL;HAS_MEASURE_0]);;
15357
15358
15359
15360 let MEASURABLE_AFF_3_UNION_INTER_BALL=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3 y:real^3 r:real.
15361 FAN (x,V,E) ==>    measurable (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)`,
15362 REPEAT STRIP_TAC
15363 THEN ASM_SIMP_TAC[measurable;]
15364 THEN EXISTS_TAC`&0`
15365 THEN MRESA_TAC HAS_MEASURE_AFF_3_UNION_INTER_BALL[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`z:real^3 `;`y:real^3`;`r:real`]
15366 );;
15367
15368
15369 let measure_ball_diff_set_negligible=prove(`!x:real^3 V E z y r. 
15370 FAN(x,V,E)/\ &0<= r
15371 ==> measure ( (normball y r) DIFF (UNIONS {aff {x,z,v}| v IN V}))= &4/ &3 *pi *r pow 3`,
15372 REPEAT STRIP_TAC
15373 THEN MRESA_TAC MEASURE_AFF_3_UNION_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`z:real^3 `;`y:real^3`;`r:real`]
15374 THEN MRESA_TAC MEASURABLE_AFF_3_UNION_INTER_BALL[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`z:real^3 `;`y:real^3`;`r:real`]
15375
15376 THEN MRESA_TAC VOLUME_BALL[`y:real^3`;`r:real`]
15377 THEN MRESAL_TAC MEASURE_DIFF_SUBSET[`normball (y:real^3) (r:real)`;`(UNIONS {aff {x,z,v:real^3}| v IN V}) INTER (normball y r)`][GSYM ball_eq_normball;MEASURABLE_BALL;SET_RULE`(UNIONS {aff {x,z,v:real^3}| v IN V}) INTER ball (y,r) SUBSET ball (y,r)`;SET_RULE`A DIFF(B INTER A)= A DIFF B`]
15378 THEN ASM_SIMP_TAC[VOLUME_BALL;]
15379 THEN REAL_ARITH_TAC);;
15380
15381
15382
15383 let exists_measure_ball_diff_set_negligible=prove(`!x:real^3 V E y z r. 
15384 FAN(x,V,E)/\ &0< r
15385 ==> ?a. a IN (normball y r) DIFF (UNIONS {aff {x,z,v}| v IN V})`,
15386 REPEAT STRIP_TAC
15387 THEN DISJ_CASES_TAC(SET_RULE`(normball y r) DIFF (UNIONS {aff {x,z,v:real^3}| v IN V}) ={} \/ ?a. a IN (normball y r) DIFF (UNIONS {aff {x,z,v}| v IN V})`)
15388 THENL[
15389 MP_TAC(REAL_ARITH`&0<r ==> &0<= r`)
15390 THEN RESA_TAC
15391 THEN 
15392 MRESAL_TAC measure_ball_diff_set_negligible[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`z:real^3 `;`y:real^3`;`r:real`][MEASURE_EMPTY; ]
15393 THEN POP_ASSUM MP_TAC
15394 THEN REWRITE_TAC[SET_RULE`A=B <=> B=A`;REAL_ENTIRE;REAL_ARITH`~(&4/ &3 = &0)`;]
15395 THEN MP_TAC(REAL_ARITH`&0< pi ==> ~(pi= &0)`)
15396 THEN ASM_REWRITE_TAC[PI_WORKS;]
15397 THEN RESA_TAC
15398 THEN MP_TAC(REAL_ARITH`&0< r ==> ~(r= &0)`)
15399 THEN RESA_TAC
15400 THEN RESA_TAC
15401 THEN  MRESA_TAC REAL_POW_EQ_0[`r:real`;`3`];
15402 ASM_REWRITE_TAC[]]);;
15403
15404
15405
15406 let connected_in_dartset_leads_into_fan_union_aff_gt=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds ds1 Z.
15407 FAN(x,V,E)
15408 /\ conforming_fan (x,V,E)
15409  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15410 /\ fan80(x,V,E)
15411 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15412 /\ ds1 IN face_set(hypermap1_of_fanx (x,V,E))
15413 /\ Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})
15414 ==> ?y z. y IN dartset_leads_into_fan x V E ds
15415 /\ z IN dartset_leads_into_fan x V E ds1
15416 /\ segment[y,z] SUBSET Z `,
15417 REPEAT STRIP_TAC
15418 THEN MRESA_TAC exists_point_in_dartset_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15419 THEN MRESA_TAC exists_point_in_dartset_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
15420 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15421 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`dartset_leads_into_fan x V E ds`]
15422 THEN POP_ASSUM MP_TAC
15423 THEN REWRITE_TAC[open_def]
15424 THEN STRIP_TAC
15425 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3`)
15426 THEN POP_ASSUM MP_TAC
15427 THEN MRESAL_TAC exists_measure_ball_diff_set_negligible[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`y:real^3 `;`y':real^3`;`e:real`][normball;DIFF;IN_ELIM_THM]
15428 THEN POP_ASSUM MP_TAC
15429 THEN DISCH_THEN(LABEL_TAC"LINH")
15430 THEN STRIP_TAC
15431 THEN POP_ASSUM(fun th-> MRESA1_TAC th`a:real^3`)
15432 THEN EXISTS_TAC`a:real^3`
15433 THEN EXISTS_TAC`y':real^3`
15434 THEN ASM_REWRITE_TAC[segment;SUBSET;IN_ELIM_THM;SET_RULE`(x:real^3) IN (:real^3)`]
15435 THEN REPEAT STRIP_TAC
15436 THEN REMOVE_THEN "LINH" MP_TAC
15437 THEN POP_ASSUM MP_TAC
15438 THEN ASM_REWRITE_TAC[UNIONS;IN_ELIM_THM]
15439 THEN REPEAT STRIP_TAC
15440 THEN EXISTS_TAC`aff{x,y',v:real^3}`
15441 THEN STRIP_TAC
15442 THENL(*1*)[
15443 EXISTS_TAC`v:real^3`
15444 THEN ASM_REWRITE_TAC[];(*1*)
15445 POP_ASSUM MP_TAC
15446 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `v:real^3` th))`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
15447 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15448 THEN STRIP_TAC
15449 THEN MRESA_TAC exists_inf_element_fix_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u1:real^3`]
15450 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u'':real^3)`;`v:real^3`]
15451 THEN POP_ASSUM MP_TAC
15452 THEN RESA_TAC
15453 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15454 THEN ASM_REWRITE_TAC[aff;AFFINE_HULL_3;IN_ELIM_THM]
15455 THEN STRIP_TAC
15456 THEN POP_ASSUM MP_TAC
15457 THEN MP_TAC(REAL_ARITH`u <= &1 ==> u= &1 \/ &0< (&1 -u)`)
15458 THEN RESA_TAC
15459 THENL(*2*)[
15460
15461 REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % a + &1 % y'=y'`]
15462 THEN STRIP_TAC
15463 THEN SUBGOAL_THEN`y' IN xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
15464 THENL(*3*)[
15465 REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2;UNIONS;IN_ELIM_THM]
15466 THEN EXISTS_TAC`aff_ge {x} {v,u'':real^3}`
15467 THEN STRIP_TAC
15468 THENL(*4*)[
15469
15470 EXISTS_TAC`{v,u'':real^3}`
15471 THEN ASM_REWRITE_TAC[];(*4*)
15472 MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u'':real^3`][IN_ELIM_THM]
15473 THEN EXISTS_TAC`t1:real`
15474 THEN EXISTS_TAC`t2:real`
15475 THEN EXISTS_TAC`&0:real`
15476 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0`;REAL_ARITH`A+B+ &0=A+B`;VECTOR_ARITH`A+B+ &0 % C=A+B`]](*4*);(*3*)
15477
15478 POP_ASSUM MP_TAC
15479 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds1:real^3#real^3#real^3#real^3->bool`]
15480 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E ds1 SUBSET yfan (x,V,E) /\ y' IN dartset_leads_into_fan x V E ds1 ==> y' IN yfan (x:real^3,V:real^3->bool,E)`)
15481 THEN RESA_TAC
15482 THEN POP_ASSUM MP_TAC
15483 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
15484 THEN SET_TAC[]](*3*);(*2*)
15485
15486 MP_TAC(REAL_ARITH`&0< &1- u ==> ~((&1- u)= &0)`)
15487 THEN RESA_TAC
15488 THEN MRESA1_TAC REAL_MUL_LINV`&1- u:real`
15489 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - u) % a + u % y' = t1 % x + t2 % v <=> 
15490 (&1 - u) % a = t1 % x + (--u) % y' + t2 % v`]
15491 THEN REPEAT STRIP_TAC
15492 THEN MP_TAC(SET_RULE`(&1 - u) % a = t1 % x + --u % y' + t2 % v ==> (inv (&1 - u)) %((&1 - u) % a ) = inv (&1 - u)%(t1 % x + --u % y' + t2 % v:real^3)`)
15493 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15494 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15495 THEN STRIP_TAC
15496 THEN EXISTS_TAC`inv (&1 - u) * t1:real`
15497 THEN EXISTS_TAC`inv (&1 - u) * --u:real`
15498 THEN EXISTS_TAC`inv (&1 - u) * t2:real`
15499 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - u) * t1 + inv (&1 - u) * --u + inv (&1 - u) * t2=
15500 inv (&1 - u) * ((t1+t2)- u)`]]]);;
15501
15502
15503
15504 let AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
15505 FAN(x,V,E)
15506
15507 /\ conforming_fan (x,V,E)
15508  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15509 /\ fan80(x,V,E)
15510 /\ ~(E={})
15511 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
15512 /\ y IN dartset_leads_into_fan x V E ds
15513 ==> aff_gt {x} {y}  SUBSET dartset_leads_into_fan x V E ds`,
15514 REPEAT STRIP_TAC
15515 THEN POP_ASSUM MP_TAC
15516 THEN DISCH_THEN(LABEL_TAC"YEU")
15517 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15518 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dartset_leads_into_fan x V E ds):real^3->bool`;` y:real^3`]
15519 THEN MRESAL_TAC AFF_GT_1_1[`x:real^3`;`y:real^3`][SET_RULE`DISJOINT {x} {y} <=> ~(x=y)`]
15520 THEN REMOVE_THEN"YEU" MP_TAC
15521 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15522 THEN REWRITE_TAC[conforming_fan;conforming_half_space_fan]
15523 THEN STRIP_TAC
15524 THEN REMOVE_ASSUM_TAC
15525 THEN REMOVE_ASSUM_TAC
15526 THEN POP_ASSUM(fun th-> MRESA1_TAC th `ds:real^3#real^3#real^3#real^3->bool`)
15527 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
15528 THEN DISCH_THEN(LABEL_TAC"LINH")
15529 THEN REPEAT STRIP_TAC
15530 THEN ASM_REWRITE_TAC[]
15531 THEN SUBGOAL_THEN`(?y. y IN ds /\
15532            aff_gt {x:real^3, pr2 y', pr3 y'} {pr3 (f1_fan x V E y')} =
15533            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)})` ASSUME_TAC
15534 THENL[
15535 EXISTS_TAC`y':real^3#real^3#real^3#real^3`
15536 THEN ASM_REWRITE_TAC[];
15537 REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th`u:real^3->bool`)
15538 THEN POP_ASSUM MP_TAC
15539 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
15540 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15541 THEN  MRESA_TAC face_subset_dart_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15542 THEN MP_TAC(SET_RULE`y' IN ds /\ ds SUBSET d1_fan (x:real^3,V,E)==> y' IN d1_fan(x,V,E)`)
15543 THEN RESA_TAC
15544 THEN POP_ASSUM MP_TAC
15545 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
15546 THEN RESA_TAC
15547 THEN REWRITE_TAC[pr2;pr3;f1_fan]
15548 THEN MRESA_TAC fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`]
15549 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15550 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
15551 THEN REWRITE_TAC[fan80]
15552 THEN DISCH_TAC
15553 THEN POP_ASSUM (fun th-> MRESA_TAC th [`v:real^3`;`w:real^3`])
15554 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15555 `(v:real^3)`]
15556 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`w:real^3`]
15557 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` sigma_fan x V E v w:real^3`;`(v:real^3)`]
15558 THEN POP_ASSUM MP_TAC
15559 THEN RESA_TAC
15560 THEN POP_ASSUM MP_TAC
15561 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15562 THEN ASM_REWRITE_TAC[]
15563 THEN STRIP_TAC
15564 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(sigma_fan x V E v w):real^3`;`v:real^3`;`w:real^3`]
15565 THEN POP_ASSUM MP_TAC
15566 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15567 THEN ASM_REWRITE_TAC[]
15568 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
15569 THEN RESA_TAC
15570 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`;`sigma_fan x V E v w:real^3`;`w:real^3`]
15571 THEN MRESAL_TAC  aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`;`sigma_fan x V E v w:real^3`;][IN_ELIM_THM;VECTOR_ARITH`(t1 % x + t2 % y) - x=((t1+t2)- &1)%x+ t2 % (y-x)`;VECTOR_ARITH`((&1 - &1) % x + t2 % (y - x))= t2 % (y - x)`;DOT_RMUL]
15572 THEN STRIP_TAC
15573 THEN MATCH_MP_TAC REAL_LT_MUL
15574 THEN ASM_REWRITE_TAC[]]);;
15575
15576
15577 let aff_gt_subset_dartset_leads_into_fan_union_aff_gt=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds ds1 Z y z .
15578 FAN(x,V,E)
15579 /\ conforming_fan (x,V,E)
15580  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15581 /\ fan80(x,V,E)
15582 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15583 /\ ds1 IN face_set(hypermap1_of_fanx (x,V,E))
15584 /\ Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})
15585 /\ y IN dartset_leads_into_fan x V E ds
15586 /\ z IN dartset_leads_into_fan x V E ds1
15587 /\ ~(x=y) /\ ~(x=z)
15588 /\ segment[y,z] SUBSET Z 
15589 ==> aff_gt {x} {y,z} SUBSET Z`,
15590 REWRITE_TAC[segment;SUBSET;IN_ELIM_THM]
15591 THEN REPEAT STRIP_TAC
15592 THEN POP_ASSUM MP_TAC
15593 THEN POP_ASSUM MP_TAC
15594 THEN DISCH_THEN(LABEL_TAC"LINH")
15595 THEN FIND_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan2] THEN STRIP_TAC)`FAN(x:real^3,V,E)`
15596 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`y:real^3`;`z:real^3`][SET_RULE`DISJOINT{x} {y,z}<=> ~(x=y) /\ ~(x=z)`;IN_ELIM_THM;DIFF;SET_RULE`(x:real^3) IN (:real^3)`;UNIONS]
15597 THEN STRIP_TAC
15598 THEN STRIP_TAC
15599 THEN POP_ASSUM MP_TAC
15600 THEN ASM_REWRITE_TAC[]
15601 THEN MP_TAC(SET_RULE`~(x IN V) /\ v IN V==> ~(x=v:real^3)`)
15602 THEN RESA_TAC
15603 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15604 THEN REWRITE_TAC[IN_ELIM_THM]
15605 THEN STRIP_TAC
15606 THEN POP_ASSUM MP_TAC
15607 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % y + t3 % z = t1' % x + t2' % v
15608 <=> t2 % y + t3 % z = (t1' - t1) % x + t2' % v`]
15609 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0 < t3 ==> &0 < t2+ t3 /\ &0 <= t2+ t3 /\ ~(t2 +t3= &0)`)
15610 THEN RESA_TAC
15611 THEN MRESA1_TAC REAL_MUL_LINV`t2+t3:real`
15612 THEN STRIP_TAC
15613 THEN MP_TAC(SET_RULE`t2 % y + t3 % z = (t1' - t1) % x + t2' % v ==> (inv (t2+ t3)) %(t2 % y + t3 % z) = inv (t2 +t3)%((t1' - t1) % x + t2' % v:real^3)`)
15614 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15615 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
15616 THEN STRIP_TAC
15617 THEN ABBREV_TAC`v123= (inv (t2 + t3) * (t1' - t1)) % x + (inv (t2 + t3) * t2') % v:real^3`
15618 THEN SUBGOAL_THEN`v123 IN aff_ge {x} {v:real^3}` ASSUME_TAC
15619 THENL[
15620 ASM_REWRITE_TAC[IN_ELIM_THM]
15621 THEN EXISTS_TAC`(inv (t2 + t3) * (t1' - t1)):real`
15622 THEN EXISTS_TAC`(inv (t2 + t3) * t2'):real`
15623 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 + t3) * (t1' - t1) + inv (t2 + t3) * t2'
15624 = inv (t2 + t3) * ((t2+ t3)+ (t1'+ t2') - (t1+ t2+t3))`; REAL_ARITH`A + &1 - &1= A`]
15625 THEN MATCH_MP_TAC REAL_LE_MUL
15626 THEN ASM_REWRITE_TAC[]
15627 THEN MRESA1_TAC REAL_LE_INV`t2+ t3`;
15628
15629 SUBGOAL_THEN`(?u. (&0 <= u /\ u <= &1) /\ v123 = (&1 - u) % y + u % z:real^3)` ASSUME_TAC
15630 THENL[
15631 EXISTS_TAC`(inv (t2 + t3) * t3)`
15632 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - inv (t2 + t3) * t3= &1 - inv (t2 +t3) *(t2+ t3)+ inv(t2 +t3) * t2`; REAL_ARITH`&1 - &1 +A=A`; REAL_ARITH`A<= &1 <=> &0<= &1- A`]
15633 THEN MRESA1_TAC REAL_LT_INV`t2+t3`
15634 THEN MP_TAC(REAL_ARITH`&0 < inv (t2 + t3) /\ &0< t2 /\ &0< t3 ==> &0 <= inv (t2 + t3) /\ &0<= t2 /\ &0<= t3`)
15635 THEN RESA_TAC
15636 THEN STRIP_TAC
15637 THEN MATCH_MP_TAC REAL_LE_MUL
15638 THEN ASM_REWRITE_TAC[];
15639 REMOVE_THEN "LINH"(fun th-> MRESAL1_TAC th`v123:real^3`[DIFF;IN_ELIM_THM;UNIONS])
15640 THEN POP_ASSUM MP_TAC
15641 THEN REWRITE_TAC[]
15642 THEN EXISTS_TAC`aff_ge {x} {v:real^3}`
15643 THEN ASM_REWRITE_TAC[]
15644 THEN EXISTS_TAC`v:real^3`
15645 THEN ASM_REWRITE_TAC[]]]);;
15646
15647 let aff_gt_1_2_subset_aff_1_3111=prove(`!x y z v u w:real^3.
15648 ~coplanar {x,v,u,w}
15649 /\ y IN aff_gt {x} {v,u}
15650 /\ z IN aff_gt {x} {v,w}
15651 ==> aff_gt {x} {y,z} SUBSET aff_gt {x} {v,u,w}`,
15652 REPEAT STRIP_TAC
15653 THEN POP_ASSUM MP_TAC
15654 THEN POP_ASSUM MP_TAC
15655 THEN DISCH_THEN(LABEL_TAC"LINH")
15656 THEN DISCH_THEN(LABEL_TAC"LINH1")
15657 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15658 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
15659 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
15660 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
15661 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`w:real^3`;`z:real^3`]
15662 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`v:real^3`]
15663 THEN MRESA_TAC th3[`x:real^3`;`z:real^3`;`v:real^3`]
15664 THEN REMOVE_THEN "LINH" MP_TAC
15665 THEN REMOVE_THEN "LINH1" MP_TAC
15666 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
15667 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
15668 THEN MRESAL_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {v,u,w} <=> ~(x=v) /\ ~(x=u) /\ ~(x=w)`]
15669 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`y:real^3`;`z:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {v,u} <=> ~(x=v) /\ ~(x=u)`;SUBSET]
15670 THEN REPEAT RESA_TAC
15671 THEN REWRITE_TAC[VECTOR_ARITH`    t1'' % x +
15672       t2'' % (t1' % x + t2' % v + t3' % u) +
15673       t3'' % (t1 % x + t2 % v + t3 % w)
15674 =      (t1''+ t2''* t1'+ t3'' *t1) % x +
15675         (t2'' * t2'+ t3'' *t2) % v + (t2''* t3') % u +
15676        (t3''* t3) % w`]
15677 THEN EXISTS_TAC`t1'' + t2'' * t1' + t3'' * t1:real`
15678 THEN EXISTS_TAC`t2'' * t2' + t3'' * t2:real`
15679 THEN EXISTS_TAC`t2'' * t3':real`
15680 THEN EXISTS_TAC`t3'' * t3:real`
15681 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1'' + t2'' * t1' + t3'' * t1) +
15682  (t2'' * t2' + t3'' * t2) +
15683  t2'' * t3' +
15684  t3'' * t3 = t1'' +
15685       t2'' * (t1' + t2'+ t3') +
15686       t3'' * (t1 + t2 + t3 )`;REAL_ARITH`A * &1=A`]
15687 THEN STRIP_TAC
15688 THENL[
15689 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0< B==> &0< A+B`)
15690 THEN STRIP_TAC
15691 THEN MATCH_MP_TAC REAL_LT_MUL
15692 THEN ASM_REWRITE_TAC[];
15693
15694 STRIP_TAC
15695 THEN MATCH_MP_TAC REAL_LT_MUL
15696 THEN ASM_REWRITE_TAC[]]);;
15697
15698
15699 let AFF_GT_1_3_SUBSET_AFF_GT_1_3=prove(`!x v u w:real^3 t:real.
15700 ~coplanar {x,v,u,w}/\ &0< t/\ t< &1
15701 ==> aff_gt {x} {v,u,(&1-t) %u+ t %w} SUBSET aff_gt {x} {v,u,w}`,
15702 REPEAT STRIP_TAC
15703 THEN MP_TAC(REAL_ARITH`&0< t==> ~(t= &0)`)
15704 THEN RESA_TAC
15705 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`v:real^3`;`u:real^3`;`w:real^3`]
15706 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
15707 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15708 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
15709 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
15710 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1-t) %u+ t %w:real^3`]
15711 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`(&1-t) %u+ t %w:real^3`]
15712 THEN MRESAL_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {v,u,w} <=> ~(x=v) /\ ~(x=u) /\ ~(x=w)`]
15713 THEN MRESAL_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`(&1-t) %u+ t %w:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {v,u,w} <=> ~(x=v) /\ ~(x=u) /\ ~(x=w)`;SUBSET]
15714 THEN REPEAT RESA_TAC
15715 THEN EXISTS_TAC`t1:real`
15716 THEN EXISTS_TAC`t2:real`
15717 THEN EXISTS_TAC`t3 + t4 *( &1- t):real`
15718 THEN EXISTS_TAC`t4 *t:real`
15719 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % u + t4 % ((&1 - t) % u + t % w) =
15720  t1 % x + t2 % v + (t3 + t4 * (&1 - t)) % u + (t4 * t) % w:real^3`;REAL_ARITH`t1 + t2 + (t3 + t4 * (&1 - t)) + t4 * t=t1 +t2+t3+t4`
15721 ]
15722 THEN STRIP_TAC
15723 THENL[
15724 MATCH_MP_TAC (REAL_ARITH`&0< A /\ &0< B==> &0< A+B`)
15725 THEN ASM_REWRITE_TAC[]
15726 THEN MATCH_MP_TAC REAL_LT_MUL
15727 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- A<=> A< &1`];
15728 MATCH_MP_TAC REAL_LT_MUL
15729 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- A<=> A< &1`]]);;
15730
15731
15732
15733
15734
15735
15736
15737
15738 let lemma_connect_hypermap=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) f1 f2.
15739 FAN(x,V,E)
15740 /\ conforming_fan (x,V,E)
15741  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15742 /\ fan80(x,V,E)
15743 /\ f1 IN d_fan(x,V,E) /\ f2 IN d_fan(x,V,E)
15744 ==> ?D. D IN set_of_components(hypermap1_of_fanx (x,V,E))
15745 /\ f1 IN D /\ f2 IN D`,
15746 REPEAT STRIP_TAC
15747 THEN POP_ASSUM MP_TAC
15748 THEN POP_ASSUM MP_TAC
15749 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15750 THEN REPEAT STRIP_TAC
15751 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
15752 THEN ABBREV_TAC`ds= face (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
15753 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E)) (f2:real^3#real^3#real^3#real^3)`
15754 THEN ABBREV_TAC`Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v:real^3}| v IN V})`
15755 THEN SUBGOAL_THEN`ds IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15756 THENL(*1*)[
15757
15758 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15759 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15760 THEN EXPAND_TAC"ds"
15761 THEN REWRITE_TAC[face]
15762 THEN ASM_REWRITE_TAC[];(*1*)
15763
15764 SUBGOAL_THEN`ds1 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15765 THENL(*2*)[
15766
15767 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15768 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
15769 THEN EXPAND_TAC"ds1"
15770 THEN REWRITE_TAC[face]
15771 THEN ASM_REWRITE_TAC[];(*2*)
15772
15773 SUBGOAL_THEN`f2 IN ds1:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15774 THENL(*3*)[
15775 EXPAND_TAC"ds1"
15776 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
15777 THEN EXISTS_TAC`0`
15778 THEN REWRITE_TAC[POWER;I_DEF]
15779 THEN ARITH_TAC;(*3*)
15780
15781 SUBGOAL_THEN`f1 IN ds:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15782 THENL(*4*)[
15783 EXPAND_TAC"ds"
15784 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
15785 THEN EXISTS_TAC`0`
15786 THEN REWRITE_TAC[POWER;I_DEF]
15787 THEN ARITH_TAC;(*4*)
15788
15789 ABBREV_TAC`D= comb_component (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
15790 THEN MRESA_TAC lemma_component_subset[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`]
15791 THEN SUBGOAL_THEN`D IN set_of_components(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15792 THENL(*5*)[
15793
15794 ASM_REWRITE_TAC[set_of_components;set_part_components;IN_ELIM_THM]
15795 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15796 THEN ASM_REWRITE_TAC[];(*5*)
15797
15798
15799 SUBGOAL_THEN`(f1:real^3#real^3#real^3#real^3) IN D`ASSUME_TAC
15800 THENL(*6*)[
15801 EXPAND_TAC"D"
15802 THEN REWRITE_TAC[comb_component;IN_ELIM_THM;is_in_component]
15803 THEN ASM_REWRITE_TAC[]
15804 THEN EXISTS_TAC`(\m. (f1_fan (x:real^3) V E POWER m) f1)`
15805 THEN EXISTS_TAC`0`
15806 THEN REWRITE_TAC[POWER;I_DEF;is_path];(*6*)
15807
15808 MRESAL_TAC connected_in_dartset_leads_into_fan_union_aff_gt[`x:real^3`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`ds1:real^3#real^3#real^3#real^3->bool`;`Z:real^3->bool`][segment;IN_ELIM_THM]
15809 THEN 
15810 ABBREV_TAC`TA={t| &0 <= t /\ t <= &1 /\ (?f. f IN D /\ (&1 - t) % (y:real^3) + t % z IN dartset_leads_into_fan x V E (face (hypermap1_of_fanx (x:real^3,V,E)) f))}`
15811 THEN ABBREV_TAC`t1= sup (TA:real->bool)`
15812 THEN SUBGOAL_THEN`&0 IN TA:real->bool `ASSUME_TAC
15813 THENL(*7*)[
15814  EXPAND_TAC"TA"
15815 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15816 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15817 THEN ASM_REWRITE_TAC[];(*7*)
15818
15819
15820 MP_TAC(SET_RULE`&0 IN TA ==> ~(TA ={})`)
15821 THEN RESA_TAC
15822 THEN EXISTS_TAC`D:real^3#real^3#real^3#real^3->bool`
15823 THEN ASM_REWRITE_TAC[]
15824 THEN DISJ_CASES_TAC(SET_RULE`(y=z:real^3) \/ ~(z=y)`)
15825 THENL(*8*)[
15826
15827 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
15828 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
15829 THEN POP_ASSUM MP_TAC
15830 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15831 THEN RESA_TAC
15832 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds1`
15833 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15834 THEN STRIP_TAC
15835 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y:real^3`;`z:real^3`]
15836 THEN POP_ASSUM MP_TAC
15837 THEN REMOVE_ASSUM_TAC
15838 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15839 THEN STRIP_TAC
15840 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
15841 THEN POP_ASSUM MP_TAC
15842 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15843 THEN RESA_TAC
15844 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds`
15845 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15846 THEN STRIP_TAC
15847 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`z:real^3`]
15848 THEN POP_ASSUM MP_TAC
15849 THEN REMOVE_ASSUM_TAC
15850 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15851 THEN STRIP_TAC
15852 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
15853 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15854 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
15855 THEN STRIP_TAC
15856 THEN REMOVE_ASSUM_TAC
15857 THEN REMOVE_ASSUM_TAC
15858 THEN REMOVE_ASSUM_TAC
15859 THEN POP_ASSUM(fun th-> MRESA1_TAC th `dartset_leads_into_fan x V E (ds:real^3#real^3#real^3#real^3->bool)`)
15860 THEN POP_ASSUM(fun th-> MRESA1_TAC th ` (ds1:real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th ` (ds:real^3#real^3#real^3#real^3->bool)`)
15861 THEN POP_ASSUM MP_TAC
15862 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15863 THEN STRIP_TAC
15864 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`]
15865 THEN ASM_TAC
15866 THEN SET_TAC[];(*8*)
15867
15868 SUBGOAL_THEN`(?b. !a. a IN TA ==> a <= b)` ASSUME_TAC
15869 THENL(*9*)[
15870
15871 EXISTS_TAC`&1`
15872 THEN EXPAND_TAC"TA"
15873 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15874 THEN REPEAT STRIP_TAC
15875 THEN ASM_REWRITE_TAC[];(*9*)
15876
15877 SUBGOAL_THEN`(!a. a IN TA ==> a <= &1)` ASSUME_TAC
15878 THENL(*10*)[
15879
15880 EXPAND_TAC"TA"
15881 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15882 THEN REPEAT STRIP_TAC
15883 THEN ASM_REWRITE_TAC[];(*10*)
15884
15885 MRESA1_TAC SUP`TA:real->bool`
15886 THEN POP_ASSUM(fun th-> MRESA1_TAC th `&1` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th THEN STRIP_TAC)
15887 THEN DISJ_CASES_TAC(SET_RULE` (t1:real) IN TA\/ ~(t1 IN TA)`)
15888 THENL(*11*)[
15889
15890 POP_ASSUM MP_TAC
15891 THEN EXPAND_TAC "TA"
15892 THEN REWRITE_TAC[IN_ELIM_THM]
15893 THEN STRIP_TAC
15894 THEN POP_ASSUM MP_TAC
15895 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E)) (f:real^3#real^3#real^3#real^3)`
15896 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f IN D==> f IN d1_fan (x,V,E)`)
15897 THEN RESA_TAC
15898 THEN SUBGOAL_THEN`ds2 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15899 THENL(*12*)[
15900 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15901 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3`
15902 THEN EXPAND_TAC"ds2"
15903 THEN REWRITE_TAC[face]
15904 THEN ASM_REWRITE_TAC[];(*12*)
15905
15906 MP_TAC(REAL_ARITH`(t1:real) <= &1 ==> t1= &1 \/ t1< &1`)
15907 THEN RESA_TAC
15908 THENL(*13*)[
15909
15910 ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
15911 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
15912 THEN POP_ASSUM MP_TAC
15913 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15914 THEN RESA_TAC
15915 THEN STRIP_TAC
15916 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`z:real^3`]
15917 THEN POP_ASSUM MP_TAC
15918 THEN REMOVE_ASSUM_TAC
15919 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15920 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
15921 THEN POP_ASSUM MP_TAC
15922 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15923 THEN RESA_TAC
15924 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds1`
15925 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15926 THEN STRIP_TAC
15927 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`z:real^3`]
15928 THEN REMOVE_ASSUM_TAC
15929 THEN REMOVE_ASSUM_TAC
15930 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15931 THEN STRIP_TAC
15932 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
15933 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15934 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
15935 THEN STRIP_TAC
15936 THEN REMOVE_ASSUM_TAC
15937 THEN REMOVE_ASSUM_TAC
15938 THEN REMOVE_ASSUM_TAC
15939 THEN POP_ASSUM(fun th-> MRESA1_TAC th `dartset_leads_into_fan x V E (ds2:real^3#real^3#real^3#real^3->bool)`)
15940 THEN POP_ASSUM(fun th-> MRESA1_TAC th ` (ds1:real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th ` (ds2:real^3#real^3#real^3#real^3->bool)`)
15941 THEN POP_ASSUM MP_TAC
15942 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15943 THEN STRIP_TAC
15944 THEN MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`;`f:real^3#real^3#real^3#real^3`]
15945 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f:real^3#real^3#real^3#real^3`]
15946 THEN ASM_TAC
15947 THEN SET_TAC[];(*13*)
15948
15949 STRIP_TAC
15950 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
15951 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`dartset_leads_into_fan x V E ds2`]
15952 THEN POP_ASSUM MP_TAC
15953 THEN REWRITE_TAC[open_def]
15954 THEN STRIP_TAC
15955 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(&1 - t1) % y + t1 % z:real^3`)
15956 THEN POP_ASSUM MP_TAC
15957 THEN REWRITE_TAC[dist]
15958 THEN ABBREV_TAC`t2=min (inv(norm(z-y:real^3)) *e) (&1- t1)/ &2 + t1 `
15959 THEN MRESAL_TAC imp_norm_gl_zero_fan[`z:real^3`;`y:real^3`][REAL_ARITH`A>B <=> B<A`]
15960 THEN MRESA_TAC REAL_LT_MUL[`inv(norm(z-y:real^3))`;`e:real`]
15961 THEN MP_TAC(REAL_ARITH`&0 < inv (norm (z - y:real^3)) * e /\ t1< &1/\ &0<= t1 ==> t1< min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1/\ min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1 <= &1 /\ &0 <= min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1/\ &0 <= min (inv (norm (z - y)) * e) (&1 - t1) / &2 
15962 /\ min (inv (norm (z - y)) * e) (&1 - t1) / &2  < e * inv (norm (z - y)) `)
15963 THEN RESA_TAC
15964 THEN MP_TAC(ISPEC`min (inv (norm (z - y:real^3)) * e) (&1 - t1) / &2:real`REAL_ABS_REFL)
15965 THEN RESA_TAC
15966 THEN SUBGOAL_THEN`norm (((&1 - t2) % y + t2 % z:real^3) - ((&1 - t1) % y + t1 % z)) < e`
15967 ASSUME_TAC
15968 THENL(*14*)[
15969 EXPAND_TAC"t2"
15970 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - (min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1)) % y +
15971    (min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1) % z) -
15972   ((&1 - t1) % y + t1 % z))
15973 = (min (inv (norm (z - y)) * e) (&1 - t1) / &2) % (z-y)`;NORM_MUL]
15974 THEN ASM_REWRITE_TAC[]
15975 THEN MRESA_TAC imp_norm_not_zero_fan[`z:real^3`;`y:real^3`]
15976 THEN MRESA1_TAC NORM_POS_LE`z-y:real^3`
15977 THEN MP_TAC(REAL_ARITH`&0 <= norm (z - y) /\ ~(norm (z - y) = &0) ==> &0 < norm (z - y:real^3)`)
15978 THEN RESA_TAC
15979 THEN MRESA1_TAC REAL_MUL_LINV`norm(z-y:real^3)`
15980 THEN MRESAL_TAC REAL_LT_RMUL[`min (inv (norm (z - y:real^3)) * e) (&1 - t1) / &2`;`e * inv (norm (z - y:real^3))`;`norm (z - y:real^3)`][REAL_ARITH`(A * B) *C= A *(B*C)`;REAL_ARITH`A * &1=A`];(*14*)
15981
15982 STRIP_TAC
15983 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((&1 - t2) % y + t2 % z:real^3)`)
15984 THEN SUBGOAL_THEN`(t2:real) IN TA` ASSUME_TAC
15985 THENL(*15*)[
15986
15987 EXPAND_TAC "TA"
15988 THEN REWRITE_TAC[IN_ELIM_THM]
15989 THEN ASM_REWRITE_TAC[]
15990 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3`
15991 THEN ASM_REWRITE_TAC[];(*15*)
15992
15993 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t2:real` th))`!x:real. x IN TA ==> x <= t1`
15994 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;REAL_ARITH`A<=B <=> ~(B< A)`])
15995 THEN ASM_REWRITE_TAC[]](*15*)](*14*)](*13*)](*12*);(*11*)
15996
15997
15998 POP_ASSUM (fun th-> MP_TAC th THEN ASSUME_TAC th)
15999 THEN EXPAND_TAC "TA"
16000 THEN REWRITE_TAC[IN_ELIM_THM;DE_MORGAN_THM]
16001 THEN ASM_REWRITE_TAC[]
16002 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC`&0` th))`!x. x IN TA ==> x <= t1:real`
16003 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`&0 IN TA`
16004 THEN RESA_TAC
16005 THEN REWRITE_TAC[NOT_EXISTS_THM;DE_MORGAN_THM]
16006 THEN DISCH_THEN(LABEL_TAC"LINH")
16007 THEN DISJ_CASES_TAC(SET_RULE`~(!e. 
16008 &0< e ==>  
16009 ?e1 f3. &0 < e1 /\ e1< e /\ f3 IN D
16010 /\ ((&1 -(t1-e1)) % y + (t1-e1) % z:real^3) IN 
16011 dartset_leads_into_fan x V E (face (hypermap1_of_fanx (x:real^3,V,E)) f3))\/ (!e. 
16012 &0< e ==> 
16013 ?e1 f3. &0 < e1 /\ e1< e /\ f3 IN D
16014 /\ ((&1 -(t1-e1)) % y + (t1-e1) % z) IN 
16015 dartset_leads_into_fan x V E (face (hypermap1_of_fanx (x:real^3,V,E)) f3)) `)
16016 THENL(*12*)[
16017
16018 POP_ASSUM MP_TAC
16019 THEN REWRITE_TAC[NOT_EXISTS_THM;NOT_IMP;NOT_FORALL_THM]
16020 THEN REWRITE_TAC[DE_MORGAN_THM]
16021 THEN STRIP_TAC
16022 THEN POP_ASSUM MP_TAC
16023 THEN DISCH_THEN(LABEL_TAC"LINH1")
16024 THEN SUBGOAL_THEN`(!a. a IN TA ==> a <= t1- e/ &2)`ASSUME_TAC
16025 THENL(*13*)[
16026
16027 GEN_TAC THEN
16028 STRIP_TAC
16029 THEN POP_ASSUM( fun th-> MP_TAC th THEN ASSUME_TAC th)
16030 THEN EXPAND_TAC "TA"
16031 THEN REWRITE_TAC[IN_ELIM_THM]
16032 THEN REPEAT STRIP_TAC
16033 THEN MP_TAC(REAL_ARITH`&0< e ==> &0< e/ &2 /\ e/ &2 < e`)
16034 THEN RESA_TAC
16035 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `a:real` th))`!x. x IN TA ==> x <= t1:real`
16036 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`a:real IN TA`
16037 THEN STRIP_TAC
16038 THEN MP_TAC(REAL_ARITH`a<= t1==> a=t1 \/ a< t1`)
16039 THEN RESA_TAC
16040 THENL(*14*)[
16041
16042 FIND_ASSUM MP_TAC`a:real IN TA`
16043 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;] )
16044 THEN EXPAND_TAC"TA"
16045 THEN REWRITE_TAC[IN_ELIM_THM] 
16046 THEN STRIP_TAC
16047 THEN  REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3`);(*14*)
16048
16049
16050 MP_TAC(REAL_ARITH`a<t1==> &0< t1 -a`)
16051 THEN RESA_TAC
16052 THEN REMOVE_THEN "LINH1"(fun th-> MRESAL_TAC th[`t1-a:real`;`f:real^3#real^3#real^3#real^3`][REAL_ARITH`(t1 - (t1 - a))=a`])
16053 THEN MP_TAC(REAL_ARITH`~(t1 - a < e) /\ &0< e==> a<= t1 - e/ &2`)
16054 THEN RESA_TAC](*14*);(*13*)
16055
16056 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1- e / &2` th))`!b. (!x. x IN TA ==> x <= b) ==> t1 <= b:real`
16057 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
16058 THEN REMOVE_ASSUM_TAC
16059 THEN POP_ASSUM MP_TAC
16060 THEN REAL_ARITH_TAC](*13*);(*12*)
16061
16062
16063 POP_ASSUM MP_TAC
16064 THEN DISCH_THEN(LABEL_TAC"LINH1")
16065 THEN SUBGOAL_THEN`(&1 - t1) % y + t1 % z IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16066 THENL(*13*)[
16067
16068 REWRITE_TAC[IN_ELIM_THM]
16069 THEN EXISTS_TAC`t1:real`
16070 THEN ASM_REWRITE_TAC[];(*13*)
16071
16072
16073 MP_TAC(SET_RULE`(&1 - t1) % y + t1 % z IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1} /\ {(&1 - u) % y + u % z | &0 <= u /\ u <= &1} SUBSET Z ==> (&1 - t1) % y + t1 % z IN Z`)
16074 THEN RESA_TAC
16075 THEN POP_ASSUM MP_TAC
16076 THEN MRESA_TAC yfan_union_aff_gt_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
16077 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th; UNION;IN_ELIM_THM;GSYM UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN;UNIONS])
16078 THEN STRIP_TAC
16079 THENL(*14*)[
16080
16081 POP_ASSUM MP_TAC
16082 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3->bool`]
16083 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC
16084 THEN POP_ASSUM MP_TAC
16085  THEN REWRITE_TAC[SYM th])
16086 THEN REPEAT STRIP_TAC
16087 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`dartset_leads_into_fan x V E f`]
16088 THEN POP_ASSUM MP_TAC
16089 THEN REWRITE_TAC[open_def]
16090 THEN STRIP_TAC
16091 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(&1 - t1) % y + t1 % z:real^3`)
16092 THEN POP_ASSUM MP_TAC
16093 THEN REWRITE_TAC[dist]
16094 THEN DISCH_THEN(LABEL_TAC"LINH2")
16095 THEN MRESAL_TAC imp_norm_gl_zero_fan[`z:real^3`;`y:real^3`][REAL_ARITH`A>B <=> B<A`]
16096 THEN MRESA_TAC REAL_LT_MUL[`inv(norm(z-y:real^3))`;`e:real`]
16097 THEN REMOVE_THEN "LINH1" (fun th-> MRESA1_TAC th ` inv(norm(z-y:real^3)) * e:real`)
16098 THEN POP_ASSUM MP_TAC
16099 THEN SUBGOAL_THEN`norm (((&1 - (t1- e1)) % y + (t1- e1) % z:real^3) - ((&1 - t1) % y + t1 % z)) < e`
16100 ASSUME_TAC
16101 THENL(*15*)[
16102
16103 REWRITE_TAC[VECTOR_ARITH`(((&1 - (t1 - e1)) % y + (t1 - e1) % z) - ((&1 - t1) % y + t1 % z))
16104 = --(e1 %(z-y))`;NORM_NEG;NORM_MUL]
16105 THEN MRESA_TAC imp_norm_not_zero_fan[`z:real^3`;`y:real^3`]
16106 THEN MRESA1_TAC NORM_POS_LE`z-y:real^3`
16107 THEN MP_TAC(REAL_ARITH`&0 <= norm (z - y) /\ ~(norm (z - y) = &0) /\ &0< e1 ==> &0 < norm (z - y:real^3)/\ &0<= e1`)
16108 THEN RESA_TAC
16109 THEN MRESA1_TAC REAL_MUL_LINV`norm(z-y:real^3)`
16110 THEN MP_TAC(ISPEC`e1:real`REAL_ABS_REFL)
16111 THEN RESA_TAC
16112 THEN MRESAL_TAC REAL_LT_RMUL[`e1:real`;`inv (norm (z - y:real^3)) * (e:real)`;`(norm (z - y:real^3))`][REAL_ARITH`(A * B) *C= B*(A*C)`;REAL_ARITH`A * &1=A`];(*15*)
16113
16114
16115 REMOVE_THEN"LINH2"(fun th-> MRESA1_TAC th`((&1 - (t1 - e1)) % y + (t1 - e1) % z):real^3`)
16116 THEN POP_ASSUM MP_TAC
16117 THEN ABBREV_TAC`y12=((&1 - (t1 - e1)) % y + (t1 - e1) % z):real^3`
16118 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E)) (f3:real^3#real^3#real^3#real^3)`
16119 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
16120 THEN RESA_TAC
16121 THEN SUBGOAL_THEN`ds2 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16122 THENL(*16*)[
16123
16124 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
16125 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
16126 THEN EXPAND_TAC"ds2"
16127 THEN REWRITE_TAC[face]
16128 THEN ASM_REWRITE_TAC[];(*16*)
16129
16130 STRIP_TAC
16131 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds2:real^3#real^3#real^3#real^3->bool`]
16132 THEN POP_ASSUM MP_TAC
16133 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16134 THEN RESA_TAC
16135 THEN STRIP_TAC
16136 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y12:real^3`]
16137 THEN POP_ASSUM MP_TAC
16138 THEN REMOVE_ASSUM_TAC
16139 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16140 THEN REMOVE_ASSUM_TAC
16141 THEN POP_ASSUM MP_TAC
16142 THEN FIND_ASSUM MP_TAC`dartset_leads_into_fan x V E f IN topological_component_yfan (x:real^3,V,E)`
16143 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16144 THEN RESA_TAC
16145 THEN STRIP_TAC
16146 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y12:real^3`]
16147 THEN REMOVE_ASSUM_TAC
16148 THEN REMOVE_ASSUM_TAC
16149 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16150 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`f3:real^3#real^3#real^3#real^3`)
16151 THEN STRIP_TAC
16152 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[SYM th])](*16*)](*15*);(*14*)
16153
16154
16155 POP_ASSUM MP_TAC
16156 THEN POP_ASSUM MP_TAC
16157 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
16158 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
16159 THEN RESA_TAC
16160 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
16161 `(v:real^3)`]
16162 THEN MP_TAC(REAL_ARITH`(t1:real) <= &1 ==> t1= &1 \/ t1< &1`)
16163 THEN RESA_TAC
16164 THENL(*15*)[
16165
16166 REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
16167 THEN STRIP_TAC
16168 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (w:real^3)`]
16169 THEN MP_TAC(SET_RULE`z IN aff_gt {x} {v, w} /\ aff_ge {x} {v, w} =
16170       aff_gt {x} {v, w} UNION aff_ge {x} {v} UNION aff_ge {x} {w}
16171 ==> z IN aff_ge {x} {v, w:real^3} `)
16172 THEN ASM_REWRITE_TAC[]
16173 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16174 THEN STRIP_TAC
16175 THEN SUBGOAL_THEN`z IN xfan(x:real^3,V:real^3->bool,E)`ASSUME_TAC
16176 THENL(*16*)[
16177 REWRITE_TAC[xfan;IN_ELIM_THM]
16178 THEN EXISTS_TAC`{v,w:real^3}`
16179 THEN ASM_REWRITE_TAC[IN]
16180 THEN ASM_MESON_TAC[IN];(*16*)
16181
16182 MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds1:real^3#real^3#real^3#real^3->bool`]
16183 THEN MP_TAC(SET_RULE`z IN dartset_leads_into_fan x V E ds1 /\ dartset_leads_into_fan x V E ds1 SUBSET yfan(x:real^3,V,E) ==> z IN yfan(x:real^3,V,E)`)
16184 THEN ASM_REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]](*16*);(*15*)
16185
16186 STRIP_TAC
16187 THEN ABBREV_TAC`v1=(&1 - t1) % y + t1 % z:real^3`
16188 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`w:real^3`;`v1:real^3`]
16189 THEN MP_TAC(SET_RULE`{v,w:real^3} IN E==> ~(E={})`)
16190 THEN RESA_TAC
16191 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`]
16192 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`]
16193 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dartset_leads_into_fan x V E ds):real^3->bool`;` y:real^3`]
16194 THEN MRESA_TAC point_in_yfan_not_x_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(dartset_leads_into_fan x V E ds1):real^3->bool`;` z:real^3`]
16195 THEN SUBGOAL_THEN`~(collinear{x,y,z:real^3})` ASSUME_TAC
16196 THENL(*16*)[
16197
16198 MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (z:real^3)`;`(y:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16199 THEN STRIP_TAC
16200 THEN POP_ASSUM MP_TAC
16201 THEN POP_ASSUM MP_TAC
16202 THEN DISJ_CASES_TAC(REAL_ARITH`v'= &0\/ &0< -- v' \/ &0 < v'`)
16203 THENL(*17*)[
16204
16205 ASM_REWRITE_TAC[REAL_ARITH`A + &0=A`]
16206 THEN RESA_TAC
16207 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 % x + &0 % z= x`];(*17*)
16208
16209 POP_ASSUM MP_TAC
16210 THEN STRIP_TAC
16211 THENL(*18*)[
16212
16213 REWRITE_TAC[VECTOR_ARITH`y = u' % x + v' % z <=> u' % x =y +(--v') % z `]
16214 THEN DISJ_CASES_TAC(SET_RULE`u'= &0 \/ ~(u'= &0)`)
16215 THENL(*19*)[
16216
16217 ASM_REWRITE_TAC[REAL_ARITH`&0+A=A`;]
16218 THEN RESA_TAC
16219 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&0 % x = y + -- &1 % z <=>  y=z`];(*19*)
16220 STRIP_TAC
16221 THEN MRESA1_TAC REAL_MUL_LINV`u':real`
16222 THEN STRIP_TAC
16223 THEN MP_TAC(SET_RULE`u' % x = y + --v' % z ==> (inv (u')) %(u' % x ) = inv (u')%(y + --v' % z:real^3)`)
16224 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
16225 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
16226 THEN STRIP_TAC
16227 THEN SUBGOAL_THEN`x IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16228 THENL(*20*)[
16229 MP_TAC(REAL_ARITH`~(u'= &0) ==> &0< u'\/ &0 < -- u'`)
16230 THEN RESA_TAC
16231 THENL(*21*)[
16232
16233 REWRITE_TAC[IN_ELIM_THM]
16234 THEN EXISTS_TAC`(inv u' * --v')`
16235 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - inv u' * --v')=( &1 - inv u' * u')+ inv u' *(u'+v') `;REAL_ARITH`&1 - &1 + inv u' * &1 = inv u'`;REAL_ARITH`A<= &1<=> &0<= &1 -A `]
16236 THEN MP_TAC(REAL_ARITH`&0< -- v' /\ &0 < u' ==> &0<= -- v' /\ &0 <= u'`)
16237 THEN RESA_TAC
16238 THEN MRESA1_TAC REAL_LE_INV`u':real`
16239 THEN MATCH_MP_TAC REAL_LE_MUL
16240 THEN ASM_REWRITE_TAC[];(*21*)
16241
16242 MP_TAC(REAL_ARITH`&0< --v' /\ &0 < -- u' ==> &0 < --(u'+v')`)
16243 THEN RESA_TAC
16244 THEN POP_ASSUM MP_TAC
16245 THEN REAL_ARITH_TAC](*21*);(*20*)
16246
16247 MP_TAC(SET_RULE`x IN {(&1 - u) % y + u % z | &0 <= u /\ u <= &1}
16248 /\ {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1} SUBSET Z
16249 ==> x IN Z`)
16250 THEN ASM_REWRITE_TAC[]
16251 THEN REMOVE_ASSUM_TAC
16252 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16253 THEN EXPAND_TAC"Z"
16254 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;SET_RULE`x IN (:real^3)`;UNIONS;IN_ELIM_THM]
16255 THEN EXISTS_TAC`aff_ge {x} {v:real^3}` 
16256 THEN MRESA_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `]
16257 THEN EXISTS_TAC`v:real^3`
16258 THEN ASM_REWRITE_TAC[]](*20*)](*19*);(*18*)
16259
16260
16261
16262 REPEAT STRIP_TAC
16263 THEN SUBGOAL_THEN`y IN aff_gt {x} {z:real^3}` ASSUME_TAC
16264 THENL(*19*)[
16265
16266 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`z:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {y}<=> ~(x=y)`]
16267 THEN EXISTS_TAC`u':real`
16268 THEN EXISTS_TAC`v':real`
16269 THEN ASM_REWRITE_TAC[];(*19*)
16270
16271 MRESA_TAC AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`ds1:real^3#real^3#real^3#real^3->bool`;`z:real^3`]
16272 THEN MP_TAC(SET_RULE`y IN aff_gt {x} {z:real^3}/\ aff_gt {x} {z} SUBSET dartset_leads_into_fan x V E ds1
16273 ==>  y IN dartset_leads_into_fan x V E ds1`)
16274 THEN RESA_TAC
16275 THEN POP_ASSUM MP_TAC
16276 THEN REMOVE_ASSUM_TAC
16277 THEN REMOVE_ASSUM_TAC
16278 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16279 THEN REMOVE_ASSUM_TAC
16280 THEN REMOVE_ASSUM_TAC
16281 THEN REMOVE_ASSUM_TAC
16282 THEN REMOVE_ASSUM_TAC
16283 THEN REMOVE_ASSUM_TAC
16284 THEN POP_ASSUM MP_TAC
16285 THEN POP_ASSUM MP_TAC
16286 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16287 THEN RESA_TAC
16288 THEN RESA_TAC
16289 THEN STRIP_TAC
16290 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y:real^3`]
16291 THEN POP_ASSUM MP_TAC
16292 THEN REMOVE_ASSUM_TAC
16293 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16294 THEN REMOVE_ASSUM_TAC
16295 THEN FIND_ASSUM MP_TAC`y IN dartset_leads_into_fan (x:real^3) V E ds`
16296 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
16297 THEN STRIP_TAC
16298 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y:real^3`]
16299 THEN POP_ASSUM MP_TAC
16300 THEN REMOVE_ASSUM_TAC
16301 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16302 THEN STRIP_TAC
16303 THEN STRIP_TAC
16304 THEN SUBGOAL_THEN`&1 IN TA:real->bool` ASSUME_TAC
16305 THENL(*20*)[
16306
16307 EXPAND_TAC "TA"
16308 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`&0<= &1 /\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
16309 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
16310 THEN ASM_REWRITE_TAC[];(*20*)
16311
16312
16313 FIND_ASSUM (fun th-> MP_TAC(ISPEC `&1` th))`!x. x IN TA ==> x <= t1:real`
16314 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
16315 THEN ASM_REWRITE_TAC[]
16316 THEN REMOVE_ASSUM_TAC
16317 THEN REMOVE_ASSUM_TAC
16318 THEN REMOVE_ASSUM_TAC
16319 THEN REMOVE_ASSUM_TAC
16320 THEN REMOVE_ASSUM_TAC
16321 THEN REMOVE_ASSUM_TAC
16322 THEN REMOVE_ASSUM_TAC
16323 THEN POP_ASSUM MP_TAC
16324 THEN REAL_ARITH_TAC](*20*)](*19*)](*18*)](*17*);(*16*)
16325
16326
16327 POP_ASSUM MP_TAC
16328 THEN SUBGOAL_THEN`v1 IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16329 THENL(*17*)[
16330
16331 REWRITE_TAC[IN_ELIM_THM]
16332 THEN EXISTS_TAC`t1:real`
16333 THEN ASM_REWRITE_TAC[];(*17*)
16334
16335 SUBGOAL_THEN`~(x= v1:real^3)` ASSUME_TAC
16336 THENL(*18*)[
16337  STRIP_TAC
16338 THEN  MP_TAC(SET_RULE`v1 IN {(&1 - u) % y + u % z | &0 <= u /\ u <= &1}
16339 /\ {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1} SUBSET Z
16340 ==> v1 IN Z`)
16341 THEN ASM_REWRITE_TAC[]
16342 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16343 THEN EXPAND_TAC"Z"
16344 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;SET_RULE`x IN (:real^3)`;UNIONS;IN_ELIM_THM]
16345 THEN EXISTS_TAC`aff_ge {x} {v:real^3}` 
16346 THEN MRESA_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `]
16347 THEN EXISTS_TAC`v:real^3`
16348 THEN ASM_REWRITE_TAC[];(*18*)
16349
16350  MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
16351 THEN RESA_TAC
16352 THEN STRIP_TAC
16353 THEN SUBGOAL_THEN`~collinear{x,y,v1:real^3}` ASSUME_TAC
16354 THENL(*19*)[
16355
16356 POP_ASSUM MP_TAC
16357 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16358 THEN MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (y:real^3)`;`(z:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16359 THEN MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (y:real^3)`;`(v1:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16360 THEN REWRITE_TAC[CONTRAPOS_THM]
16361 THEN EXPAND_TAC"v1"
16362 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t1) % y + t1 % z = u' % x + v' % y
16363 <=> t1 % z= u' % x + (v'- &1 +t1) %y`]
16364 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
16365 THEN REPEAT STRIP_TAC
16366 THEN MP_TAC(SET_RULE`t1 % z = u' % x + (v' - &1 + t1) % y ==> (inv (t1)) %(t1 % z ) = inv (t1)%(u' % x + (v' - &1 + t1) % y:real^3)`)
16367 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
16368 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C `;VECTOR_ARITH`A%(B+C)=A%B+A%C`;VECTOR_ARITH`&1 %A=A`]
16369 THEN RESA_TAC
16370 THEN EXISTS_TAC`inv t1 * u':real`
16371 THEN EXISTS_TAC`(inv t1 * (v' - &1 + t1)):real`
16372 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t1 * u' +(inv t1 * (v' - &1 + t1))= inv t1 * ((u'+ v')- &1 +t1)`;REAL_ARITH`&1- &1+A=A`];(*19*)
16373
16374 POP_ASSUM MP_TAC
16375 THEN REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16376 THEN STRIP_TAC
16377 THEN SUBGOAL_THEN`v1 IN aff_gt {x} {y,z:real^3}` ASSUME_TAC
16378 THENL(*20*)[
16379
16380 MRESAL_TAC AFF_GT_1_2[`x:real^3`;`y:real^3`;`z:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`]
16381 THEN EXISTS_TAC`&0`
16382 THEN EXISTS_TAC`&1- t1`
16383 THEN EXISTS_TAC`t1:real`
16384 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A= &0 % X +A`;REAL_ARITH`&0< &1- t1 <=> t1< &1`;]
16385 THEN MP_TAC(REAL_ARITH`&0<= t1 /\ ~(t1= &0)==> &0< t1`)
16386 THEN RESA_TAC
16387 THEN REAL_ARITH_TAC;(*20*)
16388
16389 MRESAL_TAC aff_gt3_subset_aff_gt[`x:real^3`;`y:real^3`;`z:real^3`;`v1:real^3`][SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`]
16390 THEN POP_ASSUM MP_TAC
16391 THEN REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16392 THEN RESA_TAC
16393 THEN DISJ_CASES_TAC(SET_RULE`coplanar{x,v1,v,y}\/ ~coplanar{x,v1,v,y:real^3}`)
16394 THENL(*21*)[
16395
16396 MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`][DE_MORGAN_THM;]
16397 THENL(*22*)[
16398
16399
16400 MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`]
16401 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x,v1:real^3}`;`{v:real^3}`]
16402 THEN MP_TAC(SET_RULE`y IN aff_gt {x, v1} {v}/\ aff_gt {x, v1} {v} SUBSET aff_ge {x, v1} {v}
16403 ==>  y IN aff_ge {x, v1} {v:real^3}`)
16404 THEN RESA_TAC
16405 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`]
16406 THENL(*23*)[
16407
16408 POP_ASSUM MP_TAC
16409 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16410 THEN STRIP_TAC
16411 THEN MRESAL_TAC aff_gt_subset_dartset_leads_into_fan_union_aff_gt[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`ds1:real^3#real^3#real^3#real^3->bool`;`Z:real^3->bool`;`y:real^3`;`z:real^3`][segment]
16412 THEN MP_TAC(SET_RULE`v IN aff_gt {x} {y,v1:real^3}/\ aff_gt {x} {y, v1} SUBSET aff_gt {x} {y, z}
16413 /\ aff_gt {x} {y, z} SUBSET Z==> v IN Z`)
16414 THEN ASM_REWRITE_TAC[]
16415 THEN EXPAND_TAC"Z"
16416 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;UNIONS;NOT_EXISTS_THM;DE_MORGAN_THM]
16417 THEN MRESAL_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `][IN_SING]
16418 THEN STRIP_TAC
16419 THEN POP_ASSUM (fun th-> MRESA1_TAC th `aff_ge {x} {v:real^3}`)
16420 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`);(*23*)
16421
16422
16423 POP_ASSUM MP_TAC
16424 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16425 THEN RESA_TAC
16426 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3}`;`{v:real^3,w}`]
16427 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w:real^3}
16428 /\ v1 IN aff_gt {x} {v, w} ==> v1 IN aff_ge {x} {v, w}`)
16429 THEN RESA_TAC
16430 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w:real^3`; `v:real^3`;`v1:real^3`]
16431 THEN POP_ASSUM MP_TAC
16432 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16433 THEN RESA_TAC
16434 THEN MP_TAC(SET_RULE`aff_ge {x} {v, v1} SUBSET aff_ge {x} {v, w} /\ y IN aff_ge {x} {v, v1} ==> y IN aff_ge {x} {v, w:real^3}`)
16435 THEN ASM_REWRITE_TAC[]
16436 THEN STRIP_TAC
16437 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds:real^3#real^3#real^3#real^3->bool`]
16438 THEN MP_TAC(SET_RULE`y IN dartset_leads_into_fan x V E ds
16439 /\ dartset_leads_into_fan x V E ds SUBSET yfan(x,V,E)==>  y IN yfan(x:real^3,V,E)`)
16440 THEN RESA_TAC
16441 THEN POP_ASSUM MP_TAC
16442 THEN REWRITE_TAC[yfan;DIFF;IN_ELIM_THM;xfan;NOT_EXISTS_THM;DE_MORGAN_THM]
16443 THEN STRIP_TAC
16444 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v,w:real^3}`)
16445 THEN ASM_TAC
16446 THEN REWRITE_TAC[IN]
16447 THEN REPEAT RESA_TAC](*23*);(*22*)
16448
16449
16450
16451
16452 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`v:real^3`;`v1:real^3`]
16453 THEN POP_ASSUM MP_TAC
16454 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16455 THEN ASM_REWRITE_TAC[]
16456 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16457 THEN STRIP_TAC
16458 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3 `;`v1:real^3`]
16459 THEN MRESAL_TAC sum4_azim_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`w:real^3`;`y:real^3`][REAL_ARITH`pi<=pi`;REAL_ARITH`pi = pi + azim x v1 w y <=>  azim x v1 w y= &0`]
16460 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v1:real^3`;`w:real^3`;`y:real^3`]
16461 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x,v1:real^3}`;`{w:real^3}`]
16462 THEN MP_TAC(SET_RULE`y IN aff_gt {x, v1} {w}/\ aff_gt {x, v1} {w} SUBSET aff_ge {x, v1} {w}
16463 ==>  y IN aff_ge {x, v1} {w:real^3}`)
16464 THEN RESA_TAC
16465 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`v1:real^3`;`w:real^3`;`y:real^3`]
16466 THENL(*23*)[
16467
16468 POP_ASSUM MP_TAC
16469 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16470 THEN STRIP_TAC
16471 THEN MRESAL_TAC aff_gt_subset_dartset_leads_into_fan_union_aff_gt[`x:real^3`;`(V:real^3->bool)` ;`(E:(real^3->bool)->bool)`;`ds:real^3#real^3#real^3#real^3->bool`;`ds1:real^3#real^3#real^3#real^3->bool`;`Z:real^3->bool`;`y:real^3`;`z:real^3`][segment]
16472 THEN MP_TAC(SET_RULE`w IN aff_gt {x} {y,v1:real^3}/\ aff_gt {x} {y, v1} SUBSET aff_gt {x} {y, z}
16473 /\ aff_gt {x} {y, z} SUBSET Z==> w IN Z`)
16474 THEN ASM_REWRITE_TAC[]
16475 THEN EXPAND_TAC"Z"
16476 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;UNIONS;NOT_EXISTS_THM;DE_MORGAN_THM]
16477 THEN MRESAL_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(w:real^3) `][IN_SING]
16478 THEN STRIP_TAC
16479 THEN POP_ASSUM (fun th-> MRESA1_TAC th `aff_ge {x} {w:real^3}`)
16480 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16481 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
16482 ` (w:real^3)`]
16483 THEN POP_ASSUM MP_TAC
16484 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16485 THEN ASM_REWRITE_TAC[];(*23*)
16486
16487
16488
16489 MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3}`;`{v:real^3,w}`]
16490 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w:real^3}
16491 /\ v1 IN aff_gt {x} {v, w} ==> v1 IN aff_ge {x} {v, w}`)
16492 THEN RESA_TAC
16493 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v:real^3`; `w:real^3`;`v1:real^3`]
16494 THEN MP_TAC(SET_RULE`aff_ge {x} {v1,w} SUBSET aff_ge {x} {v, w} /\ y IN aff_ge {x} {v1,w} ==> y IN aff_ge {x} {v, w:real^3}`)
16495 THEN ASM_REWRITE_TAC[]
16496 THEN STRIP_TAC
16497 THEN MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` ds:real^3#real^3#real^3#real^3->bool`]
16498 THEN MP_TAC(SET_RULE`y IN dartset_leads_into_fan x V E ds
16499 /\ dartset_leads_into_fan x V E ds SUBSET yfan(x,V,E)==>  y IN yfan(x:real^3,V,E)`)
16500 THEN RESA_TAC
16501 THEN POP_ASSUM MP_TAC
16502 THEN REWRITE_TAC[yfan;DIFF;IN_ELIM_THM;xfan;NOT_EXISTS_THM;DE_MORGAN_THM]
16503 THEN STRIP_TAC
16504 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v,w:real^3}`)
16505 THEN ASM_TAC
16506 THEN REWRITE_TAC[IN]
16507 THEN REPEAT RESA_TAC](*23*)](*22*);(*21*)
16508
16509
16510 MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`][DE_MORGAN_THM;]
16511 THEN MP_TAC(REAL_ARITH`&0<= azim x v1 v y /\ azim x v1 v y < &2 * pi /\ ~(azim x v1 v y = &0)/\ ~(azim x v1 v y= pi)==> (&0< azim x v1 v y/\ azim x v1 v y < pi)\/ (pi< azim x v1 v y/\ azim x v1 v y < &2 * pi)`)
16512 THEN ASM_REWRITE_TAC[azim]
16513 THEN STRIP_TAC
16514 THENL(*22*)[
16515
16516 MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `y:real^3`;`v:real^3`]
16517 THEN ABBREV_TAC`u123=inverse1_sigma_fan x V E v w:real^3`
16518 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
16519 THEN REMOVE_ASSUM_TAC
16520 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16521 THEN POP_ASSUM MP_TAC
16522 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16523 THEN STRIP_TAC
16524 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
16525 THEN REWRITE_TAC[fan80]
16526 THEN STRIP_TAC
16527 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u123:real^3`])
16528 THEN POP_ASSUM MP_TAC
16529 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16530 THEN RESA_TAC
16531 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u123:real^3)`;
16532 ` (v:real^3)`]
16533 THEN POP_ASSUM MP_TAC
16534 THEN POP_ASSUM MP_TAC
16535 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16536 THEN RESA_TAC
16537 THEN RESA_TAC
16538 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`;`v:real^3`]
16539 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`; `w:real^3`;`u123:real^3`]
16540 THEN POP_ASSUM MP_TAC
16541 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16542 THEN RESA_TAC
16543 THEN POP_ASSUM MP_TAC
16544 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16545 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16546 THEN STRIP_TAC
16547 THEN MRESA_TAC aff_gt_1_2_cross_dotr_4point_neg[`x:real^3`;`v1:real^3`;`y:real^3`;`v:real^3`;`w:real^3`;]
16548 THEN POP_ASSUM MP_TAC
16549 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
16550 THEN REWRITE_TAC[GSYM DOT_LNEG;GSYM CROSS_SKEW]
16551 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16552 THEN ASM_REWRITE_TAC[]
16553 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16554 THEN STRIP_TAC
16555 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (w:real^3)`;`(v:real^3)`;`(u123:real^3)`]
16556 THEN POP_ASSUM MP_TAC
16557 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16558 THEN RESA_TAC
16559 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < t1' / &2 ==> ~collinear {x, (&1 - h) % v + h % u123, w:real^3})`ASSUME_TAC
16560 THENL(*23*)[
16561
16562 POP_ASSUM MP_TAC
16563 THEN DISCH_THEN(LABEL_TAC"CHANGE")
16564 THEN GEN_TAC THEN STRIP_TAC
16565 THEN REMOVE_THEN "CHANGE"(fun th-> MRESA1_TAC th`h:real`)
16566 THEN POP_ASSUM MATCH_MP_TAC
16567 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
16568 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
16569 THEN REAL_ARITH_TAC;(*23*)
16570
16571 MP_TAC(REAL_ARITH`&0< t1' /\ t1'<= &1==> &0< t1'/ &2 /\ t1'/ &2 < &1`)
16572 THEN RESA_TAC
16573 THEN MRESAL_TAC condition_4point_aff_gt_1_2inter_aff_gt_1_2[`x:real^3`;`v1:real^3`;`y:real^3`;`w:real^3`;` v:real^3`;`u123:real^3`;`t1'/ &2:real`][REAL_ARITH`&1/ &2 < &1 /\ &0 < &1/ &2`]
16574 THEN POP_ASSUM MP_TAC
16575 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
16576 THEN RESA_TAC
16577 THEN POP_ASSUM MP_TAC
16578 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16579 THEN RESA_TAC
16580 THEN POP_ASSUM MP_TAC
16581 THEN DISCH_THEN(LABEL_TAC"YEU")
16582 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w) IN d1_fan(x:real^3,V,E)`
16583 ASSUME_TAC
16584 THENL(*24*)[
16585
16586 REWRITE_TAC[d1_fan;IN_ELIM_THM]
16587 THEN EXISTS_TAC`x:real^3`
16588 THEN EXISTS_TAC`v:real^3`
16589 THEN EXISTS_TAC`w:real^3`
16590 THEN EXISTS_TAC`sigma_fan x V E v w:real^3`
16591 THEN ASM_REWRITE_TAC[];(*24*)
16592
16593 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w) IN
16594       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16595 THENL(*25*)[
16596
16597 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
16598 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
16599 THEN ASM_REWRITE_TAC[face];(*25*)
16600
16601 SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v) IN d1_fan(x:real^3,V,E)`
16602 ASSUME_TAC
16603 THENL(*26*)[
16604
16605 REWRITE_TAC[d1_fan;IN_ELIM_THM]
16606 THEN EXISTS_TAC`x:real^3`
16607 THEN EXISTS_TAC`w:real^3`
16608 THEN EXISTS_TAC`v:real^3`
16609 THEN EXISTS_TAC`sigma_fan x V E w v:real^3`
16610 THEN ASM_REWRITE_TAC[]
16611 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16612 THEN ASM_REWRITE_TAC[];(*26*)
16613
16614
16615 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) IN
16616       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16617 THENL(*27*)[
16618
16619 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
16620 THEN EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
16621 THEN ASM_REWRITE_TAC[face];(*27*)
16622
16623 SUBGOAL_THEN`(x,v,u123,w:real^3) IN face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)`ASSUME_TAC
16624 THENL(*28*)[
16625
16626 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
16627 THEN EXISTS_TAC`SUC 0:num`
16628 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
16629 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
16630 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(x,w,v,sigma_fan x V E w v):real^3#real^3#real^3#real^3`[POWER;I_DEF;o_DEF;])
16631 THEN REWRITE_TAC[f1_fan]
16632 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`];(*28*)
16633
16634 MP_TAC(REAL_ARITH`&0< t /\ t< &1==> &0< t/ &2 /\ t/ &2< t/\ t/ &2< &1/\ t/ &2<= &1 /\ &0<= t/ &2/\ ~(t/ &2 = &0)`)
16635 THEN RESA_TAC
16636 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`t/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
16637 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`;`u123:real^3`]
16638 THEN POP_ASSUM MP_TAC
16639 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16640 THEN RESA_TAC
16641 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`w:real^3`;`v:real^3`;`u123:real^3`][UNIONS;IN_ELIM_THM]
16642 THEN POP_ASSUM MP_TAC
16643 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16644 THEN RESA_TAC
16645 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` w:real^3`;` v:real^3`;` u123:real^3`]
16646 THEN POP_ASSUM MP_TAC
16647 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16648 THEN RESA_TAC
16649 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
16650                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16651                 x' IN u} SUBSET
16652       dart_leads_into x V E v u123
16653 /\ a IN aff_gt {x} {(&1 - t / &2) % v + t / &2 % u123, w:real^3}
16654 /\ &0 < t / &2 /\ t / &2 < &1
16655 ==> a IN dart_leads_into x V E v u123`)
16656 THEN RESA_TAC
16657 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
16658 `(face (hypermap1_of_fanx (x,V:real^3->bool,E)) (x,w,v,sigma_fan x V E w v)) :real^3#real^3#real^3#real^3->bool`]
16659 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,v:real^3,u123:real^3,w:real^3)`[pr2;pr3])
16660 THEN MRESAL_TAC scale_in_edges_fan[`(x:real^3)`;`(y:real^3)`;`(v1:real^3)`;`(a:real^3)`][SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;VECTOR_ARITH`a' % (a - x) = (&1 - t') % y + t' % v1 - x <=> (&1- a')% x + a' % a= (&1 - t') % y + t' % v1`]
16661 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`y:real^3`;`v1:real^3`;`a:real^3`]
16662 THEN POP_ASSUM MP_TAC
16663 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16664 THEN RESA_TAC
16665 THEN POP_ASSUM MP_TAC
16666 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16667 THEN RESA_TAC
16668 THEN MRESA_TAC th3[`(x:real^3)` ;` (a:real^3)`;`(y:real^3)`;]
16669 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}`ASSUME_TAC
16670 THENL(*29*)[
16671
16672 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a:real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
16673 THEN EXISTS_TAC`&1-a':real`
16674 THEN EXISTS_TAC` a':real`
16675 THEN ASM_REWRITE_TAC[]
16676 THEN REAL_ARITH_TAC;(*29*)
16677
16678
16679 MRESA_TAC AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)):real^3#real^3#real^3#real^3->bool`;`a:real^3`]
16680 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {(&1 - t / &2) % v + t / &2 % u123, w:real^3}`
16681 ASSUME_TAC
16682 THENL(*30*)[
16683
16684 MRESA_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`;`u123:real^3`;`t/ &2:real`]
16685 THEN POP_ASSUM MP_TAC
16686 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16687 THEN RESA_TAC
16688 THEN MRESA_TAC th3[`x:real^3`;`(&1 - t / &2) % v + t / &2 % u123:real^3`;`w:real^3`]
16689 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`(&1 - t / &2) % v + t / &2 % u123:real^3`;`w:real^3`]
16690 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`a:real^3`;`a':real`][VECTOR_ARITH`a' % (a - x) + x=(&1 - a') % x + a' % a`])
16691 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16692 THEN RESA_TAC;(*30*)
16693
16694 MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`w:real^3`;`v:real^3`;`u123:real^3`]
16695 THEN POP_ASSUM MP_TAC
16696 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16697 THEN RESA_TAC
16698 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t/ &2:real`)
16699 THEN MRESA_TAC aff_gt_1_2_subset_aff_1_3111[`x:real^3`;`(&1 - t') % y + t' % v1:real^3`;`v1:real^3`;`w:real^3`;`(&1 - t / &2) % v + t / &2 % u123:real^3`;`v:real^3`]
16700 THEN POP_ASSUM MP_TAC
16701 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16702 THEN RESA_TAC
16703 THEN MRESA_TAC AFF_GT_1_3_SUBSET_AFF_GT_1_3[`x:real^3 `;`w:real^3`;`v:real^3`;`u123:real^3`;`t/ &2 :real`]
16704 THEN POP_ASSUM MP_TAC
16705 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16706 THEN RESA_TAC
16707 THEN MP_TAC(SET_RULE`aff_gt {x} {w, (&1 - t / &2) % v + t / &2 % u123, v} SUBSET
16708       {x' | ?u. (?a. (&0 < a /\ a < &1) /\
16709                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16710                 x' IN u}
16711 /\ {x' | ?u. (?a. (&0 < a /\ a < &1) /\
16712                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16713                 x' IN u} SUBSET
16714       dart_leads_into x V E v u123
16715 ==>
16716 aff_gt {x} {w, (&1 - t / &2) % v + t / &2 % u123, v:real^3} SUBSET
16717 dart_leads_into x V E v u123 
16718 `)
16719 THEN ASM_REWRITE_TAC[]
16720 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16721 THEN RESA_TAC
16722 THEN MP_TAC(SET_RULE`aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
16723       aff_gt {x} {w, v, (&1 - t / &2) % v + t / &2 % u123}
16724
16725 /\ aff_gt {x} {w, v, (&1 - t / &2) % v + t / &2 % u123} SUBSET
16726       dart_leads_into x V E v u123
16727
16728 ==>
16729 aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
16730 dart_leads_into x V E v u123 
16731 `)
16732 THEN ASM_REWRITE_TAC[]
16733 THEN STRIP_TAC
16734 THEN MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
16735 THEN MP_TAC(REAL_ARITH`t'< &1/\ &0<= t1 /\ ~(t1= &0)==> &0< &1- t' /\ ~(&1- t' = &0) /\ &0< t1`)
16736 THEN RESA_TAC
16737 THEN MRESAL_TAC REAL_LT_MUL[`t1:real`;`&1- t':real`][REAL_ARITH`t1*(&1- t')= t1- t' * t1`]
16738 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th `t1 - t' * t1:real`)
16739 THEN SUBGOAL_THEN`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3}`
16740 ASSUME_TAC
16741 THENL(*31*)[
16742
16743 MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)):real^3#real^3#real^3#real^3->bool`]
16744 THEN MP_TAC(SET_RULE`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}
16745 /\ aff_gt {x} {a} SUBSET dart_leads_into x V E v u123
16746 /\ dart_leads_into x V E v u123 SUBSET yfan (x,V,E)
16747 ==> (&1 - t') % y + t' % v1 IN yfan(x,V,E)`)
16748 THEN RESA_TAC
16749 THEN POP_ASSUM MP_TAC
16750 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
16751 THEN STRIP_TAC
16752 THEN MRESA_TAC x_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
16753 THEN MP_TAC(SET_RULE`~((&1 - t') % y + t' % v1 IN xfan (x,V:real^3->bool,E)) /\ x IN xfan (x,V,E)
16754 ==> ~(x= (&1 - t') % y + t' % v1:real^3)`)
16755 THEN RESA_TAC
16756 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v1:real^3`;`(&1 - t') % y + t' % v1:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;
16757 VECTOR_ARITH`t1' % x + t2 % v1 + t3 % ((&1 - t') % y + t' % v1)
16758 = t1' % x + (t3 *(&1 - t')) % y + (t2+ t3*t') % v1`]
16759 THEN EXPAND_TAC"v1"
16760 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x +
16761      (t3 * (&1 - t')) % y +
16762      (t2 + t3 * t') % ((&1 - t1) % y + t1 % z)
16763 = t1' % x +
16764      (t3 * (&1 - t') + (t2 + t3 * t') * (&1 - t1)) % y +
16765      ((t2 + t3 * t') * t1) % z`]
16766 THEN MRESA1_TAC REAL_MUL_LINV`&1- t':real`
16767 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
16768 THEN EXISTS_TAC`&0`
16769 THEN EXISTS_TAC `inv t1 * (t1- e1)- ((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t')* t' :real`
16770 THEN EXISTS_TAC`((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t'):real`
16771 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t1 * (t1 - e1) - a1 * t' + a1 * t'= (t1- e1)* inv t1`; REAL_ARITH`(A*B)*C=A*(B*C)`;REAL_ARITH`&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)+
16772   (t1 - e1) * inv t1 * (&1 - t1)= &1 - (t1 - e1)`; REAL_ARITH`A * &1=A`
16773 ;VECTOR_ARITH` &0 % x + A +B= A+B`;
16774 REAL_ARITH`&0 +
16775  inv t1 * (t1 - e1) -
16776  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') * t' +
16777  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t')
16778 = inv t1 * (t1 - e1) +
16779  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') *(&1- t')`;
16780 REAL_ARITH`inv t1 * (t1 - e1) + &1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)
16781 = (t1 - e1)*(inv t1 * t1 )  + &1 - (t1 - e1)`
16782 ; REAL_ARITH`A+ &1-A= &1`]
16783 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-(t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)=
16784 &1- (&1+ inv t1 - inv t1* t1) *(t1 - e1) `; REAL_ARITH`A +B-A=B`
16785 ;REAL_ARITH`inv t1 * (t1 - e1) = inv t1 * t1 - inv t1 * e1`
16786 ;REAL_ARITH`A-(A-B)=B`;
16787 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') * t'
16788 = &1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * inv (&1 - t') * (&1-t')`;
16789 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * &1=
16790 &1- (inv t1 * e1) * inv (&1 - t')` ]
16791 THEN STRIP_TAC
16792 THENL(*32*)[
16793
16794 REWRITE_TAC[ REAL_ARITH`&0< &1 - (inv t1 * e1) * inv (&1 - t')
16795 <=>  ((inv t1) * inv (&1 -t')) * e1 < &1`;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
16796 THEN MP_TAC(REAL_ARITH` &0< t1 - t' * t1==> ~(t1 - t' * t1= &0)`)
16797 THEN RESA_TAC
16798 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
16799 THEN MRESA1_TAC REAL_MUL_LINV`t1- t' * t1:real`
16800 THEN MRESA_TAC REAL_LT_LMUL[`inv (t1- t' * t1):real`;`e1:real`;`t1- t' * t1:real`];(*32*)
16801
16802 REWRITE_TAC[ REAL_ARITH`&0< (inv t1 * e1) * inv (&1 - t')
16803 <=>  &0< ((inv t1) * inv (&1 -t')) * e1 `;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
16804 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
16805 THEN MATCH_MP_TAC REAL_LT_MUL
16806 THEN ASM_REWRITE_TAC[]](*32*);(*31*)
16807
16808 MP_TAC(SET_RULE`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN
16809       aff_gt {x} {v1, (&1 - t') % y + t' % v1}
16810 /\ aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3} SUBSET
16811       dart_leads_into x V E v u123
16812 ==> (&1 - (t1 - e1)) % y + (t1 - e1) % z IN
16813       dart_leads_into x V E v u123`)
16814 THEN RESA_TAC
16815 THEN POP_ASSUM MP_TAC
16816 THEN REMOVE_ASSUM_TAC
16817 THEN POP_ASSUM MP_TAC
16818 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
16819 THEN RESA_TAC
16820 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) f3 IN
16821       face_set (hypermap1_of_fanx (x:real^3,V,E))`
16822 ASSUME_TAC
16823 THENL(*32*)[
16824
16825 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
16826 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
16827 THEN REWRITE_TAC[face]
16828 THEN ASM_REWRITE_TAC[];(*32*)
16829
16830 ABBREV_TAC`y123=(&1 - (t1 - e1)) % y + (t1 - e1) % z:real^3`
16831 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool`]
16832 THEN POP_ASSUM MP_TAC
16833 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16834 THEN RESA_TAC
16835 THEN STRIP_TAC
16836 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y123:real^3`]
16837 THEN POP_ASSUM MP_TAC
16838 THEN REMOVE_ASSUM_TAC
16839 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16840 THEN STRIP_TAC
16841 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v):real^3#real^3#real^3#real^3->bool`]
16842 THEN POP_ASSUM MP_TAC
16843 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16844 THEN RESA_TAC
16845 THEN STRIP_TAC
16846 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y123:real^3`]
16847 THEN POP_ASSUM MP_TAC
16848 THEN REMOVE_ASSUM_TAC
16849 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16850 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool`]
16851 THEN STRIP_TAC
16852 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
16853 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
16854 THEN STRIP_TAC
16855 THEN REMOVE_ASSUM_TAC
16856 THEN REMOVE_ASSUM_TAC
16857 THEN REMOVE_ASSUM_TAC
16858 THEN POP_ASSUM(fun th-> MRESA1_TAC th `dartset_leads_into_fan x V E ((face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool)`)
16859 THEN POP_ASSUM(fun th-> MRESA1_TAC th ` ((face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th ` ((face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)):real^3#real^3#real^3#real^3->bool)`)
16860 THEN POP_ASSUM MP_TAC
16861 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16862 THEN STRIP_TAC
16863 THEN MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`;`f3:real^3#real^3#real^3#real^3`]
16864 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f3:real^3#real^3#real^3#real^3`]
16865 THEN POP_ASSUM MP_TAC
16866 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16867 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16868 THEN SUBGOAL_THEN` (x,w,v,sigma_fan x V E w v)IN face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)` ASSUME_TAC
16869 THENL(*33*)[
16870 REWRITE_TAC[face;IN_ELIM_THM; orbit_map]
16871 THEN EXISTS_TAC`0`
16872 THEN ASM_REWRITE_TAC[ARITH_RULE`0>= 0`;POWER;I_DEF];(*33*)
16873
16874 STRIP_TAC
16875 THEN MP_TAC(SET_RULE`x,w,v,sigma_fan x V E w v IN
16876       face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3)
16877 /\ face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) SUBSET D
16878 ==> x,w,v,sigma_fan x V E w v IN D`)
16879 THEN RESA_TAC
16880 THEN ABBREV_TAC`u12=inverse1_sigma_fan x V E w v:real^3`
16881 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
16882 THEN REMOVE_ASSUM_TAC
16883 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
16884 THEN POP_ASSUM MP_TAC
16885 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
16886 THEN POP_ASSUM MP_TAC
16887 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16888 THEN ASM_REWRITE_TAC[]
16889 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16890 THEN  REPEAT STRIP_TAC
16891 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
16892 THEN REWRITE_TAC[fan80]
16893 THEN STRIP_TAC
16894 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`u12:real^3`])
16895 THEN POP_ASSUM MP_TAC
16896 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16897 THEN RESA_TAC
16898 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u12:real^3)`;
16899 ` (w:real^3)`]
16900 THEN POP_ASSUM MP_TAC
16901 THEN POP_ASSUM MP_TAC
16902 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16903 THEN RESA_TAC
16904 THEN RESA_TAC
16905 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`w:real^3`]
16906 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`; `v:real^3`;`u12:real^3`]
16907 THEN POP_ASSUM MP_TAC
16908 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16909 THEN RESA_TAC
16910 THEN POP_ASSUM MP_TAC
16911 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16912 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16913 THEN STRIP_TAC
16914 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < &1 / &2 ==> ~collinear {x, v, (&1 - h) % w + h % u12:real^3})`
16915 ASSUME_TAC
16916 THENL(*34*)[
16917 REPEAT STRIP_TAC
16918 THEN POP_ASSUM MP_TAC
16919 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`u12:real^3`;`h:real`]
16920 THEN POP_ASSUM MATCH_MP_TAC
16921 THEN POP_ASSUM MP_TAC
16922 THEN REAL_ARITH_TAC;(*34*)
16923
16924 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`z:real^3`;`y:real^3`;`v1:real^3`]
16925 THEN POP_ASSUM MP_TAC
16926 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16927 THEN RESA_TAC
16928 THEN POP_ASSUM MP_TAC
16929 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16930 THEN RESA_TAC
16931 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`z:real^3`;`y:real^3 `;`v1:real^3`]
16932 THEN POP_ASSUM MP_TAC
16933 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16934 THEN REWRITE_TAC[SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y) /\ ~(x=z)`;]
16935 THEN RESA_TAC
16936 THEN MP_TAC(REAL_ARITH`azim x v1 v y < pi ==> azim x v1 v y <= pi`)
16937 THEN RESA_TAC
16938 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`v:real^3`;`y:real^3`]
16939 THEN MP_TAC(REAL_ARITH`pi = azim x v1 z v + azim x v1 v y /\
16940 &0< azim x v1 v y /\ azim x v1 v y< pi ==> &0< azim x v1 z v  /\ azim x v1 z v < pi`)
16941 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
16942 THEN STRIP_TAC
16943 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `v:real^3`;`z:real^3`]
16944 THEN POP_ASSUM MP_TAC
16945 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16946 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16947 THEN STRIP_TAC
16948 THEN MRESAL_TAC condition_4point_aff_gt_1_2inter_aff_gt_1_2[`x:real^3`;`v1:real^3`;`z:real^3`;`v:real^3`;` w:real^3`;`u12:real^3`;`&1/ &2:real`][REAL_ARITH`&1/ &2 < &1 /\ &0 < &1/ &2`]
16949 THEN POP_ASSUM MP_TAC
16950 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
16951 THEN ASM_REWRITE_TAC[]
16952 THEN STRIP_TAC
16953 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`t''/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
16954 THEN POP_ASSUM MP_TAC
16955 THEN MP_TAC(REAL_ARITH`&0 < t''/\ t'' < &1 ==> &0 < t'' / &2 /\ t'' / &2 < t''/\ t'' / &2< &1`)
16956 THEN RESA_TAC
16957 THEN STRIP_TAC
16958 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`u12:real^3`]
16959 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`v:real^3`;`w:real^3`;`u12:real^3`][UNIONS;IN_ELIM_THM]
16960 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` w:real^3`;` u12:real^3`]
16961 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
16962                      u = aff_gt {x} {v, (&1 - a) % w + a % u12}) /\
16963                 x' IN u} SUBSET
16964       dart_leads_into x V E w u12
16965 /\ a'' IN aff_gt {x} {v, (&1 - t'' / &2) % w + t'' / &2 % u12:real^3}
16966 /\ &0< t''/ &2 /\ t''/ &2< &1
16967 ==> a'' IN dart_leads_into x V E w u12`)
16968 THEN RESA_TAC
16969 THEN POP_ASSUM MP_TAC
16970 THEN SUBGOAL_THEN`x,w,u12,v IN
16971       face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3)`ASSUME_TAC
16972 THENL(*35*)[
16973
16974 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
16975 THEN EXISTS_TAC`SUC 0:num`
16976 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
16977 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
16978 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(x,v,w,sigma_fan x V E v w):real^3#real^3#real^3#real^3`[POWER;I_DEF;o_DEF;])
16979 THEN REWRITE_TAC[f1_fan]
16980 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`];(*35*)
16981
16982 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
16983 `(face (hypermap1_of_fanx (x,V:real^3->bool,E)) (x,v,w,sigma_fan x V E v w)) :real^3#real^3#real^3#real^3->bool`]
16984 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,w:real^3,u12:real^3,v:real^3)`[pr2;pr3])
16985 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
16986 THEN STRIP_TAC
16987 THEN MRESAL_TAC scale_in_edges_fan[`(x:real^3)`;`(v1:real^3)`;`(z:real^3)`;`(a'':real^3)`][SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;VECTOR_ARITH`a' % (a - x) = (&1 - t') % y + t' % v1 - x <=> (&1- a')% x + a' % a= (&1 - t') % y + t' % v1`]
16988 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`a'':real^3`]
16989 THEN MRESA_TAC th3[`(x:real^3)` ;` (a'':real^3)`;`(v1:real^3)`;]
16990 THEN SUBGOAL_THEN`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a'':real^3}`ASSUME_TAC
16991 THENL(*36*)[
16992
16993 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a'':real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
16994 THEN EXISTS_TAC`&1-a''':real`
16995 THEN EXISTS_TAC` a''':real`
16996 THEN ASM_REWRITE_TAC[]
16997 THEN REAL_ARITH_TAC;(*36*)
16998
16999 MRESA_TAC AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)):real^3#real^3#real^3#real^3->bool`;`a'':real^3`]
17000 THEN MP_TAC(SET_RULE`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a''}
17001 /\ aff_gt {x} {a''} SUBSET
17002       dartset_leads_into_fan x V E
17003       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3))
17004 ==> (&1 - t''') % v1 + t''' % z IN
17005       dartset_leads_into_fan x V E
17006       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))`)
17007 THEN ASM_REWRITE_TAC[]
17008 THEN EXPAND_TAC"v1"
17009 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t''') % ((&1 - t1) % y + t1 % z) + t''' % z
17010 =(&1 - (t1+ (&1 - t1)*t''')) % y + (t1+ (&1 - t1)*t''') % z`]
17011 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w:real^3) IN D`ASSUME_TAC
17012 THENL(*37*)[
17013
17014 MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`;`(x,w,v,sigma_fan x V E w v:real^3):real^3#real^3#real^3#real^3`]
17015 THEN MRESA_TAC lemma_powers_in_component[`hypermap1_of_fanx (x:real^3,V,E)`;`(x,w,v,sigma_fan x V E w v :real^3)`;`SUC 0:num`]
17016 THEN REMOVE_ASSUM_TAC
17017 THEN REMOVE_ASSUM_TAC
17018 THEN POP_ASSUM MP_TAC
17019 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17020 THEN REMOVE_ASSUM_TAC
17021 THEN REMOVE_ASSUM_TAC
17022 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x,w,v,sigma_fan x V E w v:real^3):real^3#real^3#real^3#real^3`)
17023 THEN REWRITE_TAC[e_fan;POWER;I_DEF;o_DEF];(*37*)
17024
17025
17026 STRIP_TAC
17027 THEN SUBGOAL_THEN `t1 + (&1 - t1) * t''' IN TA:real->bool`ASSUME_TAC
17028 THENL(*38*)[
17029
17030 EXPAND_TAC"TA"
17031 THEN REWRITE_TAC[IN_ELIM_THM]
17032 THEN STRIP_TAC
17033 THENL(*39*)[
17034
17035 MATCH_MP_TAC(REAL_ARITH`&0<= A /\ &0<=B ==> &0<=A+B`)
17036 THEN ASM_REWRITE_TAC[]
17037 THEN MATCH_MP_TAC REAL_LE_MUL
17038 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17039 THEN MATCH_MP_TAC(REAL_ARITH`&0<A ==> &0<=A `)
17040 THEN ASM_REWRITE_TAC[];(*39*)
17041 STRIP_TAC
17042 THENL(*40*)[
17043
17044 REWRITE_TAC[REAL_ARITH`t1 + (&1 - t1) * t''' <= &1<=> &0 <= (&1 - t1)* (&1- t''')`]
17045 THEN MATCH_MP_TAC REAL_LE_MUL
17046 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17047 THEN MATCH_MP_TAC(REAL_ARITH`A< &1 ==> A<= &1 `)
17048 THEN ASM_REWRITE_TAC[];(*40*)
17049
17050 EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
17051 THEN ASM_REWRITE_TAC[]](*40*)](*39*);(*38*)
17052
17053 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1 + (&1 - t1) * t''':real` th))`!x. x IN TA ==> x <= t1`
17054 THEN MP_TAC(SET_RULE`t1 + (&1 - t1) * t''' IN TA /\ ~(t1 IN TA)==> ~(t1=t1 + (&1 - t1) * t''')`)
17055 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
17056 THEN ASM_REWRITE_TAC[]
17057 THEN STRIP_TAC
17058 THEN STRIP_TAC
17059 THEN MP_TAC(REAL_ARITH`t1 + (&1 - t1) * t''' <= t1 /\ ~(t1= t1 + (&1 - t1) * t''') /\ t1<= &1 /\ &0< t'''
17060 ==> (&1 - t1) * t'''< &0:real /\ &0<= (&1 -t1)/\ &0<= t'''`)
17061 THEN RESA_TAC
17062 THEN MRESA_TAC REAL_LE_MUL[`(&1- t1):real`;`t''':real`]
17063 THEN POP_ASSUM MP_TAC
17064 THEN REMOVE_ASSUM_TAC
17065 THEN REMOVE_ASSUM_TAC
17066 THEN POP_ASSUM MP_TAC
17067 THEN REAL_ARITH_TAC](*38*)](*37*)](*36*)](*35*)](*34*)](*33*)](*32*)](*31*)](*30*)](*29*)](*28*)](*27*)](*26*)](*25*)](*24*)](*23*);(*22*)
17068
17069
17070 POP_ASSUM MP_TAC
17071 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`v:real^3`;`v1:real^3`]
17072 THEN POP_ASSUM MP_TAC
17073 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17074 THEN RESA_TAC
17075 THEN POP_ASSUM MP_TAC
17076 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17077 THEN RESA_TAC
17078 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3 `;`v1:real^3`]
17079 THEN STRIP_TAC
17080 THEN MP_TAC(REAL_ARITH`pi < azim x v1 v y==> pi <= azim x v1 v y`)
17081 THEN RESA_TAC
17082 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`w:real^3`;`y:real^3`]
17083 THEN MP_TAC(REAL_ARITH`pi < azim x v1 v y
17084 /\ azim x v1 v y = pi + azim x v1 w y /\ azim x v1 v y< &2 * pi
17085 ==> &0< azim x v1 w y /\ azim x v1 w y< pi`)
17086 THEN ASM_REWRITE_TAC[azim]
17087 THEN STRIP_TAC
17088 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `y:real^3`;`w:real^3`]
17089 THEN ABBREV_TAC`u123=inverse1_sigma_fan x V E w v:real^3`
17090 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
17091 THEN REMOVE_ASSUM_TAC
17092 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
17093 THEN POP_ASSUM MP_TAC
17094 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
17095 THEN POP_ASSUM MP_TAC
17096 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17097 THEN ASM_REWRITE_TAC[]
17098 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17099 THEN REPEAT STRIP_TAC
17100 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
17101 THEN REWRITE_TAC[fan80]
17102 THEN STRIP_TAC
17103 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`u123:real^3`])
17104 THEN POP_ASSUM MP_TAC
17105 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17106 THEN RESA_TAC
17107 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u123:real^3)`;
17108 ` (w:real^3)`]
17109 THEN POP_ASSUM MP_TAC
17110 THEN POP_ASSUM MP_TAC
17111 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17112 THEN RESA_TAC
17113 THEN RESA_TAC
17114 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`;`w:real^3`]
17115 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`; `v:real^3`;`u123:real^3`]
17116 THEN POP_ASSUM MP_TAC
17117 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17118 THEN RESA_TAC
17119 THEN POP_ASSUM MP_TAC
17120 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17121 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17122 THEN STRIP_TAC
17123 THEN MRESA_TAC aff_gt_1_2_cross_dotr_4point_neg[`x:real^3`;`v1:real^3`;`y:real^3`;`w:real^3`;`v:real^3`;]
17124 THEN POP_ASSUM MP_TAC
17125 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
17126 THEN REWRITE_TAC[GSYM DOT_LNEG;GSYM CROSS_SKEW]
17127 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17128 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17129 THEN ASM_REWRITE_TAC[]
17130 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17131 THEN STRIP_TAC
17132 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(w:real^3)`;`(u123:real^3)`]
17133 THEN POP_ASSUM MP_TAC
17134 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17135 THEN RESA_TAC
17136 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < t1' / &2 ==> ~collinear {x, (&1 - h) % w + h % u123, v:real^3})`ASSUME_TAC
17137 THENL(*23*)[
17138
17139 POP_ASSUM MP_TAC
17140 THEN DISCH_THEN(LABEL_TAC"CHANGE")
17141 THEN GEN_TAC THEN STRIP_TAC
17142 THEN REMOVE_THEN "CHANGE"(fun th-> MRESA1_TAC th`h:real`)
17143 THEN POP_ASSUM MATCH_MP_TAC
17144 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
17145 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
17146 THEN REAL_ARITH_TAC;(*23*)
17147
17148 MP_TAC(REAL_ARITH`&0< t1' /\ t1'<= &1==> &0< t1'/ &2 /\ t1'/ &2 < &1`)
17149 THEN RESA_TAC
17150 THEN MRESAL_TAC condition_4point_aff_gt_1_2inter_aff_gt_1_2[`x:real^3`;`v1:real^3`;`y:real^3`;`v:real^3`;` w:real^3`;`u123:real^3`;`t1'/ &2:real`][REAL_ARITH`&1/ &2 < &1 /\ &0 < &1/ &2`]
17151 THEN POP_ASSUM MP_TAC
17152 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
17153 THEN RESA_TAC
17154 THEN POP_ASSUM MP_TAC
17155 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17156 THEN RESA_TAC
17157 THEN POP_ASSUM MP_TAC
17158 THEN DISCH_THEN(LABEL_TAC"YEU")
17159 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v) IN d1_fan(x:real^3,V,E)`
17160 ASSUME_TAC
17161 THENL(*24*)[
17162
17163 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17164 THEN EXISTS_TAC`x:real^3`
17165 THEN EXISTS_TAC`w:real^3`
17166 THEN EXISTS_TAC`v:real^3`
17167 THEN EXISTS_TAC`sigma_fan x V E w v:real^3`
17168 THEN ASM_REWRITE_TAC[]
17169 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17170 THEN ASM_REWRITE_TAC[];(*24*)
17171
17172 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) IN
17173       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17174 THENL(*25*)[
17175
17176 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
17177 THEN EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
17178 THEN ASM_REWRITE_TAC[face];(*25*)
17179
17180 SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w) IN d1_fan(x:real^3,V,E)`
17181 ASSUME_TAC
17182 THENL(*26*)[
17183
17184 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17185 THEN EXISTS_TAC`x:real^3`
17186 THEN EXISTS_TAC`v:real^3`
17187 THEN EXISTS_TAC`w:real^3`
17188 THEN EXISTS_TAC`sigma_fan x V E v w:real^3`
17189 THEN ASM_REWRITE_TAC[];(*26*)
17190
17191
17192 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E  v w) IN
17193       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17194 THENL(*27*)[
17195
17196 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
17197 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
17198 THEN ASM_REWRITE_TAC[face];(*27*)
17199
17200 SUBGOAL_THEN`(x,w,u123,v:real^3) IN face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)`ASSUME_TAC
17201 THENL(*28*)[
17202
17203 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
17204 THEN EXISTS_TAC`SUC 0:num`
17205 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
17206 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17207 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(x,v,w,sigma_fan x V E v w):real^3#real^3#real^3#real^3`[POWER;I_DEF;o_DEF;])
17208 THEN REWRITE_TAC[f1_fan]
17209 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`];(*28*)
17210
17211 MP_TAC(REAL_ARITH`&0< t /\ t< &1==> &0< t/ &2 /\ t/ &2< t/\ t/ &2< &1/\ t/ &2<= &1 /\ &0<= t/ &2/\ ~(t/ &2 = &0)`)
17212 THEN RESA_TAC
17213 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`t/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
17214 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`u123:real^3`]
17215 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`v:real^3`;`w:real^3`;`u123:real^3`][UNIONS;IN_ELIM_THM]
17216 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` w:real^3`;` u123:real^3`]
17217 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
17218                      u = aff_gt {x} {(&1 - a) % w + a % u123, v}) /\
17219                 x' IN u} SUBSET
17220       dart_leads_into x V E w u123
17221 /\ a IN aff_gt {x} {(&1 - t / &2) % w + t / &2 % u123, v:real^3}
17222 /\ &0 < t / &2 /\ t / &2 < &1
17223 ==> a IN dart_leads_into x V E w u123`)
17224 THEN RESA_TAC
17225 THEN POP_ASSUM MP_TAC
17226 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17227 THEN RESA_TAC
17228 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
17229 `(face (hypermap1_of_fanx (x,V:real^3->bool,E)) (x,v,w,sigma_fan x V E v w)) :real^3#real^3#real^3#real^3->bool`]
17230 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,w:real^3,u123:real^3,v:real^3)`[pr2;pr3])
17231 THEN MRESAL_TAC scale_in_edges_fan[`(x:real^3)`;`(y:real^3)`;`(v1:real^3)`;`(a:real^3)`][SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;VECTOR_ARITH`a' % (a - x) = (&1 - t') % y + t' % v1 - x <=> (&1- a')% x + a' % a= (&1 - t') % y + t' % v1`]
17232 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`y:real^3`;`v1:real^3`;`a:real^3`]
17233 THEN POP_ASSUM MP_TAC
17234 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17235 THEN RESA_TAC
17236 THEN POP_ASSUM MP_TAC
17237 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17238 THEN RESA_TAC
17239 THEN MRESA_TAC th3[`(x:real^3)` ;` (a:real^3)`;`(y:real^3)`;]
17240 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}`ASSUME_TAC
17241 THENL(*29*)[
17242
17243 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a:real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
17244 THEN EXISTS_TAC`&1-a':real`
17245 THEN EXISTS_TAC` a':real`
17246 THEN ASM_REWRITE_TAC[]
17247 THEN REAL_ARITH_TAC;(*29*)
17248
17249
17250 MRESA_TAC AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)):real^3#real^3#real^3#real^3->bool`;`a:real^3`]
17251 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {(&1 - t / &2) % w + t / &2 % u123, v:real^3}`
17252 ASSUME_TAC
17253 THENL(*30*)[
17254
17255 MRESA_TAC not_collinear_is_properties_fully_surrounded1 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;`u123:real^3`;`t/ &2:real`]
17256 THEN POP_ASSUM MP_TAC
17257 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17258 THEN RESA_TAC
17259 THEN MRESA_TAC th3[`x:real^3`;`(&1 - t / &2) % w + t / &2 % u123:real^3`;`v:real^3`]
17260 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`(&1 - t / &2) % w + t / &2 % u123:real^3`;`v:real^3`]
17261 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`a:real^3`;`a':real`][VECTOR_ARITH`a' % (a - x) + x=(&1 - a') % x + a' % a`])
17262 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17263 THEN RESA_TAC;(*30*)
17264
17265 MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`v:real^3`;`w:real^3`;`u123:real^3`]
17266 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t/ &2:real`)
17267 THEN MRESA_TAC aff_gt_1_2_subset_aff_1_3111[`x:real^3`;`(&1 - t') % y + t' % v1:real^3`;`v1:real^3`;`v:real^3`;`(&1 - t / &2) % w + t / &2 % u123:real^3`;`w:real^3`]
17268 THEN POP_ASSUM MP_TAC
17269 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17270 THEN RESA_TAC
17271 THEN MRESA_TAC AFF_GT_1_3_SUBSET_AFF_GT_1_3[`x:real^3 `;`v:real^3`;`w:real^3`;`u123:real^3`;`t/ &2 :real`]
17272 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123} SUBSET
17273       {x' | ?u. (?a. (&0 < a /\ a < &1) /\
17274                      u = aff_gt {x} {v, (&1 - a) % w + a % u123}) /\
17275                 x' IN u}
17276 /\ 
17277 {x' | ?u. (?a. (&0 < a /\ a < &1) /\
17278                      u = aff_gt {x} {v, (&1 - a) % w + a % u123}) /\
17279                 x' IN u} SUBSET
17280       dart_leads_into x V E w u123
17281 ==>
17282 aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123} SUBSET
17283 dart_leads_into x V E w u123 `)
17284 THEN RESA_TAC
17285 THEN MP_TAC(SET_RULE`aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
17286       aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123}
17287 /\ 
17288 aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123} SUBSET
17289 dart_leads_into x V E w u123
17290
17291 ==>  aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
17292 dart_leads_into x V E w u123`)
17293 THEN RESA_TAC
17294 THEN MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
17295 THEN MP_TAC(REAL_ARITH`t'< &1/\ &0<= t1 /\ ~(t1= &0)==> &0< &1- t' /\ ~(&1- t' = &0) /\ &0< t1`)
17296 THEN RESA_TAC
17297 THEN MRESAL_TAC REAL_LT_MUL[`t1:real`;`&1- t':real`][REAL_ARITH`t1*(&1- t')= t1- t' * t1`]
17298 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th `t1 - t' * t1:real`)
17299 THEN SUBGOAL_THEN`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3}`
17300 ASSUME_TAC
17301 THENL(*31*)[
17302
17303 MRESA_TAC dartset_leads_into_subset_yfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)):real^3#real^3#real^3#real^3->bool`]
17304 THEN MP_TAC(SET_RULE`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}
17305 /\ aff_gt {x} {a} SUBSET dart_leads_into x V E w u123
17306 /\ dart_leads_into x V E w u123 SUBSET yfan (x,V,E)
17307 ==> (&1 - t') % y + t' % v1 IN yfan(x,V,E)`)
17308 THEN RESA_TAC
17309 THEN POP_ASSUM MP_TAC
17310 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
17311 THEN STRIP_TAC
17312 THEN MRESA_TAC x_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
17313 THEN MP_TAC(SET_RULE`~((&1 - t') % y + t' % v1 IN xfan (x,V:real^3->bool,E)) /\ x IN xfan (x,V,E)
17314 ==> ~(x= (&1 - t') % y + t' % v1:real^3)`)
17315 THEN RESA_TAC
17316 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v1:real^3`;`(&1 - t') % y + t' % v1:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;
17317 VECTOR_ARITH`t1' % x + t2 % v1 + t3 % ((&1 - t') % y + t' % v1)
17318 = t1' % x + (t3 *(&1 - t')) % y + (t2+ t3*t') % v1`]
17319 THEN EXPAND_TAC"v1"
17320 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x +
17321      (t3 * (&1 - t')) % y +
17322      (t2 + t3 * t') % ((&1 - t1) % y + t1 % z)
17323 = t1' % x +
17324      (t3 * (&1 - t') + (t2 + t3 * t') * (&1 - t1)) % y +
17325      ((t2 + t3 * t') * t1) % z`]
17326 THEN MRESA1_TAC REAL_MUL_LINV`&1- t':real`
17327 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
17328 THEN EXISTS_TAC`&0`
17329 THEN EXISTS_TAC `inv t1 * (t1- e1)- ((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t')* t' :real`
17330 THEN EXISTS_TAC`((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t'):real`
17331 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t1 * (t1 - e1) - a1 * t' + a1 * t'= (t1- e1)* inv t1`; REAL_ARITH`(A*B)*C=A*(B*C)`;REAL_ARITH`&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)+
17332   (t1 - e1) * inv t1 * (&1 - t1)= &1 - (t1 - e1)`; REAL_ARITH`A * &1=A`
17333 ;VECTOR_ARITH` &0 % x + A +B= A+B`;
17334 REAL_ARITH`&0 +
17335  inv t1 * (t1 - e1) -
17336  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') * t' +
17337  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t')
17338 = inv t1 * (t1 - e1) +
17339  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') *(&1- t')`;
17340 REAL_ARITH`inv t1 * (t1 - e1) + &1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)
17341 = (t1 - e1)*(inv t1 * t1 )  + &1 - (t1 - e1)`
17342 ; REAL_ARITH`A+ &1-A= &1`]
17343 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-(t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)=
17344 &1- (&1+ inv t1 - inv t1* t1) *(t1 - e1) `; REAL_ARITH`A +B-A=B`
17345 ;REAL_ARITH`inv t1 * (t1 - e1) = inv t1 * t1 - inv t1 * e1`
17346 ;REAL_ARITH`A-(A-B)=B`;
17347 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') * t'
17348 = &1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * inv (&1 - t') * (&1-t')`;
17349 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * &1=
17350 &1- (inv t1 * e1) * inv (&1 - t')` ]
17351 THEN STRIP_TAC
17352 THENL(*32*)[
17353
17354 REWRITE_TAC[ REAL_ARITH`&0< &1 - (inv t1 * e1) * inv (&1 - t')
17355 <=>  ((inv t1) * inv (&1 -t')) * e1 < &1`;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
17356 THEN MP_TAC(REAL_ARITH` &0< t1 - t' * t1==> ~(t1 - t' * t1= &0)`)
17357 THEN RESA_TAC
17358 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
17359 THEN MRESA1_TAC REAL_MUL_LINV`t1- t' * t1:real`
17360 THEN MRESA_TAC REAL_LT_LMUL[`inv (t1- t' * t1):real`;`e1:real`;`t1- t' * t1:real`];(*32*)
17361
17362
17363 REWRITE_TAC[ REAL_ARITH`&0< (inv t1 * e1) * inv (&1 - t')
17364 <=>  &0< ((inv t1) * inv (&1 -t')) * e1 `;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
17365 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
17366 THEN MATCH_MP_TAC REAL_LT_MUL
17367 THEN ASM_REWRITE_TAC[]](*32*);(*31*)
17368
17369
17370 MP_TAC(SET_RULE`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN
17371       aff_gt {x} {v1, (&1 - t') % y + t' % v1}
17372 /\ aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3} SUBSET
17373       dart_leads_into x V E w u123
17374 ==> (&1 - (t1 - e1)) % y + (t1 - e1) % z IN
17375       dart_leads_into x V E w u123`)
17376 THEN RESA_TAC
17377 THEN POP_ASSUM MP_TAC
17378 THEN REMOVE_ASSUM_TAC
17379 THEN POP_ASSUM MP_TAC
17380 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
17381 THEN RESA_TAC
17382 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) f3 IN
17383       face_set (hypermap1_of_fanx (x:real^3,V,E))`
17384 ASSUME_TAC
17385 THENL(*32*)[
17386
17387 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
17388 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
17389 THEN REWRITE_TAC[face]
17390 THEN ASM_REWRITE_TAC[];(*32*)
17391
17392 ABBREV_TAC`y123=(&1 - (t1 - e1)) % y + (t1 - e1) % z:real^3`
17393 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool`]
17394 THEN POP_ASSUM MP_TAC
17395 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
17396 THEN RESA_TAC
17397 THEN STRIP_TAC
17398 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y123:real^3`]
17399 THEN POP_ASSUM MP_TAC
17400 THEN REMOVE_ASSUM_TAC
17401 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17402 THEN STRIP_TAC
17403 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w):real^3#real^3#real^3#real^3->bool`]
17404 THEN POP_ASSUM MP_TAC
17405 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
17406 THEN RESA_TAC
17407 THEN STRIP_TAC
17408 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y123:real^3`]
17409 THEN POP_ASSUM MP_TAC
17410 THEN REMOVE_ASSUM_TAC
17411 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17412 THEN MRESA_TAC dartset_leads_into_is_topological_component_yfan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool`]
17413 THEN STRIP_TAC
17414 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
17415 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
17416 THEN STRIP_TAC
17417 THEN REMOVE_ASSUM_TAC
17418 THEN REMOVE_ASSUM_TAC
17419 THEN REMOVE_ASSUM_TAC
17420 THEN POP_ASSUM(fun th-> MRESA1_TAC th `dartset_leads_into_fan x V E ((face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool)`)
17421 THEN POP_ASSUM(fun th-> MRESA1_TAC th ` ((face (hypermap1_of_fanx (x,V,E)) f3):real^3#real^3#real^3#real^3->bool)` THEN MRESA1_TAC th ` ((face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)):real^3#real^3#real^3#real^3->bool)`)
17422 THEN POP_ASSUM MP_TAC
17423 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17424 THEN STRIP_TAC
17425 THEN MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`;`f3:real^3#real^3#real^3#real^3`]
17426 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f3:real^3#real^3#real^3#real^3`]
17427 THEN POP_ASSUM MP_TAC
17428 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17429 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17430 THEN SUBGOAL_THEN` (x,v,w,sigma_fan x V E v w)IN face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)` ASSUME_TAC
17431 THENL(*33*)[
17432 REWRITE_TAC[face;IN_ELIM_THM; orbit_map]
17433 THEN EXISTS_TAC`0`
17434 THEN ASM_REWRITE_TAC[ARITH_RULE`0>= 0`;POWER;I_DEF];(*33*)
17435
17436 STRIP_TAC
17437 THEN MP_TAC(SET_RULE`x,v,w,sigma_fan x V E v w IN
17438       face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3)
17439 /\ face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w) SUBSET D
17440 ==> x,v,w,sigma_fan x V E v w IN D`)
17441 THEN RESA_TAC
17442 THEN ABBREV_TAC`u12=inverse1_sigma_fan x V E v w:real^3`
17443 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
17444 THEN REMOVE_ASSUM_TAC
17445 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
17446 THEN POP_ASSUM MP_TAC
17447 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
17448 THEN  REPEAT STRIP_TAC
17449 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
17450 THEN REWRITE_TAC[fan80]
17451 THEN STRIP_TAC
17452 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u12:real^3`])
17453 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u12:real^3)`;
17454 ` (v:real^3)`]
17455 THEN MRESA_TAC sigma_fan_in_set_of_edge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`;`v:real^3`]
17456 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`; `w:real^3`;`u12:real^3`]
17457 THEN POP_ASSUM MP_TAC
17458 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17459 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17460 THEN STRIP_TAC
17461 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < &1 / &2 ==> ~collinear {x, w, (&1 - h) % v + h % u12:real^3})`
17462 ASSUME_TAC
17463 THENL(*34*)[
17464
17465 REPEAT STRIP_TAC
17466 THEN POP_ASSUM MP_TAC
17467 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`;`u12:real^3`;`h:real`]
17468 THEN POP_ASSUM MATCH_MP_TAC
17469 THEN POP_ASSUM MP_TAC
17470 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17471 THEN ASM_REWRITE_TAC[]
17472 THEN REAL_ARITH_TAC;(*34*)
17473
17474 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`z:real^3`;`y:real^3`;`v1:real^3`]
17475 THEN POP_ASSUM MP_TAC
17476 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17477 THEN RESA_TAC
17478 THEN POP_ASSUM MP_TAC
17479 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17480 THEN RESA_TAC
17481 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`z:real^3`;`y:real^3 `;`v1:real^3`]
17482 THEN POP_ASSUM MP_TAC
17483 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17484 THEN REWRITE_TAC[SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y) /\ ~(x=z)`;]
17485 THEN RESA_TAC
17486 THEN MP_TAC(REAL_ARITH`azim x v1 w y < pi ==> azim x v1 w y <= pi`)
17487 THEN RESA_TAC
17488 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`w:real^3`;`y:real^3`]
17489 THEN MP_TAC(REAL_ARITH`pi = azim x v1 z w + azim x v1 w y /\
17490 &0< azim x v1 w y /\ azim x v1 w y< pi ==> &0< azim x v1 z w  /\ azim x v1 z w < pi`)
17491 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
17492 THEN STRIP_TAC
17493 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `w:real^3`;`z:real^3`]
17494 THEN POP_ASSUM MP_TAC
17495 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17496 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17497 THEN STRIP_TAC
17498 THEN MRESAL_TAC condition_4point_aff_gt_1_2inter_aff_gt_1_2[`x:real^3`;`v1:real^3`;`z:real^3`;`w:real^3`;` v:real^3`;`u12:real^3`;`&1/ &2:real`][REAL_ARITH`&1/ &2 < &1 /\ &0 < &1/ &2`]
17499 THEN POP_ASSUM MP_TAC
17500 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV) 
17501 THEN ASM_REWRITE_TAC[]
17502 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17503 THEN ASM_REWRITE_TAC[]
17504 THEN STRIP_TAC
17505 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`t''/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
17506 THEN POP_ASSUM MP_TAC
17507 THEN MP_TAC(REAL_ARITH`&0 < t''/\ t'' < &1 ==> &0 < t'' / &2 /\ t'' / &2 < t''/\ t'' / &2< &1`)
17508 THEN RESA_TAC
17509 THEN STRIP_TAC
17510 THEN MRESA_TAC properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`;`u12:real^3`]
17511 THEN POP_ASSUM MP_TAC
17512 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17513 THEN ASM_REWRITE_TAC[]
17514 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17515 THEN STRIP_TAC
17516 THEN MRESAL_TAC aff_gt_1_3_eq_unions_aff_gt_1_2[`x:real^3`;`w:real^3`;`v:real^3`;`u12:real^3`][UNIONS;IN_ELIM_THM]
17517 THEN MRESA_TAC aff_gt_1_3_subset_dart_leads_into_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` w:real^3`;` v:real^3`;` u12:real^3`]
17518 THEN POP_ASSUM MP_TAC
17519 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17520 THEN RESA_TAC
17521 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
17522                      u = aff_gt {x} {(&1 - a) % v + a % u12,w}) /\
17523                 x' IN u} SUBSET
17524       dart_leads_into x V E v u12
17525 /\ a'' IN aff_gt {x} {(&1 - t'' / &2) % v + t'' / &2 % u12:real^3,w}
17526 /\ &0< t''/ &2 /\ t''/ &2< &1
17527 ==> a'' IN dart_leads_into x V E v u12`)
17528 THEN RESA_TAC
17529 THEN POP_ASSUM MP_TAC
17530 THEN SUBGOAL_THEN`x,v,u12,w IN
17531       face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3)`ASSUME_TAC
17532 THENL(*35*)[
17533 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
17534 THEN EXISTS_TAC`SUC 0:num`
17535 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
17536 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17537 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(x,w,v,sigma_fan x V E w v):real^3#real^3#real^3#real^3`[POWER;I_DEF;o_DEF;])
17538 THEN REWRITE_TAC[f1_fan]
17539 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`];(*35*)
17540
17541 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
17542 `(face (hypermap1_of_fanx (x,V:real^3->bool,E)) (x,w,v,sigma_fan x V E w v)) :real^3#real^3#real^3#real^3->bool`]
17543 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,v:real^3,u12:real^3,w:real^3)`[pr2;pr3])
17544 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
17545 THEN STRIP_TAC
17546 THEN MRESAL_TAC scale_in_edges_fan[`(x:real^3)`;`(v1:real^3)`;`(z:real^3)`;`(a'':real^3)`][SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y)/\ ~(x=z)`;VECTOR_ARITH`a' % (a - x) = (&1 - t') % y + t' % v1 - x <=> (&1- a')% x + a' % a= (&1 - t') % y + t' % v1`]
17547 THEN POP_ASSUM MP_TAC
17548 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17549 THEN RESA_TAC
17550 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`a'':real^3`]
17551 THEN POP_ASSUM MP_TAC
17552 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17553 THEN RESA_TAC
17554 THEN MRESA_TAC th3[`(x:real^3)` ;` (a'':real^3)`;`(v1:real^3)`;]
17555 THEN POP_ASSUM MP_TAC
17556 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17557 THEN RESA_TAC
17558 THEN SUBGOAL_THEN`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a'':real^3}`ASSUME_TAC
17559 THENL(*36*)[
17560
17561 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a'':real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
17562 THEN EXISTS_TAC`&1-a''':real`
17563 THEN EXISTS_TAC` a''':real`
17564 THEN ASM_REWRITE_TAC[]
17565 THEN REAL_ARITH_TAC;(*36*)
17566
17567 MRESA_TAC AFF_GT_1_1_SUBSET_DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`(face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v)):real^3#real^3#real^3#real^3->bool`;`a'':real^3`]
17568 THEN MP_TAC(SET_RULE`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a''}
17569 /\ aff_gt {x} {a''} SUBSET
17570       dartset_leads_into_fan x V E
17571       (face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3))
17572 ==> (&1 - t''') % v1 + t''' % z IN
17573       dartset_leads_into_fan x V E
17574       (face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v))`)
17575 THEN ASM_REWRITE_TAC[]
17576 THEN EXPAND_TAC"v1"
17577 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t''') % ((&1 - t1) % y + t1 % z) + t''' % z
17578 =(&1 - (t1+ (&1 - t1)*t''')) % y + (t1+ (&1 - t1)*t''') % z`]
17579 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v:real^3) IN D`ASSUME_TAC
17580 THENL(*37*)[
17581
17582 MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`;`(x,v,w,sigma_fan x V E v w:real^3):real^3#real^3#real^3#real^3`]
17583 THEN MRESA_TAC lemma_powers_in_component[`hypermap1_of_fanx (x:real^3,V,E)`;`(x,v,w,sigma_fan x V E v w :real^3)`;`SUC 0:num`]
17584 THEN REMOVE_ASSUM_TAC
17585 THEN REMOVE_ASSUM_TAC
17586 THEN POP_ASSUM MP_TAC
17587 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC 0:num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17588 THEN REMOVE_ASSUM_TAC
17589 THEN REMOVE_ASSUM_TAC
17590 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x,v,w,sigma_fan x V E v w:real^3):real^3#real^3#real^3#real^3`)
17591 THEN REWRITE_TAC[e_fan;POWER;I_DEF;o_DEF];(*37*)
17592
17593
17594 STRIP_TAC
17595 THEN SUBGOAL_THEN `t1 + (&1 - t1) * t''' IN TA:real->bool`ASSUME_TAC
17596 THENL(*38*)[
17597 EXPAND_TAC"TA"
17598 THEN REWRITE_TAC[IN_ELIM_THM]
17599 THEN STRIP_TAC
17600 THENL(*39*)[
17601
17602 MATCH_MP_TAC(REAL_ARITH`&0<= A /\ &0<=B ==> &0<=A+B`)
17603 THEN ASM_REWRITE_TAC[]
17604 THEN MATCH_MP_TAC REAL_LE_MUL
17605 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17606 THEN MATCH_MP_TAC(REAL_ARITH`&0<A ==> &0<=A `)
17607 THEN ASM_REWRITE_TAC[];(*39*)
17608 STRIP_TAC
17609 THENL(*40*)[
17610
17611 REWRITE_TAC[REAL_ARITH`t1 + (&1 - t1) * t''' <= &1<=> &0 <= (&1 - t1)* (&1- t''')`]
17612 THEN MATCH_MP_TAC REAL_LE_MUL
17613 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17614 THEN MATCH_MP_TAC(REAL_ARITH`A< &1 ==> A<= &1 `)
17615 THEN ASM_REWRITE_TAC[];(*40*)
17616
17617 EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
17618 THEN ASM_REWRITE_TAC[]](*40*)](*39*);(*38*)
17619
17620 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1 + (&1 - t1) * t''':real` th))`!x. x IN TA ==> x <= t1`
17621 THEN MP_TAC(SET_RULE`t1 + (&1 - t1) * t''' IN TA /\ ~(t1 IN TA)==> ~(t1=t1 + (&1 - t1) * t''')`)
17622 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
17623 THEN ASM_REWRITE_TAC[]
17624 THEN STRIP_TAC
17625 THEN STRIP_TAC
17626 THEN MP_TAC(REAL_ARITH`t1 + (&1 - t1) * t''' <= t1 /\ ~(t1= t1 + (&1 - t1) * t''') /\ t1<= &1 /\ &0< t'''
17627 ==> (&1 - t1) * t'''< &0:real /\ &0<= (&1 -t1)/\ &0<= t'''`)
17628 THEN RESA_TAC
17629 THEN MRESA_TAC REAL_LE_MUL[`(&1- t1):real`;`t''':real`]
17630 THEN POP_ASSUM MP_TAC
17631 THEN REMOVE_ASSUM_TAC
17632 THEN REMOVE_ASSUM_TAC
17633 THEN POP_ASSUM MP_TAC
17634 THEN REAL_ARITH_TAC]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]);;
17635
17636
17637
17638
17639
17640 let WGVWSKE=prove(`!x V E.
17641          FAN (x,V,E) /\
17642          conforming_fan (x,V,E) 
17643 ==> connected_hypermap(hypermap1_of_fanx (x,V,E))`,
17644 REWRITE_TAC[connected_hypermap;number_of_components]
17645 THEN REPEAT STRIP_TAC
17646 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN STRIP_TAC THEN ASSUME_TAC th)
17647 THEN FIND_ASSUM MP_TAC`FAN(x:real^3,V,E)`
17648 THEN REWRITE_TAC[FAN;fan1;SET_RULE`~(V SUBSET {}) <=> ?v. v IN V`]
17649 THEN STRIP_TAC
17650 THEN REMOVE_ASSUM_TAC
17651 THEN REMOVE_ASSUM_TAC
17652 THEN REMOVE_ASSUM_TAC
17653 THEN FIND_ASSUM(fun th-> MP_TAC(ISPEC `v:real^3` th))`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
17654 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
17655 THEN STRIP_TAC
17656 THEN MRESA_TAC exists_inf_element_fix_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u1:real^3`]
17657 THEN REMOVE_ASSUM_TAC
17658 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`v:real^3`]
17659 THEN POP_ASSUM MP_TAC
17660 THEN RESA_TAC
17661 THEN ABBREV_TAC`f1=(x,v,u,sigma_fan x V E v u:real^3)`
17662 THEN SUBGOAL_THEN`f1 IN d1_fan(x:real^3,V,E)`ASSUME_TAC
17663 THENL[
17664 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17665 THEN EXISTS_TAC`x:real^3`
17666 THEN EXISTS_TAC`v:real^3`
17667 THEN EXISTS_TAC`u:real^3`
17668 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
17669 THEN ASM_REWRITE_TAC[];
17670
17671 MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17672 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17673 THEN ABBREV_TAC`D= comb_component (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
17674 THEN SUBGOAL_THEN`D IN set_of_components(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17675 THENL[
17676 ASM_REWRITE_TAC[set_of_components;set_part_components;IN_ELIM_THM]
17677 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
17678 THEN ASM_REWRITE_TAC[];
17679
17680 SUBGOAL_THEN`set_of_components (hypermap1_of_fanx (x:real^3,V,E))={D}`
17681 ASSUME_TAC
17682 THENL[
17683 REWRITE_TAC[EXTENSION;IN_ELIM_THM;]
17684 THEN GEN_TAC
17685 THEN EQ_TAC
17686 THENL[
17687 ASM_REWRITE_TAC[IN_SING;set_of_components;set_part_components;IN_ELIM_THM]
17688 THEN STRIP_TAC
17689 THEN MRESAL_TAC lemma_connect_hypermap[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;`f1:real^3#real^3#real^3#real^3`;`x'':real^3#real^3#real^3#real^3`][set_of_components;set_part_components;IN_ELIM_THM]
17690 THEN POP_ASSUM MP_TAC
17691 THEN POP_ASSUM MP_TAC
17692 THEN RESA_TAC
17693 THEN RESA_TAC
17694 THEN MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x''':real^3#real^3#real^3#real^3`;`f1:real^3#real^3#real^3#real^3`]
17695 THEN MRESA_TAC lemma_component_identity[`hypermap1_of_fanx (x:real^3,V,E)`;`x''':real^3#real^3#real^3#real^3`;`x'':real^3#real^3#real^3#real^3`];
17696
17697 REWRITE_TAC[IN_SING]
17698 THEN RESA_TAC];
17699
17700 ASM_REWRITE_TAC[CARD_SINGLETON]]]]);;
17701
17702
17703 let CARD_EDGE_SET_FAN=prove(`!x V E e.
17704          FAN (x,V,E) 
17705 /\ e IN edge_set (hypermap1_of_fanx (x,V,E))
17706 /\ conforming_fan (x,V,E)
17707          ==> CARD e= 2`,
17708 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17709 THEN REPEAT STRIP_TAC
17710 THEN POP_ASSUM MP_TAC
17711 THEN POP_ASSUM MP_TAC
17712 THEN POP_ASSUM MP_TAC
17713 THEN DISCH_THEN(LABEL_TAC"LINH")
17714 THEN REPEAT STRIP_TAC
17715 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN STRIP_TAC THEN ASSUME_TAC th)
17716 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17717 THEN MRESA_TAC hypermap_of_fan_rep[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17718 THEN REMOVE_THEN"LINH" MP_TAC
17719 THEN RESA_TAC
17720 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC(SUC 0):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17721 THEN REMOVE_ASSUM_TAC
17722 THEN REMOVE_ASSUM_TAC
17723 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17724 THEN MRESA_TAC plain_hypermap_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`]
17725 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17726 THEN MRESAL_TAC orbit_cyclic[`(res (e_fan x V E) (d1_fan (x:real^3,V,E)))`;`SUC (SUC 0):num`;`x':real^3#real^3#real^3#real^3`][POWER;I_DEF;o_DEF;ARITH_RULE`~(SUC (SUC 0) = 0)`]
17727 THEN MRESA_TAC into_domain_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`(SUC 0):num`;`(\t. res (t x V E) (d1_fan (x,V,E)))`]
17728 THEN REMOVE_ASSUM_TAC
17729 THEN REMOVE_ASSUM_TAC
17730 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17731 THEN ASM_REWRITE_TAC[ARITH_RULE`k:num < SUC(SUC 0) <=> k = 0 \/ k= SUC 0`;
17732 SET_RULE`{(res (e_fan x V E) (d1_fan (x,V,E)) POWER k) x' | k = 0 \/ k= SUC 0}
17733 = {(res (e_fan x V E) (d1_fan (x,V,E)) POWER 0) x' , (res (e_fan x V E) (d1_fan (x,V,E)) POWER SUC(0)) x' }`;POWER;I_DEF;o_DEF]
17734 THEN MRESA_TAC e_fan_no_fix_point[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`]
17735 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17736 THEN POP_ASSUM MP_TAC
17737 THEN MESON_TAC[CARD_2_FAN]);;
17738
17739
17740
17741 let REP_CARD_EDGE_SET_FAN=prove(`!x V E.
17742          FAN (x,V,E) 
17743 /\ conforming_fan (x,V,E)
17744          ==> &(CARD (edge_set (hypermap1_of_fanx (x,V,E)))) * &2= &(CARD (dart (hypermap1_of_fanx (x,V,E))))`,
17745 REPEAT STRIP_TAC
17746 THEN MRESA1_TAC DART_EQ_UNIONS_FACE_SET_NODE_SET_EDGE_SET`(hypermap1_of_fanx (x:real^3,V:real^3->bool,E))` 
17747 THEN POP_ASSUM MP_TAC
17748 THEN REMOVE_ASSUM_TAC
17749 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
17750 THEN RESA_TAC
17751 THEN SUBGOAL_THEN`(!t. t IN edge_set (hypermap1_of_fanx (x:real^3,V,E)) ==> FINITE t)`ASSUME_TAC
17752 THENL[
17753 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17754 THEN REPEAT STRIP_TAC
17755 THEN ASM_REWRITE_TAC[]
17756 THEN MRESAL_TAC EDGE_FINITE[`(hypermap1_of_fanx (x:real^3,V,E))`;`x':real^3#real^3#real^3#real^3`][edge];
17757 SUBGOAL_THEN`(!t u.
17758            t IN edge_set (hypermap1_of_fanx (x,V,E)) /\
17759            u IN edge_set (hypermap1_of_fanx (x:real^3,V,E)) /\
17760            ~(t = u)
17761            ==> t INTER u = {})`ASSUME_TAC
17762 THENL[
17763 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17764 THEN REPEAT STRIP_TAC
17765 THEN POP_ASSUM MP_TAC
17766 THEN RESA_TAC
17767 THEN DISJ_CASES_TAC(SET_RULE`(?a:real^3#real^3#real^3#real^3. a IN t INTER u) \/ (t INTER u = {}) `)
17768 THENL[
17769 POP_ASSUM MP_TAC
17770 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM]
17771 THEN STRIP_TAC
17772 THEN MRESAL_TAC lemma_edge_identity[`(hypermap1_of_fanx (x:real^3,V,E))`;`x':real^3#real^3#real^3#real^3`;`a:real^3#real^3#real^3#real^3`][edge]
17773 THEN MRESAL_TAC lemma_edge_identity[`(hypermap1_of_fanx (x:real^3,V,E))`;`x'':real^3#real^3#real^3#real^3`;`a:real^3#real^3#real^3#real^3`][edge]
17774 THEN POP_ASSUM MP_TAC
17775 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
17776 POP_ASSUM MP_TAC
17777 THEN ASM_REWRITE_TAC[]];
17778
17779  MRESA_TAC CARD_EDGE_SET_FAN[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17780 THEN MRESAL_TAC HAS_SIZE_UNIONS[`(edge_set (hypermap1_of_fanx (x:real^3,V,E)))`;`(\x:real^3#real^3#real^3#real^3->bool. x)`;`CARD (edge_set (hypermap1_of_fanx (x:real^3,V,E)))`;`2:num`][HAS_SIZE;FINITE_HYPERMAP_ORBITS;SET_RULE`DISJOINT x y <=> x INTER y={}`
17781 ;SET_RULE`(!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17782            ==> FINITE x' /\ CARD x' = 2)
17783 <=> (!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17784            ==> FINITE x' ) /\ (!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17785            ==> CARD x' = 2)`; SET_RULE`UNIONS {x' | x' IN edge_set (hypermap1_of_fanx (x,V,E))}
17786 =UNIONS (edge_set (hypermap1_of_fanx (x,V,E)))`;REAL_OF_NUM_MUL]]]);;
17787
17788
17789 let GGRLKHP=prove(`!x V E.
17790          FAN (x,V,E) /\ conforming_fan (x,V,E)
17791          ==> planar_hypermap (hypermap1_of_fanx (x,V,E))`,
17792 REPEAT STRIP_TAC
17793 THEN MRESA_TAC SUM_CARD_FACE_NODE_DART_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
17794 THEN POP_ASSUM MP_TAC
17795 THEN MRESA_TAC REP_CARD_EDGE_SET_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
17796 THEN REWRITE_TAC[REAL_ARITH`A+B-C=D<=> A+B+C=D + &2 *C`]
17797 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
17798 THEN MRESAL_TAC WGVWSKE[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`][connected_hypermap]
17799 THEN ASM_REWRITE_TAC[planar_hypermap;number_of_nodes;number_of_edges;number_of_faces;REAL_ARITH`&2 * &(CARD (face_set (hypermap1_of_fanx (x,V,E)))) +
17800  &2 * &(CARD (node_set (hypermap1_of_fanx (x,V,E)))) +
17801  &(CARD (edge_set (hypermap1_of_fanx (x,V,E)))) * &2 =
17802  &4 + &2 * &(CARD (dart (hypermap1_of_fanx (x,V,E))))
17803 <=>  
17804   &(CARD (node_set (hypermap1_of_fanx (x,V,E)))) +
17805  &(CARD (edge_set (hypermap1_of_fanx (x,V,E)))) 
17806 + &(CARD (face_set (hypermap1_of_fanx (x,V,E)))) 
17807 =
17808   &(CARD (dart (hypermap1_of_fanx (x,V,E)))) + &2
17809 `;REAL_OF_NUM_ADD;ARITH_RULE`2*1=2`;REAL_OF_NUM_EQ]);;
17810
17811
17812
17813 end;;
17814
17815