Update from HH
[Flyspeck/.git] / text_formalization / fan / Conforming.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
12
13 module  Conforming = struct
14
15
16
17
18
19
20
21
22
23 open Sphere;;
24 open Fan_defs;;
25 open Hypermap;;
26 open Vol1;;
27 open Fan;;
28 open Topology;;
29 open Fan_misc;;
30 open Planarity;;
31
32
33
34
35
36
37
38 let conforming_bijection_fan = new_definition `conforming_bijection_fan (x,V,E) <=>
39   !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
40                                                          s = dartset_leads_into_fan x V E f)`;;
41
42
43 let conforming_half_space_fan = new_definition `conforming_half_space_fan (x,V,E) <=>
44         !f. f IN face_set (hypermap1_of_fanx (x,V,E)) ==>
45                 dartset_leads_into_fan x V E f =
46                         INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN f}`;;
47
48
49 let conforming_solid_angle_fan = new_definition `conforming_solid_angle_fan (x,V,E) <=>
50   !f. f IN face_set (hypermap1_of_fanx (x,V,E)) ==>
51   (let U = dartset_leads_into_fan x V E f in
52      (!r. measurable (ball (x,r) INTER U)) /\
53        eventually_radial x U /\
54        sol x U = &2 * pi + sum (f) (\y. (azim_fan x V E (pr2 y) (pr3 y))  - pi))`;;
55
56
57 let conforming_diagonal_fan = new_definition `conforming_diagonal_fan (x,V,E) <=>
58         (!f y z. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ y IN f /\ z IN f /\ ~(y = z) ==>
59                 ~collinear {x, pr2 y, pr2 z} /\
60                 ((y = f1_fan x V E z) \/ (z = f1_fan  x V E y) \/
61                         aff_gt {x} {pr2 y, pr2 z} SUBSET (dartset_leads_into_fan  x V E f)))`;;
62
63
64
65
66
67 let conforming_fan = new_definition `conforming_fan (x,V,E) <=>
68  (!v. v IN V==>CARD (set_of_edge v V E) >1)/\
69         fan80(x,V,E) /\
70         conforming_bijection_fan (x,V,E) /\
71         conforming_half_space_fan (x,V,E) /\
72         conforming_solid_angle_fan (x,V,E) /\
73         conforming_diagonal_fan (x,V,E)`;;
74
75
76
77
78 let N_FAN = new_definition `N_FAN (x,V,E) = nsum (face_set (hypermap1_of_fanx (x,V,E))) (\f. CARD f -3)`;;
79
80
81
82 let minimally_nonconforming_fan=new_definition`minimally_nonconforming_fan(x,V,E)<=>
83 FAN(x,V,E)
84  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
85 /\ fan80(x,V,E)
86 /\ ~(conforming_fan (x,V,E))
87 /\ (!E1. FAN(x,V,E1)  /\
88          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
89          fan80(x,V,E1)/\
90          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))`;;
91
92
93
94
95 let GINGUAP=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
96 FAN(x,V,E)
97 /\ conforming_fan (x,V,E)
98 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
99 ==>   convex(dartset_leads_into_fan x V E ds)`,
100
101 REWRITE_TAC[conforming_fan;conforming_half_space_fan]
102 THEN REPEAT STRIP_TAC
103 THEN POP_ASSUM MP_TAC
104 THEN POP_ASSUM MP_TAC
105 THEN POP_ASSUM MP_TAC
106 THEN POP_ASSUM MP_TAC
107 THEN DISCH_THEN(LABEL_TAC"EM")
108 THEN REPEAT STRIP_TAC
109 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
110 THEN MATCH_MP_TAC CONVEX_INTERS
111 THEN REWRITE_TAC[IN_ELIM_THM]
112 THEN REPEAT STRIP_TAC
113 THEN ASM_REWRITE_TAC[CONVEX_AFF_GT]);;
114
115
116
117
118
119 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.
120 FAN(x,V,E) /\ {v,w} IN E
121 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
122 /\ fan80(x,V,E)
123 ==>  aff_gt {x, v,w} {sigma_fan x V E v w} =
124  aff_gt {x, v, w} {inverse1_sigma_fan x V E w v}`,
125
126
127 REPEAT STRIP_TAC
128 THEN POP_ASSUM (fun th -> MP_TAC th
129 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
130 THEN DISCH_TAC
131 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`] )
132 THEN POP_ASSUM MP_TAC
133 THEN DISCH_THEN(LABEL_TAC"EM")
134 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
135 THEN REMOVE_THEN "EM" MP_TAC
136 THEN REMOVE_ASSUM_TAC
137 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
138 THEN POP_ASSUM MP_TAC
139 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
140 THEN POP_ASSUM MP_TAC
141 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
142 THEN ASM_REWRITE_TAC[]
143 THEN STRIP_TAC THEN STRIP_TAC
144 THEN ASM_REWRITE_TAC[]
145 THEN STRIP_TAC
146 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`]
147 THEN POP_ASSUM MP_TAC
148 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
149 THEN ASM_REWRITE_TAC[]
150 THEN STRIP_TAC
151 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)
152 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
153 `(v:real^3)`]
154 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`]
155 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)`]
156 THEN POP_ASSUM MP_TAC
157 THEN RESA_TAC
158 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`]
159 THEN POP_ASSUM MP_TAC
160 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
161 THEN ASM_REWRITE_TAC[]
162 THEN STRIP_TAC
163 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)
164 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`]
165 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`]
166 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`; ]
167 THEN POP_ASSUM MP_TAC
168 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`;CROSS_TRIPLE]
169 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
170 THEN ASM_REWRITE_TAC[]
171 THEN STRIP_TAC
172 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
173 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`;]
174 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`]);;
175
176
177
178
179
180
181
182
183
184
185
186 let IMAGE_F1_IN_FACE_IMP_IN_FACE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y y1.
187 FAN(x,V,E)
188 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
189 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
190 /\ y IN ds
191 /\ y1 IN d_fan(x,V,E)
192 /\ f1_fan x V E y1= y
193 ==>   y1 IN ds`,
194
195 REPEAT STRIP_TAC
196 THEN POP_ASSUM MP_TAC
197 THEN POP_ASSUM MP_TAC
198 THEN POP_ASSUM MP_TAC
199 THEN POP_ASSUM MP_TAC
200 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
201 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)))`]
202 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM;orbit_map]
203 THEN RESA_TAC
204 THEN REWRITE_TAC[IN_ELIM_THM]
205 THEN STRIP_TAC
206 THEN ASM_REWRITE_TAC[]
207 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)))`]
208 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
209 THEN STRIP_TAC
210 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) y1 IN
211       face_set (hypermap1_of_fanx (x,V,E))`ASSUME_TAC
212 THENL[
213 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
214 THEN EXISTS_TAC`y1:real^3#real^3#real^3#real^3`
215 THEN ASM_REWRITE_TAC[];
216 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`]
217 THEN SUBGOAL_THEN`?N:num. CARD (face (hypermap1_of_fanx (x,V,E)) y1)= SUC N /\ N>0`ASSUME_TAC
218 THENL[
219 EXISTS_TAC`CARD (face (hypermap1_of_fanx (x:real^3,V,E)) y1)-1`
220 THEN POP_ASSUM MP_TAC
221 THEN ARITH_TAC;
222 POP_ASSUM MP_TAC
223 THEN STRIP_TAC
224 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)))`]
225 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y1:real^3#real^3#real^3#real^3`)
226 THEN STRIP_TAC
227 THEN MRESA_TAC lemma_face_cycle[`hypermap1_of_fanx (x:real^3,V,E)`;`y1:real^3#real^3#real^3#real^3`]
228 THEN POP_ASSUM MP_TAC
229 THEN ASM_REWRITE_TAC[POWER;o_DEF;GSYM lemma_add_exponent_function]
230 THEN STRIP_TAC
231 THEN EXISTS_TAC`N+n:num`
232 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)))`]
233 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
234 THEN MP_TAC(ARITH_RULE`n>=0/\ N>0==> N+n>=0`)
235 THEN ASM_REWRITE_TAC[]]]);;
236
237
238
239
240
241
242 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.
243 FAN(x,V,E)
244 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
245 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
246 /\ y IN ds
247 /\ y1 IN d_fan(x,V,E)
248 /\ (f1_fan x V E POWER m) y1= y
249 ==>   y1 IN ds`,
250
251 INDUCT_TAC
252 THENL[
253 ASM_REWRITE_TAC[POWER;I_DEF]
254 THEN REPEAT STRIP_TAC
255 THEN ASM_REWRITE_TAC[];
256 POP_ASSUM MP_TAC
257 THEN DISCH_THEN(LABEL_TAC"LINH")
258 THEN ASM_REWRITE_TAC[POWER;o_DEF]
259 THEN REPEAT STRIP_TAC
260 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`;])
261 THEN POP_ASSUM MP_TAC
262 THEN POP_ASSUM MP_TAC
263 THEN POP_ASSUM MP_TAC
264 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
265 THEN STRIP_TAC
266 THEN MRESAL_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`][POWER_1]
267 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y1:real^3#real^3#real^3#real^3`)
268 THEN STRIP_TAC
269 THEN STRIP_TAC
270 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`;]]);;
271
272
273
274
275
276
277
278 let REP_OF_INVERSE1_SIGMA_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
279 FAN(x,V,E)
280 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
281 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
282 /\ y IN ds
283 ==>  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 `,
284
285 REPEAT STRIP_TAC
286 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
287 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`]
288 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ y IN ds ==> y IN d1_fan (x,V,E)`)
289 THEN ASM_REWRITE_TAC[f1_fan;d1_fan;IN_ELIM_THM]
290 THEN STRIP_TAC
291 THEN ASM_REWRITE_TAC[pr2;pr3]
292 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
293 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`));;
294
295
296
297
298 let REP_OF_INVERSE1_SIGMA_FAN_IN_D_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
299 FAN(x,V,E)
300 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
301 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
302 /\ y IN ds
303 ==> (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
304       d_fan (x:real^3,V:real^3->bool,E)`,
305
306 REPEAT STRIP_TAC
307 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
308 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`]
309 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ y IN ds ==> y IN d1_fan (x,V,E)`)
310 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
311 THEN STRIP_TAC
312 THEN ASM_REWRITE_TAC[pr2;pr3]
313 THEN EXISTS_TAC`x:real^3`
314 THEN EXISTS_TAC`(sigma_fan x V E v w):real^3`
315 THEN EXISTS_TAC`v:real^3`
316 THEN EXISTS_TAC`(sigma_fan x V E (sigma_fan x V E v w) v):real^3`
317 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
318 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
319 ` (v:real^3)`]
320 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`]
321 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`]
322 THEN POP_ASSUM MP_TAC
323 THEN RESA_TAC);;
324
325
326
327
328
329 let DARTSET_LEADS_INTO_SUBSET_WDART_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
330 FAN(x,V,E)
331 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
332 /\ y IN ds
333 /\ conforming_fan (x,V,E)
334 ==>   (dartset_leads_into_fan x V E ds) SUBSET (w_dart_fan x V E y)`,
335 REWRITE_TAC[conforming_fan;conforming_half_space_fan]
336 THEN REPEAT STRIP_TAC
337 THEN POP_ASSUM MP_TAC
338 THEN POP_ASSUM MP_TAC
339 THEN POP_ASSUM MP_TAC
340 THEN DISCH_THEN(LABEL_TAC"EM")
341 THEN REPEAT STRIP_TAC
342 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
343 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
344 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`]
345 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
346 THEN POP_ASSUM MP_TAC
347 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
348 THEN STRIP_TAC
349 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
350 ` (v:real^3)`]
351 THEN FIND_ASSUM MP_TAC`(!v:real^3. v IN V==>CARD (set_of_edge v V E) >1)`
352 THEN DISCH_TAC
353 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
354 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]) THEN STRIP_TAC)
355 THEN ASM_REWRITE_TAC[w_dart_fan;]
356 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
357 THEN DISCH_TAC
358 THEN POP_ASSUM (fun th -> MP_TAC th
359 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
360 THEN DISCH_TAC
361 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"))
362 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`]
363 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`]
364 THEN POP_ASSUM MP_TAC
365 THEN RESA_TAC
366 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`v:real^3`;`w:real^3`;`(sigma_fan x V E v w):real^3`]
367 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`]
368 THEN POP_ASSUM MP_TAC
369 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
370 THEN ASM_REWRITE_TAC[]
371 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
372 THEN STRIP_TAC
373 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)
374 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`]
375 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
376 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
377       d1_fan (x:real^3,V:real^3->bool,E)` ASSUME_TAC
378 THENL[ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
379 THEN EXISTS_TAC`x:real^3`
380 THEN EXISTS_TAC`(sigma_fan x V E v w):real^3`
381 THEN EXISTS_TAC`v:real^3`
382 THEN EXISTS_TAC`(sigma_fan x V E (sigma_fan x V E v w) v):real^3`
383 THEN ASM_REWRITE_TAC[SET_RULE`{A,B}={B,A}`];
384 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)`]
385 THEN POP_ASSUM MP_TAC
386 THEN POP_ASSUM MP_TAC
387 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[pr2;pr3;f1_fan]
388 THEN REWRITE_TAC[]
389 THEN STRIP_TAC
390 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[pr2;pr3;f1_fan]
391 THEN REWRITE_TAC[INTERS;INTER;IN_ELIM_THM; SUBSET]
392 THEN REPEAT STRIP_TAC
393 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)
394 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
395 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
396 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
397 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`];
398 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)
399 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`
400 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
401 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
402 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
403 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]
404 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`]
405 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
406 THEN REWRITE_TAC[]]]);;
407
408
409
410
411
412
413
414
415 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.
416 FAN(x,V,E)
417 /\ {v,w} IN E
418 ==> {v,power_map_points sigma_fan x V E v w n} IN E`,
419 REPEAT STRIP_TAC
420 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`]
421 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)`]
422 THEN MP_TAC (SET_RULE`power_map_points sigma_fan x V E v w n IN
423       set_of_orbits_points_fan x V E v w /\
424 set_of_orbits_points_fan x V E v w SUBSET set_of_edge v V E
425 ==> power_map_points sigma_fan x V E v w n IN set_of_edge v V E`)
426 THEN ASM_REWRITE_TAC[]
427 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)`]);;
428
429
430
431
432 let     SRPRNPL=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
433 FAN(x,V,E)
434 /\ conforming_fan (x,V,E)
435 ==>   simple_hypermap(hypermap1_of_fanx (x,V,E))`,
436
437 REPEAT STRIP_TAC
438 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN ASSUME_TAC th)
439 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)))`]
440 THEN ASM_REWRITE_TAC[simple_hypermap;node;EXTENSION;INTER;IN_ELIM_THM;orbit_map]
441 THEN REPEAT STRIP_TAC
442 THEN EQ_TAC
443 THEN STRIP_TAC
444 THENL[POP_ASSUM MP_TAC
445 THEN POP_ASSUM MP_TAC
446 THEN POP_ASSUM MP_TAC
447 THEN POP_ASSUM MP_TAC
448 THEN DISCH_THEN (LABEL_TAC "EM")
449 THEN REPEAT STRIP_TAC
450 THEN SUBGOAL_THEN`x' IN face (hypermap1_of_fanx (x:real^3,V,E)) x'`ASSUME_TAC
451 THENL[
452 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
453 THEN EXISTS_TAC`0`
454 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];
455  SUBGOAL_THEN `face (hypermap1_of_fanx (x,V,E)) x' IN
456       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
457 THENL[
458 ASM_REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;orbit_map;face]
459 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
460 THEN ASM_REWRITE_TAC[];
461 MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
462 THEN REMOVE_THEN"EM"MP_TAC
463 THEN ASM_REWRITE_TAC[]
464 THEN DISCH_THEN(LABEL_TAC"EM")
465 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)))`]
466 THEN REMOVE_ASSUM_TAC
467 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
468 THEN POP_ASSUM MP_TAC
469 THEN REMOVE_THEN"EM"MP_TAC
470 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[d1_fan;]
471 THEN REWRITE_TAC[IN_ELIM_THM]
472 THEN STRIP_TAC
473 THEN STRIP_TAC
474 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`]
475 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;]
476 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]
477 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`]
478 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`]
479 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
480       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))):real^3->bool`]
481
482 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E
483       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)) SUBSET
484       w_dart_fan x V E
485       (x,
486        v,
487        power_map_points sigma_fan x V E v w n,
488        power_map_points sigma_fan x V E v w (SUC n))/\
489  dartset_leads_into_fan x V E
490       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w)) SUBSET
491       w_dart_fan x V E (x,v,w,sigma_fan x V E v w)
492 /\ z IN
493       dartset_leads_into_fan x V E
494       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))
495 ==> ~(w_dart_fan x V E (x,v,w,sigma_fan x V E v w) INTER      w_dart_fan x V E
496       (x,
497        v,
498        power_map_points sigma_fan x V E v w n,
499        power_map_points sigma_fan x V E v w (SUC n))
500       ={})`)
501 THEN ASM_REWRITE_TAC[]
502 THEN REWRITE_TAC[power_map_points]
503 THEN STRIP_TAC
504 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`]
505 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;IN_SING])]];
506 POP_ASSUM MP_TAC
507 THEN REWRITE_TAC[IN_SING]
508 THEN RESA_TAC
509 THEN STRIP_TAC
510 THENL[
511 EXISTS_TAC `0`
512 THEN REWRITE_TAC[ARITH_RULE`0>=0`; POWER;I_DEF];
513
514 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
515 THEN EXISTS_TAC `0`
516 THEN REWRITE_TAC[ARITH_RULE`0>=0`; POWER;I_DEF]]]);;
517
518
519 let N_FAN_GE_0=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
520 FAN(x,V,E)
521 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
522 ==> 0<= N_FAN(x,V,E) `,
523
524 REPEAT STRIP_TAC
525 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))`]
526 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))`]
527 THEN REWRITE_TAC[N_FAN]
528 THEN POP_ASSUM MATCH_MP_TAC
529 THEN REWRITE_TAC[FINITE_HYPERMAP_ORBITS]
530 THEN REPEAT STRIP_TAC
531 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`]
532 THEN POP_ASSUM MP_TAC
533 THEN ARITH_TAC);;
534
535 let NSUM_EQ_0_IFF = prove
536  (`!s f. FINITE s ==> (nsum s f = 0 <=> !x. x IN s ==> f x = 0)`,
537   REPEAT STRIP_TAC THEN EQ_TAC THEN ASM_SIMP_TAC[NSUM_EQ_0] THEN
538   ASM_MESON_TAC[ARITH_RULE `n = 0 <=> n <= 0`; NSUM_POS_BOUND]);;
539
540
541
542 let N_FAN_EQ_0_IMP_CARD_FACE_EQ_3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
543 FAN(x,V,E)
544 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
545 /\ N_FAN(x,V,E)=0
546 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
547 ==> CARD ds=3`,
548
549 REWRITE_TAC[N_FAN]
550 THEN REPEAT STRIP_TAC
551 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]
552 THEN POP_ASSUM (fun th-> MRESA1_TAC th`ds:real^3#real^3#real^3#real^3->bool`)
553 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`]
554 THEN POP_ASSUM MP_TAC
555 THEN POP_ASSUM MP_TAC
556 THEN ARITH_TAC);;
557
558
559
560
561 let version_JUTSTKG=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) U:real^3->bool.
562 FAN(x,V,E)
563 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
564 /\ fan80(x,V,E)
565 /\ U IN topological_component_yfan (x,V,E)
566 ==> ?f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\ dartset_leads_into_fan x V E f = U`,
567
568 REPEAT STRIP_TAC
569 THEN MRESA_TAC JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`U:real^3->bool`]
570 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
571 THEN ABBREV_TAC`y=(x,v,u:real^3,sigma_fan x V E v u)`
572 THEN ABBREV_TAC`ds=face (hypermap1_of_fanx (x:real^3,V,E)) y`
573 THEN EXISTS_TAC`ds:real^3#real^3#real^3#real^3->bool`
574 THEN ASM_REWRITE_TAC[]
575 THEN SUBGOAL_THEN`y IN dart (hypermap1_of_fanx (x:real^3,V,E))`ASSUME_TAC
576 THENL[
577 REMOVE_ASSUM_TAC
578 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
579 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)))`]
580 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]
581 THEN EXISTS_TAC`x:real^3`
582 THEN EXISTS_TAC`v:real^3`
583 THEN EXISTS_TAC`u:real^3`
584 THEN EXISTS_TAC`(sigma_fan x (V:real^3->bool) E v u):real^3`
585 THEN ASM_REWRITE_TAC[];
586
587 SUBGOAL_THEN `ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`ASSUME_TAC
588 THENL[
589  POP_ASSUM MP_TAC
590 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;face_set; IN_ELIM_THM;set_of_orbits;face])
591 THEN STRIP_TAC
592 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
593 THEN ASM_REWRITE_TAC[];
594
595 SUBGOAL_THEN`y IN ds:real^3#real^3#real^3#real^3->bool`ASSUME_TAC
596 THENL[
597 EXPAND_TAC"ds"
598 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
599 THEN EXISTS_TAC`0`
600 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
601 MRESA_TAC DARTSET_LEADS_INTO_FAN [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
602 `ds:real^3#real^3#real^3#real^3->bool`;]
603 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
604 THEN EXPAND_TAC"y"
605 THEN REWRITE_TAC[pr2;pr3]]]]);;
606
607
608 let measurable_dartset_leads_into30_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds e.
609 FAN(x,V,E)
610 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
611 /\ fan80(x,V,E)
612 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
613 /\ CARD ds=3
614 ==>   measurable((dartset_leads_into_fan x V E ds) INTER ball (x,e))`,
615 REPEAT STRIP_TAC
616 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`]
617 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
618 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B=B INTER A`]
619 THEN MESON_TAC[MEASURABLE_BALL_AFF_GT]);;
620
621
622
623
624
625
626
627 let   DWFBRQY=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
628 FAN(x,V,E)
629 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
630 /\ fan80(x,V,E)
631 /\ N_FAN(x,V,E)=0
632 ==> conforming_fan (x,V,E)`,
633
634
635 REPEAT STRIP_TAC
636 THEN ASM_REWRITE_TAC[conforming_fan]
637 THEN MRESA_TAC N_FAN_EQ_0_IMP_CARD_FACE_EQ_3[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
638 THEN POP_ASSUM MP_TAC
639 THEN DISCH_THEN(LABEL_TAC"EM")
640 THEN STRIP_TAC
641 THENL[
642 REWRITE_TAC[conforming_bijection_fan;EXISTS_UNIQUE]
643 THEN REPEAT STRIP_TAC
644 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`s:real^3->bool`]
645 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
646 THEN ASM_REWRITE_TAC[]
647 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
648 THEN REPEAT STRIP_TAC
649 THEN POP_ASSUM MP_TAC
650 THEN MRESA_TAC exists_point_dart_leads_into_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
651 `y:real^3#real^3#real^3#real^3->bool`;]
652 THEN POP_ASSUM MP_TAC
653 THEN POP_ASSUM MP_TAC
654 THEN DISCH_THEN(LABEL_TAC"MA")
655 THEN REPEAT STRIP_TAC
656 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
657 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`]
658 THEN MP_TAC(SET_RULE`y' IN y /\ y SUBSET d_fan(x,V,E)==> y' IN d_fan(x,V,E)`)
659 THEN RESA_TAC
660 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`]
661 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y':real^3#real^3#real^3#real^3`)
662 THEN REMOVE_THEN "MA" MP_TAC
663 THEN ASM_TAC
664 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
665 THEN REPEAT STRIP_TAC
666 THEN POP_ASSUM MP_TAC
667 THEN POP_ASSUM MP_TAC
668 THEN ASM_REWRITE_TAC[]
669 THEN REPEAT STRIP_TAC
670 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]
671 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];
672
673 STRIP_TAC
674 THENL[
675 REWRITE_TAC[conforming_half_space_fan]
676 THEN REPEAT STRIP_TAC
677 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
678 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`]
679 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th);])
680 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`]
681 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}}
682 = 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}`]
683 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
684 THEN DISCH_TAC
685 THEN POP_ASSUM (fun th -> MP_TAC th
686 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
687 THEN DISCH_TAC
688 THEN POP_ASSUM (fun th -> MRESA_TAC th [`pr2 f2:real^3`;`pr2 f3:real^3`])
689 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`]
690 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`];
691
692 STRIP_TAC
693 THENL[
694 REWRITE_TAC[conforming_solid_angle_fan]
695 THEN REPEAT STRIP_TAC
696 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
697 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`]
698 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
699 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`;]
700 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`;]
701 THEN POP_ASSUM MP_TAC
702 THEN REWRITE_TAC[eventually_radial_norm;eventually_radial;radial_norm; radial;ball_eq_normball]
703 THEN DISCH_TAC
704 THEN ASM_REWRITE_TAC[]
705 THEN MRESA_TAC solid_of_dartset_leads_into_fan_triangle_fan
706 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`f:real^3#real^3#real^3#real^3->bool`;];
707
708 REWRITE_TAC[conforming_diagonal_fan]
709 THEN REPEAT GEN_TAC
710 THEN STRIP_TAC
711 THEN POP_ASSUM MP_TAC
712 THEN POP_ASSUM MP_TAC
713 THEN POP_ASSUM MP_TAC
714 THEN REMOVE_THEN "EM" (fun th-> MRESA1_TAC th `f:real^3#real^3#real^3#real^3->bool`)
715 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`]
716 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`]
717 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`]
718 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`]
719 THEN REPEAT DISCH_TAC
720 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)
721 ==> (y=f1 /\ z= f2) \/ (y=f1 /\ z= f3) \/ (y=f2 /\ z= f1) \/ (y=f2 /\ z= f3)\/ (y=f3 /\ z= f1) \/ (y=f3 /\ z= f2)` )
722 THEN RESA_TAC
723 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
724 THEN ASM_REWRITE_TAC[]]]]);;
725
726
727
728
729 let NEGLIGIBLE_AFF_3=prove(`!x:real^3 v:real^3 u:real^3.
730   negligible (aff {x,v,u})`,
731
732 MESON_TAC[NEGLIGIBLE_AFFINE_HULL_3;aff]);;
733
734
735
736
737 let NEGLIGIBLE_AFF_GE_2_1=prove(`!x:real^3 v:real^3 u:real^3.
738 ~collinear {x,v,u}
739 ==>  negligible (aff_ge {x,v} {u})`,
740
741 REPEAT GEN_TAC THEN GEOM_ORIGIN_TAC `x:real^3` THEN
742 REPEAT STRIP_TAC
743 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
744 THEN EXISTS_TAC`{w:real^3| (w) dot (e2_fan (vec 0) v u)= &0}`
745 THEN MRESAL_TAC exp_aff_ge_by_dot[`(vec 0):real^3`;`v:real^3`;`u:real^3`][VECTOR_ARITH`A- vec 0=A`]
746 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
747  {w | w dot e2_fan (vec 0) v u = &0}`]
748 THEN ONCE_REWRITE_TAC[DOT_SYM]
749 THEN MATCH_MP_TAC NEGLIGIBLE_HYPERPLANE
750 THEN ASM_REWRITE_TAC[]
751 THEN STRIP_TAC
752 THEN MRESAL_TAC properties_coordinate[`((vec 0):real^3)`;` (v:real^3)`;` (u:real^3)`][orthonormal;DOT_LZERO]
753 THEN ASM_TAC
754 THEN REAL_ARITH_TAC);;
755
756
757
758 let NEGLIGIBLE_AFF_GE_1_2=prove(`!x:real^3 v:real^3 u:real^3.
759 ~collinear {x,v,u}
760 ==>  negligible (aff_ge {x} {v,u})`,
761
762 REPEAT STRIP_TAC
763 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
764 THEN EXISTS_TAC `aff_ge {x,v} {u:real^3}`
765 THEN MRESA_TAC aff_ge_inter_aff_ge[`x:real^3`;`v:real^3`;`u:real^3`]
766 THEN ASM_SIMP_TAC[SET_RULE`A INTER B SUBSET A`;NEGLIGIBLE_AFF_GE_2_1]);;
767
768 let NEGLIGIBLE_AFF_GT_1_2=prove(`!x:real^3 v:real^3 u:real^3.
769 ~collinear {x,v,u}
770 ==>  negligible (aff_gt {x} {v,u})`,
771 REPEAT STRIP_TAC
772 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
773 THEN EXISTS_TAC `aff_ge {x} {v,u:real^3}`
774 THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]th3) THEN RESA_TAC
775 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`u:real^3`]
776 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GE_1_2]);;
777
778
779
780
781
782
783
784
785
786
787 let MEASURE_AFF_3=prove(`!x:real^3 v:real^3 u:real^3.
788  measure (aff {x,v,u})= &0`,
789
790 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
791 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3]);;
792
793
794
795 let MEASURE_AFF_GT_2_1=prove(`!x:real^3 v:real^3 u:real^3.
796 ~collinear {x,v,u}==>   measure (aff_gt {x} {v,u})= &0`,
797
798 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
799 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2]);;
800
801
802 let NEGLIGIBLE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
803 negligible (aff  {x,v,u} INTER normball x r)`,
804 REPEAT STRIP_TAC
805 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
806 THEN EXISTS_TAC `aff {x,v,u:real^3}`
807 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3; SET_RULE`A INTER B SUBSET A`]);;
808
809
810
811
812 let NEGLIGIBLE_AFF_GT_1_2_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
813 ~collinear {x,v,u}
814 ==>  negligible (aff_gt {x} {v,u} INTER normball x r)`,
815 REPEAT STRIP_TAC
816 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
817 THEN EXISTS_TAC `aff_gt {x} {v,u:real^3}`
818 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2; SET_RULE`A INTER B SUBSET A`]);;
819
820
821 let MEASURE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
822   measure (aff {x,v,u} INTER normball x r)= &0`,
823
824 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
825 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3_INTER_BALL]);;
826
827
828
829 let MEASURE_AFF_GT_2_1_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
830 ~collinear {x,v,u}==>   measure (aff_gt {x} {v,u} INTER normball x r)= &0`,
831
832 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
833 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2_INTER_BALL]);;
834
835
836 let HAS_MEASURE_AFF_3_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
837 (aff {x,v,u} INTER normball x r)  has_measure  &0`,
838
839 REPEAT STRIP_TAC
840 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_3_INTER_BALL;HAS_MEASURE_0]);;
841
842
843 let HAS_MEASURE_AFF_GT_1_2_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
844 ~collinear {x,v,u}==>  (aff_gt {x} {v,u} INTER normball x r)  has_measure  &0`,
845
846 REPEAT STRIP_TAC
847 THEN ASM_SIMP_TAC[NEGLIGIBLE_AFF_GT_1_2_INTER_BALL;HAS_MEASURE_0]);;
848
849
850 let MEASURABLE_AFF_GT_2_1_INTER_BALL=prove(`!x:real^3 v:real^3 u:real^3 r:real.
851 ~collinear {x,v,u}==>   measurable (aff_gt {x} {v,u} INTER normball x r)`,
852 REPEAT STRIP_TAC
853 THEN ASM_SIMP_TAC[measurable;]
854 THEN EXISTS_TAC`&0`
855 THEN MRESA_TAC HAS_MEASURE_AFF_GT_1_2_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`r:real`]);;
856
857
858 let XFAN_EQ_UNIONS_AFF_GE_1_2=prove(`!x V E.
859 xfan(x,V,E) =UNIONS {y | ?e. e IN E /\ y = aff_ge {x} e}`,
860 REWRITE_TAC[xfan;UNIONS;IN_ELIM_THM]
861 THEN SET_TAC[]);;
862
863
864
865
866 let NEGLIGIBLE_XFAN=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool).
867 FAN (x,V,E) ==>  negligible (xfan (x,V,E))`,
868 REPEAT STRIP_TAC THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2] THEN MATCH_MP_TAC NEGLIGIBLE_UNIONS
869 THEN MRESAL_TAC set_edges_is_finite_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`][IN_ELIM_THM]
870 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3->bool. aff_ge {x:real^3} e)`;`E:(real^3->bool)->bool`][IMAGE;]
871 THEN REPEAT STRIP_TAC
872 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
873 THEN POP_ASSUM MP_TAC
874 THEN REMOVE_ASSUM_TAC
875 THEN POP_ASSUM MP_TAC
876 THEN DISCH_THEN(LABEL_TAC "EM")
877 THEN STRIP_TAC
878 THEN REMOVE_THEN "EM" MP_TAC
879 THEN RESA_TAC
880 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
881 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_GE_1_2]);;
882
883
884 let NEGLIGIBLE_XFAN_INTER_BALL=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) r:real.
885 FAN (x,V,E) ==>  negligible (xfan (x,V,E) INTER normball x r)`,
886 REPEAT STRIP_TAC THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
887 THEN EXISTS_TAC`xfan ((x:real^3),(V:real^3->bool),(E:(real^3->bool)->bool))`
888 THEN POP_ASSUM MP_TAC
889 THEN ASM_REWRITE_TAC[NEGLIGIBLE_XFAN;SET_RULE`xfan (x,V,E) INTER normball x r SUBSET xfan (x,V,E)`]);;
890
891
892
893 let MEASURE_XFAN=prove(`!x:real^3 V E.
894 FAN (x,V,E) ==>  measure (xfan (x,V,E))= &0`,
895
896 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
897 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN]);;
898
899
900 let HAS_MEASURE_XFAN=prove(`!x:real^3 V E.
901 FAN (x,V,E) ==>  (xfan (x,V,E)) has_measure  &0`,
902
903 REPEAT STRIP_TAC
904 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN;HAS_MEASURE_0]);;
905
906
907
908 let MEASURE_XFAN_INTER_BALL=prove(`!x:real^3 V E r.
909 FAN (x,V,E) ==>  measure (xfan (x,V,E) INTER normball x r)= &0`,
910
911 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
912 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN_INTER_BALL]);;
913
914
915 let HAS_MEASURE_XFAN_INTER_BALL=prove(`!x:real^3 V E r.
916 FAN (x,V,E) ==>  (xfan (x,V,E) INTER normball x r)  has_measure  &0`,
917
918 REPEAT STRIP_TAC
919 THEN ASM_SIMP_TAC[NEGLIGIBLE_XFAN_INTER_BALL;HAS_MEASURE_0]);;
920
921
922
923 let MEASURABLE_BALL_INTER_UNIV=prove(`!x r. measurable ((:real^3) INTER normball x r)`,
924 REWRITE_TAC[SET_RULE`(:real^3) INTER (A:real^3->bool)=A`;GSYM ball_eq_normball;MEASURABLE_BALL]);;
925
926
927
928
929
930
931
932
933 let MEASURE_YFAN_INTER_BALL=prove(`!x:real^3 V E r.
934 FAN(x,V,E)/\ &0<= r
935 ==> measure ( (yfan (x,V,E)) INTER normball x r)= &4/ &3 *pi *r pow 3`,
936
937 REPEAT STRIP_TAC
938 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)`]
939 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]
940 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)`;]
941 THEN ASM_SIMP_TAC[VOLUME_BALL]
942 THEN REAL_ARITH_TAC);;
943
944
945
946
947 let MESURABLE_YFAN_INTER_BALL=prove(`!x:real^3 V E r.
948 FAN(x,V,E)/\ &0<= r
949 ==> measurable ( (yfan (x,V,E)) INTER normball x r)`,
950
951
952 REPEAT STRIP_TAC
953 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)`]
954 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]
955 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)`;]);;
956
957
958
959
960
961
962 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)`,
963
964 REWRITE_TAC[radial_norm]
965 THEN REPEAT STRIP_TAC
966 THENL[
967 ASM_TAC THEN SET_TAC[];
968
969 MP_TAC(SET_RULE`v0 + u:real^N IN B DIFF A==> v0 + u IN B  /\ ~(v0 + u IN A)`)
970 THEN RESA_TAC
971 THEN FIND_ASSUM MP_TAC `!u:real^N. v0 + u IN B ==> (!t. t > &0 /\ t * norm u < r ==> v0 + t % u IN B)`
972 THEN DISCH_TAC
973 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `u:real^N` th))
974 THEN POP_ASSUM MP_TAC
975 THEN POP_ASSUM (fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
976 THEN REPEAT STRIP_TAC
977 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
978 THEN FIND_ASSUM MP_TAC `!u:real^N. v0 + u IN A ==> (!t. t > &0 /\ t * norm u < r ==> v0 + t % u IN A)`
979 THEN DISCH_TAC
980 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `t% u:real^N` th))
981 THEN DISJ_CASES_TAC(SET_RULE`v0 + t % u IN A \/ ~(v0 + t % u:real^N IN A)`)
982 THENL[POP_ASSUM (fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
983 THEN REPEAT STRIP_TAC
984 THEN POP_ASSUM (fun th-> MRESA1_TAC th `inv t:real`)
985 THEN POP_ASSUM MP_TAC
986 THEN MP_TAC(REAL_ARITH`t> &0==> ~(t= &0) /\ &0<= t`) THEN RESA_TAC
987 THEN MRESA1_TAC REAL_ABS_REFL`t:real`
988 THEN MRESA1_TAC REAL_MUL_LINV`t:real`
989 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`]
990 THEN MP_TAC(SET_RULE`B SUBSET normball v0 r /\ v0 + u:real^N IN B==> v0 + u IN normball v0 r`)
991 THEN ASM_REWRITE_TAC[normball;IN_ELIM_THM;dist;VECTOR_ARITH`(A+B)-A=B:real^N`]
992 THEN SET_TAC[];
993
994 ASM_TAC THEN SET_TAC[]]]);;
995
996
997
998
999 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)`,
1000
1001 REWRITE_TAC[radial_norm;IN_UNION]
1002 THEN REPEAT STRIP_TAC
1003 THEN ASM_TAC THEN SET_TAC[]);;
1004
1005
1006 let RADIAL_EMPTY=prove(`!r v0:real^N. radial_norm r v0 {}`,
1007 REWRITE_TAC[radial_norm;]
1008 THEN SET_TAC[]);;
1009
1010
1011 let RADIAL_UNIONS=prove(`!r v0 f:(real^N->bool)->bool.
1012         FINITE f /\ (!s. s IN f ==> radial_norm r v0 s)
1013         ==> (radial_norm r v0 (UNIONS f))`,
1014   GEN_TAC THEN GEN_TAC THEN REWRITE_TAC[IMP_CONJ] THEN
1015   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1016   SIMP_TAC[UNIONS_0; UNIONS_INSERT; RADIAL_EMPTY] THEN
1017   REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC THEN
1018   MATCH_MP_TAC RADIAL_UNION THEN ASM_SIMP_TAC[]);;
1019
1020
1021
1022 let RADIAL_UNIV=prove(`!r x. r> &0 ==> radial_norm r x ((:real^N) INTER normball x r)`,
1023 REPEAT STRIP_TAC
1024 THEN REWRITE_TAC[radial_norm]
1025 THEN REPEAT STRIP_TAC
1026 THENL
1027 [ SET_TAC[];
1028 UNDISCH_TAC `(x:real^N) + u IN (:real^N) INTER normball x r` THEN
1029 ASM_SIMP_TAC[aff_normball;SET_RULE`(:real^N) INTER (A:real^N->bool)=A`]]);;
1030
1031
1032
1033
1034 let RADIAL_AFF_GE_1_2 = prove(`!x u v r.
1035      (DISJOINT {(x:real^B)} {u,v} /\ (r > &0) ) ==>
1036      radial_norm r x (aff_ge {x} {u,v} INTER normball x r)`,
1037
1038 REWRITE_TAC[radial_norm]
1039 THEN REPEAT STRIP_TAC
1040 THENL[SET_TAC[];
1041
1042 UNDISCH_TAC `(x:real^B) + u' IN aff_ge {x} {u, v} INTER normball x r`
1043 THEN ASM_SIMP_TAC[AFF_GE_1_2]
1044 THEN REWRITE_TAC[IN_ELIM_THM;IN_INTER]
1045 THEN REPEAT STRIP_TAC
1046 THENL[EXISTS_TAC `&1 + (t:real) * t1 - t`
1047 THEN EXISTS_TAC `(t:real) * t2`
1048 THEN EXISTS_TAC `(t:real) * t3`
1049 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`;]
1050 THEN MP_TAC(REAL_ARITH`t> &0 ==> &0<= t`) THEN RESA_TAC
1051 THEN SUBGOAL_THEN `&0 <= t * t2 /\ &0 <= t * t3` (fun t -> REWRITE_TAC[t])
1052 THENL[ ASM_MESON_TAC[REAL_LE_MUL];
1053 REMOVE_ASSUM_TAC
1054 THEN REMOVE_ASSUM_TAC
1055 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1056 THEN VECTOR_ARITH_TAC];
1057
1058 MATCH_MP_TAC aff_normball
1059 THEN ASM_REWRITE_TAC[]]]);;
1060
1061 let RADIAL_AFF_GT_3_1 = prove_by_refinement(`!x u v w r.
1062      (DISJOINT {(x:real^B),u,v} {w} /\ (r > &0) ) ==>
1063      radial_norm r x (aff_gt {x,u,v} {w} INTER normball x r)`,
1064 [
1065 REWRITE_TAC[radial_norm];
1066 REPEAT STRIP_TAC;
1067 SET_TAC[];
1068 UNDISCH_TAC `(x:real^B) + u' IN aff_gt {x,u,v} {w} INTER normball x r`;
1069 ASM_SIMP_TAC[AFF_GT_3_1];
1070 REWRITE_TAC[IN_ELIM_THM;IN_INTER];
1071 REPEAT STRIP_TAC;
1072 EXISTS_TAC `&1 + (t:real) * t1 - t`;
1073 EXISTS_TAC `(t:real) * t2`;
1074 EXISTS_TAC `(t:real) * t3`;
1075 EXISTS_TAC `(t:real) * t4`;
1076 SUBGOAL_THEN `&0 < t * t4` (fun t -> REWRITE_TAC[t]);
1077 ASM_MESON_TAC[REAL_MUL_POS_LT;REAL_ARITH `r > &0 <=> &0 < r`];
1078 CONJ_TAC;
1079 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]);
1080 REAL_ARITH_TAC;
1081 REAL_ARITH_TAC;
1082 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)`];
1083 UNDISCH_TAC `(x:real^B) + u' = t1 % x + t2 % u + t3 % v + t4 % w`;
1084 DISCH_THEN(fun thm -> ONCE_REWRITE_TAC[GSYM thm]);
1085 VECTOR_ARITH_TAC;
1086 MATCH_MP_TAC aff_normball;
1087 ASM_REWRITE_TAC[];
1088 ]);;
1089
1090
1091 let RADIAL_INTERS=prove(`!r v0 f:(real^N->bool)->bool.
1092         FINITE f /\ (!s. s IN f ==> radial_norm r v0 (s INTER normball v0 r))/\  r> &0
1093         ==> (radial_norm r v0 (INTERS f INTER normball v0 r))`,
1094
1095   GEN_TAC THEN GEN_TAC THEN REWRITE_TAC[IMP_CONJ] THEN
1096   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1097   SIMP_TAC[ INTERS_0; INTERS_INSERT;RADIAL_UNIV;FORALL_IN_CLAUSES] THEN
1098   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
1099 THEN  MATCH_MP_TAC inter_radial THEN ASM_SIMP_TAC[]);;
1100
1101
1102
1103
1104
1105 let XFAN_INTER_BALL_UNIONS=prove(`!x:real^N V E.
1106 xfan(x,V,E) INTER normball x r= UNIONS {y | ?e. e IN E /\ y = (aff_ge {x} e) INTER normball x r}`,
1107 REPEAT GEN_TAC
1108 THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2]
1109 THEN ONCE_REWRITE_TAC[ EXTENSION]
1110 THEN REWRITE_TAC[UNIONS; INTER;IN_ELIM_THM]
1111 THEN GEN_TAC
1112 THEN EQ_TAC
1113 THENL[
1114 STRIP_TAC
1115 THEN ASM_REWRITE_TAC[]
1116 THEN EXISTS_TAC `{x' | x' IN aff_ge {x} e /\ x' IN normball (x:real^N) (r:real)}`
1117 THEN POP_ASSUM MP_TAC
1118 THEN POP_ASSUM MP_TAC
1119 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1120 THEN RESA_TAC THEN RESA_TAC
1121 THEN EXISTS_TAC`e:real^N->bool`
1122 THEN ASM_REWRITE_TAC[];
1123 STRIP_TAC
1124 THEN POP_ASSUM MP_TAC
1125 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1126 THEN RESA_TAC
1127 THEN EXISTS_TAC `aff_ge {x:real^N} e `
1128 THEN ASM_REWRITE_TAC[]
1129 THEN EXISTS_TAC `e:real^N->bool`
1130 THEN ASM_REWRITE_TAC[]]);;
1131
1132
1133 let RADIAL_XFAN_INTER_BALL=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) r.
1134 FAN (x,V,E) /\ r> &0 ==>  radial_norm r x  (xfan (x,V,E) INTER normball x r)`,
1135 REPEAT STRIP_TAC THEN REWRITE_TAC[XFAN_INTER_BALL_UNIONS]
1136  THEN MATCH_MP_TAC RADIAL_UNIONS
1137 THEN MRESAL_TAC set_edges_is_finite_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`][IN_ELIM_THM]
1138 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;]
1139 THEN REPEAT STRIP_TAC
1140 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
1141 THEN POP_ASSUM MP_TAC
1142 THEN REMOVE_ASSUM_TAC
1143 THEN POP_ASSUM MP_TAC
1144 THEN DISCH_THEN(LABEL_TAC "EM")
1145 THEN STRIP_TAC
1146 THEN REMOVE_THEN "EM" MP_TAC
1147 THEN RESA_TAC
1148 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
1149 THEN ASM_MESON_TAC[RADIAL_AFF_GE_1_2]);;
1150
1151
1152
1153
1154
1155 let RADIAL_NORM_YFAN_INTER_BALL=prove(`!x:real^3 V E r.
1156 FAN(x,V,E) /\ r> &0
1157 ==> radial_norm r x ( (yfan (x,V,E)) INTER normball x r)`,
1158
1159 REPEAT STRIP_TAC
1160 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)`]
1161 THEN MRESA_TAC RADIAL_UNIV[`r:real`;`x:real^3`]
1162 THEN MRESA_TAC  RADIAL_XFAN_INTER_BALL[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` r:real`]
1163 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`;]);;
1164
1165
1166
1167
1168
1169
1170
1171 let SOLID_ANGLE_YFAN=prove(`!x:real^3 V E.
1172 FAN (x,V,E) ==>  sol x (yfan (x,V,E))= &4 * pi`,
1173 REPEAT STRIP_TAC
1174 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`]
1175 THEN MRESAL_TAC MESURABLE_YFAN_INTER_BALL
1176 [`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` &1:real`][REAL_ARITH`&0<= &1`]
1177 THEN MRESAL_TAC MEASURE_YFAN_INTER_BALL
1178 [`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` &1:real`][REAL_ARITH`&0<= &1`]
1179 THEN MRESAL_TAC sol[`x:real^3`;`yfan(x:real^3,V:real^3->bool,E)`;`&1`][REAL_ARITH`&1> &0`]
1180 THEN REAL_ARITH_TAC);;
1181
1182
1183
1184 let SUM_SOL_IN_TOPOLOGICAL_COMPONENET_EQ_IN_FACE_SET=prove(`!x:real^3 V E.
1185 FAN(x,V,E) /\ conforming_fan (x,V,E)
1186 ==>  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))`,
1187 REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
1188 THEN REPEAT STRIP_TAC
1189 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)))`]
1190 THEN POP_ASSUM MP_TAC
1191 THEN SUBGOAL_THEN`(!x' y.
1192            x' IN face_set (hypermap1_of_fanx (x,V,E)) /\
1193            y IN face_set (hypermap1_of_fanx (x,V,E)) /\
1194            dartset_leads_into_fan x V E x' = dartset_leads_into_fan x V E y
1195            ==> x' = y)`ASSUME_TAC
1196 THENL[
1197 REMOVE_ASSUM_TAC
1198 THEN REMOVE_ASSUM_TAC
1199 THEN REMOVE_ASSUM_TAC
1200 THEN POP_ASSUM MP_TAC
1201 THEN DISCH_THEN(LABEL_TAC "A")
1202 THEN REPEAT STRIP_TAC
1203 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`]
1204 THEN REMOVE_THEN "A" (fun th-> MRESA1_TAC th`dartset_leads_into_fan (x:real^3) V E x'` )
1205 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`);
1206 POP_ASSUM (fun th-> REWRITE_TAC[th])
1207 THEN REWRITE_TAC[FUN_EQ_THM;o_DEF;]
1208 THEN SUBGOAL_THEN`(IMAGE (\f. dartset_leads_into_fan x V E f)
1209  (face_set (hypermap1_of_fanx (x,V,E))))=topological_component_yfan (x,V,E)` ASSUME_TAC
1210 THENL[
1211  ONCE_REWRITE_TAC[EXTENSION]
1212 THEN REWRITE_TAC[IMAGE;IN_ELIM_THM]
1213 THEN GEN_TAC
1214 THEN EQ_TAC
1215 THENL[STRIP_TAC
1216 THEN ASM_SIMP_TAC[dartset_leads_into_is_topological_component_yfan];
1217
1218 REMOVE_ASSUM_TAC
1219 THEN REMOVE_ASSUM_TAC
1220 THEN REMOVE_ASSUM_TAC
1221 THEN POP_ASSUM MP_TAC
1222 THEN DISCH_THEN(LABEL_TAC "A")
1223 THEN REPEAT STRIP_TAC
1224 THEN REMOVE_THEN "A" (fun th-> MRESA1_TAC th`x':real^3->bool` )
1225 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
1226 THEN ASM_REWRITE_TAC[]];
1227 ASM_REWRITE_TAC[]]]);;
1228
1229
1230
1231
1232 let SOL_EMPTY=prove(`!x:real^3.
1233          sol x {} = &0`,
1234 GEN_TAC
1235 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]
1236 THEN REAL_ARITH_TAC);;
1237
1238
1239
1240 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)
1241          ==> sol x (s UNION t) = sol x s + sol x t`,
1242
1243 REPEAT STRIP_TAC
1244 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`]
1245 THEN MP_TAC(SET_RULE`DISJOINT (s:real^3->bool) t
1246 ==>DISJOINT (s INTER normball x r) (t INTER normball x r)`)
1247 THEN RESA_TAC
1248 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`]
1249 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`]
1250 THEN MRESA_TAC sol[`x:real^3`;`s:real^3->bool`;`r:real`]
1251 THEN MRESA_TAC sol[`x:real^3`;`t:real^3->bool`;`r:real`]
1252 THEN MRESA_TAC sol[`x:real^3`;`s UNION t:real^3->bool`;`r:real`]
1253 THEN REAL_ARITH_TAC);;
1254
1255
1256 let UNIONS_INTER=prove(`!f t:A->bool. UNIONS f INTER t= UNIONS {s INTER t| s IN f}`,
1257
1258 ONCE_REWRITE_TAC[EXTENSION]
1259 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM]
1260 THEN REPEAT STRIP_TAC
1261 THEN EQ_TAC
1262 THENL[
1263 STRIP_TAC
1264 THEN ASM_REWRITE_TAC[]
1265 THEN EXISTS_TAC`{x | x IN u /\ x IN t}:A->bool`
1266 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1267 THEN EXISTS_TAC`u :A->bool`
1268 THEN ASM_REWRITE_TAC[];
1269 STRIP_TAC
1270 THEN ASM_REWRITE_TAC[]
1271 THEN POP_ASSUM MP_TAC
1272 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1273 THEN RESA_TAC
1274 THEN EXISTS_TAC`s :A->bool`
1275 THEN ASM_REWRITE_TAC[]]);;
1276
1277
1278
1279
1280
1281
1282 let UNIONS_INTER1=prove(`!f t:A->bool. UNIONS f INTER t= UNIONS {y | ?s. s IN f /\ y = s INTER t}`,
1283
1284 ONCE_REWRITE_TAC[EXTENSION]
1285 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM]
1286 THEN REPEAT STRIP_TAC
1287 THEN EQ_TAC
1288 THENL[
1289 STRIP_TAC
1290 THEN ASM_REWRITE_TAC[]
1291 THEN EXISTS_TAC`{x | x IN u /\ x IN t}:A->bool`
1292 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1293 THEN EXISTS_TAC`u :A->bool`
1294 THEN ASM_REWRITE_TAC[];
1295 STRIP_TAC
1296 THEN ASM_REWRITE_TAC[]
1297 THEN POP_ASSUM MP_TAC
1298 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
1299 THEN RESA_TAC
1300 THEN EXISTS_TAC`s :A->bool`
1301 THEN ASM_REWRITE_TAC[]]);;
1302
1303
1304
1305 let MEASURABLE_UNIONS = prove
1306  (`!f:(real^N->bool)->bool.
1307         FINITE f /\ (!s. s IN f ==> measurable s)
1308         ==> measurable (UNIONS f)`,
1309   REWRITE_TAC[IMP_CONJ] THEN
1310   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1311   SIMP_TAC[UNIONS_0; UNIONS_INSERT; MEASURABLE_EMPTY] THEN
1312   REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC THEN
1313   MATCH_MP_TAC MEASURABLE_UNION THEN ASM_SIMP_TAC[]);;
1314
1315
1316
1317 let SOL_UNIONS=prove(`!r x f:(real^3->bool)->bool.
1318         FINITE f /\  r> &0 /\
1319         (!s. s IN f  ==> measurable (s INTER normball x r) /\ radial_norm r x (s INTER normball x r)) /\
1320         (!s t. s IN f /\ t IN f /\ ~(s = t) ==> DISJOINT s t)
1321         ==> sol x (UNIONS f) = sum f (\s. sol x s)`,
1322 GEN_TAC THEN GEN_TAC THEN  REWRITE_TAC[IMP_CONJ] THEN
1323   MATCH_MP_TAC FINITE_INDUCT_STRONG THEN
1324   SIMP_TAC[UNIONS_0; UNIONS_INSERT; SOL_EMPTY;SUM_CLAUSES]
1325 THEN  REWRITE_TAC[IN_INSERT] THEN REPEAT STRIP_TAC
1326 THEN ASM_TAC THEN DISCH_THEN(LABEL_TAC"EM")
1327 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)`;
1328 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)`]
1329 THEN REPEAT STRIP_TAC
1330 THEN REMOVE_THEN "EM" MP_TAC
1331 THEN ASM_REWRITE_TAC[]
1332 THEN DISCH_TAC
1333 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
1334 THEN  MATCH_MP_TAC SOL_DISJOINT_UNION
1335 THEN EXISTS_TAC`r:real`
1336 THEN ASM_REWRITE_TAC[]
1337 THEN FIND_ASSUM (fun th-> MP_TAC (SPEC `x':real^3->bool` th))`!s:real^3->bool. s = x'
1338           ==> measurable (s INTER normball x r) /\
1339               radial_norm r x (s INTER normball x r)`
1340 THEN REWRITE_TAC[]
1341 THEN DISCH_TAC
1342 THEN ASM_SIMP_TAC[UNIONS_INTER1]
1343 THEN MRESAL_TAC FINITE_IMAGE[`(\s:real^3->bool. s INTER normball x r)`;`f:(real^3->bool)->bool`][IMAGE;]
1344 THEN FIND_ASSUM MP_TAC`!s:real^3->bool. s IN f
1345           ==> measurable (s INTER normball x r) /\
1346               radial_norm r x (s INTER normball x r)`
1347
1348 THEN REWRITE_TAC[SET_RULE`(!s. P s==> Q s /\ Q1 s)<=>(!s. P s==> Q s )/\ (!s. P s==> Q1 s)`]
1349 THEN STRIP_TAC
1350
1351 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))`
1352 ]
1353 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]
1354 THEN ONCE_REWRITE_TAC[SET_RULE`A INTER B= B INTER A`]
1355 THEN REWRITE_TAC[UNIONS_INTER1]
1356 THEN REMOVE_ASSUM_TAC
1357 THEN REMOVE_ASSUM_TAC
1358 THEN REMOVE_ASSUM_TAC
1359 THEN REMOVE_ASSUM_TAC
1360 THEN REMOVE_ASSUM_TAC
1361 THEN REMOVE_ASSUM_TAC
1362 THEN REMOVE_ASSUM_TAC
1363 THEN REMOVE_ASSUM_TAC
1364 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `x':real^3->bool`[SET_RULE` (!t. t IN f ==> ~(x' = t) ==> DISJOINT x' t)
1365 <=> (!t. t IN f /\ ~(x' = t) ==> DISJOINT x' t)`])
1366 THEN FIND_ASSUM MP_TAC`~((x':real^3->bool) IN f)`
1367 THEN REWRITE_TAC[SET_RULE`~(x' IN f)<=> (!t. t IN f ==> ~(x' = t))`]
1368 THEN STRIP_TAC
1369 THEN MP_TAC(SET_RULE` (!t. t IN f /\ ~(x' = t:real^3->bool) ==> DISJOINT x' t) /\
1370 (!t. t IN f ==> ~(x' = t:real^3->bool))==> (!t. t IN f ==> DISJOINT x' t)`)
1371 THEN ASM_REWRITE_TAC[DISJOINT]
1372 THEN SET_TAC[]);;
1373
1374 let BOUNDED_INTER_BALL=prove(`!x:real^3 V E.
1375 FAN(x,V,E) /\ conforming_fan (x,V,E)
1376 ==>(!f. f IN topological_component_yfan (x,V,E)
1377           ==> bounded (f INTER normball x r)) `,
1378 REPEAT STRIP_TAC
1379 THEN MATCH_MP_TAC BOUNDED_SUBSET
1380 THEN EXISTS_TAC`(normball x r):real^3->bool`
1381 THEN SIMP_TAC[GSYM ball_eq_normball;BOUNDED_BALL]
1382 THEN SET_TAC[]);;
1383
1384
1385 let OPEN_AFF_GT_3_1=prove(`!x v u w:real^3.
1386                             (~coplanar {x,v,u,w}) ==> open (aff_gt {x,v,u} {w})`,
1387
1388  GEOM_ORIGIN_TAC `x:real^3` THEN
1389  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
1390 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
1391 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`]
1392 THEN MP_TAC (REAL_ARITH`~((v cross u) dot w = &0)==> &0< (v cross u) dot w \/ &0< --((v cross u) dot w)`)
1393 THEN RESA_TAC
1394 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)
1395 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`;]
1396 THEN  REWRITE_TAC[REAL_ARITH`&0<A <=> A> &0`; OPEN_HALFSPACE_GT];
1397
1398 POP_ASSUM MP_TAC
1399 THEN REWRITE_TAC[GSYM DOT_LNEG]
1400 THEN ONCE_REWRITE_TAC[GSYM CROSS_SKEW]
1401 THEN ASM_TAC
1402 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
1403 THEN REPEAT DISCH_TAC
1404 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`;]
1405 THEN  REWRITE_TAC[ REAL_ARITH`&0<A <=> A> &0`;OPEN_HALFSPACE_GT;] ]);;
1406
1407
1408
1409
1410 let EQ_SET_THM=prove(`!f' f.{(f:A->B)  y| y IN f'}= {t|(?y. y IN f' /\ t = f y)}`,
1411 ONCE_REWRITE_TAC[EXTENSION] THEN REWRITE_TAC[IN_ELIM_THM]);;
1412
1413
1414 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.
1415 FAN(x,V,E)
1416 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1417 /\ fan80(x,V,E)
1418 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
1419 /\ y IN ds
1420 ==>  aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)} =
1421  aff_gt {x, pr2 y, pr3 y} {sigma_fan x V E  (pr2 y) (pr3 y)}`,
1422
1423 REPEAT STRIP_TAC
1424 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1425 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)))`]
1426 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`]
1427 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d1_fan(x,V,E)==> y IN d1_fan (x,V,E)`)
1428 THEN RESA_TAC
1429 THEN POP_ASSUM MP_TAC
1430 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1431 THEN STRIP_TAC
1432 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
1433 THEN ASM_SIMP_TAC[fully_surrounded_imp_aff_gt_3_1_of_edge_eq_fan]);;
1434
1435
1436
1437
1438
1439 let OPEN_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 V E f.
1440 FAN(x,V,E) /\ conforming_fan (x,V,E)/\ f IN topological_component_yfan (x,V,E)
1441           ==> open f`,
1442 REWRITE_TAC[conforming_fan;conforming_bijection_fan;conforming_half_space_fan]
1443 THEN REPEAT STRIP_TAC
1444 THEN POP_ASSUM MP_TAC
1445 THEN POP_ASSUM MP_TAC
1446 THEN POP_ASSUM MP_TAC
1447 THEN POP_ASSUM MP_TAC
1448 THEN POP_ASSUM MP_TAC
1449 THEN DISCH_THEN(LABEL_TAC"EM")
1450 THEN DISCH_THEN(LABEL_TAC"YEU")
1451 THEN REPEAT STRIP_TAC
1452 THEN REMOVE_THEN "EM" (fun th-> MRESAL1_TAC th`f:real^3->bool`[EXISTS_UNIQUE])
1453 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3->bool`)
1454 THEN MATCH_MP_TAC OPEN_INTERS
1455 THEN ASM_REWRITE_TAC[IN_ELIM_THM;]
1456 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`]
1457 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]
1458 THEN REPEAT STRIP_TAC
1459 THEN ASM_REWRITE_TAC[]
1460 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`]
1461 THEN MATCH_MP_TAC OPEN_AFF_GT_3_1
1462 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`]
1463 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
1464 THEN REWRITE_TAC[fan80]
1465 THEN DISCH_TAC
1466 THEN POP_ASSUM (fun th -> MRESA_TAC th [`(pr2 y):real^3`;`(pr3 y):real^3`] )
1467 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`]
1468 THEN POP_ASSUM MP_TAC
1469 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`]
1470 THEN DISCH_TAC
1471 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`]
1472 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`;]
1473 THEN POP_ASSUM MP_TAC
1474 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1475 THEN RESA_TAC
1476 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
1477 THEN ASM_REWRITE_TAC[]);;
1478
1479
1480 let OPEN_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL=prove(`!x:real^3 V E f.
1481 FAN(x,V,E) /\ conforming_fan (x,V,E)/\ f IN topological_component_yfan (x,V,E)
1482           ==> open (f INTER normball x r)`,
1483 REPEAT STRIP_TAC
1484 THEN MATCH_MP_TAC OPEN_INTER
1485 THEN ASM_SIMP_TAC[GSYM ball_eq_normball;OPEN_BALL;]
1486 THEN ASM_MESON_TAC[OPEN_TOPOLOGICAL_COMPONENT_YFAN]);;
1487
1488
1489 let MEASURABLE_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL=prove(`!x:real^3 V E r f.
1490 FAN(x,V,E) /\ conforming_fan (x,V,E) /\ f IN topological_component_yfan (x,V,E)
1491           ==> measurable (f INTER normball x r) `,
1492
1493 REPEAT STRIP_TAC
1494 THEN MATCH_MP_TAC MEASURABLE_OPEN
1495 THEN ASM_MESON_TAC[OPEN_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL;BOUNDED_INTER_BALL]);;
1496
1497
1498
1499 let RADIAL_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 V E r f.
1500 FAN(x,V,E) /\ r> &0 /\ conforming_fan (x,V,E) /\ f IN topological_component_yfan (x,V,E)
1501           ==> radial_norm r x (f INTER normball x r) `,
1502
1503 REWRITE_TAC[conforming_fan;conforming_bijection_fan;conforming_half_space_fan]
1504 THEN REPEAT STRIP_TAC
1505 THEN POP_ASSUM MP_TAC
1506 THEN POP_ASSUM MP_TAC
1507 THEN POP_ASSUM MP_TAC
1508 THEN POP_ASSUM MP_TAC
1509 THEN POP_ASSUM MP_TAC
1510 THEN DISCH_THEN(LABEL_TAC"EM")
1511 THEN DISCH_THEN(LABEL_TAC"YEU")
1512 THEN REPEAT STRIP_TAC
1513 THEN REMOVE_THEN "EM" (fun th-> MRESAL1_TAC th`f:real^3->bool`[EXISTS_UNIQUE])
1514 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3->bool`)
1515 THEN MATCH_MP_TAC RADIAL_INTERS
1516 THEN ASM_REWRITE_TAC[IN_ELIM_THM;]
1517 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`]
1518 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]
1519 THEN REPEAT STRIP_TAC
1520 THEN ASM_REWRITE_TAC[]
1521 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`]
1522 THEN MATCH_MP_TAC RADIAL_AFF_GT_3_1
1523 THEN ASM_REWRITE_TAC[]
1524 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`]
1525 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
1526 THEN REWRITE_TAC[fan80]
1527 THEN DISCH_TAC
1528 THEN POP_ASSUM (fun th -> MRESA_TAC th [`(pr2 y):real^3`;`(pr3 y):real^3`] )
1529 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`]
1530 THEN POP_ASSUM MP_TAC
1531 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`]
1532 THEN DISCH_TAC
1533 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`]
1534 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`;]
1535 THEN POP_ASSUM MP_TAC
1536 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
1537 THEN RESA_TAC
1538 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
1539 THEN ASM_REWRITE_TAC[]
1540 THEN ASM_MESON_TAC[notcoplanar_disjoints]);;
1541
1542
1543 let FINITE_TOPOLOGICAL_COMPONENT_YFAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
1544 FAN(x,V,E)
1545 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1546 /\ fan80(x,V,E)
1547 ==> FINITE (topological_component_yfan (x,V,E))`,
1548 REPEAT STRIP_TAC
1549 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V,E)`
1550 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;]
1551 THEN POP_ASSUM MP_TAC
1552 THEN SUBGOAL_THEN`{y | ?f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
1553           y = dartset_leads_into_fan x V E f} =topological_component_yfan (x:real^3,V,E)` (fun th-> REWRITE_TAC[th])
1554 THEN ONCE_REWRITE_TAC[EXTENSION]
1555 THEN REWRITE_TAC[IN_ELIM_THM]
1556 THEN GEN_TAC THEN EQ_TAC
1557 THENL[
1558 REPEAT STRIP_TAC
1559 THEN ASM_SIMP_TAC[dartset_leads_into_is_topological_component_yfan];
1560
1561 REPEAT STRIP_TAC
1562 THEN ONCE_REWRITE_TAC[SET_RULE`A=B<=> B=A`]
1563 THEN ASM_SIMP_TAC[version_JUTSTKG]]);;
1564
1565
1566 let SUM_SOL_TOPOLOGICAL_COMPONENT_YFAN_EQ_SOL_UNIONS=prove(`!x:real^3 V E.
1567 FAN(x,V,E) /\ conforming_fan (x,V,E)
1568 ==>  sol x (UNIONS (topological_component_yfan (x,V,E)))=sum (topological_component_yfan (x,V,E)) (\f. sol x f)`,
1569
1570 REPEAT STRIP_TAC
1571 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan]; THEN ASSUME_TAC th THEN STRIP_TAC)
1572 THEN MATCH_MP_TAC SOL_UNIONS
1573 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)`]
1574 THEN EXISTS_TAC`&1`
1575 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`]
1576 THEN MRESA_TAC MEASURABLE_TOPOLOGICAL_COMPONENT_YFAN_INTER_BALL[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`&1:real`]
1577 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
1578 THEN REPEAT STRIP_TAC
1579 THEN POP_ASSUM MP_TAC
1580 THEN ASM_REWRITE_TAC[DISJOINT;CONNECTED_COMPONENT_NONOVERLAP]);;
1581
1582 let UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN=prove(`!x:real^3 V E.
1583   UNIONS (topological_component_yfan (x,V,E))= yfan(x,V,E)`,
1584  ONCE_REWRITE_TAC[EXTENSION]
1585 THEN  REWRITE_TAC[UNIONS;topological_component_yfan;IN_ELIM_THM]
1586 THEN REPEAT STRIP_TAC
1587 THEN EQ_TAC
1588 THENL[
1589 REPEAT STRIP_TAC
1590 THEN POP_ASSUM MP_TAC
1591 THEN RESA_TAC
1592 THEN MATCH_MP_TAC(SET_RULE`!x B A. x IN B /\ B SUBSET A==> x IN A`)
1593 THEN EXISTS_TAC`connected_component (yfan (x:real^3,V:real^3->bool,E)) (y:real^3)`
1594 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_SUBSET];
1595 STRIP_TAC
1596 THEN EXISTS_TAC`connected_component (yfan (x,V:real^3->bool,E)) x'`
1597 THEN STRIP_TAC
1598 THENL[EXISTS_TAC`x':real^3`
1599 THEN ASM_REWRITE_TAC[];
1600 ASM_REWRITE_TAC[IN;CONNECTED_COMPONENT_REFL_EQ]]]);;
1601
1602
1603 let SUM_SOL_IN_FACE_SET_EQ_4PI=prove(`!x:real^3 V E.
1604 FAN(x,V,E) /\ conforming_fan (x,V,E)
1605 ==>  sum (face_set (hypermap1_of_fanx (x,V,E))) (\f. sol x (dartset_leads_into_fan x V E f))= &4 * pi`,
1606
1607 REPEAT STRIP_TAC
1608 THEN MRESA_TAC SUM_SOL_IN_TOPOLOGICAL_COMPONENET_EQ_IN_FACE_SET[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1609 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
1610 THEN MRESA_TAC SUM_SOL_TOPOLOGICAL_COMPONENT_YFAN_EQ_SOL_UNIONS[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1611 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN])
1612 THEN ASM_SIMP_TAC[SOLID_ANGLE_YFAN]);;
1613
1614
1615
1616
1617 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)`,
1618   GEN_TAC THEN REWRITE_TAC[face_set;node_set;edge_set]
1619 THEN REPEAT STRIP_TAC
1620 THEN MATCH_MP_TAC lemma_partition
1621 THEN REWRITE_TAC[hypermap_lemma]);;
1622
1623
1624
1625 let FINITE_NODE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
1626 ds IN node_set(hypermap1_of_fanx (x,V,E))
1627 ==> FINITE ds `,
1628 REWRITE_TAC[node_set;set_of_orbits;IN_ELIM_THM]
1629 THEN REPEAT STRIP_TAC
1630 THEN ASM_REWRITE_TAC[GSYM node;NODE_FINITE]);;
1631
1632
1633 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)/\
1634  f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1635 /\ y IN f /\ y1 IN f
1636 ==> pr2 y = pr2 y1 `,
1637
1638 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1639 THEN REPEAT STRIP_TAC
1640 THEN POP_ASSUM MP_TAC
1641 THEN POP_ASSUM MP_TAC
1642 THEN ASM_REWRITE_TAC[]
1643 THEN POP_ASSUM MP_TAC
1644 THEN POP_ASSUM MP_TAC
1645 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)))`]
1646 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1647 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
1648 THEN REPEAT STRIP_TAC
1649 THEN POP_ASSUM MP_TAC
1650 THEN POP_ASSUM MP_TAC
1651 THEN POP_ASSUM MP_TAC
1652 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)))`;]
1653 THEN REMOVE_ASSUM_TAC
1654 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
1655 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)))`;]
1656 THEN REMOVE_ASSUM_TAC
1657 THEN POP_ASSUM(fun th-> MRESA1_TAC th`x':real^3#real^3#real^3#real^3`)
1658 THEN FIND_ASSUM MP_TAC `x' IN d1_fan (x:real^3,V,E)`
1659 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1660 THEN RESA_TAC
1661 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`]
1662 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`]
1663 THEN REPEAT STRIP_TAC
1664 THEN ASM_REWRITE_TAC[pr2]);;
1665
1666
1667
1668
1669 let lemma_node_identity_fan=prove(`!x V E f y.  f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1670  /\ y IN f
1671 ==> f= node (hypermap1_of_fanx (x,V,E)) y`,
1672 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1673 THEN REPEAT STRIP_TAC
1674 THEN POP_ASSUM MP_TAC
1675 THEN ASM_REWRITE_TAC[node]
1676 THEN MESON_TAC[lemma_orbit_identity; hypermap_lemma]);;
1677
1678
1679 let node_subset_dart_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
1680 FAN(x,V,E)
1681 /\ ds IN node_set(hypermap1_of_fanx (x,V,E))
1682 ==> ds SUBSET d_fan (x,V,E)`,
1683 REPEAT GEN_TAC THEN STRIP_TAC
1684 THEN MRESA_TAC lemma_node_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
1685 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)))`]
1686 THEN MRESA_TAC lemma_node_subset[`hypermap1_of_fanx(x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`]);;
1687
1688
1689
1690
1691
1692
1693 let rep_node_set_fan=prove(`!x V E f y. FAN (x,V,E)
1694 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1695 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1696  /\ y IN f
1697 ==> 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))}`,
1698
1699  REPEAT STRIP_TAC
1700 THEN ASM_SIMP_TAC[lemma_node_identity_fan;]
1701 THEN REWRITE_TAC[node;orbit_map;EXTENSION;IN_ELIM_THM]
1702 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`]
1703 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1704 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)`)
1705 THEN RESA_TAC
1706 THEN POP_ASSUM (fun th->  MP_TAC th THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN ASSUME_TAC th)
1707 THEN STRIP_TAC
1708 THEN ASM_REWRITE_TAC[pr2;pr3]
1709 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)))`]
1710 THEN GEN_TAC
1711 THEN EQ_TAC
1712 THENL[
1713 STRIP_TAC
1714 THEN POP_ASSUM MP_TAC
1715 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)))`;]
1716 THEN REMOVE_ASSUM_TAC
1717 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
1718 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`]
1719 THEN RESA_TAC
1720 THEN EXISTS_TAC`n:num`
1721 THEN ASM_SIMP_TAC[];
1722
1723 REPEAT STRIP_TAC
1724 THEN EXISTS_TAC`i:num`
1725 THEN ASM_REWRITE_TAC[]
1726 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)))`;]
1727 THEN REMOVE_ASSUM_TAC
1728 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
1729 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`]
1730 THEN RESA_TAC]);;
1731
1732
1733 let properties_of_elements_in_node_fully_surroundedfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y.
1734 FAN(x,V,E)
1735 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
1736 /\ ds IN node_set(hypermap1_of_fanx (x,V,E))
1737 /\ y IN ds
1738 ==> {pr2 y, pr3 y} IN E`,
1739
1740 REPEAT GEN_TAC THEN STRIP_TAC
1741 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`]
1742 THEN MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d_fan (x,V,E)==> y IN d_fan (x,V,E)`)
1743 THEN RESA_TAC
1744 THEN POP_ASSUM MP_TAC
1745 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
1746 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
1747 THEN STRIP_TAC
1748 THEN ASM_REWRITE_TAC[pr2;pr3]);;
1749
1750
1751 let lemma_card_node_eq_set_of_orbits=prove(`!x V E f y. FAN (x,V,E)
1752 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
1753 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
1754  /\ y IN f
1755 ==> 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)
1756 )`,
1757
1758  REPEAT STRIP_TAC
1759 THEN MATCH_MP_TAC BIJECTIONS_CARD_EQ
1760 THEN EXISTS_TAC`pr3:real^3#real^3#real^3#real^3->real^3`
1761 THEN EXISTS_TAC`(\z:real^3. x,pr2 y, z, sigma_fan x V E (pr2 y) z)`
1762 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`]
1763 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)
1764 THEN RESA_TAC
1765 THEN REWRITE_TAC[set_of_orbits_points_fan;IN_ELIM_THM; pr3]
1766 THEN REWRITE_TAC[GSYM pr3]
1767 THEN STRIP_TAC
1768 THENL[
1769 STRIP_TAC THEN STRIP_TAC THEN ASM_REWRITE_TAC[ARITH_RULE`0<= i <=> i>=0`;pr3;power_map_points]
1770 THEN EXISTS_TAC`i:num`
1771 THEN ASM_REWRITE_TAC[];
1772
1773 STRIP_TAC THEN STRIP_TAC THEN ASM_REWRITE_TAC[ARITH_RULE`i>=0 <=> 0<=i`;power_map_points]
1774 THEN EXISTS_TAC`i:num`
1775 THEN ASM_REWRITE_TAC[]]);;
1776
1777
1778 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)) )
1779 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1) /\ y IN f
1780 ==>   CARD (set_of_edge (pr2 y) V E)=CARD f `,
1781
1782 REPEAT STRIP_TAC
1783 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`]
1784 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`]
1785 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`]
1786 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)`]);;
1787
1788
1789
1790 let mono_cyclic_power_sigma_fan=prove(`!x V E v u i j. FAN(x,V,E)/\ {v,u} IN E /\
1791            i IN 0..CARD (set_of_edge (v) V E) - 1 /\
1792            j IN 0..CARD (set_of_edge (v) V E) - 1 /\
1793            power_map_points sigma_fan x V E (v) (u) i =
1794            power_map_points sigma_fan x V E (v) (u) j
1795            ==> i = j`,
1796
1797 REWRITE_TAC[IN_NUMSEG_0]
1798 THEN REPEAT STRIP_TAC
1799 THEN DISJ_CASES_TAC(ARITH_RULE`i=j \/ i< j\/ j< i:num`)
1800 THENL[
1801 ASM_REWRITE_TAC[];
1802
1803 POP_ASSUM MP_TAC
1804 THEN STRIP_TAC
1805 THENL[
1806 MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1807 ` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;`j:num`;`i:num`]cyclic_power_sigma_fan)
1808 THEN RESA_TAC
1809 THEN ASM_TAC
1810 THEN ARITH_TAC;
1811
1812 MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1813 ` (E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;`i:num`;`j:num`]cyclic_power_sigma_fan)
1814 THEN RESA_TAC
1815 THEN ASM_TAC
1816 THEN ARITH_TAC]]);;
1817
1818
1819 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)
1820                   ==> sum (0..CARD (set_of_edge (pr2 y) V E) - 1) (\i. azim_i_fan x V E (pr2 y) (pr3 y) i) =
1821                       sum f (\y1. azim_fan x V E (pr2 y1) (pr3 y1))`,
1822
1823 REPEAT STRIP_TAC
1824 THEN POP_ASSUM MP_TAC
1825 THEN DISCH_THEN(LABEL_TAC "EM")
1826 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`]
1827 THEN SUBGOAL_THEN`(!x' y1.
1828            x' IN set_of_orbits_points_fan x V E (pr2 y) (pr3 y) /\
1829            y1 IN set_of_orbits_points_fan x V E (pr2 y) (pr3 y) /\
1830            x,pr2 y,x',sigma_fan x V E (pr2 y) x' =
1831            x,pr2 y,y1,sigma_fan x V E (pr2 y) y1
1832            ==> x' = y1)`ASSUME_TAC
1833 THENL[MESON_TAC[EQ_PAIR_4];
1834
1835  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]
1836 THEN POP_ASSUM MP_TAC
1837 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[set_of_orbits_points_fan]
1838 THEN REWRITE_TAC[IN_ELIM_THM;SET_RULE`{y' | ?x'. (?i. 0 <= i /\
1839                  x' = power_map_points sigma_fan x V E (pr2 y) (pr3 y) i) /\
1840             y' = x,pr2 y,x',sigma_fan x V E (pr2 y) x'} = {y' | ?i. 0 <= i /\
1841             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`]
1842 THEN RESA_TAC
1843 THEN REWRITE_TAC[o_DEF;pr2;pr3]
1844 THEN ASM_REWRITE_TAC[GSYM pr2; GSYM pr3;azim_fan;azim_i_fan]
1845 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`]
1846 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)`]
1847 THEN REMOVE_ASSUM_TAC
1848 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)
1849
1850 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)`]
1851 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1852 THEN MP_TAC(SPECL[`(x:real^3)`;` (V:real^3->bool)`;
1853 ` (E:(real^3->bool)->bool)`;` ((pr2 y):real^3)`;` ((pr3 y):real^3)`]mono_cyclic_power_sigma_fan
1854 )
1855 THEN RESA_TAC
1856 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]
1857 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;IN_NUMSEG_0])
1858 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)) `)
1859 THEN RESA_TAC
1860 THEN SUBGOAL_THEN`{y1 | ?i. i < CARD (set_of_edge (pr2 y) V E) /\
1861           y1 = power_map_points sigma_fan x V E (pr2 y) (pr3 y) i}
1862  =
1863  {power_map_points sigma_fan x V E (pr2 y) (pr3 y) i | i | i <
1864                                                            CARD
1865                                                            (set_of_edge
1866                                                             (pr2 y)
1867                                                             V
1868                                                            E)}
1869 `(fun th-> REWRITE_TAC[th])
1870 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]]);;
1871
1872 let exists_point_in_node=prove(`!x V E f. f IN node_set (hypermap1_of_fanx (x,V,E))
1873 ==> ?y. y IN f`,
1874 REWRITE_TAC[node_set;set_of_orbits;IN_ELIM_THM] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM]
1875 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
1876 THEN EXISTS_TAC`0`
1877 THEN REWRITE_TAC[POWER;ARITH_RULE`0>=0`;I_DEF]);;
1878
1879
1880 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)
1881                   ==>
1882                       sum f (\y. azim_fan x V E (pr2 y) (pr3 y))= &2 * pi`,
1883
1884
1885 REPEAT STRIP_TAC
1886 THEN POP_ASSUM MP_TAC
1887 THEN DISCH_THEN(LABEL_TAC"EM")
1888 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`;]
1889 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`]
1890 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
1891 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])
1892 THEN REWRITE_TAC[FUN_EQ_THM]
1893 THEN MATCH_MP_TAC SUM_AZIMS_EQ_2PI_FAN
1894 THEN ASM_REWRITE_TAC[]
1895 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`]
1896 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)`]
1897 THEN REMOVE_ASSUM_TAC
1898 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)
1899 THEN ASM_REWRITE_TAC[ARITH_RULE`1<A<=> A>1`]
1900 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})`)
1901 THENL[
1902 MRESA_TAC CARD_SING[`(pr3 y):real^3`; `(set_of_edge (pr2 y) V E):real^3->bool`]
1903 THEN FIND_ASSUM MP_TAC `CARD ((set_of_edge (pr2 y) V E):real^3->bool) >1`
1904 THEN POP_ASSUM MP_TAC
1905 THEN POP_ASSUM (fun TH-> REWRITE_TAC[TH])
1906 THEN ARITH_TAC;
1907 ASM_REWRITE_TAC[]]);;
1908
1909
1910
1911
1912 let SUM_CARD_FACE_NODE_DART_FAN=prove(`!x V E.
1913      FAN (x,V,E) /\ conforming_fan (x,V,E)
1914      ==> &2 * &(CARD (face_set (hypermap1_of_fanx (x,V,E))))  +
1915  &2 * &(CARD (node_set (hypermap1_of_fanx (x,V,E))))  -
1916  &(CARD (dart (hypermap1_of_fanx (x,V,E)))) = &4 `,
1917
1918 REPEAT STRIP_TAC
1919 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)`]
1920  THEN ASSUME_TAC th THEN STRIP_TAC)
1921 THEN MRESA_TAC SUM_SOL_IN_FACE_SET_EQ_4PI[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1922 THEN POP_ASSUM MP_TAC
1923 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))`]
1924 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V,E)`
1925 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))`]
1926 THEN MRESA_TAC SUM_CONST[`&2 * pi`;`face_set (hypermap1_of_fanx (x:real^3,V,E))`]
1927 THEN MRESA_TAC FINITE_FACE_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;]
1928 THEN SUBGOAL_THEN`(!t1 t2 y.
1929            t1 IN face_set (hypermap1_of_fanx (x,V,E)) /\
1930            t2 IN face_set (hypermap1_of_fanx (x,V,E)) /\
1931            ~(t1 = t2) /\
1932            y IN t1 /\
1933            y IN t2
1934            ==> azim_fan x V E (pr2 y) (pr3 y) - pi = &0)` ASSUME_TAC
1935 THENL[
1936  REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
1937 THEN REPEAT STRIP_TAC
1938 THEN POP_ASSUM MP_TAC
1939 THEN POP_ASSUM MP_TAC
1940 THEN POP_ASSUM MP_TAC
1941 THEN ASM_REWRITE_TAC[]
1942 THEN DISCH_THEN (LABEL_TAC "EM")
1943 THEN REPEAT STRIP_TAC
1944 THEN REMOVE_THEN "EM" MP_TAC
1945 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]
1946 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];
1947
1948
1949 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))`]
1950 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
1951 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))))`]
1952 THEN POP_ASSUM MP_TAC
1953 THEN MRESA1_TAC DART_EQ_UNIONS_FACE_SET_NODE_SET_EDGE_SET`(hypermap1_of_fanx (x:real^3,V:real^3->bool,E))`
1954 THEN REMOVE_ASSUM_TAC
1955 THEN POP_ASSUM (fun th-> MRESA_TAC SUM_CONST[`pi`;`(UNIONS (node_set (hypermap1_of_fanx (x:real^3,V,E))))`]
1956 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"))
1957 THEN RESA_TAC
1958 THEN SUBGOAL_THEN`(!t1 t2 y.
1959            t1 IN node_set (hypermap1_of_fanx (x,V,E)) /\
1960            t2 IN node_set (hypermap1_of_fanx (x,V,E)) /\
1961            ~(t1 = t2) /\
1962            y IN t1 /\
1963            y IN t2
1964            ==> azim_fan x V E (pr2 y) (pr3 y) = &0)` ASSUME_TAC
1965 THENL[
1966  REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
1967 THEN REPEAT STRIP_TAC
1968 THEN POP_ASSUM MP_TAC
1969 THEN POP_ASSUM MP_TAC
1970 THEN POP_ASSUM MP_TAC
1971 THEN ASM_REWRITE_TAC[]
1972 THEN DISCH_THEN (LABEL_TAC "EM")
1973 THEN REPEAT STRIP_TAC
1974 THEN REMOVE_THEN "EM" MP_TAC
1975 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]
1976 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];
1977
1978 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]
1979 THEN MRESA_TAC SUM_AZIM_FAN_OF_NODE_EQ_2PI_I_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
1980 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)))`]
1981 THEN MRESA_TAC SUM_CONST[`&2 * pi`;`node_set (hypermap1_of_fanx (x:real^3,V,E))`]
1982 THEN REMOVE_THEN "MA"(fun th-> REWRITE_TAC[SYM th])
1983 THEN RESA_TAC
1984 THEN ONCE_REWRITE_TAC[REAL_ARITH`A= A * &1`]
1985 THEN MP_TAC(REAL_ARITH`&0< pi==> ~(pi= &0)`)
1986 THEN ASM_REWRITE_TAC[PI_WORKS]
1987 THEN STRIP_TAC
1988 THEN MRESA1_TAC REAL_MUL_RINV`pi:real`
1989 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`;])
1990 THEN REAL_ARITH_TAC]]);;
1991
1992
1993
1994
1995
1996
1997
1998
1999 let nonconformin_fan_imp_n_fan_ge0=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2000 FAN(x,V,E)
2001  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2002 /\ fan80(x,V,E)
2003 /\ ~(conforming_fan (x,V,E))
2004 ==> N_FAN(x,V,E)> 0`,
2005
2006 REPEAT STRIP_TAC
2007 THEN POP_ASSUM MP_TAC
2008 THEN ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
2009 THEN ASM_SIMP_TAC[ARITH_RULE`~(A>0)<=> A=0`;DWFBRQY]);;
2010
2011
2012 let nonconformin_fan_imp_exist_face_gt_3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2013 FAN(x,V,E)
2014  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2015 /\ fan80(x,V,E)
2016 /\ ~(conforming_fan (x,V,E))
2017 ==> ?ds. ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3`,
2018
2019 REPEAT STRIP_TAC
2020 THEN MRESA_TAC nonconformin_fan_imp_n_fan_ge0[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
2021 THEN POP_ASSUM MP_TAC
2022 THEN REWRITE_TAC[N_FAN]
2023 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)`)
2024 THENL[
2025 ASM_SIMP_TAC[NSUM_EQ_0] THEN ARITH_TAC;
2026 POP_ASSUM MP_TAC
2027 THEN REWRITE_TAC[NOT_FORALL_THM;NOT_IMP;ARITH_RULE`~(A=0)<=> A>0`]
2028 THEN REPEAT STRIP_TAC
2029 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`]
2030 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
2031 THEN ASM_REWRITE_TAC[]
2032 THEN ASM_TAC
2033 THEN ARITH_TAC]);;
2034
2035
2036 let exists_face_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2037  ds IN face_set(hypermap1_of_fanx (x,V,E))
2038 ==> ?f1. f1 IN ds `,
2039
2040 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
2041 THEN REPEAT STRIP_TAC
2042 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
2043 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
2044 THEN EXISTS_TAC`0`
2045 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
2046
2047
2048 let exists_node_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2049  ds IN node_set(hypermap1_of_fanx (x,V,E))
2050 ==> ?f1. f1 IN ds `,
2051
2052 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
2053 THEN REPEAT STRIP_TAC
2054 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
2055 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM;]
2056 THEN EXISTS_TAC`0`
2057 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
2058
2059
2060
2061 let identity_face_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1.
2062  ds IN face_set(hypermap1_of_fanx (x,V,E))
2063 /\ f1 IN ds
2064 ==> ds= face (hypermap1_of_fanx (x,V,E))  f1 `,
2065 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
2066 THEN REPEAT STRIP_TAC
2067 THEN POP_ASSUM MP_TAC
2068 THEN ASM_SIMP_TAC[GSYM face;]
2069 THEN MESON_TAC[lemma_face_identity]);;
2070
2071
2072 let identity_node_in_face_set=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1.
2073  ds IN node_set(hypermap1_of_fanx (x,V,E))
2074 /\ f1 IN ds
2075 ==> ds= node (hypermap1_of_fanx (x,V,E))  f1 `,
2076 REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
2077 THEN REPEAT STRIP_TAC
2078 THEN POP_ASSUM MP_TAC
2079 THEN ASM_SIMP_TAC[GSYM node;]
2080 THEN MESON_TAC[lemma_node_identity]);;
2081
2082
2083
2084
2085 let condition_f1_eq_fan=prove(`!x V E v u w.
2086 FAN(x,V,E)
2087 /\ {u,w} IN E /\ {v,u} IN E
2088 /\ sigma_fan x V E u w = v
2089 ==> f1_fan x V E (x,v,u,sigma_fan x V E v u)=(x,u,w,v)`,
2090
2091 REPEAT STRIP_TAC
2092 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
2093 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2094 THEN ASM_SIMP_TAC[INVERSE1_SIGMA_FAN]);;
2095
2096
2097 let nonconformin_fan_imp_exist_3point_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
2098 FAN(x,V,E)
2099  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2100 /\ fan80(x,V,E)
2101 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2102 ==> ?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)
2103 /\ {pr2 f2, pr2 f3} IN E
2104 /\ ~({pr2 f3, pr2 f1 } IN E)
2105 /\ {pr2 f1, pr2 f2 } IN E
2106 /\ sigma_fan x V E (pr2 f2) (pr2 f3)=pr2 f1
2107 /\ pr2 f3= pr3 f2
2108 /\ pr2 f2= pr3 f1`,
2109
2110 REPEAT STRIP_TAC
2111 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`]
2112 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)))`]
2113 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2114 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`]
2115 THEN ABBREV_TAC`f2=f1_fan x V E (f1:real^3#real^3#real^3#real^3)`
2116 THEN ABBREV_TAC`f3=f1_fan x V E (f2:real^3#real^3#real^3#real^3)`
2117 THEN ABBREV_TAC`f4=f1_fan x V E (f3:real^3#real^3#real^3#real^3)`
2118 THEN POP_ASSUM MP_TAC
2119 THEN DISCH_THEN(LABEL_TAC"VUT")
2120 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`]
2121 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`]
2122 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`]
2123
2124 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)`)
2125 THEN RESA_TAC
2126 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
2127 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)`)
2128 THEN DISJ_CASES_TAC(SET_RULE`f3=f1 \/ ~(f3=f1:real^3#real^3#real^3#real^3)`)
2129 THENL(*1*)[
2130 MP_TAC(SET_RULE`f1=f3:real^3#real^3#real^3#real^3==> pr2 f1= pr2 f3`)
2131 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2132 THEN REWRITE_TAC[]
2133 THEN STRIP_TAC
2134 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)`]
2135 THEN REMOVE_ASSUM_TAC
2136 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)`]
2137 THEN POP_ASSUM MP_TAC
2138 THEN POP_ASSUM MP_TAC
2139 THEN RESA_TAC THEN RESA_TAC
2140 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)`;
2141 ` pr2 (f2:real^3#real^3#real^3#real^3)`]
2142 THEN POP_ASSUM MP_TAC
2143 THEN POP_ASSUM MP_TAC
2144 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2145 THEN RESA_TAC THEN RESA_TAC
2146 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})`)
2147 THENL[
2148  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`]
2149 THEN POP_ASSUM MP_TAC
2150 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
2151 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)`
2152 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (f2:real^3#real^3#real^3#real^3)) IN V`
2153 THEN ARITH_TAC;
2154
2155 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)`;
2156 ` pr2 (f3:real^3#real^3#real^3#real^3)`]
2157 THEN ASM_TAC THEN SET_TAC[]];(*1*)
2158
2159
2160
2161
2162 DISJ_CASES_TAC(SET_RULE`f4=f1 \/ ~(f4=f1:real^3#real^3#real^3#real^3)`)
2163 THENL(*2*)[
2164 SUBGOAL_THEN(`((f1_fan (x:real^3) V E) POWER 3) f1=f1`) ASSUME_TAC
2165 THENL(*3*)[
2166 ASM_SIMP_TAC[ARITH_RULE`3= SUC(2)/\ 2= SUC(1) /\ 1= SUC(0)`;POWER;I_DEF;o_DEF];(*3*)
2167
2168  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
2169 THENL(*4*)[
2170 ASM_REWRITE_TAC[face;orbit_map;EXTENSION;IN_ELIM_THM]
2171 THEN GEN_TAC
2172 THEN EQ_TAC
2173 THEN STRIP_TAC
2174 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]
2175 THEN POP_ASSUM(fun th-> MRESA1_TAC th `f1:real^3#real^3#real^3#real^3`)
2176 THEN EXISTS_TAC`n:num`
2177 THEN ASM_REWRITE_TAC[];(*4*)
2178
2179 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`][]
2180 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)`]
2181 THEN POP_ASSUM MP_TAC
2182 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM th])
2183 THEN ASM_TAC THEN ARITH_TAC]];
2184 POP_ASSUM MP_TAC
2185 THEN DISCH_THEN(LABEL_TAC"EMYEU")
2186 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
2187 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
2188 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
2189 THEN ASM_REWRITE_TAC[]
2190 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)`]
2191 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)`]
2192 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)]
2193 THEN POP_ASSUM MP_TAC
2194 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)]
2195 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th)
2196 THEN POP_ASSUM MP_TAC
2197 THEN POP_ASSUM MP_TAC
2198 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th) THEN ASSUME_TAC th)
2199 THEN STRIP_TAC
2200 THEN STRIP_TAC
2201 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[th] THEN MP_TAC th)
2202 THEN REPEAT STRIP_TAC THEN ASSUME_TAC (SYM th))
2203 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`]
2204 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2205 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2206 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
2207 THEN REPEAT STRIP_TAC
2208 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`;]
2209 THEN REMOVE_THEN "EMYEU" MP_TAC
2210 THEN REMOVE_THEN"VUT"(fun th-> REWRITE_TAC[SYM th])
2211 THEN ASM_TAC
2212 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
2213 THEN REPEAT (ASM_REWRITE_TAC[pr2;pr3] THEN STRIP_TAC THEN ASM_REWRITE_TAC[])
2214 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
2215 THEN POP_ASSUM MP_TAC
2216 THEN REMOVE_ASSUM_TAC
2217 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
2218 THEN STRIP_TAC
2219 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`;]]]);;
2220
2221
2222
2223
2224
2225
2226 let condition_aff_gt_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
2227 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E
2228 /\ sigma_fan x V E u w = v
2229  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2230 /\ fan80(x,V,E)
2231 /\ ~({w,v} IN E)
2232 ==> aff_gt {x} {v,w} SUBSET yfan (x,V,E)`,
2233
2234 REPEAT STRIP_TAC
2235 THEN REWRITE_TAC[yfan;SET_RULE`A SUBSET (:real^3) DIFF B<=> A INTER B= {}`]
2236 THEN POP_ASSUM MP_TAC
2237 THEN ONCE_REWRITE_TAC[GSYM CONTRAPOS_THM]
2238 THEN REWRITE_TAC[xfan;IN;SET_RULE`{A,B}={B,A}`]
2239 THEN STRIP_TAC
2240 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]);;
2241
2242
2243
2244
2245
2246
2247
2248 let segment_subset_aff_gt_union=prove(`!x:real^3 y z v u w.
2249 ~coplanar{x,v,u,w}
2250 /\ y IN aff_gt {x} {v, u, w}
2251 /\ z IN aff_gt {x} {w, v}
2252 ==> segment[y,z] SUBSET aff_gt {x} {w, v} UNION aff_gt {x} {v, u, w}`,
2253  REWRITE_TAC[segment;UNION;SUBSET;IN_ELIM_THM]
2254 THEN REPEAT STRIP_TAC
2255 THEN POP_ASSUM MP_TAC
2256 THEN MP_TAC(REAL_ARITH`u'<= &1==> u'= &1 \/ u'< &1`)
2257 THEN RESA_TAC
2258 THENL[
2259 REWRITE_TAC[REAL_ARITH`&1- &1= &0`]
2260 THEN REDUCE_VECTOR_TAC
2261 THEN RESA_TAC;
2262
2263 STRIP_TAC
2264 THEN MATCH_MP_TAC(SET_RULE`B==> A\/ B`)
2265 THEN ASM_TAC
2266 THEN DISCH_TAC
2267 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2268 THEN MRESA_TAC AFF_GT_1_2[`x:real^3`;`w:real^3`;`v:real^3`;]
2269 THEN MRESA_TAC AFF_GT_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2270 THEN REWRITE_TAC[IN_ELIM_THM]
2271 THEN REPEAT STRIP_TAC
2272 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - u') % (t1 % x + t2 % v + t3 % u + t4 % w) +
2273      u' % (t1' % x + t2' % w + t3' % v)
2274 =((&1 - u') *t1 + u' *t1') % x + ((&1 - u')*t2+ u' * t3') % v + ((&1 - u')*t3) % u + ((&1 - u')*t4+ u' * t2') % w`]
2275 THEN EXISTS_TAC`(&1 - u') * t1 + u' * t1':real`
2276 THEN EXISTS_TAC`(&1 - u') * t2 + u' * t3':real`
2277 THEN EXISTS_TAC`(&1 - u') * t3:real`
2278 THEN EXISTS_TAC`(&1 - u') * t4 + u' * t2':real`
2279 THEN ASM_REWRITE_TAC[REAL_ARITH` ((&1 - u') * t1 + u' * t1') +
2280  ((&1 - u') * t2 + u' * t3') +
2281  (&1 - u') * t3 +
2282  (&1 - u') * t4 +
2283  u' * t2'
2284 =  (&1 - u') * (t1 + t2+ t3 + t4)+ u'*(t1' +t2'+t3')
2285 `;REAL_ARITH`(&1 - u') * &1 + u' * &1 = &1`]
2286 THEN STRIP_TAC
2287 THENL[
2288 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0<=B ==> &0< A+B`)
2289 THEN STRIP_TAC
2290 THENL[MATCH_MP_TAC REAL_LT_MUL
2291 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2292
2293 MATCH_MP_TAC REAL_LE_MUL
2294 THEN ASM_TAC
2295 THEN REAL_ARITH_TAC];
2296 STRIP_TAC
2297 THENL[
2298 MATCH_MP_TAC REAL_LT_MUL
2299 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2300
2301 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0<=B ==> &0< A+B`)
2302 THEN STRIP_TAC
2303 THENL[
2304 MATCH_MP_TAC REAL_LT_MUL
2305 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- u'<=> u'< &1`];
2306 MATCH_MP_TAC REAL_LE_MUL
2307 THEN ASM_TAC
2308 THEN REAL_ARITH_TAC]]]]);;
2309
2310
2311 let SEGMENT_CONNECTED=prove(`!a b. connected(segment [a,b])`,
2312
2313 REPEAT GEN_TAC THEN
2314 MATCH_MP_TAC CONVEX_CONNECTED THEN
2315 REWRITE_TAC[SEGMENT_CONVEX_HULL;CONVEX_CONVEX_HULL]);;
2316
2317
2318 let AFF_GT_SUBSET_DART_LEADS_INTO_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
2319 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2320 /\ sigma_fan x V E u w = v
2321  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2322 /\ fan80(x,V,E)
2323 ==> aff_gt {x} {w,v} SUBSET dart_leads_into x V E u w`,
2324 REPEAT STRIP_TAC
2325 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2326 THEN REWRITE_TAC[fan80]
2327 THEN DISCH_TAC
2328 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"))
2329 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`]
2330 THEN MRESA_TAC notcoplanar_disjoints[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2331 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`;]
2332 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`]
2333 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`]
2334 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`]
2335 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
2336 ==> y IN dart_leads_into x V E u w`)
2337 THEN RESA_TAC
2338 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`]
2339 THEN MP_TAC(SET_RULE`dart_leads_into x V E u w SUBSET yfan (x,V,E)
2340 /\ aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w
2341 ==> aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)`)
2342 THEN RESA_TAC
2343 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`]
2344 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`w:real^3`;`v:real^3`]
2345 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`;]
2346 THEN POP_ASSUM MP_TAC
2347 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
2348 THEN STRIP_TAC
2349 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`;]
2350 THEN MP_TAC(SET_RULE`
2351 segment [y,y'] SUBSET aff_gt {x} {w, v} UNION aff_gt {x} {v, u, w}
2352 /\ aff_gt {x} {w, v} SUBSET yfan (x,V:real^3->bool,E)
2353 /\ aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)
2354 ==> segment [y,y':real^3] SUBSET yfan(x,V,E)
2355 `)
2356 THEN RESA_TAC
2357 THEN MRESA_TAC CONVEX_AFF_GT[`{x:real^3}`;`{ w,v:real^3}`]
2358 THEN MRESA_TAC CONVEX_CONNECTED[`aff_gt {x} {w,v}:real^3->bool`]
2359 THEN MRESA_TAC SEGMENT_CONNECTED[`y:real^3`;`y':real^3`]
2360 THEN MRESA_TAC ENDS_IN_SEGMENT[`y:real^3`;`y':real^3`]
2361 THEN MRESA1_TAC CONNECTED_IFF_CONNECTED_COMPONENT`segment[y,y':real^3]`
2362 THEN POP_ASSUM (fun th-> MRESA_TAC th [`y:real^3`;`y':real^3`])
2363 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`]
2364 THEN MRESAL_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3,V:real^3->bool,E)`;`y:real^3`;`y':real^3`][IN]
2365 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
2366 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`]);;
2367
2368
2369
2370
2371 let STEP2_REDUCE_FAN=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds f1 f2 f3 v u w.
2372 FAN(x,V,E)
2373  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2374 /\ fan80(x,V,E)
2375 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2376 /\ {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)
2377 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2378 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2379 /\ sigma_fan x V E u w = v
2380 ==> aff_gt {x} {v,w} SUBSET dartset_leads_into_fan x V E ds`,
2381
2382 REPEAT STRIP_TAC
2383 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)))`]
2384 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2385 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`]
2386 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`)
2387 THEN RESA_TAC
2388 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)`]
2389 THEN REMOVE_ASSUM_TAC
2390 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`]
2391 THEN MRESA_TAC UNIQUE_DARTSET_LEADS_INTO1_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
2392 `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`]
2393 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2394 THEN ASM_REWRITE_TAC[]);;
2395
2396
2397 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.
2398 FAN(x,V,E)
2399  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2400 /\ fan80(x,V,E)
2401 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2402 /\ {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)
2403 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2404 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2405 /\ sigma_fan x V E u w = v
2406 /\ E UNION {{v,w}}= E1
2407 ==> FAN (x,V,E1)`,
2408
2409 REPEAT STRIP_TAC
2410 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
2411 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
2412 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2413 ` (w:real^3)`]
2414 THEN POP_ASSUM MP_TAC
2415 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2416 THEN ASM_REWRITE_TAC[]
2417 THEN STRIP_TAC
2418 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2419 ` (v:real^3)`]
2420 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2421 THEN REWRITE_TAC[fan80]
2422 THEN DISCH_TAC
2423 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
2424 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`]
2425 THEN MRESA_TAC DWWUTKW[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;`v:real^3`;`w:real^3`;
2426 `ds:real^3#real^3#real^3#real^3->bool`;]);;
2427
2428
2429
2430
2431
2432
2433 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)`,
2434 ONCE_REWRITE_TAC[EXTENSION]
2435 THEN REWRITE_TAC[set_of_edge;UNION;IN_ELIM_THM;SET_RULE`(A\/B)/\C<=>(A/\C)\/ (B/\C)`;]
2436 THEN REPEAT STRIP_TAC
2437 THEN EQ_TAC
2438 THEN SET_TAC[]);;
2439
2440
2441
2442
2443
2444 let add_edge_imp_card_set_edge_ge1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1.
2445 FAN(x,V,E)
2446  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2447 /\ E1=E UNION {{v,w}}
2448 ==>
2449 (!v. v IN V==>CARD (set_of_edge v V E1) > 1)`,
2450 REWRITE_TAC[FAN;fan1]
2451 THEN REPEAT STRIP_TAC
2452 THEN MRESA_TAC remark_finite_fan1[`v':real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
2453 THEN POP_ASSUM MP_TAC
2454 THEN ASM_REWRITE_TAC[SET_OF_EDGE_UNION_GRAPH;]
2455 THEN STRIP_TAC
2456 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`]
2457 THEN POP_ASSUM MP_TAC
2458 THEN FIRST_ASSUM (MP_TAC o SPEC `v':real^3`)
2459 THEN REMOVE_ASSUM_TAC
2460 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2461 THEN ARITH_TAC);;
2462
2463
2464
2465
2466 let pr23=new_definition`pr23=(\(x,y,z,t). (y,z))`
2467 ;;
2468
2469
2470 let PR23_OF_D1_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool.
2471 IMAGE pr23 (d1_fan(x,V,E))={ (v,w) | {v,w} IN E}`,
2472 REWRITE_TAC[IMAGE;d1_fan;IN_ELIM_THM;EXTENSION;]
2473 THEN REPEAT STRIP_TAC
2474 THEN EQ_TAC
2475 THENL[
2476 REPEAT STRIP_TAC
2477 THEN POP_ASSUM MP_TAC
2478 THEN ASM_REWRITE_TAC[pr23;]
2479 THEN RESA_TAC
2480 THEN EXISTS_TAC `v:real^3`
2481 THEN EXISTS_TAC `w:real^3`
2482 THEN ASM_REWRITE_TAC[];
2483
2484 REPEAT STRIP_TAC
2485 THEN EXISTS_TAC`x,v,w,sigma_fan x V E v w:real^3`
2486 THEN ASM_REWRITE_TAC[pr23]
2487 THEN EXISTS_TAC `x:real^3`
2488 THEN EXISTS_TAC `v:real^3`
2489 THEN EXISTS_TAC `w:real^3`
2490 THEN EXISTS_TAC `sigma_fan x V E v w:real^3`
2491 THEN ASM_REWRITE_TAC[]]);;
2492
2493
2494
2495
2496 let PR23_OF_D20_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool.
2497 IMAGE pr23 (d20_fan(x,V,E))={ (v,v) | v IN V/\ set_of_edge v V E={}}`,
2498
2499 REWRITE_TAC[IMAGE;d20_fan;IN_ELIM_THM;EXTENSION;]
2500 THEN REPEAT STRIP_TAC
2501 THEN EQ_TAC
2502 THENL[
2503 REPEAT STRIP_TAC
2504 THEN POP_ASSUM MP_TAC
2505 THEN ASM_REWRITE_TAC[pr23;]
2506 THEN RESA_TAC
2507 THEN EXISTS_TAC `v:real^3`
2508 THEN ASM_REWRITE_TAC[IN];
2509
2510 REPEAT STRIP_TAC
2511 THEN EXISTS_TAC`(x:real^3),v,v,(v:real^3)`
2512 THEN ASM_REWRITE_TAC[pr23]
2513 THEN EXISTS_TAC `x:real^3`
2514 THEN EXISTS_TAC `v:real^3`
2515 THEN ASM_REWRITE_TAC[IN]
2516 THEN ASM_TAC
2517 THEN SIMP_TAC[IN]]);;
2518
2519
2520
2521 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}}`,
2522
2523 ONCE_REWRITE_TAC[EXTENSION]
2524 THEN REWRITE_TAC[UNION;IN_ELIM_THM;IN_SING;SET_RULE`(A\/B)/\C<=>(A/\C)\/ (B/\C)`;]
2525 THEN REPEAT STRIP_TAC
2526 THEN EQ_TAC
2527 THEN SET_TAC[]);;
2528
2529 let expand_set_edge_fan=prove(`!v w.{(v',w')| {v',w'}={v,w}}={(v,w), (w,v)}`,
2530
2531 REWRITE_TAC[SET_RULE`{v',w'}={v,w}<=> (v=v' /\ w= w') \/ v= w' /\ w=v'`]
2532 THEN SET_TAC[]);;
2533
2534
2535
2536
2537
2538
2539
2540 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.
2541 FAN(x,V,E)
2542  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2543 /\ fan80(x,V,E)
2544 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
2545 /\ {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)
2546 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
2547 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2548 /\ sigma_fan x V E u w = v
2549 /\ ~(v=w)
2550 /\ E UNION {{v,w}}=E1
2551 ==>
2552 IMAGE pr23 (dart (hypermap1_of_fanx (x,V,E1)))
2553
2554 = (IMAGE pr23 (dart (hypermap1_of_fanx (x,V,E)))) UNION {(v,w),(w,v)}`,
2555
2556
2557 REPEAT STRIP_TAC
2558 THEN POP_ASSUM MP_TAC
2559 THEN DISCH_THEN(LABEL_TAC"YEU")
2560 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
2561 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
2562 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)`;]
2563 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)))`]
2564 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)))`]
2565 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2566 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
2567
2568 THEN ASM_REWRITE_TAC[d_fan;IMAGE_UNION;PR23_OF_D20_FAN;PR23_OF_D1_FAN]
2569 THEN REMOVE_THEN"YEU"(fun th-> REWRITE_TAC[SYM th;add_edge_graph;expand_set_edge_fan;SET_OF_EDGE_UNION_GRAPH]));;
2570
2571
2572
2573 let pr23_inj_in_dfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
2574 FAN(x,V,E)
2575 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
2576 ==> (!y y1.
2577  y IN d_fan(x,V,E)
2578 /\ y1 IN d_fan(x,V,E)
2579 /\ pr23 y= pr23 y1
2580 ==> y=y1)`,
2581 REPEAT STRIP_TAC
2582 THEN POP_ASSUM MP_TAC
2583 THEN POP_ASSUM MP_TAC
2584 THEN POP_ASSUM MP_TAC
2585 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
2586 THEN REWRITE_TAC[PAIR_EQ;IN_ELIM_THM;d1_fan]
2587 THEN STRIP_TAC
2588 THEN STRIP_TAC
2589 THEN ASM_REWRITE_TAC[pr23;PAIR_EQ]
2590 THEN STRIP_TAC
2591 THEN ASM_REWRITE_TAC[]);;
2592
2593
2594
2595
2596
2597 let condition_set_of_edge_eq_empty=prove(`!v:A V E1 E2.
2598 ~(v IN UNIONS E2)
2599 ==> set_of_edge v V E2= {}`,
2600 REWRITE_TAC[set_of_edge;SET_RULE`A={}<=> !s. ~(s IN A)`;IN_ELIM_THM;DE_MORGAN_THM;]
2601 THEN REPEAT STRIP_TAC
2602 THEN MATCH_MP_TAC(SET_RULE`A==> A\/B`)
2603 THEN POP_ASSUM MP_TAC
2604 THEN MATCH_MP_TAC MONO_NOT
2605 THEN STRIP_TAC
2606 THEN REWRITE_TAC[UNIONS;IN_ELIM_THM]
2607 THEN EXISTS_TAC`{v:A,s}`
2608 THEN ASM_REWRITE_TAC[]
2609 THEN SET_TAC[]);;
2610
2611
2612
2613
2614 let SET_OF_EDGE_INVARIANT=prove(`!v V E1 E2.
2615 ~(v IN UNIONS E2)
2616 ==> set_of_edge v V (E1 UNION E2)= (set_of_edge v V E1)`,
2617
2618 SIMP_TAC[SET_OF_EDGE_UNION_GRAPH;condition_set_of_edge_eq_empty;SET_RULE`A UNION {}=A`]);;
2619
2620
2621 let expand_unions=prove(`!v w:A. UNIONS {{v,w}}= {v,w}`,
2622 SIMP_TAC[UNIONS;IN_SING;]
2623 THEN ONCE_REWRITE_TAC[EXTENSION;]
2624 THEN SIMP_TAC[IN_ELIM_THM]
2625 THEN REPEAT STRIP_TAC
2626 THEN EQ_TAC
2627 THENL[SET_TAC[];
2628
2629 STRIP_TAC
2630 THEN EXISTS_TAC`{v,w:A}`
2631 THEN ASM_REWRITE_TAC[]]);;
2632
2633
2634 let SIGMA_FAN_OF_FANADD1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v w.
2635 FAN(x,V,E)/\ FAN(x,V,E1)
2636  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2637  /\ ~({v,w} IN E)
2638 /\ E UNION {{v,w}}=E1
2639 ==> (!v1 w1. {v1,w1} IN E /\ ~(v1 IN {v,w})==> sigma_fan x V E1 v1 w1 = sigma_fan x V E v1 w1)
2640 `,
2641
2642 REPEAT STRIP_TAC
2643 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2644 `(v1:real^3)`]
2645 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)`;]
2646 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v1:real^3`)
2647 THEN POP_ASSUM MP_TAC
2648 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v1 V E1 = {w1:real^3})\/ ~(set_of_edge v1 V E1 = {w1})`)
2649 THENL[
2650 ASM_REWRITE_TAC[]
2651 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2652                  IN_INSERT; NOT_IN_EMPTY]
2653 THEN ARITH_TAC;
2654
2655
2656 POP_ASSUM MP_TAC
2657 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]
2658 THEN STRIP_TAC
2659 THEN STRIP_TAC
2660 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`]
2661 THEN POP_ASSUM MATCH_MP_TAC
2662 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`w1:real^3`]
2663 ]);;
2664
2665
2666
2667
2668
2669
2670
2671 let add_edge_graph=prove(`!v w E E1.
2672 E UNION {{v,w}}=E1
2673 ==> {w,v} IN E1/\ {v,w}IN E1`,
2674
2675 REPEAT STRIP_TAC
2676 THENL
2677 [ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2678 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2679 THEN SET_TAC[];
2680 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
2681 THEN SET_TAC[]]);;
2682
2683 let not_in_set_of_edge=prove(`
2684 !v w V E. ~({w,v} IN E)
2685 ==> ~(w IN set_of_edge v V E)`,
2686 REPEAT GEN_TAC THEN STRIP_TAC
2687 THEN POP_ASSUM MP_TAC
2688 THEN MATCH_MP_TAC MONO_NOT
2689 THEN SIMP_TAC[set_of_edge;IN_ELIM_THM;SET_RULE`{A,B}={B,A}`]);;
2690
2691
2692
2693 let set_of_only_edge=prove(`!v w V. w IN V ==> set_of_edge v V {{v, w}}={w}`,
2694
2695 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]
2696 THEN REPEAT STRIP_TAC
2697 THEN EQ_TAC
2698 THEN STRIP_TAC
2699 THEN ASM_REWRITE_TAC[]);;
2700
2701
2702 let set_of_only_edge1=prove(`!v w V. v IN V ==> set_of_edge w V {{v, w}}={v}`,
2703
2704 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]
2705 THEN REPEAT STRIP_TAC
2706 THEN EQ_TAC
2707 THEN STRIP_TAC
2708 THEN ASM_REWRITE_TAC[]);;
2709
2710
2711
2712
2713
2714
2715 let SIGMA_FAN_OF_FANADD_AT_POINT1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
2716 FAN(x,V,E)/\ FAN(x,V,E1)
2717 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2718 /\ sigma_fan x V E u w = v
2719 /\ fan80(x,V,E)
2720  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2721 /\ E UNION {{v,w}}=E1
2722 ==> sigma_fan x V E1 v w = sigma_fan x V E v u`,
2723
2724
2725 REPEAT STRIP_TAC
2726 THEN POP_ASSUM MP_TAC
2727 THEN POP_ASSUM MP_TAC
2728 THEN DISCH_THEN(LABEL_TAC"YEU")
2729 THEN DISCH_THEN(LABEL_TAC"EM")
2730 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2731 `(v:real^3)`]
2732 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)`;]
2733 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
2734 THEN POP_ASSUM MP_TAC
2735 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {w:real^3})\/ ~(set_of_edge v V E1 = {w})`)
2736 THENL[
2737 ASM_REWRITE_TAC[]
2738 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2739                  IN_INSERT; NOT_IN_EMPTY]
2740 THEN ARITH_TAC;
2741
2742 STRIP_TAC
2743 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2744 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
2745 `(v:real^3)`]
2746 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`]
2747 THEN POP_ASSUM MATCH_MP_TAC
2748 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
2749 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
2750 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/ ~(set_of_edge v V E = {u})`)
2751 THENL[
2752 ASM_REWRITE_TAC[]
2753 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2754                  IN_INSERT; NOT_IN_EMPTY]
2755 THEN ARITH_TAC;
2756 STRIP_TAC
2757 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
2758 THEN POP_ASSUM MP_TAC
2759 THEN DISCH_THEN(LABEL_TAC"QUY")
2760 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
2761 THEN MRESA_TAC not_in_set_of_edge[`v:real^3`;`w:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;]
2762 THEN STRIP_TAC
2763 THENL[
2764 MATCH_MP_TAC (SET_RULE`!x y A. x IN A /\ ~(y IN A)==> ~(x=y)`)
2765 THEN EXISTS_TAC`set_of_edge (v:real^3) V E`
2766 THEN ASM_REWRITE_TAC[];
2767
2768 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2769 `(w:real^3)`]
2770 THEN POP_ASSUM MP_TAC
2771 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
2772 THEN ASM_REWRITE_TAC[]
2773 THEN STRIP_TAC
2774 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
2775 THEN REPEAT STRIP_TAC
2776 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`]
2777 THEN ABBREV_TAC`u1=sigma_fan x V E v u`
2778 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
2779 `(v:real^3)`]
2780 THEN POP_ASSUM MP_TAC
2781 THEN RESA_TAC
2782 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`u1:real^3`]
2783 THEN MATCH_MP_TAC(REAL_ARITH`!A B C D. A=B+C /\ A<= B+D ==> C<= D`)
2784 THEN EXISTS_TAC`azim x v u (u1:real^3)`
2785 THEN EXISTS_TAC`azim x v u (w:real^3)`
2786 THEN ASM_REWRITE_TAC[]
2787 THEN FIRST_X_ASSUM (fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"NHO"))
2788 THEN DISJ_CASES_TAC(SET_RULE`(w1=u:real^3)\/ ~(w1=u)`)
2789 THENL[
2790 ASM_REWRITE_TAC[]
2791 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2792 THEN REWRITE_TAC[fan80]
2793 THEN DISCH_TAC
2794 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"))
2795 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`]
2796 THEN MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][DE_MORGAN_THM;]
2797 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][REAL_ARITH`A+B-A=B`;]
2798 THEN MATCH_MP_TAC (REAL_ARITH`A<B==> A<=B`)
2799 THEN SIMP_TAC[azim];
2800 REMOVE_THEN"QUY" (fun th-> MRESA1_TAC th`w1:real^3`)
2801 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
2802 /\ &0<= azim x v w u1==> azim x v u w <= azim x v u w1`)
2803 THEN RESA_TAC
2804 THEN POP_ASSUM MP_TAC
2805 THEN SIMP_TAC[azim]
2806 THEN STRIP_TAC
2807 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2808 `(v:real^3)`]
2809 THEN POP_ASSUM MP_TAC
2810 THEN RESA_TAC
2811 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
2812 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])]]]]);;
2813
2814
2815
2816
2817 let SIGMA_FAN_OF_FANADD_AT_POINT2=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
2818 FAN(x,V,E)/\ FAN(x,V,E1)
2819 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
2820 /\ sigma_fan x V E u w = v
2821 /\ fan80(x,V,E)
2822  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2823 /\ E UNION {{v,w}}=E1
2824 ==> sigma_fan x V E1 v u = w`,
2825
2826 REPEAT STRIP_TAC
2827 THEN POP_ASSUM MP_TAC
2828 THEN POP_ASSUM MP_TAC
2829 THEN DISCH_THEN(LABEL_TAC"YEU")
2830 THEN DISCH_THEN(LABEL_TAC"EM")
2831 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
2832 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2833 `(v:real^3)`]
2834 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2835 `(u:real^3)`]
2836 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
2837 `(v:real^3)`]
2838 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)`;]
2839 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
2840 THEN POP_ASSUM MP_TAC
2841 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {u:real^3})\/ ~(set_of_edge v V E1 = {u})`)
2842 THENL[
2843
2844 ASM_REWRITE_TAC[]
2845 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2846                  IN_INSERT; NOT_IN_EMPTY]
2847 THEN ARITH_TAC;
2848 STRIP_TAC
2849 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`]
2850 THEN POP_ASSUM MATCH_MP_TAC
2851 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
2852 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
2853 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
2854 `(w:real^3)`]
2855 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
2856 THEN REPEAT STRIP_TAC
2857 THENL[
2858 REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
2859 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/ ~(set_of_edge v V E = {u})`)
2860 THENL[
2861 ASM_REWRITE_TAC[]
2862 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
2863                  IN_INSERT; NOT_IN_EMPTY]
2864 THEN ARITH_TAC;
2865 STRIP_TAC
2866 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`]
2867 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
2868 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`]
2869 THEN POP_ASSUM MP_TAC
2870 THEN POP_ASSUM MP_TAC
2871 THEN REAL_ARITH_TAC];
2872 ASM_REWRITE_TAC[]
2873 THEN REAL_ARITH_TAC]]);;
2874
2875
2876
2877
2878 let XFAN_INTER_SET=prove(`!x:real^N V E s:real^N->bool.
2879 xfan(x,V,E) INTER s = UNIONS {y | ?e. e IN E /\ y = (aff_ge {x} e) INTER s}`,
2880 REPEAT GEN_TAC
2881 THEN REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2]
2882 THEN ONCE_REWRITE_TAC[ EXTENSION]
2883 THEN REWRITE_TAC[UNIONS; INTER;IN_ELIM_THM]
2884 THEN GEN_TAC
2885 THEN EQ_TAC
2886 THENL[
2887 STRIP_TAC
2888 THEN ASM_REWRITE_TAC[]
2889 THEN EXISTS_TAC `{x' | x' IN aff_ge {x:real^N} e /\ x' IN s}`
2890 THEN POP_ASSUM MP_TAC
2891 THEN POP_ASSUM MP_TAC
2892 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2893 THEN RESA_TAC THEN RESA_TAC
2894 THEN EXISTS_TAC`e:real^N->bool`
2895 THEN ASM_REWRITE_TAC[];
2896 STRIP_TAC
2897 THEN POP_ASSUM MP_TAC
2898 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2899 THEN RESA_TAC
2900 THEN EXISTS_TAC `aff_ge {x:real^N} e `
2901 THEN ASM_REWRITE_TAC[]
2902 THEN EXISTS_TAC `e:real^N->bool`
2903 THEN ASM_REWRITE_TAC[]]);;
2904
2905
2906
2907
2908 let condition_azim_imp_edge_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
2909 FAN(x,V,E)
2910 /\ {v,u} IN E /\ {u,w} IN E /\  {w,w1} IN E
2911 /\ sigma_fan x V E u w = v
2912 /\ sigma_fan x V E w w1 = u
2913 /\ fan80(x,V,E)
2914  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
2915 /\  azim x w v u = azim x w w1 u
2916 ==> {v,w} IN E`,
2917
2918
2919 REPEAT STRIP_TAC
2920 THEN POP_ASSUM MP_TAC
2921 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2922 THEN REWRITE_TAC[fan80]
2923 THEN DISCH_TAC
2924 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"))
2925 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`]
2926 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`]
2927 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
2928 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`]
2929 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
2930 THEN POP_ASSUM MP_TAC
2931 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2932 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
2933 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
2934 THEN RESA_TAC
2935 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`w1: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,D,B,C}`]
2939 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
2940 THEN RESA_TAC
2941 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
2942 THEN POP_ASSUM MP_TAC
2943 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2944 THEN RESA_TAC
2945 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`w1:real^3`]
2946 THEN POP_ASSUM MP_TAC
2947 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2948 THEN RESA_TAC
2949 THEN REWRITE_TAC[REAL_ARITH`A-B=A-C<=> B=C`]
2950 THEN STRIP_TAC
2951 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`w:real^3`;`u:real^3`;`v: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 MATCH_MP_TAC AFF_GT_CUT_XFAN_IMP_EDGE_FAN
2956 THEN EXISTS_TAC`x:real^3`
2957 THEN EXISTS_TAC`V:real^3->bool`
2958 THEN EXISTS_TAC`u:real^3`
2959 THEN ASM_SIMP_TAC[SET_RULE`A INTER B= B INTER A`]
2960 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]
2961 THEN ASM_REWRITE_TAC[UNIONS;IN_ELIM_THM;SET_RULE`~(A={})<=> ?y. y IN A`]
2962 THEN SUBGOAL_THEN`?y. y IN aff_gt {x:real^3} {v,w} INTER aff_ge {x} {w,w1}`ASSUME_TAC
2963 THENL[
2964 MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3,w:real^3}`;`{w1:real^3}`]
2965 THEN MP_TAC(SET_RULE`v IN aff_gt {x, w} {w1} /\ aff_gt {x, w} {w1} SUBSET aff_ge {x, w} {w1}
2966 ==> v IN aff_ge {x, w} {w1:real^3}`)
2967 THEN RESA_TAC
2968 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`w:real^3`;`w1:real^3`;`v:real^3`]
2969 THEN POP_ASSUM MP_TAC
2970 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2971 THEN RESA_TAC
2972 THENL[
2973 POP_ASSUM MP_TAC
2974 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{B,C}={C,B}`]
2975 THEN STRIP_TAC
2976 THEN MRESAL_TAC point_in_aff_ge[`x:real^3`;`w:real^3`;`w1:real^3`][INTER;IN_ELIM_THM]
2977 THEN EXISTS_TAC`w1:real^3`
2978 THEN ASM_REWRITE_TAC[];
2979
2980 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
2981 `(w:real^3)`]
2982 THEN MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`w:real^3`;`w1:real^3`;`v:real^3`]
2983 THEN ASM_SIMP_TAC[SET_RULE`A SUBSET B==> A INTER B= A`]
2984 THEN MATCH_MP_TAC exists_in_aff_gt
2985 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
2986 `(w:real^3)`]];
2987
2988 POP_ASSUM MP_TAC
2989 THEN STRIP_TAC
2990 THEN EXISTS_TAC `y:real^3`
2991 THEN EXISTS_TAC `aff_gt {x} {v, w} INTER aff_ge {x} {w, w1:real^3}`
2992 THEN ASM_REWRITE_TAC[]
2993 THEN EXISTS_TAC`{w,w1:real^3}`
2994 THEN ASM_SIMP_TAC[SET_RULE`A INTER B= B INTER A`;]
2995 THEN ASM_TAC
2996 THEN SIMP_TAC[IN]]);;
2997
2998 let condition_azim_le_pi=prove(
2999 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w.
3000 FAN(x,V,E)
3001 /\ {v,u} IN E /\ {u,w} IN E
3002 /\ sigma_fan x V E u w = v
3003 /\ fan80(x,V,E)
3004  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3005 ==> &0< azim x w v u/\ azim x w v u < pi`,
3006
3007
3008 REPEAT GEN_TAC
3009 THEN STRIP_TAC
3010 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3011 THEN REWRITE_TAC[fan80]
3012 THEN DISCH_TAC
3013 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"))
3014 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`]
3015 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3016 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
3017 THEN POP_ASSUM MP_TAC
3018 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3019 THEN RESA_TAC
3020 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
3021 THEN POP_ASSUM MP_TAC
3022 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3023 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
3024 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
3025 THEN RESA_TAC
3026 THEN MRESA_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`w:real^3`;`v:real^3`;`u: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,D,C,B}`]
3030 THEN ASM_REWRITE_TAC[DE_MORGAN_THM;]
3031 THEN RESA_TAC
3032 THEN MP_TAC(ARITH_RULE`~(azim x w v u = &0) /\ &0<= azim x w v u==>  &0< azim x w v u `)
3033 THEN ASM_SIMP_TAC[azim]
3034 THEN RESA_TAC
3035 THEN DISJ_CASES_TAC(REAL_ARITH`pi<= azim x w v u \/ azim x w v u < pi`)
3036 THENL[
3037 MRESA_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`u:real^3`;`v:real^3`]
3038 THEN POP_ASSUM MP_TAC
3039 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3040 THEN RESA_TAC
3041 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
3042 ==> &0 < azim x w u v /\ azim x w u v< pi`)
3043 THEN ASM_SIMP_TAC[azim]
3044 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3045 THEN STRIP_TAC
3046 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `w:real^3`;`v:real^3`;`u:real^3`]
3047 THEN POP_ASSUM MP_TAC
3048 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3049 THEN RESA_TAC
3050 THEN POP_ASSUM MP_TAC
3051 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
3052 THEN REWRITE_TAC[DOT_LNEG]
3053 THEN ASM_TAC
3054 THEN REAL_ARITH_TAC;
3055 ASM_REWRITE_TAC[]]);;
3056
3057
3058
3059
3060 let azim_trangle_le_azim_face_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3061 FAN(x,V,E)
3062 /\ {v,u} IN E /\ {u,w} IN E /\  {w,w1} IN E  /\ ~({v,w} IN E)
3063 /\ sigma_fan x V E u w = v
3064 /\ sigma_fan x V E w w1 = u
3065 /\ fan80(x,V,E)
3066  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3067 ==> azim x w v u < azim x w w1 u`,
3068
3069 REPEAT STRIP_TAC
3070 THEN REWRITE_TAC[REAL_ARITH`A<B <=> ~(B<=A) `]
3071 THEN STRIP_TAC
3072 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
3073 THEN REWRITE_TAC[fan80]
3074 THEN DISCH_TAC
3075 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"))
3076 THEN POP_ASSUM MP_TAC
3077 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`]
3078 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`]
3079 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
3080 MP_TAC th THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`] THEN DISCH_TAC THEN ASSUME_TAC th)
3081 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3082 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3083 `(w:real^3)`]
3084 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`]
3085 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`]
3086 THEN POP_ASSUM MP_TAC
3087 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3088 THEN RESA_TAC
3089 THEN MP_TAC(REAL_ARITH`azim x w v u = azim x w v w1 + azim x w w1 u
3090 /\ 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`)
3091 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
3092 THEN RESA_TAC
3093 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`]
3094 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3095 THEN POP_ASSUM MP_TAC
3096 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3097 THEN RESA_TAC
3098 THEN SUBGOAL_THEN`w1 IN wedge x w v (u:real^3)` ASSUME_TAC
3099 THENL[
3100 REWRITE_TAC[wedge;IN_ELIM_THM]
3101 THEN ASM_REWRITE_TAC[];
3102 POP_ASSUM MP_TAC
3103 THEN ASM_REWRITE_TAC[]
3104 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`]
3105 THEN POP_ASSUM MP_TAC
3106 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
3107 THEN RESA_TAC
3108 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3109 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
3110 THEN POP_ASSUM MP_TAC
3111 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3112 THEN RESA_TAC
3113 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)
3114 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3115 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`]
3116 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3117 THEN MRESA_TAC invariant_crossr_dot_esilon_3piont[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`;`w1:real^3`]
3118 THEN POP_ASSUM MP_TAC
3119 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
3120 THEN RESA_TAC
3121 THEN POP_ASSUM MP_TAC
3122 THEN ABBREV_TAC`h=t/ &2:real`
3123 THEN MP_TAC(REAL_ARITH`&0< t/\ t< &1/\ h= t/ &2 ==> &0 <= h/\ &0< h/\ &0<= &1 -h /\ h< t`)
3124 THEN RESA_TAC
3125 THEN DISCH_THEN(fun th-> MRESA1_TAC th `h:real`)
3126 THEN POP_ASSUM MP_TAC
3127 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3128 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3129 THEN STRIP_TAC
3130 THEN REWRITE_TAC[INTER;IN_ELIM_THM]
3131 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
3132 THEN STRIP_TAC
3133 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
3134 THENL[
3135
3136 REWRITE_TAC[VECTOR_ARITH`(&1 - h) % w + h % w1-x=(&1 - h) % (w-x) + h % (w1-x)`]
3137 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
3138 THEN REDUCE_ARITH_TAC
3139 THEN STRIP_TAC
3140 THEN MATCH_MP_TAC REAL_LT_MUL
3141 THEN ASM_REWRITE_TAC[];
3142
3143 SUBGOAL_THEN`(&1 - h) % w + h % w1 IN aff_gt {x} {v,u,w:real^3}`ASSUME_TAC
3144 THENL[
3145 MRESA_TAC inter_aff_gt_3_1_is_aff_gt_1_3[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
3146 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th;IN_ELIM_THM;INTER;VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]);
3147 SUBGOAL_THEN`(&1 - h:real) % w + h % (w1:real^3) IN aff_ge {x} {w,w1:real^3}`ASSUME_TAC
3148 THENL[
3149  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`w:real^3`;` w1:real^3`][IN_ELIM_THM]
3150 THEN EXISTS_TAC`&0`
3151 THEN EXISTS_TAC`&1-h:real`
3152 THEN EXISTS_TAC`h:real`
3153 THEN ASM_REWRITE_TAC[REAL_ARITH`&0 + &1 - h + h = &1`]
3154 THEN REDUCE_VECTOR_TAC;
3155 MRESA_TAC AFF_GE_SUBSET_XFAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`;]
3156 THEN POP_ASSUM MP_TAC
3157 THEN POP_ASSUM MP_TAC
3158 THEN POP_ASSUM MP_TAC
3159 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`;]
3160 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`]
3161 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`]
3162 THEN MP_TAC(SET_RULE`dart_leads_into x V E u w SUBSET yfan (x,V,E)
3163 /\ aff_gt {x} {v, u, w} SUBSET dart_leads_into x V E u w
3164 ==> aff_gt {x} {v, u, w} SUBSET yfan (x,V,E)`)
3165 THEN RESA_TAC
3166 THEN POP_ASSUM MP_TAC
3167 THEN REWRITE_TAC[yfan]
3168 THEN SET_TAC[]]]]]);;
3169
3170
3171
3172 let SIGMA_FAN_OF_FANADD_AT_POINT3=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 v u w.
3173 FAN(x,V,E)/\ FAN(x,V,E1)
3174 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3175 /\ sigma_fan x V E u w = v
3176 /\ fan80(x,V,E)
3177  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3178 /\ E UNION {{v,w}}=E1
3179 ==> sigma_fan x V E1 w v = u`,
3180
3181
3182 REPEAT STRIP_TAC
3183 THEN POP_ASSUM MP_TAC
3184 THEN POP_ASSUM MP_TAC
3185 THEN DISCH_THEN(LABEL_TAC"YEU")
3186 THEN DISCH_THEN(LABEL_TAC"EM")
3187 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3188 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3189 `(v:real^3)`]
3190 THEN MP_TAC(SET_RULE`{u,w:real^3} IN E /\ E UNION {{v,w}}=E1==> {u,w} IN E1`)
3191 THEN RESA_TAC
3192 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (u:real^3)`;
3193 `(w:real^3)`]
3194 THEN POP_ASSUM MP_TAC
3195 THEN POP_ASSUM MP_TAC
3196 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3197 THEN ASM_REWRITE_TAC[]
3198 THEN STRIP_TAC
3199 THEN STRIP_TAC
3200 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
3201 `(w:real^3)`]
3202 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)`;]
3203 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3204 THEN POP_ASSUM MP_TAC
3205 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {v:real^3})\/ ~(set_of_edge w V E1 = {v})`)
3206 THENL[
3207 ASM_REWRITE_TAC[]
3208 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3209                  IN_INSERT; NOT_IN_EMPTY]
3210 THEN ARITH_TAC;
3211
3212 STRIP_TAC
3213 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`]
3214 THEN POP_ASSUM MATCH_MP_TAC
3215 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3216 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge1;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3217 THEN REPEAT STRIP_TAC
3218 THEN ABBREV_TAC`w2=inverse1_sigma_fan x V E w u:real^3`
3219 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`w:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC(th))
3220 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w2:real^3})\/ ~(set_of_edge w V E = {w2})`)
3221 THENL[
3222 ASM_REWRITE_TAC[]
3223 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3224                  IN_INSERT; NOT_IN_EMPTY]
3225 THEN ARITH_TAC;
3226
3227 STRIP_TAC
3228 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3229 THEN POP_ASSUM MP_TAC
3230 THEN POP_ASSUM MP_TAC
3231 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3232 THEN POP_ASSUM MP_TAC
3233 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3234 THEN ASM_REWRITE_TAC[]
3235 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3236 THEN STRIP_TAC
3237 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w2:real^3)`;
3238 `(w:real^3)`]
3239 THEN STRIP_TAC
3240 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3241 THEN POP_ASSUM MP_TAC
3242 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3243 THEN RESA_TAC
3244 THEN  MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w2:real^3`]
3245 THEN STRIP_TAC
3246 THEN REMOVE_ASSUM_TAC
3247 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w1:real^3`)
3248 THEN POP_ASSUM MP_TAC
3249 THEN DISJ_CASES_TAC(SET_RULE`~(w1 = w2:real^3)\/ (w1 = w2)`)
3250 THENL[
3251 RESA_TAC
3252 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`]
3253 THEN POP_ASSUM MP_TAC
3254 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3255 THEN RESA_TAC
3256 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`)
3257 THEN RESA_TAC
3258 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`u:real^3`]
3259 THEN POP_ASSUM MP_TAC
3260 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3261 THEN ASM_REWRITE_TAC[]
3262 THEN DISCH_THEN(LABEL_TAC "ME1")
3263 THEN MP_TAC(REAL_ARITH`azim x w w2 (u:real^3) = azim x w w2 v + azim x w v u
3264 /\ azim x w w2 u <= azim x w w2 w1
3265 /\ &0 <= azim x w v u
3266 ==>  azim x w w2 v <= azim x w w2 w1 `)
3267 THEN RESA_TAC
3268 THEN POP_ASSUM MP_TAC
3269 THEN SIMP_TAC[azim]
3270 THEN STRIP_TAC
3271 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3272 `(w:real^3)`]
3273 THEN POP_ASSUM MP_TAC
3274 THEN RESA_TAC
3275 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`w1:real^3`]
3276 THEN MATCH_MP_TAC(REAL_ARITH`!B A C. A+C<=A+B==>C<=B`)
3277 THEN EXISTS_TAC`azim x w w2 (v:real^3)`
3278 THEN POP_ASSUM (fun th -> REWRITE_TAC[SYM th;])
3279 THEN REMOVE_THEN "ME1"(fun th -> ASM_REWRITE_TAC[SYM th;]);
3280 STRIP_TAC
3281 THEN REMOVE_ASSUM_TAC
3282 THEN ASM_REWRITE_TAC[]
3283 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`]
3284 THEN POP_ASSUM MP_TAC
3285 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3286 THEN RESA_TAC
3287 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`)
3288 THEN RESA_TAC
3289 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`;`u:real^3`]
3290 THEN POP_ASSUM MP_TAC
3291 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3292 THEN ASM_REWRITE_TAC[]
3293 THEN STRIP_TAC
3294 THEN MATCH_MP_TAC(REAL_ARITH`!B A C. A+C<=A+B==>C<=B`)
3295 THEN EXISTS_TAC`azim x w w2 (v:real^3)`
3296 THEN POP_ASSUM (fun th -> REWRITE_TAC[SYM th;]
3297 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w w2 u /\
3298 azim x w w2 u = azim x w w2 v + azim x w v u
3299 ==> ~(azim x w w2 v = &0)`)
3300 THEN ASM_REWRITE_TAC[SYM th]
3301 THEN STRIP_TAC)
3302 THEN MRESAL_TAC AZIM_COMPL[`x:real^3`;`w:real^3`;`w2:real^3`;`v:real^3`][REAL_ARITH`A+ B-A=B`]
3303 THEN MATCH_MP_TAC(REAL_ARITH`!a b. a< b==> a<= b`)
3304 THEN SIMP_TAC[azim]]]]);;
3305
3306
3307 let elements_in_ds2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
3308 FAN(x,V,E)
3309  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3310 /\ fan80(x,V,E)
3311 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3312 /\ {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)
3313 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3314 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3315 /\ sigma_fan x V E u w = v
3316 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3317 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3318 /\  f10=(x,w,v,u)
3319 /\ E UNION {{v,w}}= E1
3320 ==> f10 IN ds2`,
3321 REPEAT STRIP_TAC
3322 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3323 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3324 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)))`]
3325 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)))`]
3326 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)`;]
3327 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3328 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3329 THEN REWRITE_TAC[face;orbit_map; IN_ELIM_THM]
3330 THEN EXISTS_TAC`0:num`
3331 THEN REWRITE_TAC[POWER;ARITH_RULE`0>=0`;I_DEF;EQ_PAIR_4]
3332 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)`;
3333 `v:real^3`;`u:real^3`; `w:real^3` ]);;
3334
3335
3336
3337
3338
3339
3340
3341
3342 let SIGMA_FAN_OF_FANADD_AT_POINT4=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3343
3344 FAN(x,V,E)/\ FAN(x,V,E1)
3345 /\ fan80(x,V,E)
3346 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ ~(u=w1)
3347 /\ {v,w1} IN E
3348 /\ sigma_fan x V E u w = v
3349  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3350 /\ E UNION {{v,w}}=E1
3351 ==> sigma_fan x V E1 v w1 = sigma_fan x V E v w1`,
3352
3353
3354
3355
3356 REPEAT STRIP_TAC
3357 THEN POP_ASSUM MP_TAC
3358 THEN POP_ASSUM MP_TAC
3359 THEN DISCH_THEN(LABEL_TAC"YEU")
3360 THEN DISCH_THEN(LABEL_TAC"EM")
3361 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3362 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3363 `(v:real^3)`]
3364 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)`;]
3365 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
3366 THEN POP_ASSUM MP_TAC
3367 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E1 = {w1:real^3})\/ ~(set_of_edge v V E1 = {w1})`)
3368 THENL(*1*)[
3369
3370 ASM_REWRITE_TAC[]
3371 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3372                  IN_INSERT; NOT_IN_EMPTY]
3373 THEN ARITH_TAC;(*1*)
3374
3375
3376 STRIP_TAC
3377 THEN MP_TAC(SET_RULE`{v,w1:real^3} IN E /\ E UNION {{v,w}}=E1==> {v,w1} IN E1`)
3378 THEN RESA_TAC
3379 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3380 `(v:real^3)`]
3381 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3382 `(v:real^3)`]
3383 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`]
3384 THEN POP_ASSUM MATCH_MP_TAC
3385 THEN REMOVE_THEN "YEU"(fun th -> MRESA1_TAC th`v:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th)
3386 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {w1:real^3})\/ ~(set_of_edge v V E = {w1})`)
3387 THENL(*2*)[
3388
3389 ASM_REWRITE_TAC[]
3390 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3391                  IN_INSERT; NOT_IN_EMPTY]
3392 THEN ARITH_TAC;(*2*)
3393
3394 STRIP_TAC
3395 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
3396 `(w:real^3)`]
3397 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3398 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
3399 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3400 THEN  MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`w1:real^3`]
3401 THEN POP_ASSUM MP_TAC
3402 THEN DISCH_THEN(LABEL_TAC"MA")
3403 THEN REPEAT STRIP_TAC
3404 THENL(*3*)[
3405 REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`w1':real^3`);(*3*)
3406
3407 ASM_REWRITE_TAC[]
3408 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`u:real^3`)
3409 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`]
3410 THEN DISJ_CASES_TAC(SET_RULE`~(sigma_fan x V E v u = w1)\/ (sigma_fan x V E v u = w1)`)
3411 THENL(*4*)[
3412 ASM_REWRITE_TAC[]
3413 THEN MRESA_TAC
3414 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`]
3415 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`]
3416 THEN POP_ASSUM MP_TAC
3417 THEN RESA_TAC
3418 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`]
3419 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`]
3420 THEN MP_TAC(REAL_ARITH`azim x v w1 (sigma_fan x V E v u) =
3421       azim x v w1 u + azim x v u (sigma_fan x V E v u)
3422 /\ azim x v u w <= azim x v u (sigma_fan x V E v u)
3423 ==> azim x v w1 u+ azim x v u w<= azim x v w1 (sigma_fan x V E v u)
3424 `)
3425 THEN POP_ASSUM(fun th -> REWRITE_TAC[th])
3426 THEN POP_ASSUM(fun th -> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3427 THEN ASM_REWRITE_TAC[]
3428 THEN STRIP_TAC
3429 THEN MP_TAC(REAL_ARITH` azim x v w1 (sigma_fan x V E v u)< &2 * pi
3430 /\ azim x v w1 u+ azim x v u w<= azim x v w1 (sigma_fan x V E v u)
3431 ==>
3432 azim x v w1 u+ azim x v u w< &2 * pi
3433 `)
3434 THEN ASM_SIMP_TAC[azim]
3435 THEN STRIP_TAC
3436 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w} IN E1`) THEN RESA_TAC
3437 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
3438 THEN MRESA_TAC sum3_azim_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`;`w:real^3`]
3439 THEN  MATCH_MP_TAC(REAL_ARITH`!A B C.A<=B /\ &0<= C ==>A<= B+C`)
3440 THEN ASM_SIMP_TAC[azim];(*4*)
3441
3442 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`]
3443 THEN MRESA_TAC AZIM_COMPL[`x:real^3`;`v:real^3`;` u:real^3`;`w1:real^3`]
3444 THEN MP_TAC(REAL_ARITH`
3445       azim x v w1 u + azim x v u (sigma_fan x V E v u) = &2 * pi
3446 /\ azim x v u w <= azim x v u (sigma_fan x V E v u)
3447 ==> azim x v w1 u+ azim x v u w<= &2 * pi
3448 `)
3449 THEN POP_ASSUM(fun th -> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3450 THEN ASM_REWRITE_TAC[]
3451 THEN DISJ_CASES_TAC(SET_RULE`azim x v u w1 = &0\/ ~(azim x v u w1 = &0)`)
3452 THENL(*5*)[
3453
3454 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*)
3455
3456 ASM_REWRITE_TAC[REAL_ARITH`A-B+B=A`]
3457 THEN STRIP_TAC
3458 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w} IN E1`) THEN RESA_TAC
3459 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
3460 THEN MP_TAC(REAL_ARITH`azim x v w1 u + azim x v u w <= &2 * pi
3461 ==> azim x v w1 u + azim x v u w < &2 * pi\/ azim x v w1 u + azim x v u w = &2 * pi`)
3462 THEN RESA_TAC THENL(*6*)[
3463
3464 MRESA_TAC sum3_azim_fan[`x:real^3`;`v:real^3`;`w1:real^3`;`u:real^3`;`w:real^3`]
3465 THEN  MATCH_MP_TAC(REAL_ARITH`!A B C.A<=B /\ &0<= C ==>A<= B+C`)
3466 THEN ASM_SIMP_TAC[azim];(*6*)
3467
3468 POP_ASSUM MP_TAC
3469 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`]
3470 THEN STRIP_TAC
3471 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`w:real^3`]
3472 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3473 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3474 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`w1:real^3`;`w:real^3`] decomposition_planar_by_angle_fan)
3475 THEN RESA_TAC
3476 THENL(*7*)[
3477 MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`w:real^3`;`w1:real^3`]
3478 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w1:real^3`]
3479 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w1:real^3`;]
3480 THEN SUBGOAL_THEN`aff_gt {x} {v, w1:real^3} SUBSET xfan(x,V:real^3->bool,E)` ASSUME_TAC
3481 THENL(*8*)[
3482
3483 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
3484 THEN GEN_TAC
3485 THEN STRIP_TAC
3486 THEN EXISTS_TAC`{v,w1}:real^3->bool`
3487 THEN MP_TAC(SET_RULE`x' IN aff_gt {x}{v,w1}/\ aff_gt {x} { v,w1} SUBSET aff_ge {x} {v, w1}
3488 ==> x' IN aff_ge {x:real^3} {v, w1}`)
3489 THEN RESA_TAC
3490 THEN ASM_TAC
3491 THEN SIMP_TAC[IN];(*8*)
3492
3493 MP_TAC(SET_RULE`aff_gt {x} {v, w1} SUBSET aff_gt {x} {v, w}/\y IN aff_gt {x} {v, w1}
3494 /\ aff_gt {x} {v, w1} SUBSET xfan (x,V,E)
3495 ==> ~(aff_gt {x:real^3} {v, w} INTER xfan (x,V:real^3->bool,E) ={})`)
3496 THEN RESA_TAC
3497 THEN POP_ASSUM MP_TAC
3498 THEN REWRITE_TAC[xfan;IN ]
3499 THEN STRIP_TAC
3500 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]
3501 THEN POP_ASSUM MP_TAC
3502 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3503 THEN ASM_TAC
3504 THEN SIMP_TAC[IN] ];(*7*)
3505
3506
3507
3508
3509
3510 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v:real^3`;`w1:real^3`;`w:real^3`]
3511 THEN SUBGOAL_THEN`aff_gt {x} {w, v:real^3} SUBSET xfan(x,V:real^3->bool,E)` ASSUME_TAC
3512 THENL(*8*)[
3513 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
3514 THEN GEN_TAC
3515 THEN STRIP_TAC
3516 THEN EXISTS_TAC`{v,w1}:real^3->bool`
3517 THEN MP_TAC(SET_RULE`x' IN aff_gt {x}{w,v}/\ aff_gt {x} {w, v} SUBSET aff_ge {x} {v, w1}
3518 ==> x' IN aff_ge {x:real^3} {v, w1}`)
3519 THEN RESA_TAC
3520 THEN ASM_TAC
3521 THEN SIMP_TAC[IN];
3522
3523
3524 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`;]
3525 THEN POP_ASSUM MP_TAC
3526 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3527 THEN REWRITE_TAC[yfan]
3528 THEN POP_ASSUM MP_TAC
3529 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`w:real^3`;`v:real^3`]
3530 THEN POP_ASSUM MP_TAC
3531 THEN SET_TAC[]]]]]]]]]);;
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544 let SIGMA_FAN_OF_FANADD_AT_POINT5=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3545
3546 FAN(x,V,E)/\ FAN(x,V,E1)
3547 /\ fan80(x,V,E)
3548 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ ~(w1=inverse1_sigma_fan x V E w u )
3549 /\ {w,w1} IN E
3550 /\ sigma_fan x V E u w = v
3551  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3552 /\ E UNION {{v,w}}=E1
3553 ==> sigma_fan x V E1 w w1 = sigma_fan x V E w w1`,
3554 REPEAT STRIP_TAC
3555 THEN POP_ASSUM MP_TAC
3556 THEN POP_ASSUM MP_TAC
3557 THEN DISCH_THEN(LABEL_TAC"YEU")
3558 THEN DISCH_THEN(LABEL_TAC"EM")
3559 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3560 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3561 `(w:real^3)`]
3562 THEN POP_ASSUM MP_TAC
3563 THEN POP_ASSUM MP_TAC
3564 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3565 THEN ASM_REWRITE_TAC[]
3566 THEN STRIP_TAC
3567 THEN STRIP_TAC
3568 THEN MP_TAC(SET_RULE`{w:real^3, w1} IN E /\ E UNION {{v,w}}=E1 ==>{w, w1} IN E1`)
3569 THEN RESA_TAC
3570 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3571 `(w:real^3)`]
3572 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3573 `(w:real^3)`]
3574 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)`;]
3575 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3576 THEN POP_ASSUM MP_TAC
3577 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {w1:real^3})\/ ~(set_of_edge w V E1 = {w1})`)
3578 THENL(*1*)[
3579
3580 ASM_REWRITE_TAC[]
3581 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3582                  IN_INSERT; NOT_IN_EMPTY]
3583 THEN ARITH_TAC;(*1*)
3584
3585 STRIP_TAC
3586 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th`w:real^3` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC(th))
3587 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1:real^3})\/ ~(set_of_edge w V E = {w1})`)
3588 THENL(*2*)[
3589 ASM_REWRITE_TAC[]
3590 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3591                  IN_INSERT; NOT_IN_EMPTY]
3592 THEN ARITH_TAC;(*2*)
3593
3594 STRIP_TAC
3595 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`]
3596 THEN POP_ASSUM MP_TAC
3597 THEN DISCH_THEN(LABEL_TAC "MA")
3598 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)`]
3599 THEN POP_ASSUM MP_TAC
3600 THEN RESA_TAC
3601 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`)
3602 THEN RESA_TAC
3603 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)`]
3604 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`]
3605 THEN POP_ASSUM MATCH_MP_TAC
3606 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3607 THEN ASM_SIMP_TAC[SET_RULE`x IN A==> x IN A UNION B`]
3608 THEN ASM_SIMP_TAC[UNION;IN_ELIM_THM;set_of_only_edge;IN_SING;SET_RULE`((A \/ B)/\ (~ B)) <=>A /\ ~ B`]
3609 THEN REPEAT STRIP_TAC
3610 THENL(*3*)[
3611 REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`w1':real^3`);(*3*)
3612
3613 POP_ASSUM MP_TAC
3614 THEN POP_ASSUM MP_TAC
3615 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3616 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`(v:real^3)`]
3617 THEN ASM_SIMP_TAC[set_of_only_edge;IN_SING]
3618 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3619 THEN POP_ASSUM MP_TAC
3620 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3`)
3621 THEN POP_ASSUM MP_TAC
3622 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3`)
3623 THEN POP_ASSUM MP_TAC
3624 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3625 THEN ASM_REWRITE_TAC[]
3626 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3627 THEN REPEAT STRIP_TAC
3628 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)`]
3629 THEN REMOVE_THEN "MA"(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w (u:real^3)`)
3630 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`]
3631 THEN POP_ASSUM MP_TAC
3632 THEN DISJ_CASES_TAC(SET_RULE`~(u=w1:real^3)\/ u=w1`)
3633 THENL(*4*)[
3634 ASM_REWRITE_TAC[]
3635 THEN STRIP_TAC
3636 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`]
3637 THEN POP_ASSUM MP_TAC
3638 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3639 THEN ASM_REWRITE_TAC[]
3640 THEN STRIP_TAC
3641 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`]
3642 THEN POP_ASSUM MP_TAC
3643 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
3644 THEN ASM_REWRITE_TAC[]
3645 THEN STRIP_TAC
3646 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3647 ==>
3648 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3649 THEN RESA_TAC
3650 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
3651 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`]
3652 THEN POP_ASSUM MP_TAC
3653 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3654 THEN ASM_REWRITE_TAC[]
3655 THEN STRIP_TAC
3656 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3657       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3658 /\ &0<= azim x w v u
3659 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3660 `)
3661 THEN ASM_SIMP_TAC[azim]
3662 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3663 THEN STRIP_TAC
3664 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) v <=
3665       azim x w (inverse1_sigma_fan x V E w u) u
3666 /\ azim x w w1 u =
3667       azim x w w1 (inverse1_sigma_fan x V E w u) +
3668       azim x w (inverse1_sigma_fan x V E w u) u
3669 /\ azim x w w1 u< &2 *pi
3670 ==>  azim x w w1 (inverse1_sigma_fan x V E w u) +
3671      azim x w (inverse1_sigma_fan x V E w u) v < &2 *pi
3672
3673 `)
3674 THEN SIMP_TAC[azim]
3675 THEN ASM_REWRITE_TAC[]
3676 THEN STRIP_TAC
3677 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`]
3678 THEN MATCH_MP_TAC (REAL_ARITH`!A B C. A<= B/\ &0<= C==> A<= B +C`)
3679 THEN ASM_SIMP_TAC[azim];(*4*)
3680
3681 POP_ASSUM(fun th -> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
3682 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`]
3683 THEN POP_ASSUM MP_TAC
3684 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
3685 THEN ASM_REWRITE_TAC[]
3686 THEN STRIP_TAC
3687 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3688 ==>
3689 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3690 THEN RESA_TAC
3691 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
3692 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`]
3693 THEN POP_ASSUM MP_TAC
3694 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3695 THEN ASM_REWRITE_TAC[]
3696 THEN STRIP_TAC
3697 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3698       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3699 /\ &0<= azim x w v u
3700 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3701 `)
3702 THEN ASM_SIMP_TAC[azim]
3703 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3704 THEN STRIP_TAC
3705 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) v <=
3706       azim x w (inverse1_sigma_fan x V E w u) u
3707 ==>  azim x w u (inverse1_sigma_fan x V E w u) +
3708      azim x w (inverse1_sigma_fan x V E w u) v <=
3709 azim x w u (inverse1_sigma_fan x V E w u) +
3710     azim x w (inverse1_sigma_fan x V E w u) u
3711 `)
3712 THEN RESA_TAC
3713 THEN POP_ASSUM MP_TAC
3714 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)`)
3715 THENL(*5*)[
3716 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`];
3717
3718 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`]
3719 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[SYM th;REAL_ARITH`A<=B<=> A<B \/ A=B`])
3720 THEN STRIP_TAC
3721 THENL(*6*)[
3722 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`]
3723 THEN MATCH_MP_TAC (REAL_ARITH`!A B C. A<= B/\ &0<= C==> A<= B +C`)
3724 THEN ASM_SIMP_TAC[azim];
3725 POP_ASSUM MP_TAC
3726 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`]
3727 THEN STRIP_TAC
3728 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`]
3729 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3730 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
3731 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
3732 THEN DISCH_TAC
3733 THEN POP_ASSUM (fun th -> MP_TAC th
3734 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
3735 THEN DISCH_TAC
3736 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"))
3737 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`]
3738 THEN POP_ASSUM MP_TAC
3739 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
3740 THEN ASM_REWRITE_TAC[]]]]]]]);;
3741
3742
3743
3744
3745 let SIGMA_FAN_OF_FANADD_AT_POINT6=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v u w w1.
3746 FAN(x,V,E)/\ FAN(x,V,E1)
3747 /\ fan80(x,V,E)
3748 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E) /\ w1=inverse1_sigma_fan x V E w u
3749 /\ {w,w1} IN E
3750 /\ sigma_fan x V E u w = v
3751  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3752 /\ E UNION {{v,w}}=E1
3753 ==> sigma_fan x V E1 w w1 = v`,
3754
3755 REPEAT STRIP_TAC
3756 THEN POP_ASSUM MP_TAC
3757 THEN POP_ASSUM MP_TAC
3758 THEN DISCH_THEN(LABEL_TAC"YEU")
3759 THEN DISCH_THEN(LABEL_TAC"EM")
3760 THEN MRESA_TAC add_edge_graph[`v:real^3`;`w:real^3`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;]
3761 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3762 `(w:real^3)`]
3763 THEN POP_ASSUM MP_TAC
3764 THEN POP_ASSUM MP_TAC
3765 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3766 THEN ASM_REWRITE_TAC[]
3767 THEN STRIP_TAC
3768 THEN STRIP_TAC
3769 THEN MP_TAC(SET_RULE`{w:real^3, w1} IN E /\ E UNION {{v,w}}=E1 ==>{w, w1} IN E1`)
3770 THEN RESA_TAC
3771 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w1:real^3)`;
3772 `(w:real^3)`]
3773 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
3774 `(w:real^3)`]
3775 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)`;]
3776 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
3777 THEN POP_ASSUM MP_TAC
3778 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E1 = {w1:real^3})\/ ~(set_of_edge w V E1 = {w1})`)
3779 THENL[
3780 ASM_REWRITE_TAC[]
3781 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3782                  IN_INSERT; NOT_IN_EMPTY]
3783 THEN ARITH_TAC;
3784
3785 STRIP_TAC
3786 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"))
3787 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1:real^3})\/ ~(set_of_edge w V E = {w1})`)
3788 THENL[
3789 ASM_REWRITE_TAC[]
3790 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3791                  IN_INSERT; NOT_IN_EMPTY]
3792 THEN ARITH_TAC;
3793 DISCH_THEN(LABEL_TAC"LINHYEU")
3794 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` v:real^3`;`(w:real^3)`]
3795 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`]
3796 THEN POP_ASSUM MATCH_MP_TAC
3797 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3798 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3799 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3800 THEN STRIP_TAC
3801 THENL[
3802 STRIP_TAC
3803 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
3804 THEN POP_ASSUM MP_TAC
3805 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3806 THEN ASM_REWRITE_TAC[]
3807 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3808 THEN ASM_REWRITE_TAC[];
3809 POP_ASSUM MP_TAC
3810 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3811 THEN ASM_REWRITE_TAC[]
3812 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3813 THEN ASM_REWRITE_TAC[]
3814 THEN REMOVE_THEN "EM"(fun th -> REWRITE_TAC[SYM th;SET_OF_EDGE_UNION_GRAPH])
3815 THEN REWRITE_TAC[UNION;IN_ELIM_THM;IN_SING]
3816 THEN REPEAT STRIP_TAC
3817 THENL[(*4*)
3818 REMOVE_THEN "LINHYEU" MP_TAC
3819 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge w V E = {w1':real^3})\/ ~(set_of_edge w V E = {w1'})`)
3820 THENL[
3821
3822 ASM_REWRITE_TAC[]
3823 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
3824                  IN_INSERT; NOT_IN_EMPTY]
3825 THEN ARITH_TAC;
3826 STRIP_TAC
3827 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
3828 THEN REMOVE_ASSUM_TAC
3829 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3830 THEN POP_ASSUM MP_TAC
3831 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3832 THEN ASM_REWRITE_TAC[]
3833 THEN STRIP_TAC
3834 THEN MRESA_TAC SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`;`w1:real^3`]
3835 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w1':real^3`)
3836 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`]
3837 THEN POP_ASSUM MP_TAC
3838 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3839 THEN ASM_REWRITE_TAC[]
3840 THEN STRIP_TAC
3841 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
3842 ==>
3843 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
3844 THEN RESA_TAC
3845 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`]
3846 THEN POP_ASSUM MP_TAC
3847 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3848 THEN ASM_REWRITE_TAC[]
3849 THEN STRIP_TAC
3850 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
3851       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
3852 /\ &0<= azim x w v u
3853 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
3854 `)
3855 THEN ASM_SIMP_TAC[azim]
3856 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3857 THEN REMOVE_ASSUM_TAC
3858 THEN REMOVE_ASSUM_TAC
3859 THEN POP_ASSUM MP_TAC
3860 THEN REAL_ARITH_TAC];
3861 POP_ASSUM MP_TAC
3862 THEN POP_ASSUM MP_TAC
3863 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` u:real^3`;`(v:real^3)`]
3864 THEN MRESAL_TAC set_of_only_edge1[`v:real^3`;`w:real^3`;`V:real^3->bool`][IN_SING]
3865 THEN STRIP_TAC
3866 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
3867 THEN REAL_ARITH_TAC]]]]);;
3868
3869
3870
3871
3872 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.
3873 FAN(x,V,E)
3874  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3875 /\ fan80(x,V,E)
3876 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3877 /\ {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)
3878 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3879 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3880 /\ sigma_fan x V E u w = v
3881 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3882 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3883 /\ f10=(x,w,v,u)
3884 /\ f20=(x,v,u,w)
3885 /\ E UNION {{v,w}}= E1
3886 ==> f20=f1_fan x V E1 f10`,
3887
3888 REPEAT STRIP_TAC
3889 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3890 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3891 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)))`]
3892 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)))`]
3893 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)`;]
3894 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3895 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3896 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3897 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)`;
3898 `v:real^3`;`u:real^3`; `w:real^3` ]
3899 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3900 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
3901 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
3902 THEN POP_ASSUM MP_TAC
3903 THEN MP_TAC(SET_RULE`{v,u:real^3} IN E /\ E UNION {{v,w}}= E1
3904 ==> {v,u} IN E1`) THEN RESA_TAC THEN RESA_TAC);;
3905
3906
3907
3908
3909
3910
3911 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.
3912 FAN(x,V,E)
3913  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3914 /\ fan80(x,V,E)
3915 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3916 /\ {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)
3917 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3918 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3919 /\ sigma_fan x V E u w = v
3920 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3921 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3922 /\ f20=(x,v,u,w)
3923 /\ f30=(x,u,w,v)
3924 /\ E UNION {{v,w}}= E1
3925 ==> f30=f1_fan x V E1 f20`,
3926
3927 REPEAT STRIP_TAC
3928 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3929 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3930 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)))`]
3931 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)))`]
3932 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)`;]
3933 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3934 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3935 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3936 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3937 `v:real^3`; `w:real^3` ]
3938 THEN POP_ASSUM MP_TAC
3939 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3940 THEN RESA_TAC
3941 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
3942 THEN POP_ASSUM MP_TAC
3943 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3944 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
3945 `(u:real^3)`]
3946 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
3947 `(v:real^3)`]
3948 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
3949 THEN RESA_TAC
3950 THEN DISCH_TAC
3951 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3952 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`]
3953 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
3954 THEN POP_ASSUM MP_TAC
3955 THEN MP_TAC(SET_RULE`{u:real^3,w} IN E /\ E UNION {{v,w}}= E1
3956 ==> {u,w} IN E1`) THEN RESA_TAC THEN RESA_TAC);;
3957
3958
3959 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.
3960 FAN(x,V,E)
3961  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
3962 /\ fan80(x,V,E)
3963 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
3964 /\ {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)
3965 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
3966 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
3967 /\ sigma_fan x V E u w = v
3968 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
3969 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
3970 /\ f10=(x,w,v,u)
3971 /\ f30=(x,u,w,v)
3972 /\ E UNION {{v,w}}= E1
3973 ==> f10=f1_fan x V E1 f30`,
3974
3975 REPEAT STRIP_TAC
3976 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
3977 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
3978 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)))`]
3979 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)))`]
3980 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)`;]
3981 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
3982 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
3983 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
3984 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)`;
3985 `v:real^3`; `u:real^3`;`w:real^3` ]
3986 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
3987 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
3988 THEN POP_ASSUM (fun th-> MRESA1_TAC th`v:real^3`)
3989 THEN POP_ASSUM MP_TAC
3990 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3991 THEN MP_TAC(SET_RULE` E UNION {{v,w:real^3}}= E1
3992 ==> {v,w} IN E1`)
3993 THEN RESA_TAC THEN RESA_TAC);;
3994
3995
3996
3997
3998
3999
4000 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.
4001 FAN(x,V,E)
4002  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4003 /\ fan80(x,V,E)
4004 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4005 /\ {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)
4006 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4007 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4008 /\ sigma_fan x V E u w = v
4009 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4010 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4011 /\ f10=(x,w,v,u)
4012 /\ (x,v,u,w)=f20
4013 /\ (x,u,w,v)=f30
4014 /\ E UNION {{v,w}}= E1
4015 ==> f10 IN d1_fan (x,V,E1)`,
4016 REPEAT STRIP_TAC
4017 THEN POP_ASSUM MP_TAC
4018 THEN DISCH_THEN(LABEL_TAC"EM")
4019 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4020 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4021 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)))`]
4022 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)))`]
4023 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)`;]
4024 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4025 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4026 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)`;
4027 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4028 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)`;
4029 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
4030 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)`;
4031 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`; ]
4032 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)`;
4033 `v:real^3`; `u:real^3`;`w:real^3` ][d1_fan; IN_ELIM_THM]
4034 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
4035 THEN EXISTS_TAC`x:real^3`
4036 THEN EXISTS_TAC`w:real^3`
4037 THEN EXISTS_TAC`v:real^3`
4038 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
4039 THEN ASM_REWRITE_TAC[]
4040 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4041 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th])
4042 THEN SET_TAC[]);;
4043
4044
4045
4046 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.
4047 FAN(x,V,E)
4048  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4049 /\ fan80(x,V,E)
4050 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4051 /\ {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)
4052 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4053 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4054 /\ sigma_fan x V E u w = v
4055 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4056 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4057 /\ f10=(x,w,v,u)
4058 /\ f20=(x,v,u,w)
4059 /\ f30=(x,u,w,v)
4060 /\ E UNION {{v,w}}= E1
4061 ==> ~(f10= f20)/\ ~(f20= f30)/\ ~(f30=f10)`,
4062
4063 REPEAT GEN_TAC THEN STRIP_TAC
4064 THEN ASM_REWRITE_TAC[EQ_PAIR_4;SET_RULE`~(A/\B)<=> ~ A\/ ~ B`]
4065 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;` (v:real^3)`]
4066 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;` (u:real^3)`]);;
4067
4068
4069 let n_fan_permutes_prime=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) p.
4070 FAN(x,V,E) /\ p = ( \ t. res (t x V E ) (d1_fan (x,V,E)))
4071 ==> (p n_fan) permutes (d_fan (x,V,E))`,
4072
4073 REPEAT STRIP_TAC
4074 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4075 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))`]
4076 THEN STRIP_TAC
4077 THENL[
4078 REWRITE_TAC[res;d_fan;UNION;IN_ELIM_THM;DE_MORGAN_THM]
4079 THEN REPEAT STRIP_TAC
4080 THEN ASM_REWRITE_TAC[];
4081 MRESA_TAC into_domain_n_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4082 THEN REPEAT STRIP_TAC
4083 THEN DISJ_CASES_TAC(SET_RULE`~(y IN d1_fan (x,V,E) )\/ (y IN d1_fan (x:real^3,V,E))`)
4084 THENL[
4085 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4086 THEN ASM_REWRITE_TAC[res];
4087 MRESA_TAC permuters_of_enf_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4088 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4089 THEN POP_ASSUM  (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4090 THEN REWRITE_TAC[res]
4091 THEN EXISTS_TAC`b:real^3#real^3#real^3#real^3`
4092 THEN ASM_REWRITE_TAC[]
4093 THEN MRESA_TAC subset_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4094 THEN ASM_TAC THEN SET_TAC[]]]);;
4095
4096
4097 let f1_fan_permutes_prime=prove(`!x:real^3 V:real^3->bool (E:(real^3->bool)->bool) p.
4098 FAN(x,V,E) /\ p = ( \ t. res (t x V E ) (d1_fan (x,V,E)))
4099 ==> (p f1_fan) permutes (d_fan (x,V,E))`,
4100
4101 REPEAT STRIP_TAC
4102 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4103 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))`]
4104 THEN STRIP_TAC
4105 THENL[
4106 REWRITE_TAC[res;d_fan;UNION;IN_ELIM_THM;DE_MORGAN_THM]
4107 THEN REPEAT STRIP_TAC
4108 THEN ASM_REWRITE_TAC[];
4109 MRESA_TAC into_domain_f1_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4110 THEN REPEAT STRIP_TAC
4111 THEN DISJ_CASES_TAC(SET_RULE`~(y IN d1_fan (x,V,E) )\/ (y IN d1_fan (x:real^3,V,E))`)
4112 THENL[
4113 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4114 THEN ASM_REWRITE_TAC[res];
4115 MRESA_TAC permuters_of_enf_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4116 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4117 THEN POP_ASSUM  (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4118 THEN REWRITE_TAC[res]
4119 THEN EXISTS_TAC`b:real^3#real^3#real^3#real^3`
4120 THEN ASM_REWRITE_TAC[]
4121 THEN MRESA_TAC subset_d_fan[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
4122 THEN ASM_TAC THEN SET_TAC[]]]);;
4123
4124
4125
4126
4127
4128
4129 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.
4130 FAN(x,V,E)
4131  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4132 /\ fan80(x,V,E)
4133 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4134 /\ {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)
4135 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4136 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4137 /\ sigma_fan x V E u w = v
4138 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4139 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4140 /\ (x,w,v,u)=f10
4141 /\ (x,v,u,w)=f20
4142 /\ (x,u,w,v)=f30
4143 /\ E UNION {{v,w}}= E1
4144 ==> CARD ds2=3`,
4145
4146 REPEAT STRIP_TAC
4147 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4148 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4149 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)))`]
4150 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)))`]
4151 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)`;]
4152 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4153 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4154 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)`;
4155 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4156 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)`;
4157 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
4158 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)`;
4159 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`; ]
4160 THEN POP_ASSUM MP_TAC
4161 THEN DISCH_THEN(LABEL_TAC"EM YEU")
4162 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)`;
4163 `v:real^3`; `u:real^3`;`w:real^3` ][face;orbit_map]
4164 THEN MRESA_TAC f10_in_d1_fanadd[`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)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4166 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)))`]
4167 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4168 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)))`]
4169 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4170 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)))`]
4171 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4172 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]
4173 THEN POP_ASSUM MP_TAC
4174 THEN REMOVE_THEN "EM YEU"(fun th -> REWRITE_TAC[SYM th;ARITH_RULE`SUC 2=3`;])
4175 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)`]
4176 [POWER;I_DEF]
4177 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)`]
4178 [POWER_1]
4179 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)`]
4180 [POWER_2;o_DEF]
4181 THEN MP_TAC(SET_RULE`f10 IN orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4182 /\ f1_fan x V E1 f10 IN
4183       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4184 /\ f1_fan x V E1 (f1_fan x V E1 f10) IN
4185       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4186 ==>
4187 {f10, f1_fan x V E1 f10,f1_fan x V E1 (f1_fan x V E1 f10)} SUBSET
4188       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10`)
4189 THEN RESA_TAC
4190 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)`;
4191 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4192 THEN SUBGOAL_THEN(`CARD {f10,f20,f30:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
4193 THENL[
4194 SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4195                  IN_INSERT; NOT_IN_EMPTY]
4196
4197 THEN ASM_REWRITE_TAC[]
4198 THEN ARITH_TAC;
4199 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4200 THEN STRIP_TAC
4201 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)))`]
4202 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`]
4203 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)`]
4204 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]
4205 ]);;
4206
4207
4208
4209
4210
4211 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.
4212 FAN(x,V,E)
4213  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4214 /\ fan80(x,V,E)
4215 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4216 /\ {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)
4217 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4218 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4219 /\ sigma_fan x V E u w = v
4220 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4221 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4222 /\ (x,w,v,u)=f10
4223 /\ (x,v,u,w)=f20
4224 /\ (x,u,w,v)=f30
4225 /\ E UNION {{v,w}}= E1
4226 ==> ds2={f10,f20,f30}`,
4227
4228 REPEAT STRIP_TAC
4229 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4230 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4231 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)))`]
4232 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)))`]
4233 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)`;]
4234 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4235 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4236 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)`;
4237 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4238 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)`;
4239 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
4240 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)`;
4241 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`; ]
4242 THEN POP_ASSUM MP_TAC
4243 THEN DISCH_THEN(LABEL_TAC"EM YEU")
4244 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)`;
4245 `v:real^3`; `u:real^3`;`w:real^3` ][face;orbit_map]
4246 THEN MRESA_TAC f10_in_d1_fanadd[`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)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)` ]
4248 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)))`]
4249 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4250 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)))`]
4251 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4252 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)))`]
4253 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f10:real^3#real^3#real^3#real^3` )
4254 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]
4255 THEN POP_ASSUM MP_TAC
4256 THEN REMOVE_THEN "EM YEU"(fun th -> REWRITE_TAC[SYM th;ARITH_RULE`SUC 2=3`;])
4257 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)`]
4258 [POWER;I_DEF]
4259 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)`]
4260 [POWER_1]
4261 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)`]
4262 [POWER_2;o_DEF]
4263 THEN MP_TAC(SET_RULE`f10 IN orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4264 /\ f1_fan x V E1 f10 IN
4265       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4266 /\ f1_fan x V E1 (f1_fan x V E1 f10) IN
4267       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10
4268 ==>
4269 {f10, f1_fan x V E1 f10,f1_fan x V E1 (f1_fan x V E1 f10)} SUBSET
4270       orbit_map (res (f1_fan x V E1) (d1_fan (x,V,E1))) f10`)
4271 THEN RESA_TAC
4272 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)`;
4273 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4274 THEN SUBGOAL_THEN(`CARD {f10,f20,f30:real^3#real^3#real^3#real^3}=3`)ASSUME_TAC
4275 THENL[
4276 SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4277                  IN_INSERT; NOT_IN_EMPTY]
4278
4279 THEN ASM_REWRITE_TAC[]
4280 THEN ARITH_TAC;
4281 POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
4282 THEN STRIP_TAC
4283 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)))`]
4284 THEN MRESA_TAC finite_d_fan[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`]
4285 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)`]
4286 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]]);;
4287
4288
4289 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.
4290 FAN(x,V,E)
4291 /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4292 /\ fan80(x,V,E)
4293 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4294 /\ {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)
4295 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4296 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4297 /\ sigma_fan x V E u w = v
4298 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4299 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4300 /\ f10=(x,w,v,u)
4301 /\ f20=(x,v,u,w)
4302 /\ f30=(x,u,w,v)
4303 /\ E UNION {{v,w}}=E1
4304 ==> ~((x,v,w,sigma_fan x V E1 v w) IN ds2)`,
4305
4306 REPEAT GEN_TAC THEN STRIP_TAC
4307 THEN MRESAL_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4308 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
4309 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;` (v:real^3)`]
4310 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;` (u:real^3)`]
4311 THEN ASM_TAC
4312 THEN DISJ_CASES_TAC(SET_RULE`v=w \/ ~(v=w:real^3)`)
4313 THEN ASM_REWRITE_TAC[]
4314 THEN REPEAT STRIP_TAC
4315 THEN MRESA_TAC SIGMA_FAN [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;
4316 ` w:real^3`]
4317 THEN FIND_ASSUM (MP_TAC)`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
4318 THEN DISCH_TAC
4319 THEN POP_ASSUM(fun th-> MP_TAC (ISPEC `u:real^3` th) )
4320 THEN POP_ASSUM MP_TAC
4321 THEN POP_ASSUM MP_TAC
4322 THEN POP_ASSUM MP_TAC
4323 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
4324 THEN REPEAT STRIP_TAC
4325 THEN POP_ASSUM MP_TAC
4326 THEN ASM_REWRITE_TAC[]
4327 THEN SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4328                  IN_INSERT; NOT_IN_EMPTY]
4329 THEN ARITH_TAC);;
4330
4331
4332
4333 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.
4334 FAN(x,V,E)
4335  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4336 /\ fan80(x,V,E)
4337 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4338 /\ {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)
4339 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4340 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4341 /\ sigma_fan x V E u w = v
4342 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4343 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4344 /\ (x,w,v,u)=f10
4345 /\ (x,v,u,w)=f20
4346 /\ (x,u,w,v)=f30
4347 /\ E UNION {{v,w}}= E1
4348 ==> ~(ds1=ds2)`,
4349 REPEAT GEN_TAC THEN STRIP_TAC
4350 THEN MRESA_TAC edge_not_in_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4351 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
4352 THEN POP_ASSUM MP_TAC
4353 THEN MATCH_MP_TAC MONO_NOT
4354 THEN STRIP_TAC
4355 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;face;orbit_map;IN_ELIM_THM])
4356 THEN EXISTS_TAC`0:num`
4357 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]);;
4358
4359
4360
4361
4362 let card_eq_image_in_d_fan=prove(`!x V E ds.
4363 FAN(x,V,E) /\
4364 (!v. v IN V==>CARD (set_of_edge v V E) >1)/\
4365 ds SUBSET d_fan(x,V,E)
4366 ==>
4367 CARD(IMAGE pr23 ds)= CARD ds`,
4368
4369 REPEAT STRIP_TAC
4370 THEN MATCH_MP_TAC CARD_IMAGE_INJ
4371 THEN MRESA_TAC finite_d_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
4372 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`]
4373 THEN REPEAT STRIP_TAC
4374 THEN POP_ASSUM MP_TAC
4375 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)`)
4376 THEN RESA_TAC
4377 THEN POP_ASSUM MP_TAC
4378 THEN POP_ASSUM MP_TAC
4379 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
4380 THEN REWRITE_TAC[d_fan;UNION;d1_fan;IN_ELIM_THM]
4381 THEN REPEAT STRIP_TAC
4382 THEN POP_ASSUM MP_TAC
4383 THEN ASM_REWRITE_TAC[pr23;PAIR_EQ]
4384 THEN RESA_TAC);;
4385
4386
4387
4388
4389
4390
4391 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))`
4392 ;;
4393
4394 let tran=new_definition`tran x V E1=(\(x,y:real^3,z,w). (x,y,z,sigma_fan x V E1 y z))`
4395 ;;
4396
4397
4398 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)`
4399 ;;
4400
4401
4402
4403 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.
4404 FAN(x,V,E)
4405  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4406 /\ fan80(x,V,E)
4407 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4408 /\ {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)
4409 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4410 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4411 /\ sigma_fan x V E u w = v
4412 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4413 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4414 /\ (x,w,v,u)=f10
4415 /\ (x,v,u,w)=f20
4416 /\ (x,u,w,v)=f30
4417 /\ E UNION {{v,w}}= E1
4418 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4419 ==> ?f. ?y. f = face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0`,
4420
4421 REPEAT STRIP_TAC
4422 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4423 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4424 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)))`]
4425 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)))`]
4426 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)`;]
4427 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4428 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4429 THEN MP_TAC(SET_RULE` ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4430 ==> ds0 IN face_set (hypermap1_of_fanx (x,V,E)) `)
4431 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM;]
4432 THEN STRIP_TAC
4433 THEN POP_ASSUM MP_TAC
4434 THEN POP_ASSUM MP_TAC
4435 THEN DISCH_THEN(LABEL_TAC"YEU")
4436 THEN DISCH_THEN(LABEL_TAC"EM")
4437 THEN REMOVE_THEN "YEU" MP_TAC
4438 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4439 THEN STRIP_TAC
4440 THEN REMOVE_THEN "EM" MP_TAC
4441 THEN RESA_TAC
4442 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))`
4443 THEN EXISTS_TAC`x':real^3#real^3#real^3#real^3`
4444 THEN ASM_REWRITE_TAC[tran;orbit_map;IN_ELIM_THM]
4445 THEN EXISTS_TAC`0:num`
4446 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]);;
4447
4448
4449
4450
4451
4452
4453 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.
4454 FAN(x,V,E)
4455  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4456 /\ fan80(x,V,E)
4457 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4458 /\ {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)
4459 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4460 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4461 /\ sigma_fan x V E u w = v
4462 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4463 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4464 /\ (x,w,v,u)=f10
4465 /\ (x,v,u,w)=f20
4466 /\ (x,u,w,v)=f30
4467 /\ E UNION {{v,w}}= E1
4468 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
4469 ==>
4470 ?y. tranf x V E E1 ds0 = face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0`,
4471
4472 REPEAT GEN_TAC THEN STRIP_TAC THEN ONCE_REWRITE_TAC[tranf]
4473   THEN MRESA_TAC exists_tranf_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4474 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
4475 THEN SELECT_ELIM_TAC
4476 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
4477 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3` THEN ASM_REWRITE_TAC[]);;
4478
4479
4480
4481
4482
4483
4484 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.
4485 FAN(x,V,E)
4486  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4487 /\ fan80(x,V,E)
4488 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4489 /\ {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)
4490 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4491 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4492 /\ sigma_fan x V E u w = v
4493 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4494 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4495 /\ (x,w,v,u)=f10
4496 /\ (x,v,u,w)=f20
4497 /\ (x,u,w,v)=f30
4498 /\ E UNION {{v,w}}= E1
4499 /\ y IN d_fan(x,V,E)
4500 ==>
4501 ?y1. y1 IN d_fan(x,V,E)/\ ~(pr2 y1 IN {v,w})/\
4502 face (hypermap1_of_fanx (x,V,E)) y1= face (hypermap1_of_fanx (x,V,E)) y
4503 `,
4504
4505 REPEAT STRIP_TAC
4506 THEN POP_ASSUM MP_TAC
4507 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4508 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4509 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)))`]
4510 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)))`]
4511 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)`;]
4512 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4513 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4514 THEN STRIP_TAC
4515 THEN DISJ_CASES_TAC(SET_RULE`~(pr2 y IN {v,w})\/ pr2 y IN {v,w}`)
4516 THENL[
4517 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
4518 THEN ASM_REWRITE_TAC[];
4519
4520 POP_ASSUM MP_TAC
4521 THEN REWRITE_TAC[SET_RULE`A IN {B,C}<=> A=B\/ A=C`]
4522 THEN STRIP_TAC
4523 THENL[ EXISTS_TAC`f1_fan x V E (y:real^3#real^3#real^3#real^3)`
4524 THEN ASM_REWRITE_TAC[]
4525 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
4526 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4527 THEN SUBGOAL_THEN`f1_fan x V E y IN face (hypermap1_of_fanx (x:real^3,V,E)) y` ASSUME_TAC
4528 THENL[
4529 ASM_REWRITE_TAC[face;IN_ELIM_THM;orbit_map;]
4530 THEN EXISTS_TAC`1:num`
4531 THEN REWRITE_TAC[ARITH_RULE`1>=0`;]
4532 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)))`]
4533 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
4534 THEN REWRITE_TAC[POWER_1];
4535
4536 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`]
4537 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4538 THEN REMOVE_ASSUM_TAC
4539 THEN POP_ASSUM MP_TAC
4540 THEN POP_ASSUM MP_TAC
4541 THEN ASM_REWRITE_TAC[d1_fan; IN_ELIM_THM;]
4542 THEN RESA_TAC
4543 THEN ASM_REWRITE_TAC[f1_fan;pr2]
4544 THEN POP_ASSUM MP_TAC
4545 THEN POP_ASSUM MP_TAC
4546 THEN POP_ASSUM MP_TAC
4547 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4548 THEN REPEAT STRIP_TAC
4549 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
4550 `(v':real^3)`]
4551 THEN REMOVE_THEN"YEU EM" MP_TAC
4552 THEN ASM_REWRITE_TAC[]
4553 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4554 THEN ASM_REWRITE_TAC[]];
4555
4556 EXISTS_TAC`f1_fan x V E (y:real^3#real^3#real^3#real^3)`
4557 THEN ASM_REWRITE_TAC[]
4558 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
4559 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
4560 THEN SUBGOAL_THEN`f1_fan x V E y IN face (hypermap1_of_fanx (x:real^3,V,E)) y` ASSUME_TAC
4561 THENL[
4562 ASM_REWRITE_TAC[face;IN_ELIM_THM;orbit_map;]
4563 THEN EXISTS_TAC`1:num`
4564 THEN REWRITE_TAC[ARITH_RULE`1>=0`;]
4565 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)))`]
4566 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
4567 THEN REWRITE_TAC[POWER_1];
4568
4569 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`]
4570 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4571 THEN REMOVE_ASSUM_TAC
4572 THEN POP_ASSUM MP_TAC
4573 THEN POP_ASSUM MP_TAC
4574 THEN ASM_REWRITE_TAC[d1_fan; IN_ELIM_THM;]
4575 THEN RESA_TAC
4576 THEN ASM_REWRITE_TAC[f1_fan;pr2]
4577 THEN POP_ASSUM MP_TAC
4578 THEN POP_ASSUM MP_TAC
4579 THEN POP_ASSUM MP_TAC
4580 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4581 THEN REPEAT STRIP_TAC
4582 THEN REMOVE_THEN"YEU EM" MP_TAC
4583 THEN ASM_REWRITE_TAC[]
4584 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
4585 `(v':real^3)`]]]]);;
4586
4587
4588
4589
4590 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.
4591 FAN(x,V,E)
4592  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4593 /\ fan80(x,V,E)
4594 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4595 /\ {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)
4596 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4597 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4598 /\ sigma_fan x V E u w = v
4599 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4600 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4601 /\ (x,w,v,u)=f10
4602 /\ (x,v,u,w)=f20
4603 /\ (x,u,w,v)=f30
4604 /\ E UNION {{v,w}}= E1
4605 /\ ~(pr3 y IN {v,w})
4606 /\ y IN d_fan(x,V,E)
4607 ==>
4608 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4609
4610
4611
4612 REPEAT STRIP_TAC
4613 THEN POP_ASSUM MP_TAC
4614 THEN POP_ASSUM MP_TAC
4615 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4616 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4617 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4618 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)))`]
4619 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)))`]
4620 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)`;]
4621 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4622 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4623 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4624 THEN RESA_TAC
4625 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4626 THEN REMOVE_THEN"EMYEU" MP_TAC
4627 THEN ASM_REWRITE_TAC[pr3]
4628 THEN RESA_TAC
4629 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4630 `v:real^3`; `w:real^3` ]
4631 THEN POP_ASSUM MP_TAC
4632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4633 THEN ASM_REWRITE_TAC[]
4634 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4635 THEN STRIP_TAC
4636 THEN POP_ASSUM(fun th-> MRESA_TAC th[`w':real^3`;`(inverse1_sigma_fan (x:real^3) V E w' v')`])
4637 THEN POP_ASSUM MP_TAC
4638 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`]
4639 THEN REMOVE_ASSUM_TAC
4640 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4641 THEN POP_ASSUM MP_TAC
4642 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4643 THEN POP_ASSUM MP_TAC
4644 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4645 THEN REPEAT RESA_TAC
4646 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(RAND_CONV o ONCE_DEPTH_CONV)[SYM th])
4647 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w':real^3`]
4648 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w' (v':real^3)`)
4649 THEN POP_ASSUM MP_TAC
4650 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4651 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w' v', w'} IN E
4652 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E w' v', w'} IN E1`)
4653 THEN REPEAT RESA_TAC);;
4654
4655
4656
4657
4658 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.
4659 FAN(x,V,E)
4660  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4661 /\ fan80(x,V,E)
4662 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4663 /\ {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)
4664 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4665 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4666 /\ sigma_fan x V E u w = v
4667 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4668 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4669 /\ (x,w,v,u)=f10
4670 /\ (x,v,u,w)=f20
4671 /\ (x,u,w,v)=f30
4672 /\ E UNION {{v,w}}= E1
4673 /\ ~(pr2 y= u)
4674 /\ pr3 y = w
4675 /\ y IN d_fan(x,V,E)
4676 ==>
4677 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4678
4679 REPEAT STRIP_TAC
4680 THEN POP_ASSUM MP_TAC
4681 THEN POP_ASSUM MP_TAC
4682 THEN POP_ASSUM MP_TAC
4683 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4684 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4685 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4686 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4687 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)))`]
4688 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)))`]
4689 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)`;]
4690 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4691 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4692 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4693 THEN RESA_TAC
4694 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4695 THEN REMOVE_THEN"EMYEU" MP_TAC
4696 THEN ASM_REWRITE_TAC[pr3]
4697 THEN DISCH_THEN(LABEL_TAC"LINH")
4698 THEN REMOVE_THEN"YEU EM" MP_TAC
4699 THEN ASM_REWRITE_TAC[pr2]
4700 THEN RESA_TAC
4701 THEN SUBGOAL_THEN(`~(inverse1_sigma_fan (x:real^3) V E w v'=inverse1_sigma_fan x V E w u)`) ASSUME_TAC
4702 THENL[
4703 POP_ASSUM MP_TAC
4704 THEN MATCH_MP_TAC MONO_NOT
4705 THEN STRIP_TAC
4706 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
4707 THEN POP_ASSUM MP_TAC
4708 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3`
4709 THEN POP_ASSUM MP_TAC
4710 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4711 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4712 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"LINH"))
4713 THEN RESA_TAC
4714 THEN MRESA1_TAC th`v':real^3`
4715 THEN POP_ASSUM MP_TAC
4716 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th]
4717 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC));
4718
4719 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
4720 THEN REMOVE_ASSUM_TAC
4721 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4722 THEN POP_ASSUM MP_TAC
4723 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4724 THEN POP_ASSUM MP_TAC
4725 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th]
4726 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN ASM_REWRITE_TAC[]
4727 THEN ASSUME_TAC th)
4728 THEN RESA_TAC
4729 THEN RESA_TAC
4730 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`]
4731 THEN POP_ASSUM MP_TAC
4732 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC
4733 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
4734 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E w (v':real^3)`)
4735 THEN POP_ASSUM MP_TAC
4736 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4737 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w v', w} IN E
4738 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E w v', w} IN E1`)
4739 THEN REPEAT RESA_TAC]);;
4740
4741
4742
4743
4744
4745 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.
4746 FAN(x,V,E)
4747  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4748 /\ fan80(x,V,E)
4749 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4750 /\ {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)
4751 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4752 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4753 /\ sigma_fan x V E u w = v
4754 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4755 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4756 /\ (x,w,v,u)=f10
4757 /\ (x,v,u,w)=f20
4758 /\ (x,u,w,v)=f30
4759 /\ E UNION {{v,w}}= E1
4760 /\ ~(pr2 y= sigma_fan x V E v u)
4761 /\ pr3 y = v
4762 /\ y IN d_fan(x,V,E)
4763 ==>
4764 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4765
4766 REPEAT STRIP_TAC
4767 THEN POP_ASSUM MP_TAC
4768 THEN POP_ASSUM MP_TAC
4769 THEN POP_ASSUM MP_TAC
4770 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4771 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4772 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4773 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4774 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)))`]
4775 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)))`]
4776 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)`;]
4777 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4778 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4779 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4780 THEN RESA_TAC
4781 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4782 THEN REMOVE_THEN"EMYEU" MP_TAC
4783 THEN ASM_REWRITE_TAC[pr3]
4784 THEN DISCH_THEN(LABEL_TAC"LINH")
4785 THEN REMOVE_THEN"YEU EM" MP_TAC
4786 THEN ASM_REWRITE_TAC[pr2]
4787 THEN RESA_TAC
4788 THEN SUBGOAL_THEN(`~(u=inverse1_sigma_fan (x:real^3) V E v v')`) ASSUME_TAC
4789 THENL[
4790 POP_ASSUM MP_TAC
4791 THEN MATCH_MP_TAC MONO_NOT
4792 THEN STRIP_TAC
4793 THEN ASM_REWRITE_TAC[]
4794 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4795 THEN POP_ASSUM MP_TAC
4796 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`
4797 THEN POP_ASSUM MP_TAC
4798 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4799 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4800 THEN RESA_TAC));
4801 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4802 THEN REMOVE_ASSUM_TAC
4803 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`
4804 THEN POP_ASSUM MP_TAC
4805 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4806 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4807 THEN RESA_TAC
4808 THEN POP_ASSUM MP_TAC
4809 THEN REMOVE_ASSUM_TAC
4810 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
4811 THEN POP_ASSUM MP_TAC
4812 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4813 THEN ASM_REWRITE_TAC[SYM th] THEN ASSUME_TAC th
4814 THEN RESA_TAC ))
4815 THEN STRIP_TAC
4816 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`]
4817 THEN POP_ASSUM MP_TAC
4818 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`] THEN RESA_TAC
4819 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
4820 THEN POP_ASSUM(fun th-> MRESA1_TAC th`inverse1_sigma_fan x V E v (v':real^3)`)
4821 THEN POP_ASSUM MP_TAC
4822 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4823 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E v v', v} IN E
4824 /\ E1= E UNION {{v,w}}==> {inverse1_sigma_fan x V E v v', v} IN E1`)
4825 THEN REPEAT RESA_TAC]);;
4826
4827
4828
4829
4830
4831
4832 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.
4833 FAN(x,V,E)
4834  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
4835 /\ fan80(x,V,E)
4836 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
4837 /\ {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)
4838 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
4839 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
4840 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
4841 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
4842 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
4843 /\ (x,w,v,u)=f10
4844 /\ (x,v,u,w)=f20
4845 /\ (x,u,w,v)=f30
4846 /\ E UNION {{v,w}}= E1
4847 /\ ~(y IN ds)
4848 /\ y IN d_fan(x,V,E)
4849 ==>
4850 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
4851
4852
4853 REPEAT STRIP_TAC
4854 THEN DISJ_CASES_TAC(SET_RULE`
4855 ((pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
4856 ((pr2 y= u)/\ pr3 y = w)\/
4857 (~(pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
4858 (~(pr2 y= u)/\ pr3 y = w)\/
4859  ~(pr3 y IN {v,w})`)
4860 THENL[
4861 POP_ASSUM MP_TAC
4862 THEN STRIP_TAC
4863 THEN POP_ASSUM MP_TAC
4864 THEN POP_ASSUM MP_TAC
4865 THEN POP_ASSUM MP_TAC
4866 THEN DISCH_THEN(LABEL_TAC"LINH")
4867 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4868 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4869 THEN REMOVE_THEN "LINH" ( fun th->MP_TAC th
4870 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4871 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4872 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)))`]
4873 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)))`]
4874 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)`;]
4875 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4876 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4877 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4878 THEN MP_TAC th THEN RESA_TAC)
4879 THEN RESA_TAC
4880 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4881 THEN REMOVE_THEN"EMYEU" MP_TAC
4882 THEN ASM_REWRITE_TAC[pr2]
4883 THEN RESA_TAC
4884 THEN REMOVE_THEN"YEU EM" MP_TAC
4885 THEN ASM_REWRITE_TAC[pr3]
4886 THEN RESA_TAC
4887 THEN POP_ASSUM MP_TAC
4888 THEN POP_ASSUM MP_TAC
4889 THEN POP_ASSUM MP_TAC
4890 THEN POP_ASSUM MP_TAC
4891 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4892 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4893 THEN STRIP_TAC
4894 THEN STRIP_TAC
4895 THEN REMOVE_THEN"YEU EM" MP_TAC
4896 THEN REMOVE_THEN"EMYEU" MP_TAC
4897 THEN RESA_TAC THEN STRIP_TAC
4898 THEN SUBGOAL_THEN`f1= f1_fan x V E (y:real^3#real^3#real^3#real^3)`ASSUME_TAC
4899 THENL[
4900 ASM_REWRITE_TAC[f1_fan]
4901 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
4902 THEN POP_ASSUM(fun th-> MRESA1_TAC th`u:real^3` )
4903 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`]
4904 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) `)
4905 THEN RESA_TAC
4906 THEN POP_ASSUM MP_TAC
4907 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4908 THEN STRIP_TAC
4909 THEN FIND_ASSUM(MP_TAC)`pr2 f1 =v:real^3`
4910 THEN FIND_ASSUM(MP_TAC)`pr3 f1= u :real^3`
4911 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;pr2;pr3])
4912 THEN RESA_TAC
4913 THEN RESA_TAC;
4914
4915 POP_ASSUM MP_TAC
4916 THEN REMOVE_ASSUM_TAC
4917 THEN DISCH_THEN(fun th-> ASSUME_TAC(SYM th))
4918 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`]
4919 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 `)
4920 THEN RESA_TAC
4921 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`]];
4922
4923
4924
4925
4926 POP_ASSUM MP_TAC
4927 THEN STRIP_TAC
4928 THENL[
4929
4930 POP_ASSUM MP_TAC
4931 THEN STRIP_TAC
4932 THEN POP_ASSUM MP_TAC
4933 THEN POP_ASSUM MP_TAC
4934 THEN POP_ASSUM MP_TAC
4935 THEN DISCH_THEN(LABEL_TAC"LINH")
4936 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4937 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4938 THEN REMOVE_THEN "LINH" ( fun th->MP_TAC th
4939 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4940 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
4941 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)))`]
4942 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)))`]
4943 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)`;]
4944 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
4945 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
4946 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
4947 THEN MP_TAC th THEN RESA_TAC)
4948 THEN RESA_TAC
4949 THEN ASM_REWRITE_TAC[f1_fan;tran;PAIR_EQ]
4950 THEN REMOVE_THEN"EMYEU" MP_TAC
4951 THEN ASM_REWRITE_TAC[pr2]
4952 THEN RESA_TAC
4953 THEN REMOVE_THEN"YEU EM" MP_TAC
4954 THEN ASM_REWRITE_TAC[pr3]
4955 THEN RESA_TAC
4956 THEN POP_ASSUM MP_TAC
4957 THEN POP_ASSUM MP_TAC
4958 THEN POP_ASSUM MP_TAC
4959 THEN POP_ASSUM MP_TAC
4960 THEN DISCH_THEN(LABEL_TAC"EMYEU")
4961 THEN DISCH_THEN(LABEL_TAC"YEU EM")
4962 THEN STRIP_TAC
4963 THEN STRIP_TAC
4964 THEN REMOVE_THEN"YEU EM" MP_TAC
4965 THEN REMOVE_THEN"EMYEU" MP_TAC
4966 THEN RESA_TAC THEN STRIP_TAC
4967 THEN SUBGOAL_THEN`f2= (y:real^3#real^3#real^3#real^3)`ASSUME_TAC
4968 THENL[
4969 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`]
4970 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) `)
4971 THEN RESA_TAC
4972 THEN POP_ASSUM MP_TAC
4973 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
4974 THEN STRIP_TAC
4975 THEN FIND_ASSUM(MP_TAC)`pr2 f2 =u:real^3`
4976 THEN FIND_ASSUM(MP_TAC)`pr3 f2= w :real^3`
4977 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;pr2;pr3])
4978 THEN RESA_TAC
4979 THEN RESA_TAC;
4980 POP_ASSUM MP_TAC
4981 THEN REMOVE_ASSUM_TAC
4982 THEN DISCH_TAC
4983 THEN  MP_TAC(SET_RULE`{f1,f2,f3:real^3#real^3#real^3#real^3} SUBSET ds  ==>  f2 IN ds `)
4984 THEN RESA_TAC];
4985 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN3
4986 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4987 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
4988 ;`ds1:real^3#real^3#real^3#real^3->bool`
4989 ;`ds2:real^3#real^3#real^3#real^3->bool`
4990 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
4991 ;`(y:real^3#real^3#real^3#real^3)`];
4992
4993 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN2
4994 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
4995 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
4996 ;`ds1:real^3#real^3#real^3#real^3->bool`
4997 ;`ds2:real^3#real^3#real^3#real^3->bool`
4998 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
4999 ;`(y:real^3#real^3#real^3#real^3)`];
5000
5001 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5002 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5003 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5004 ;`ds1:real^3#real^3#real^3#real^3->bool`
5005 ;`ds2:real^3#real^3#real^3#real^3->bool`
5006 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5007 ;`(y:real^3#real^3#real^3#real^3)`]]]);;
5008
5009
5010
5011 let f1_fan_power_in_face=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds y n.
5012 FAN(x,V,E)/\
5013 (!v. v IN V ==> CARD (set_of_edge v V E) > 1) /\
5014       ds IN face_set (hypermap1_of_fanx (x,V,E))/\
5015 y IN d1_fan (x,V,E)
5016 /\ ~(y IN ds)
5017 ==> ~((f1_fan x V E POWER n) y IN ds)`,
5018
5019 REPEAT STRIP_TAC
5020 THEN POP_ASSUM MP_TAC
5021 THEN POP_ASSUM MP_TAC
5022 THEN REWRITE_TAC[]
5023 THEN MATCH_MP_TAC MONO_NOT
5024 THEN SPEC_TAC (`n:num`,`n:num`)
5025 THEN INDUCT_TAC
5026 THENL[
5027 ASM_REWRITE_TAC[POWER;I_DEF];
5028
5029
5030 REWRITE_TAC[COM_POWER;o_DEF]
5031 THEN POP_ASSUM MP_TAC
5032 THEN DISCH_THEN(LABEL_TAC"EM")
5033 THEN STRIP_TAC
5034 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5035 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5036 THEN MP_TAC(SET_RULE`(f1_fan x V E POWER n) y IN d1_fan (x,V,E)/\
5037 d_fan (x,V,E)=d1_fan (x,V,E) UNION d20_fan (x,V,E)
5038 ==> (f1_fan x V E POWER n) y IN d_fan (x,V,E)`)
5039 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[d_fan]
5040 THEN RESA_TAC
5041 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`]]);;
5042
5043
5044 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.
5045 FAN(x,V,E)/\
5046 (!v. v IN V ==> CARD (set_of_edge v V E) > 1) /\
5047       ds IN face_set (hypermap1_of_fanx (x,V,E))/\
5048 y IN d1_fan (x,V,E)
5049 /\ ((f1_fan x V E POWER n) y IN ds)
5050 ==>
5051 (y IN ds)`,
5052
5053 REPEAT STRIP_TAC
5054 THEN POP_ASSUM MP_TAC
5055 THEN SPEC_TAC (`n:num`,`n:num`)
5056 THEN INDUCT_TAC
5057 THENL[
5058 ASM_REWRITE_TAC[POWER;I_DEF];
5059
5060
5061 REWRITE_TAC[COM_POWER;o_DEF]
5062 THEN POP_ASSUM MP_TAC
5063 THEN DISCH_THEN(LABEL_TAC"EM")
5064 THEN STRIP_TAC
5065 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5066 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5067 THEN MP_TAC(SET_RULE`(f1_fan x V E POWER n) y IN d1_fan (x,V,E)/\
5068 d_fan (x,V,E)=d1_fan (x,V,E) UNION d20_fan (x,V,E)
5069 ==> (f1_fan x V E POWER n) y IN d_fan (x,V,E)`)
5070 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o DEPTH_CONV)[d_fan]
5071 THEN RESA_TAC
5072 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`]]);;
5073
5074
5075
5076 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.
5077 FAN(x,V,E)
5078  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5079 /\ fan80(x,V,E)
5080 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5081 /\ {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)
5082 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5083 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5084 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5085 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5086 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5087 /\ (x,w,v,u)=f10
5088 /\ (x,v,u,w)=f20
5089 /\ (x,u,w,v)=f30
5090 /\ E UNION {{v,w}}= E1
5091  /\ ((~(pr2 y= sigma_fan x V E v u)/\ pr3 y = v)\/
5092 (~(pr2 y= u)/\ pr3 y = w) \/  ~(pr3 y IN {v,w}))
5093 /\ y IN d_fan(x,V,E)
5094 ==>
5095 tran x V E1 ((f1_fan x V E ) y)=(f1_fan x V E1 ) (tran x V E1 y)`,
5096
5097
5098 REPEAT STRIP_TAC
5099 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5100 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5101 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5102 ;`ds1:real^3#real^3#real^3#real^3->bool`
5103 ;`ds2:real^3#real^3#real^3#real^3->bool`
5104 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5105 ;`(y:real^3#real^3#real^3#real^3)`]
5106 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN2
5107 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5108 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5109 ;`ds1:real^3#real^3#real^3#real^3->bool`
5110 ;`ds2:real^3#real^3#real^3#real^3->bool`
5111 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5112 ;`(y:real^3#real^3#real^3#real^3)`]
5113 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN3
5114 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5115 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5116 ;`ds1:real^3#real^3#real^3#real^3->bool`
5117 ;`ds2:real^3#real^3#real^3#real^3->bool`
5118 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5119 ;`(y:real^3#real^3#real^3#real^3)`]);;
5120
5121
5122
5123 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.
5124 FAN(x,V,E)
5125  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5126 /\ fan80(x,V,E)
5127 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5128 /\ {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)
5129 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5130 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5131 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5132 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5133 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5134 /\ (x,w,v,u)=f10
5135 /\ (x,v,u,w)=f20
5136 /\ (x,u,w,v)=f30
5137 /\ E UNION {{v,w}}= E1
5138 /\ ~(y IN ds)
5139 /\ y IN d_fan(x,V,E)
5140 ==>
5141 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5142
5143 REPEAT STRIP_TAC
5144 THEN SPEC_TAC (`n:num`,`n:num`)
5145 THEN INDUCT_TAC
5146 THENL[
5147
5148 REWRITE_TAC[POWER;I_DEF];
5149 REWRITE_TAC[COM_POWER;o_DEF]
5150 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5151 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN
5152 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5153 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5154 ;`ds1:real^3#real^3#real^3#real^3->bool`
5155 ;`ds2:real^3#real^3#real^3#real^3->bool`
5156 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5157 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5158 THEN POP_ASSUM MATCH_MP_TAC
5159 THEN POP_ASSUM MP_TAC
5160 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5161 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5162 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)))`]
5163 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)))`]
5164 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)`;]
5165 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5166 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5167 THEN STRIP_TAC
5168 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5169 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5170 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]);;
5171
5172
5173
5174
5175
5176
5177 let TRAN_COMMUTATIVE_F1_FAN_POWER1=prove(
5178 `!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.
5179 FAN(x,V,E)
5180  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5181 /\ fan80(x,V,E)
5182 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5183 /\ {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)
5184 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5185 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5186 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5187 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5188 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5189 /\ (x,w,v,u)=f10
5190 /\ (x,v,u,w)=f20
5191 /\ (x,u,w,v)=f30
5192 /\ E UNION {{v,w}}= E1
5193 /\ y IN d_fan(x,V,E)
5194 /\ (!m.  m < n ==> ~(pr3 ((f1_fan x V E POWER m) y) IN {v,w}))
5195 ==>
5196 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5197
5198 REPEAT STRIP_TAC
5199 THEN POP_ASSUM MP_TAC
5200 THEN SPEC_TAC (`n:num`,`n:num`)
5201 THEN INDUCT_TAC
5202 THENL[
5203
5204 REWRITE_TAC[POWER;I_DEF];
5205 POP_ASSUM MP_TAC
5206 THEN POP_ASSUM MP_TAC
5207 THEN DISCH_THEN(LABEL_TAC"LINK")
5208 THEN DISCH_THEN(LABEL_TAC"LINH")
5209 THEN DISCH_TAC
5210 THEN SUBGOAL_THEN`(!m. m < n ==> ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w:real^3}))` ASSUME_TAC
5211 THENL[ REPEAT STRIP_TAC
5212 THEN POP_ASSUM MP_TAC
5213 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5214 REMOVE_THEN "LINH" MP_TAC
5215 THEN ASM_REWRITE_TAC[]
5216 THEN DISCH_TAC
5217 THEN REWRITE_TAC[COM_POWER;o_DEF]
5218 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5219 THEN REMOVE_ASSUM_TAC
5220 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5221 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN1
5222 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5223 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5224 ;`ds1:real^3#real^3#real^3#real^3->bool`
5225 ;`ds2:real^3#real^3#real^3#real^3->bool`
5226 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5227 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5228 THEN POP_ASSUM MATCH_MP_TAC
5229 THEN POP_ASSUM MP_TAC
5230 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5231 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5232 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)))`]
5233 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)))`]
5234 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)`;]
5235 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5236 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5237 THEN STRIP_TAC
5238 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5239 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5240 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5241 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252 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.
5253 FAN(x,V,E)
5254  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5255 /\ fan80(x,V,E)
5256 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5257 /\ {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)
5258 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5259 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5260 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5261 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5262 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5263 /\ (x,w,v,u)=f10
5264 /\ (x,v,u,w)=f20
5265 /\ (x,u,w,v)=f30
5266 /\ E UNION {{v,w}}= E1
5267 /\ y IN d_fan(x,V,E)
5268 /\ (!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)\/
5269 (~(pr2 ((f1_fan x V E POWER m) y)= u)/\ pr3 ((f1_fan x V E POWER m) y) = w))
5270 )
5271 ==>
5272 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5273
5274
5275 REPEAT STRIP_TAC
5276 THEN POP_ASSUM MP_TAC
5277 THEN SPEC_TAC (`n:num`,`n:num`)
5278 THEN INDUCT_TAC
5279
5280 THENL[
5281
5282 REWRITE_TAC[POWER;I_DEF];
5283
5284 POP_ASSUM MP_TAC
5285 THEN POP_ASSUM MP_TAC
5286 THEN DISCH_THEN(LABEL_TAC"LINK")
5287 THEN DISCH_THEN(LABEL_TAC"LINH")
5288 THEN DISCH_TAC
5289 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)\/
5290 (~(pr2 ((f1_fan x V E POWER m) y)= u)/\ pr3 ((f1_fan x V E POWER m) y) = w:real^3))
5291 )` ASSUME_TAC
5292 THENL[
5293 REPEAT STRIP_TAC
5294 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5295 REMOVE_THEN "LINH" MP_TAC
5296 THEN ASM_REWRITE_TAC[]
5297 THEN DISCH_TAC
5298 THEN REWRITE_TAC[COM_POWER;o_DEF]
5299 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5300 THEN REMOVE_ASSUM_TAC
5301 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5302 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN0
5303 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5304 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5305 ;`ds1:real^3#real^3#real^3#real^3->bool`
5306 ;`ds2:real^3#real^3#real^3#real^3->bool`
5307 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5308 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5309 THEN POP_ASSUM MATCH_MP_TAC
5310 THEN POP_ASSUM MP_TAC
5311 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5312 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5313 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)))`]
5314 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)))`]
5315 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)`;]
5316 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5317 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5318 THEN STRIP_TAC
5319 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5320 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5321 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5322 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5323
5324
5325
5326 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.
5327 FAN(x,V,E)
5328  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5329 /\ fan80(x,V,E)
5330 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5331 /\ {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)
5332 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5333 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5334 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5335 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5336 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5337 /\ (x,w,v,u)=f10
5338 /\ (x,v,u,w)=f20
5339 /\ (x,u,w,v)=f30
5340 /\ E UNION {{v,w}}= E1
5341 /\ y IN d_fan(x,V,E)
5342 /\ (!m.  m < n ==> (~(pr2 ((f1_fan x V E POWER m) y) = sigma_fan x V E v u) /\
5343                pr3 ((f1_fan x V E POWER m) y) = v) \/
5344                (~(pr2 ((f1_fan x V E POWER m) y) = u) /\
5345                pr3 ((f1_fan x V E POWER m) y) = w) \/
5346                ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w}))
5347 ==>
5348 tran x V E1 ((f1_fan x V E POWER n) y)=(f1_fan x V E1 POWER n) (tran x V E1 y)`,
5349
5350
5351 REPEAT STRIP_TAC
5352 THEN POP_ASSUM MP_TAC
5353 THEN SPEC_TAC (`n:num`,`n:num`)
5354 THEN INDUCT_TAC
5355
5356 THENL[
5357
5358 REWRITE_TAC[POWER;I_DEF];
5359
5360 POP_ASSUM MP_TAC
5361 THEN POP_ASSUM MP_TAC
5362 THEN DISCH_THEN(LABEL_TAC"LINK")
5363 THEN DISCH_THEN(LABEL_TAC"LINH")
5364 THEN DISCH_TAC
5365 THEN SUBGOAL_THEN`(!m. m < n ==> (~(pr2 ((f1_fan x V E POWER m) y) = sigma_fan x V E v u) /\
5366                pr3 ((f1_fan x V E POWER m) y) = v) \/
5367                (~(pr2 ((f1_fan x V E POWER m) y) = u) /\
5368                pr3 ((f1_fan x V E POWER m) y) = w) \/
5369                ~(pr3 ((f1_fan x V E POWER m) y) IN {v, w})
5370 )` ASSUME_TAC
5371 THENL[
5372 REPEAT STRIP_TAC
5373 THEN MRESA_TAC (ARITH_RULE`!m n. m<n ==> m< SUC n`)[`m:num`;`n:num`];
5374 REMOVE_THEN "LINH" MP_TAC
5375 THEN ASM_REWRITE_TAC[]
5376 THEN DISCH_TAC
5377 THEN REWRITE_TAC[COM_POWER;o_DEF]
5378 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5379 THEN REMOVE_ASSUM_TAC
5380 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`n:num`[ARITH_RULE`n< SUC n`])
5381 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN0
5382 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5383 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5384 ;`ds1:real^3#real^3#real^3#real^3->bool`
5385 ;`ds2:real^3#real^3#real^3#real^3->bool`
5386 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5387 ;`(((f1_fan x V E POWER n) y):real^3#real^3#real^3#real^3)`]
5388 THEN POP_ASSUM MATCH_MP_TAC
5389 THEN POP_ASSUM MP_TAC
5390 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5391 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5392 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)))`]
5393 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)))`]
5394 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)`;]
5395 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5396 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5397 THEN STRIP_TAC
5398 THEN REMOVE_THEN "LINK" MP_TAC THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
5399 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5400 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3`)
5401 THEN ASM_SIMP_TAC[f1_fan_power_in_face]]]);;
5402
5403
5404
5405 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.
5406 FAN(x,V,E)
5407  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5408 /\ fan80(x,V,E)
5409 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5410 /\ {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)
5411 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5412 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5413 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5414 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5415 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5416 /\ (x,w,v,u)=f10
5417 /\ (x,v,u,w)=f20
5418 /\ (x,u,w,v)=f30
5419 /\ E UNION {{v,w}}= E1
5420 /\ f= face (hypermap1_of_fanx (x,V,E1)) (tran x V E1 y)/\ y IN ds0
5421 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5422 ==> tranf x V E E1 ds0 = f`,
5423
5424 REPEAT STRIP_TAC
5425 THEN POP_ASSUM (fun th -> MP_TAC th
5426 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
5427 THEN STRIP_TAC
5428 THEN ASSUME_TAC th)
5429 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5430 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5431 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)))`]
5432 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)))`]
5433 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)`;]
5434 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5435 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5436 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5437 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
5438 THEN FIND_ASSUM(MP_TAC) `ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
5439 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5440 THEN STRIP_TAC
5441 THEN POP_ASSUM MP_TAC
5442 THEN ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5443 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])
5444 THENL[
5445  ASM_REWRITE_TAC[face];
5446
5447 STRIP_TAC
5448 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5449 THEN MRESA_TAC lemma_face_subset[`hypermap1_of_fanx (x:real^3,V,E)`;`x':real^3#real^3#real^3#real^3`]
5450 THEN MP_TAC(SET_RULE`face (hypermap1_of_fanx (x,V,E)) x' SUBSET d1_fan (x,V,E)
5451 /\ y IN face (hypermap1_of_fanx (x,V,E)) x' ==> y IN d1_fan(x,V,E)`)
5452 THEN RESA_TAC
5453 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`]
5454 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5455 THEN POP_ASSUM MP_TAC
5456 THEN REMOVE_ASSUM_TAC
5457 THEN REMOVE_ASSUM_TAC
5458 THEN POP_ASSUM MP_TAC
5459 THEN DISCH_THEN(LABEL_TAC"EM")
5460 THEN DISCH_TAC
5461 THEN REMOVE_THEN "EM" MP_TAC
5462 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[face;]
5463 THEN ASM_REWRITE_TAC[IN_ELIM_THM;orbit_map]
5464 THEN STRIP_TAC
5465 THEN POP_ASSUM MP_TAC
5466 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)))`]
5467 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
5468 THEN RESA_TAC
5469 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`]
5470 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
5471 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5472 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5473 ;`ds1:real^3#real^3#real^3#real^3->bool`
5474 ;`ds2:real^3#real^3#real^3#real^3->bool`
5475 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5476 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]
5477 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`]
5478 THEN POP_ASSUM MATCH_MP_TAC
5479 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
5480  face_set (hypermap1_of_fanx (x:real^3,V,E1))`ASSUME_TAC
5481 THENL[
5482 ASM_REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
5483 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))`
5484 THEN ASM_REWRITE_TAC[]
5485 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`n:num`;]
5486 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
5487 THEN POP_ASSUM MATCH_MP_TAC
5488
5489 THEN FIND_ASSUM(MP_TAC)`y IN d1_fan (x:real^3,V,E)`
5490 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5491 THEN RESA_TAC
5492 THEN ASM_REWRITE_TAC[tran]
5493 THEN EXISTS_TAC`x:real^3`
5494 THEN EXISTS_TAC`v':real^3`
5495 THEN EXISTS_TAC`w':real^3`
5496 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
5497 THEN ASM_REWRITE_TAC[]
5498 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`;
5499
5500 MRESA_TAC f1_fan_power_in_face_imp_in_face[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;
5501 `(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`]
5502 THEN POP_ASSUM MATCH_MP_TAC
5503 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
5504 THEN STRIP_TAC
5505 THENL[
5506
5507 FIND_ASSUM(MP_TAC)`y IN d1_fan (x:real^3,V,E)`
5508 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5509 THEN RESA_TAC
5510 THEN ASM_REWRITE_TAC[tran]
5511 THEN EXISTS_TAC`x:real^3`
5512 THEN EXISTS_TAC`v':real^3`
5513 THEN EXISTS_TAC`w':real^3`
5514 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
5515 THEN ASM_REWRITE_TAC[]
5516 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM] THEN ASM_REWRITE_TAC[])` E UNION {{v:real^3,w}}= E1`;
5517
5518 EXISTS_TAC`0:num`
5519 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]]]]);;
5520
5521
5522
5523
5524
5525
5526 let tran_in_dart_newfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 y .
5527 FAN(x,V,E)/\ FAN(x,V,E1)
5528 /\ E SUBSET E1
5529 /\ y IN d1_fan(x,V,E)
5530 ==> tran x V E1 y IN d1_fan(x,V,E1)`,
5531 REPEAT STRIP_TAC
5532 THEN POP_ASSUM MP_TAC
5533 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
5534 THEN RESA_TAC
5535 THEN REWRITE_TAC[tran]
5536 THEN EXISTS_TAC`x:real^3`
5537 THEN EXISTS_TAC`v:real^3`
5538 THEN EXISTS_TAC`w:real^3`
5539 THEN EXISTS_TAC`sigma_fan x V E1 v (w:real^3)`
5540 THEN ASM_REWRITE_TAC[]
5541 THEN ASM_TAC
5542 THEN SET_TAC[]);;
5543
5544
5545
5546
5547 let INJ_TRAN_D1_FAN=prove(` !x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) E1 y y1.
5548 FAN(x,V,E)/\ FAN(x,V,E1)
5549 /\ E SUBSET E1
5550 /\ y IN d1_fan(x,V,E)
5551 /\ y1 IN d1_fan(x,V,E)
5552 /\
5553 tran x V E1 y = tran x V E1 y1
5554 ==> y =y1`,
5555 REWRITE_TAC[d1_fan;IN_ELIM_THM]
5556 THEN REPEAT STRIP_TAC
5557 THEN POP_ASSUM MP_TAC
5558 THEN ASM_REWRITE_TAC[tran;PAIR_EQ]
5559 THEN RESA_TAC);;
5560
5561
5562
5563
5564
5565
5566 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'.
5567 FAN(x,V,E)
5568  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5569 /\ fan80(x,V,E)
5570 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5571 /\ {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)
5572 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5573 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5574 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5575 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5576 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5577 /\ (x,w,v,u)=f10
5578 /\ (x,v,u,w)=f20
5579 /\ (x,u,w,v)=f30
5580 /\ E UNION {{v,w}}= E1
5581 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5582 /\ ds0' IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5583 /\ tranf x V E E1 ds0=tranf x V E E1 ds0'
5584 ==>
5585  ds0 = ds0'`,
5586
5587
5588
5589 REPEAT STRIP_TAC
5590 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5591 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
5592 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
5593 THENL[
5594
5595 REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5596 THEN EXISTS_TAC`0:num`
5597 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
5598
5599 POP_ASSUM MP_TAC
5600 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5601 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
5602 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5603 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5604 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5605 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)))`]
5606 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)))`]
5607 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)`;]
5608 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5609 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5610 THEN STRIP_TAC
5611 THEN POP_ASSUM MP_TAC
5612 THEN FIND_ASSUM(MP_TAC)`ds0' IN face_set (hypermap1_of_fanx (x:real^3,V,E)) DELETE ds`
5613 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
5614 THEN RESA_TAC
5615 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`]
5616 THEN MP_TAC(SET_RULE`y' IN ds0'/\ ds0' SUBSET d1_fan (x:real^3,V,E)==> y' IN d1_fan (x,V,E)`)
5617 THEN RESA_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 MP_TAC(SET_RULE`E UNION {{v:real^3,w}}= E1==> E SUBSET E1`)
5625 THEN RESA_TAC
5626 THEN MRESA_TAC tran_in_dart_newfan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
5627 `y':real^3#real^3#real^3#real^3`]
5628 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)))`]
5629 THEN POP_ASSUM(fun th-> MRESA1_TAC th`tran (x:real^3) V E1 (y':real^3#real^3#real^3#real^3)`)
5630 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`]
5631 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`]
5632 THEN POP_ASSUM MP_TAC
5633 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
5634 THEN STRIP_TAC
5635 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
5636 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5637 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
5638 ;`ds1:real^3#real^3#real^3#real^3->bool`
5639 ;`ds2:real^3#real^3#real^3#real^3->bool`
5640 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
5641 ;`(y':real^3#real^3#real^3#real^3)`;`n:num`]
5642 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
5643 THEN STRIP_TAC
5644 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`n:num`;]
5645 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y':real^3#real^3#real^3#real^3)`)
5646 THEN MRESA_TAC INJ_TRAN_D1_FAN
5647 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
5648 `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)`]
5649 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`]
5650 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`]
5651
5652 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)`]
5653 THEN POP_ASSUM MATCH_MP_TAC
5654 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x:real^3,V,E)) ((f1_fan x V E POWER n) y') IN
5655       face_set (hypermap1_of_fanx (x,V,E))`ASSUME_TAC
5656 THENL[
5657
5658 REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
5659 THEN EXISTS_TAC`(f1_fan x V E POWER n) (y':real^3#real^3#real^3#real^3)`
5660 THEN ASM_REWRITE_TAC[face];
5661
5662 MRESA_TAC f1_fan_power_in_face_imp_in_face[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
5663 `(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`]
5664 THEN POP_ASSUM MATCH_MP_TAC
5665 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
5666 THEN EXISTS_TAC`0:num`
5667 THEN REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]]]);;
5668
5669
5670
5671
5672
5673
5674 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.
5675 FAN(x,V,E)
5676  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5677 /\ fan80(x,V,E)
5678 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5679 /\ {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)
5680 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5681 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5682 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5683 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
5684 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5685 /\ (x,w,v,u)=f10
5686 /\ (x,v,u,w)=f20
5687 /\ (x,u,w,v)=f30
5688 /\ E UNION {{v,w}}= E1
5689 ==> ds1 IN face_set (hypermap1_of_fanx (x,V,E1))`,
5690
5691
5692 REPEAT STRIP_TAC
5693 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5694 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5695 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)))`]
5696 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)))`]
5697 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)`;]
5698 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5699 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5700 THEN ASM_REWRITE_TAC[face_set;face;set_of_orbits;IN_ELIM_THM]
5701 THEN EXISTS_TAC`(x,v:real^3,w,sigma_fan x V E1 v w)`
5702 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
5703 THEN EXISTS_TAC`x:real^3`
5704 THEN EXISTS_TAC`v:real^3`
5705 THEN EXISTS_TAC`w:real^3`
5706 THEN EXISTS_TAC`sigma_fan x V E1 v w:real^3`
5707 THEN ASM_REWRITE_TAC[]
5708 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`);;
5709
5710
5711
5712 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.
5713 FAN(x,V,E)
5714  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5715 /\ fan80(x,V,E)
5716 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5717 /\ {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)
5718 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5719 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5720 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5721 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
5722 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
5723 /\ (x,w,v,u)=f10
5724 /\ (x,v,u,w)=f20
5725 /\ (x,u,w,v)=f30
5726 /\ E UNION {{v,w}}= E1
5727 ==> ds2 IN face_set (hypermap1_of_fanx (x,V,E1))`,
5728
5729 REPEAT STRIP_TAC
5730 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5731 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5732 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)))`]
5733 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)))`]
5734 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)`;]
5735 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5736 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5737 THEN ASM_REWRITE_TAC[face_set;face;set_of_orbits;IN_ELIM_THM]
5738 THEN EXISTS_TAC`(x,w:real^3,v,sigma_fan x V E1 w v)`
5739 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
5740 THEN EXISTS_TAC`x:real^3`
5741 THEN EXISTS_TAC`w:real^3`
5742 THEN EXISTS_TAC`v:real^3`
5743 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
5744 THEN ASM_REWRITE_TAC[]
5745 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`
5746 THEN SET_TAC[]);;
5747
5748
5749
5750
5751
5752 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.
5753 FAN(x,V,E)
5754 /\ y = (f1_fan x V E POWER n) y1
5755 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
5756 /\ d_fan (x,V,E) =d1_fan (x,V,E)
5757 /\ y1 IN ds
5758 ==> y IN ds`,
5759 INDUCT_TAC
5760 THENL[MESON_TAC[POWER;I_DEF];
5761 POP_ASSUM MP_TAC
5762 THEN DISCH_THEN(LABEL_TAC"LINH")
5763 THEN REPEAT STRIP_TAC
5764 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])
5765 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`]]);;
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777 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.
5778 FAN(x,V,E)
5779  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
5780 /\ fan80(x,V,E)
5781 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
5782 /\ {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)
5783 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
5784 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
5785 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
5786 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
5787 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
5788 /\ (x,w,v,u)=f10
5789 /\ (x,v,u,w)=f20
5790 /\ (x,u,w,v)=f30
5791 /\ E UNION {{v,w}}= E1
5792 /\  f IN (face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 ) DELETE ds2
5793 ==> ?ds0. ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
5794 /\ tranf x V E E1 ds0=f`,
5795
5796 REPEAT STRIP_TAC
5797 THEN POP_ASSUM MP_TAC
5798 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5799 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
5800 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)))`]
5801 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)))`]
5802 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)`;]
5803 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
5804 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
5805 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;face_set;set_of_orbits;]
5806 THEN STRIP_TAC
5807 THEN FIND_ASSUM(MP_TAC) `x' IN d1_fan (x:real^3,V,E1)`
5808 THEN GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[d1_fan;]
5809 THEN REWRITE_TAC[IN_ELIM_THM;]
5810 THEN STRIP_TAC
5811 THEN POP_ASSUM MP_TAC
5812 THEN DISCH_THEN(LABEL_TAC"NHO")
5813 THEN SUBGOAL_THEN`{v', w':real^3} IN E`ASSUME_TAC
5814 THENL(*1*)[
5815 FIND_ASSUM(MP_TAC) `{v', w':real^3} IN E1`
5816 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`
5817 THEN STRIP_TAC
5818 THEN ASM_REWRITE_TAC[]
5819 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5820 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5821 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5822 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5823 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5824 THEN POP_ASSUM (fun th -> ASM_TAC THEN ASM_REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5825 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)) =
5826       res (f1_fan x V E1) (d1_fan (x,V,E1))`
5827 THEN POP_ASSUM MP_TAC
5828 THEN POP_ASSUM MP_TAC
5829 THEN ASM_REWRITE_TAC[]
5830 THEN SET_TAC[];(*1*)
5831
5832
5833
5834 ABBREV_TAC`y=(x,(v':real^3),w',sigma_fan x V E v' w')`
5835 THEN SUBGOAL_THEN`y IN d1_fan(x:real^3,V,E)`ASSUME_TAC
5836 THENL(*2*)[
5837 ASM_REWRITE_TAC[face;d1_fan;IN_ELIM_THM]
5838 THEN EXISTS_TAC`x:real^3`
5839 THEN EXISTS_TAC`v':real^3`
5840 THEN EXISTS_TAC`w':real^3`
5841 THEN EXISTS_TAC`sigma_fan x V E v' (w':real^3)`
5842 THEN EXPAND_TAC"y"
5843 THEN ASM_REWRITE_TAC[];(*2*)
5844
5845
5846 EXISTS_TAC`face (hypermap1_of_fanx (x:real^3,V,E)) (y:real^3#real^3#real^3#real^3)`
5847 THEN SUBGOAL_THEN `((?x'. x' IN d1_fan (x,V,E) /\
5848        face (hypermap1_of_fanx (x,V,E)) y =
5849        orbit_map (res (f1_fan x V E) (d1_fan (x,V,E))) x') /\
5850   ~(face (hypermap1_of_fanx (x,V,E)) y = ds)) ` ASSUME_TAC
5851
5852 THENL(*3*)[
5853
5854 STRIP_TAC
5855 THENL(*4*)[
5856
5857 EXISTS_TAC`y:real^3#real^3#real^3#real^3`
5858 THEN ASM_REWRITE_TAC[face];(*4*)
5859
5860 STRIP_TAC
5861 THEN MP_TAC(SET_RULE`{f1, f2, (f3:real^3#real^3#real^3#real^3)} SUBSET ds ==> f2 IN ds`)
5862 THEN ASM_REWRITE_TAC[]
5863 THEN POP_ASSUM MP_TAC
5864 THEN DISCH_THEN(LABEL_TAC"ME")
5865 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)))`]
5866 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
5867 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`]
5868
5869 THEN MP_TAC(ARITH_RULE`(CARD (ds:real^3#real^3#real^3#real^3->bool)):num>3
5870 ==> ~((CARD (ds:real^3#real^3#real^3#real^3->bool)):num =0)`)
5871 THEN RESA_TAC
5872 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`]
5873 THEN REMOVE_THEN "ME"(fun th-> REWRITE_TAC[SYM th;face;])
5874 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
5875 THEN STRIP_TAC
5876 THEN POP_ASSUM MP_TAC
5877 THEN DISJ_CASES_TAC(ARITH_RULE`k=0 \/ k=1\/ k>=2`)
5878 THENL(*5*)[
5879
5880 ASM_REWRITE_TAC[POWER;I_DEF]
5881 THEN POP_ASSUM MP_TAC
5882 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5883 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5884 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5885 THEN STRIP_TAC THEN STRIP_TAC
5886 THEN FIND_ASSUM(MP_TAC)`pr2 f2 = u:real^3`
5887 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
5888 THEN EXPAND_TAC"y"
5889 THEN REWRITE_TAC[pr2]
5890 THEN STRIP_TAC
5891 THEN FIND_ASSUM(MP_TAC)`pr3 f2 = w`
5892 THEN REWRITE_TAC[th]
5893 THEN EXPAND_TAC"y"
5894 THEN REWRITE_TAC[pr3]
5895 THEN STRIP_TAC)
5896 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5897 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5898  THEN REMOVE_ASSUM_TAC
5899 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5900 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5901 THEN ASM_REWRITE_TAC[]
5902 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5903 `v:real^3`; `w:real^3` ]
5904 THEN POP_ASSUM MP_TAC
5905 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5906 THEN RESA_TAC
5907 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
5908 THEN POP_ASSUM MP_TAC
5909 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
5910 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
5911 `(u:real^3)`]
5912 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5913 `(v:real^3)`]
5914 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
5915 THEN RESA_TAC
5916 THEN RESA_TAC
5917 THEN STRIP_TAC
5918 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5919 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5920 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
5921 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f30 IN ds2`)
5922 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5923 THEN STRIP_TAC
5924 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)`;
5925 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
5926 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)`]
5927 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5928 THEN ASM_MESON_TAC[];(*5*)
5929
5930
5931
5932 POP_ASSUM MP_TAC
5933 THEN STRIP_TAC
5934 THENL(*6*)[
5935
5936 ASM_REWRITE_TAC[POWER_1]
5937 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]
5938 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
5939 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5940 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5941 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5942 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5943 THEN STRIP_TAC
5944 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`]
5945 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
5946 ==> f1 IN d1_fan(x,V,E)`)
5947 THEN RESA_TAC
5948 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
5949 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)`])
5950 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
5951 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
5952 THEN EXPAND_TAC"y"
5953 THEN REWRITE_TAC[pr2]
5954 THEN STRIP_TAC
5955 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
5956 THEN REWRITE_TAC[th]
5957 THEN EXPAND_TAC"y"
5958 THEN REWRITE_TAC[pr3]
5959 THEN STRIP_TAC)
5960 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5961 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5962 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5963 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5964 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5965 THEN REMOVE_ASSUM_TAC
5966 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5967 THEN ASM_REWRITE_TAC[]
5968 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)`;
5969 `v:real^3`;`u:real^3`; `w:real^3` ]
5970 THEN STRIP_TAC
5971 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
5972 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
5973 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
5974 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f20 IN ds2`)
5975 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
5976 THEN STRIP_TAC
5977 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)`;
5978 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
5979 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)`]
5980 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
5981 THEN ASM_MESON_TAC[];(*6*)
5982
5983
5984 SUBGOAL_THEN`?m. k=SUC (SUC m)/\ m>=0`ASSUME_TAC
5985 THENL(*7*)[
5986 EXISTS_TAC`k-2:num`
5987 THEN REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
5988 THEN POP_ASSUM MP_TAC
5989 THEN ARITH_TAC;(*7*)
5990
5991 POP_ASSUM MP_TAC
5992 THEN POP_ASSUM MP_TAC
5993 THEN POP_ASSUM MP_TAC
5994 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5995 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5996 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5997 THEN REPEAT RESA_TAC
5998 THEN POP_ASSUM MP_TAC
5999 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]
6000 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
6001 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6002 THEN REMOVE_ASSUM_TAC
6003 THEN REWRITE_TAC[COM_POWER;o_DEF]
6004 THEN POP_ASSUM MP_TAC
6005 THEN POP_ASSUM MP_TAC
6006 THEN REMOVE_ASSUM_TAC
6007 THEN POP_ASSUM MP_TAC
6008 THEN DISCH_THEN(LABEL_TAC"CHUYEN")
6009 THEN DISCH_TAC
6010 THEN REMOVE_THEN "CHUYEN" MP_TAC
6011 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
6012 THEN REMOVE_ASSUM_TAC
6013 THEN STRIP_TAC
6014 THEN MP_TAC(ARITH_RULE`(m + 1) + 1 < CARD (ds:real^3# real^3#real^3#real^3->bool)==> m< CARD ds -2`)
6015 THEN ASM_REWRITE_TAC[]
6016 THEN REMOVE_ASSUM_TAC
6017 THEN STRIP_TAC
6018 THEN ASM_TAC
6019 THEN SPEC_TAC (`m:num`,`m:num`)
6020 THEN INDUCT_TAC
6021
6022 THENL(*8*)[
6023
6024 ASM_REWRITE_TAC[POWER;I_DEF]
6025 THEN REPEAT STRIP_TAC
6026 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`]
6027 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
6028 ==> f1 IN d1_fan(x,V,E)`)
6029 THEN RESA_TAC
6030 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
6031 THEN POP_ASSUM(fun th-> MRESA1_TAC th` y:real^3#real^3#real^3#real^3`)
6032
6033 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
6034 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)`])
6035 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
6036 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
6037 THEN EXPAND_TAC"y"
6038 THEN REWRITE_TAC[pr2;f1_fan]
6039 THEN STRIP_TAC
6040 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
6041 THEN REWRITE_TAC[th]
6042 THEN EXPAND_TAC"y"
6043 THEN REWRITE_TAC[pr3;f1_fan]
6044 THEN STRIP_TAC)
6045 THEN POP_ASSUM MP_TAC
6046 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC THEN ASSUME_TAC th)
6047 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`]
6048 THEN REMOVE_ASSUM_TAC
6049 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v':real^3`)
6050 THEN POP_ASSUM MP_TAC
6051 THEN REWRITE_TAC[]
6052 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6053 THEN RESA_TAC
6054 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)`;
6055 `v:real^3`;`u:real^3`; `w:real^3` ]
6056 THEN SUBGOAL_THEN`((x,v:real^3,w,sigma_fan x V E1 v w)=f1_fan x V E1 x')`ASSUME_TAC
6057 THENL(*9*)[
6058 ASM_REWRITE_TAC[f1_fan;PAIR_EQ]
6059 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6060 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6061 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
6062 THEN POP_ASSUM MP_TAC
6063 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`
6064 THEN RESA_TAC;(*9*)
6065 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
6066 THENL(*10*)[
6067
6068 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
6069 THEN EXISTS_TAC`0:num`
6070 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*10*)
6071
6072 POP_ASSUM MP_TAC
6073 THEN ASM_REWRITE_TAC[]
6074 THEN STRIP_TAC
6075 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)`;
6076 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
6077 THEN FIND_ASSUM(MP_TAC)`x' IN d1_fan (x:real^3,V,E1)`
6078 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`x' = (x'',v',v,(w1:real^3)):real^3#real^3#real^3#real^3`
6079 THEN ASM_REWRITE_TAC[]
6080 THEN STRIP_TAC
6081 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`]
6082 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`]
6083 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[]
6084 THEN STRIP_TAC
6085 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
6086 )`x' = (x'',v',v,(w1:real^3)):real^3#real^3#real^3#real^3`
6087 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC)
6088 THEN ASM_MESON_TAC[]](*10*)](*9*);(*8*)
6089
6090 POP_ASSUM MP_TAC
6091 THEN DISCH_THEN(LABEL_TAC"A")
6092 THEN REPEAT STRIP_TAC
6093 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6094 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6095 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
6096 THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"NHO")
6097 THEN REPEAT STRIP_TAC
6098 THEN POP_ASSUM MP_TAC
6099 THEN REMOVE_THEN "A" MP_TAC
6100 THEN MP_TAC(ARITH_RULE`SUC m < CARD (ds:real^3# real^3#real^3#real^3->bool) - 2==> m < CARD ds - 2`)
6101 THEN RESA_TAC
6102 THEN ASM_REWRITE_TAC[ARITH_RULE`m>=0`]
6103 THEN STRIP_TAC
6104 THEN ABBREV_TAC`y1=(f1_fan (x:real^3) V E POWER SUC(m)) y`
6105 THEN STRIP_TAC
6106 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`]
6107 THEN MP_TAC(SET_RULE`ds SUBSET d1_fan (x,V,E) /\ {f1, f2, f3} SUBSET ds
6108 ==> f1 IN d1_fan(x,V,E)`)
6109 THEN RESA_TAC
6110 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`SUC m:num`;]
6111 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
6112 THEN MRESA_TAC into_domain1_f1_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;]
6113 THEN POP_ASSUM(fun th-> MRESA1_TAC th` y1:real^3#real^3#real^3#real^3`)
6114 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
6115 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)`])
6116 THEN POP_ASSUM MP_TAC
6117 THEN REMOVE_ASSUM_TAC
6118 THEN POP_ASSUM(fun th-> MP_TAC th  THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN ASSUME_TAC th THEN STRIP_TAC)
6119 THEN ASM_REWRITE_TAC[f1_fan]
6120 THEN STRIP_TAC
6121 THEN FIND_ASSUM(MP_TAC)`pr2 f1 = v:real^3`
6122 THEN POP_ASSUM(fun th-> REWRITE_TAC[th]
6123 THEN REWRITE_TAC[pr2;]
6124 THEN STRIP_TAC
6125 THEN FIND_ASSUM(MP_TAC)`pr3 f1 = u`
6126 THEN REWRITE_TAC[pr3;th]
6127 THEN STRIP_TAC)
6128 THEN POP_ASSUM MP_TAC
6129 THEN REMOVE_THEN "NHO" MP_TAC
6130 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)
6131 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`]
6132 THEN REMOVE_ASSUM_TAC
6133 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v'':real^3`)
6134 THEN POP_ASSUM MP_TAC
6135 THEN REWRITE_TAC[]
6136 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6137 THEN RESA_TAC
6138 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)`;
6139 `v:real^3`;`u:real^3`; `w:real^3` ]
6140 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
6141 THENL(*9*)[
6142
6143 ASM_REWRITE_TAC[f1_fan;PAIR_EQ]
6144 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6145 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6146 THEN POP_ASSUM(fun th-> MRESA1_TAC th`w:real^3`)
6147 THEN POP_ASSUM MP_TAC
6148 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`
6149 THEN RESA_TAC;(*9*)
6150
6151 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
6152 THENL(*10*)[
6153
6154 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
6155 THEN EXISTS_TAC`0:num`
6156 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*10*)
6157
6158 POP_ASSUM MP_TAC
6159 THEN ASM_REWRITE_TAC[]
6160 THEN STRIP_TAC
6161 THEN SUBGOAL_THEN`x,v'',v,sigma_fan x V E1 v'' v IN d1_fan (x:real^3,V,E1)`ASSUME_TAC
6162 THENL(*11*)[
6163
6164 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6165 THEN EXISTS_TAC`x:real^3`
6166 THEN EXISTS_TAC`v'':real^3`
6167 THEN EXISTS_TAC`v:real^3`
6168 THEN EXISTS_TAC`sigma_fan x V E1 v'' v:real^3`
6169 THEN ASM_REWRITE_TAC[]
6170 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*)
6171
6172 MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6173 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
6174 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`]
6175 THEN POP_ASSUM MP_TAC
6176 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
6177 THENL(*12*)[
6178 ASM_REWRITE_TAC[tran];(*12*)
6179
6180 ASM_REWRITE_TAC[]
6181 THEN REMOVE_THEN "NHO" MP_TAC
6182 THEN FIND_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC
6183 THEN ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[]
6184 THEN STRIP_TAC
6185 THEN POP_ASSUM (fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[SYM th])
6186 THEN POP_ASSUM MP_TAC
6187 THEN DISCH_THEN(LABEL_TAC"NHO")
6188 THEN ASSUME_TAC (SYM th)
6189 THEN POP_ASSUM MP_TAC
6190 THEN DISCH_THEN(LABEL_TAC"AN")
6191 )`y1 = (x''',v'',v,(w1':real^3)):real^3#real^3#real^3#real^3`
6192 THEN MRESAL_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`1:num`;][POWER_1]
6193 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`)
6194 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
6195 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6196 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6197 ;`ds1:real^3#real^3#real^3#real^3->bool`
6198 ;`ds2:real^3#real^3#real^3#real^3->bool`
6199 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6200 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m:num`]
6201 THEN POP_ASSUM MP_TAC
6202 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6203 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)) )`]
6204 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6205 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6206 THEN MP_TAC (SET_RULE`{f1, f2:real^3#real^3#real^3#real^3, f3} SUBSET ds==> f2 IN ds`)
6207 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6208 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`;]
6209 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`;]
6210 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
6211 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`;]
6212 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]
6213 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)`]
6214 THEN POP_ASSUM MP_TAC
6215 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
6216 THEN REMOVE_ASSUM_TAC
6217 THEN POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[face] THEN STRIP_TAC
6218 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;lemma_def_inj_orbit])
6219 THEN REMOVE_ASSUM_TAC
6220 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`)
6221 THEN ASM_REWRITE_TAC[]
6222 THEN STRIP_TAC
6223 THEN STRIP_TAC
6224 THEN POP_ASSUM (fun th-> MRESA1_TAC th `CARD (ds:real^3#real^3#real^3#real^3->bool) -1 :num`)
6225 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
6226 THENL(*13*)[
6227 POP_ASSUM MP_TAC
6228 THEN DISCH_THEN(LABEL_TAC"LINH")
6229 THEN REPEAT STRIP_TAC
6230 THENL(*14*)[
6231
6232 POP_ASSUM MP_TAC
6233 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)))`]
6234 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6235 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)))`]
6236 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6237 THEN REMOVE_THEN "LINH"(fun th-> MRESA_TAC th [`SUC (m:num)`;`m':num`;]);(*14*)
6238
6239
6240 POP_ASSUM MP_TAC
6241 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)))`]
6242 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6243 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)))`]
6244 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
6245 THEN MP_TAC (ARITH_RULE`m'< SUC m ==> m'< SUC(SUC(SUC m)) `)
6246 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6247 THEN REMOVE_THEN "LINH"(fun th-> MRESA_TAC th [`SUC (SUC (SUC (m:num)))`;`m':num`;])
6248 THEN REMOVE_THEN "AN" MP_TAC
6249 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
6250 THEN EXPAND_TAC"y1"
6251 THEN POP_ASSUM MP_TAC
6252 THEN REWRITE_TAC[COM_POWER;o_DEF;SET_RULE`~(A=B)<=> ~(B=A)`]](*14*);(*13*)
6253
6254 POP_ASSUM MP_TAC
6255 THEN DISCH_THEN(LABEL_TAC"LINH")
6256 THEN SUBGOAL_THEN`!m'. m' < SUC m
6257             ==> (~(pr2 ((f1_fan x V E POWER m') y) = v'') /\
6258             pr3 ((f1_fan x V E POWER m') y) = v) \/
6259             (~(pr2 ((f1_fan x V E POWER m') y) = u) /\
6260             pr3 ((f1_fan x V E POWER m') y) = w) \/
6261 ~(pr3 ((f1_fan x V E POWER m') y) IN {v, w})` ASSUME_TAC
6262 THENL(*14*)[
6263
6264 REPEAT STRIP_TAC
6265 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`m':num`)
6266 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`;]
6267 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`]
6268 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)`)
6269 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6270 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]
6271 THEN POP_ASSUM MP_TAC
6272 THEN REMOVE_THEN "AN"(fun th-> REWRITE_TAC[SYM th;pr2;pr3])
6273 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]
6274 THEN POP_ASSUM MP_TAC
6275 THEN SET_TAC[];(*14*)
6276
6277 ASM_REWRITE_TAC[] THEN STRIP_TAC
6278 THEN ASM_REWRITE_TAC[POWER] THEN STRIP_TAC
6279 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]
6280 THEN POP_ASSUM MP_TAC
6281 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th;tran])`x,(v':real^3),w',sigma_fan x V E v' w' = y`
6282 THEN ASM_REWRITE_TAC[]
6283 THEN REMOVE_THEN "NHO" MP_TAC
6284 THEN ASM_REWRITE_TAC[]
6285 THEN DISCH_TAC
6286 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)]
6287 THEN ASM_REWRITE_TAC[]
6288 THEN STRIP_TAC
6289 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`]
6290 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[]
6291 THEN STRIP_TAC
6292 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;face] THEN REPEAT STRIP_TAC)
6293 )
6294 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;] THEN REPEAT STRIP_TAC)
6295 THEN ASM_MESON_TAC[]](*14*)](*13*)](*12*)](*11*)](*10*)](*9*)]
6296
6297 (*8*)](*7*)](*6*)](*5*)](*4*);(*3*)
6298
6299 ASM_REWRITE_TAC[]
6300 THEN MRESAL_TAC unique_tranf_fan
6301 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6302 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6303 ;`ds1:real^3#real^3#real^3#real^3->bool`
6304 ;`ds2:real^3#real^3#real^3#real^3->bool`
6305 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6306 ; `(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`
6307 ;`(f:real^3#real^3#real^3#real^3->bool)`
6308 ;`(y:real^3#real^3#real^3#real^3)`;][face]
6309 THEN POP_ASSUM MATCH_MP_TAC
6310 THEN POP_ASSUM MP_TAC
6311 THEN POP_ASSUM MP_TAC
6312 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;tran;face])
6313 THEN ASM_REWRITE_TAC[]
6314 THEN REPEAT STRIP_TAC
6315 THENL(*4*)[
6316 REWRITE_TAC[orbit_map;IN_ELIM_THM]
6317 THEN EXISTS_TAC`0`
6318 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*4*)
6319
6320 POP_ASSUM MP_TAC
6321 THEN ASM_REWRITE_TAC[]
6322 THEN STRIP_TAC
6323 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;face_set;set_of_orbits]
6324 THEN EXISTS_TAC`x''':real^3#real^3#real^3#real^3`
6325 THEN ASM_REWRITE_TAC[]
6326
6327 ]]]]);;
6328
6329
6330 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.
6331 FAN(x,V,E)
6332  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6333 /\ fan80(x,V,E)
6334 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6335 /\ {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)
6336 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6337 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6338 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6339 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6340 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6341 /\ (x,w,v,u)=f10
6342 /\ (x,v,u,w)=f20
6343 /\ (x,u,w,v)=f30
6344 /\ E UNION {{v,w}}= E1
6345 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
6346       ==> tranf x V E E1 ds0 IN
6347           face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 DELETE ds2`,
6348
6349
6350 REWRITE_TAC[DELETE;IN_ELIM_THM;]
6351 THEN REPEAT STRIP_TAC
6352 THEN POP_ASSUM MP_TAC
6353 THEN POP_ASSUM MP_TAC
6354 THEN DISCH_THEN(LABEL_TAC"LINH")
6355 THEN DISCH_THEN(LABEL_TAC"LINK")
6356 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6357 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6358 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)))`]
6359 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)))`]
6360 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)`;]
6361 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6362 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6363 THEN MRESAL_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6364 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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]
6365 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`]
6366 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`]
6367 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`)
6368 THEN ASM_REWRITE_TAC[]
6369 THEN STRIP_TAC
6370 THEN MP_TAC(SET_RULE`y IN ds0/\ ds0 SUBSET d1_fan (x:real^3,V,E)==> y IN d1_fan (x,V,E)`)
6371 THEN ASM_REWRITE_TAC[]
6372 THEN STRIP_TAC
6373 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[d1_fan;IN_ELIM_THM] THEN STRIP_TAC
6374 THEN POP_ASSUM(fun th-> MP_TAC (SYM th) THEN DISCH_THEN(LABEL_TAC"NHO"))
6375 THEN ASSUME_TAC th)
6376 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`)
6377 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6378 THENL(*1*)[
6379
6380 REWRITE_TAC[face_set;face;IN_ELIM_THM;set_of_orbits]
6381 THEN EXISTS_TAC`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`
6382 THEN ASM_REWRITE_TAC[]
6383 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th;tran;d1_fan;IN_ELIM_THM])
6384 THEN EXISTS_TAC`x:real^3`
6385 THEN EXISTS_TAC`v':real^3`
6386 THEN EXISTS_TAC`w':real^3`
6387 THEN EXISTS_TAC`sigma_fan x V E1 v' (w':real^3)`
6388 THEN ASM_REWRITE_TAC[];(*1*)
6389
6390 REMOVE_THEN "LINH" MP_TAC
6391 THEN ASM_REWRITE_TAC[]
6392 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
6393 THENL(*2*)[
6394 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))`
6395 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`
6396 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6397 THEN EXISTS_TAC`0:num`
6398 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*2*)
6399
6400 POP_ASSUM MP_TAC
6401 THEN ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6402 THEN STRIP_TAC
6403 THEN POP_ASSUM MP_TAC
6404 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
6405 THENL(*3*)[
6406
6407 REMOVE_THEN "NHO" (fun th-> REWRITE_TAC[SYM th;tran;d1_fan;IN_ELIM_THM])
6408 THEN EXISTS_TAC`x:real^3`
6409 THEN EXISTS_TAC`v':real^3`
6410 THEN EXISTS_TAC`w':real^3`
6411 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
6412 THEN ASM_REWRITE_TAC[];(*3*)
6413
6414 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))))`]
6415 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
6416 THEN DISJ_CASES_TAC(ARITH_RULE`n=0\/ n=1\/ n:num>1`)
6417 THENL(*4*)[
6418
6419 REMOVE_THEN"NHO"(fun th-> ASM_REWRITE_TAC[SYM th;tran;POWER;I_DEF;EQ_PAIR_4])
6420 THEN STRIP_TAC
6421 THEN REMOVE_ASSUM_TAC
6422 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6423 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6424 THEN FIND_ASSUM MP_TAC`{v':real^3, w'} IN E`
6425 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6426 THEN ASM_REWRITE_TAC[];(*4*)
6427
6428 POP_ASSUM MP_TAC
6429 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
6430 THENL(*5*)[
6431 REWRITE_TAC[f1_fan;EQ_PAIR_4]
6432 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
6433 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);(*5*)
6434
6435 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
6436       d1_fan (x,V,E1)` ASSUME_TAC
6437 THENL(*6*)[
6438 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6439 THEN EXISTS_TAC`x:real^3`
6440 THEN EXISTS_TAC`sigma_fan x V E1 v w:real^3`
6441 THEN EXISTS_TAC`v:real^3`
6442 THEN EXISTS_TAC`sigma_fan x V E1 (sigma_fan x V E1 v w ) v :real^3`
6443 THEN ASM_REWRITE_TAC[]
6444 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`  (w:real^3)`;
6445 `v:real^3`]
6446 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6447 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`]
6448 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)`;
6449 `v:real^3`];(*6*)
6450
6451
6452 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
6453 THENL(*7*)[
6454
6455 REWRITE_TAC[f1_fan;EQ_PAIR_4]
6456 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`v:real^3`]
6457 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
6458 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]
6459 THEN POP_ASSUM MATCH_MP_TAC
6460 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6461 THEN EXISTS_TAC`x:real^3`
6462 THEN EXISTS_TAC`v:real^3`
6463 THEN EXISTS_TAC`u:real^3`
6464 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
6465 THEN ASM_REWRITE_TAC[];(*7*)
6466
6467 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
6468       d1_fan (x,V,E)` ASSUME_TAC
6469 THENL(*8*)[
6470
6471 REWRITE_TAC[d1_fan;IN_ELIM_THM]
6472 THEN EXISTS_TAC`x:real^3`
6473 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
6474 THEN EXISTS_TAC`v:real^3`
6475 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
6476 THEN ASM_REWRITE_TAC[]
6477 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
6478 `v:real^3`]
6479 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6480 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`]
6481 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*)
6482
6483
6484 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`;]
6485 THEN STRIP_TAC
6486 THENL(*9*)[
6487
6488 ASM_REWRITE_TAC[POWER_1]
6489 THEN STRIP_TAC
6490 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
6491 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))`])
6492 THEN POP_ASSUM MP_TAC
6493 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" ))
6494 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)`;
6495 `v:real^3`;`u:real^3`; `w:real^3` ]
6496 THEN STRIP_TAC
6497 THEN REMOVE_ASSUM_TAC
6498 THEN REMOVE_THEN"NHO" MP_TAC
6499 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6500 THEN POP_ASSUM MP_TAC
6501 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6502 THEN POP_ASSUM MP_TAC
6503 THEN ASM_REWRITE_TAC[]
6504 THEN STRIP_TAC
6505 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6506 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)`]
6507 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*)
6508
6509 SUBGOAL_THEN`?m. n=SUC (SUC m)/\ m>=0`ASSUME_TAC
6510 THENL(*10*)[
6511 EXISTS_TAC`n-2:num`
6512 THEN REWRITE_TAC[ARITH_RULE`SUC n= n+1`]
6513 THEN POP_ASSUM MP_TAC
6514 THEN ARITH_TAC;(*10*)
6515
6516 POP_ASSUM MP_TAC
6517 THEN STRIP_TAC
6518 THEN ASM_REWRITE_TAC[]
6519 THEN ONCE_REWRITE_TAC[COM_POWER]
6520 THEN REWRITE_TAC[o_DEF]
6521 THEN STRIP_TAC
6522 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool) `;`SUC m:num`;]
6523 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
6524 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`]
6525 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))`])
6526 THEN POP_ASSUM MP_TAC
6527 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)`
6528 THEN DISJ_CASES_TAC(SET_RULE`~((y:real^3#real^3#real^3#real^3) IN ds)\/ y IN ds`)
6529 THENL(*11*)[
6530
6531 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
6532
6533 THENL(*12*)[
6534 REPEAT STRIP_TAC
6535 THENL(*13*)[
6536
6537 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*)
6538
6539 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*)
6540
6541
6542
6543
6544 POP_ASSUM MP_TAC
6545 THEN DISCH_THEN(LABEL_TAC"LINH")
6546 THEN SUBGOAL_THEN`!m'. m' < SUC m
6547             ==> (~(pr2 ((f1_fan x V E POWER m') y) = sigma_fan x V E v u) /\
6548             pr3 ((f1_fan x V E POWER m') y) = v) \/
6549             (~(pr2 ((f1_fan x V E POWER m') y) = u) /\
6550             pr3 ((f1_fan x V E POWER m') y) = w) \/
6551 ~(pr3 ((f1_fan x V E POWER m') y) IN {v, w})` ASSUME_TAC
6552 THENL(*13*)[
6553 REPEAT STRIP_TAC
6554 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`m':num`)
6555 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`;]
6556 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)`)
6557 THEN FIND_ASSUM (fun th->REWRITE_TAC[SYM th])`f1 = f1_fan x V E (y1:real^3#real^3#real^3#real^3)`
6558 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`]
6559 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6560 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]
6561 THEN POP_ASSUM MP_TAC
6562 THEN EXPAND_TAC"y1"
6563 THEN REWRITE_TAC[pr2;pr3]
6564 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]
6565 THEN POP_ASSUM MP_TAC
6566 THEN SET_TAC[];(*13*)
6567
6568 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
6569 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6570 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6571 ;`ds1:real^3#real^3#real^3#real^3->bool`
6572 ;`ds2:real^3#real^3#real^3#real^3->bool`
6573 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6574 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m:num`]
6575 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6576 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
6577 THENL(*14*)[
6578
6579 EXPAND_TAC"y1"
6580 THEN REWRITE_TAC[tran]
6581 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)`;
6582 `v:real^3`;`u:real^3`; `w:real^3` ];(*14*)
6583
6584
6585 ASM_REWRITE_TAC[]
6586 THEN STRIP_TAC
6587 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`]
6588 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`)
6589 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6590 THEN MRESA_TAC INJ_TRAN_D1_FAN
6591 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
6592 `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)`]
6593 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*)
6594
6595
6596 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)`]
6597 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*)
6598
6599 REMOVE_THEN "LINH" MP_TAC
6600 THEN ASM_REWRITE_TAC[]
6601 THEN SUBGOAL_THEN`tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3) IN ds2` ASSUME_TAC
6602 THENL(*2*)[
6603
6604 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
6605 THEN EXISTS_TAC`0:num`
6606 THEN ASM_REWRITE_TAC[ARITH_RULE`0 >=0 `;POWER;I_DEF];(*2*)
6607 POP_ASSUM MP_TAC
6608 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6609 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
6610 THEN STRIP_TAC
6611 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`)
6612 THEN ASM_REWRITE_TAC[]
6613 THEN STRIP_TAC
6614 THENL(*3*)[
6615 POP_ASSUM MP_TAC
6616 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran])
6617 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`
6618 THEN STRIP_TAC
6619 THEN REMOVE_ASSUM_TAC
6620 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6621 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6622 THEN FIND_ASSUM MP_TAC`{w, v:real^3} IN E`
6623 THEN FIND_ASSUM MP_TAC`~({w, v:real^3} IN E)`
6624 THEN SET_TAC[];(*3*)
6625
6626 POP_ASSUM MP_TAC
6627 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran]THEN ASSUME_TAC (SYM(th)))
6628 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`
6629 THEN STRIP_TAC
6630 THEN REMOVE_ASSUM_TAC
6631 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6632 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6633 THEN SUBGOAL_THEN `f1=y:real^3#real^3#real^3#real^3`ASSUME_TAC
6634 THENL(*4*)[
6635 ASM_REWRITE_TAC[]
6636 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]
6637 THEN POP_ASSUM MATCH_MP_TAC
6638 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6639 THEN EXISTS_TAC`x:real^3`
6640 THEN EXISTS_TAC`v:real^3`
6641 THEN EXISTS_TAC`u:real^3`
6642 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
6643 THEN ASM_REWRITE_TAC[];(*4*)
6644
6645
6646 MP_TAC(SET_RULE`f1=y /\ f1 IN ds ==> (y:real^3#real^3#real^3#real^3) IN ds`)
6647 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6648 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)`]
6649 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*)
6650
6651 POP_ASSUM MP_TAC
6652 THEN REMOVE_THEN"NHO"(fun th-> REWRITE_TAC[SYM th;tran]THEN ASSUME_TAC (SYM(th)))
6653 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`
6654 THEN STRIP_TAC
6655 THEN REMOVE_ASSUM_TAC
6656 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6657 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6658 THEN SUBGOAL_THEN `f2=y:real^3#real^3#real^3#real^3`ASSUME_TAC
6659 THENL(*4*)[
6660 ASM_REWRITE_TAC[]
6661 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`;]
6662 THEN POP_ASSUM MATCH_MP_TAC
6663 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
6664 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
6665 THEN EXISTS_TAC`x:real^3`
6666 THEN EXISTS_TAC`u:real^3`
6667 THEN EXISTS_TAC`w:real^3`
6668 THEN EXISTS_TAC`v :real^3`
6669 THEN ASM_REWRITE_TAC[];(*4*)
6670
6671 MP_TAC(SET_RULE`f2=y /\ f2 IN ds ==> (y:real^3#real^3#real^3#real^3) IN ds`)
6672 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6673 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)`]
6674 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)`]]]]]);;
6675
6676
6677
6678 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.
6679 FAN(x,V,E)
6680  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6681 /\ fan80(x,V,E)
6682 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6683 /\ {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)
6684 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6685 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6686 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6687 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6688 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6689 /\ (x,w,v,u)=f10
6690 /\ (x,v,u,w)=f20
6691 /\ (x,u,w,v)=f30
6692 /\ E UNION {{v,w}}= E1
6693 ==> CARD ((face_set (hypermap1_of_fanx (x,V,E1)) DELETE ds1 ) DELETE ds2 )= CARD (face_set (hypermap1_of_fanx (x,V,E)) DELETE ds) `,
6694
6695 REPEAT STRIP_TAC
6696 THEN MATCH_MP_TAC CARD_IMAGE_INJ_EQ
6697 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`
6698 THEN MRESAL1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`[FINITE_DELETE;EXISTS_UNIQUE]
6699 THEN STRIP_TAC
6700 THENL[
6701 REPEAT STRIP_TAC
6702 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
6703 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6704 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6705 ;`ds1:real^3#real^3#real^3#real^3->bool`
6706 ;`ds2:real^3#real^3#real^3#real^3->bool`
6707 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6708 ;`(x':real^3#real^3#real^3#real^3->bool)`;];
6709
6710 REPEAT STRIP_TAC
6711 THEN MRESA_TAC SUR_TRANF_FACE_DELETE_DS
6712 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6713 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6714 ;`ds1:real^3#real^3#real^3#real^3->bool`
6715 ;`ds2:real^3#real^3#real^3#real^3->bool`
6716 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6717 ;`(y:real^3#real^3#real^3#real^3->bool)`;]
6718 THEN EXISTS_TAC`ds0:real^3#real^3#real^3#real^3->bool`
6719 THEN ASM_REWRITE_TAC[]
6720 THEN STRIP_TAC
6721 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6722 THEN STRIP_TAC
6723 THEN MRESA_TAC INJ_TRANF_FACE_DELETE_DS
6724 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6725 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6726 ;`ds1:real^3#real^3#real^3#real^3->bool`
6727 ;`ds2:real^3#real^3#real^3#real^3->bool`
6728 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
6729 ;`(y':real^3#real^3#real^3#real^3->bool)`;`(ds0:real^3#real^3#real^3#real^3->bool)`]]);;
6730
6731
6732
6733
6734
6735 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.
6736 FAN(x,V,E)
6737  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6738 /\ fan80(x,V,E)
6739 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6740 /\ {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)
6741 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6742 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6743 /\ sigma_fan x V E u w = v
6744 /\ ~(v=w)
6745 /\ E UNION {{v,w}}=E1
6746 ==>
6747 CARD (dart (hypermap1_of_fanx (x,V,E1)))
6748 = CARD (dart (hypermap1_of_fanx (x,V,E))) +2`,
6749
6750 REPEAT STRIP_TAC
6751 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6752 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6753 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)))`]
6754 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)))`]
6755 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)`;]
6756 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6757 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6758 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`]
6759 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`)
6760 THEN ASM_REWRITE_TAC[]
6761 THEN STRIP_TAC
6762 THEN MRESAL_TAC card_eq_image_in_d_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`;
6763 `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)`]
6764 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6765 THEN MRESAL_TAC card_eq_image_in_d_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`;
6766 `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)`]
6767 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6768 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)`;
6769 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6770 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6771 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))`]
6772 THEN MRESA_TAC CARD_UNION[`IMAGE pr23 (d1_fan ((x:real^3),V,E))`;`{(v,w), (w,(v:real^3))}`]
6773 THEN POP_ASSUM MP_TAC
6774 THEN ASM_SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
6775                  IN_INSERT; NOT_IN_EMPTY;PAIR_EQ;SET_RULE`v = w /\ w = v <=> v=w`;ARITH_RULE`SUC(SUC 0)=2`]
6776 THEN STRIP_TAC
6777 THEN POP_ASSUM MATCH_MP_TAC
6778 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM;NOT_IN_EMPTY;PR23_OF_D1_FAN;SET_RULE`x' IN {(v,w), (w,v)}
6779 <=> x'=(v,w) \/ x'=(w,v)`]
6780 THEN GEN_TAC
6781 THEN STRIP_TAC
6782 THEN POP_ASSUM MP_TAC
6783 THEN ASM_REWRITE_TAC[PAIR_EQ]
6784 THEN STRIP_TAC
6785 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6786 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6787 THEN REMOVE_ASSUM_TAC
6788 THEN POP_ASSUM MP_TAC
6789 THEN ASM_REWRITE_TAC[]
6790 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6791 THEN ASM_REWRITE_TAC[]);;
6792
6793
6794 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.
6795 FAN(x,V,E)
6796  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6797 /\ fan80(x,V,E)
6798 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6799 /\ {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)
6800 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6801 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6802 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6803 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6804 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6805 /\ (x,w,v,u)=f10
6806 /\ (x,v,u,w)=f20
6807 /\ (x,u,w,v)=f30
6808 /\ E UNION {{v,w}}= E1
6809 ==> N_FAN (x,V,E1)< N_FAN(x,V,E)`,
6810
6811 REPEAT STRIP_TAC
6812 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6813 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6814 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)))`]
6815 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)))`]
6816 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)`;]
6817 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6818 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6819 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`]
6820 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`)
6821 THEN ASM_REWRITE_TAC[]
6822 THEN STRIP_TAC
6823 THEN REWRITE_TAC[N_FAN]
6824 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E)`
6825 THEN MRESA1_TAC FINITE_HYPERMAP_ORBITS`hypermap1_of_fanx (x:real^3,V:real^3->bool,E1)`
6826 THEN MRESA_TAC NSUM_CONST[`3:num`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E1)))`]
6827 THEN MRESA_TAC NSUM_CONST[`3:num`;`(face_set (hypermap1_of_fanx ((x:real^3),V,E)))`]
6828 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
6829 THENL[
6830 ASM_REWRITE_TAC[]
6831 THEN REPEAT STRIP_TAC
6832 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`]
6833 THEN POP_ASSUM MP_TAC
6834 THEN ARITH_TAC;
6835 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
6836 THENL[
6837 ASM_REWRITE_TAC[]
6838 THEN REPEAT STRIP_TAC
6839 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`]
6840 THEN POP_ASSUM MP_TAC
6841 THEN ARITH_TAC;
6842 MP_TAC(SET_RULE` E UNION {{v,w:real^3}}= E1
6843 ==> {v,w} IN E1`)
6844 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
6845 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
6846 `(v:real^3)`]
6847 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)))`]
6848 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)))`]
6849 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E1:(real^3->bool)->bool)`]
6850 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
6851 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)) )`]
6852 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6853 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6854 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)) )`]
6855 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6856 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
6857 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))`]
6858 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)))`]
6859 THEN POP_ASSUM MP_TAC
6860 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[face_set]
6861 THEN ASM_REWRITE_TAC[]
6862 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6863 THEN STRIP_TAC
6864 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))`]
6865 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)))`]
6866 THEN POP_ASSUM MP_TAC
6867 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[face_set]
6868 THEN ASM_REWRITE_TAC[]
6869 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
6870 THEN STRIP_TAC
6871 THEN MRESA_TAC CARD_DART_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6872 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6873 THEN POP_ASSUM MP_TAC
6874 THEN MRESA_TAC EQ_CARD_FACE_FAN_AND_FANADD
6875 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6876 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
6877 ;`ds1:real^3#real^3#real^3#real^3->bool`
6878 ;`ds2:real^3#real^3#real^3#real^3->bool`
6879 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`]
6880 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`]
6881 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)`;
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`;`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)`;]
6883 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`]
6884 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
6885 THENL[
6886 REWRITE_TAC[DELETE;IN_ELIM_THM]
6887 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)`;
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 disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6890 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;];
6891 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]
6892 THEN ARITH_TAC]]]);;
6893
6894
6895 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.
6896 FAN(x,V,E)
6897  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6898 /\ fan80(x,V,E)
6899 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6900 /\ {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)
6901 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6902 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6903 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6904 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6905 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6906 /\ (x,w,v,u)=f10
6907 /\ (x,v,u,w)=f20
6908 /\ (x,u,w,v)=f30
6909 /\ E UNION {{v,w}}= E1
6910 ==> ~(ds1= ds2)/\ CARD ds2=3 /\ ds2={f10,f20,f30} /\  N_FAN (x,V,E1)< N_FAN(x,V,E)`,
6911 REPEAT STRIP_TAC
6912 THENL[
6913 POP_ASSUM MP_TAC
6914 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6915 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;];
6916 MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6917 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;];
6918 MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6919 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;];
6920 MRESA_TAC ZSZIUQE_LEMMA[`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
6923
6924 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.
6925 FAN(x,V,E)
6926  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
6927 /\ fan80(x,V,E)
6928 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
6929 /\ {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)
6930 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
6931 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
6932 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
6933 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
6934 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
6935 /\ (x,w,v,u)=f10
6936 /\ (x,v,u,w)=f20
6937 /\ (x,u,w,v)=f30
6938 /\ E UNION {{v,w}}= E1
6939 ==> fan80(x,V,E1)`,
6940
6941 REPEAT STRIP_TAC
6942 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
6943 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
6944 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)))`]
6945 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)))`]
6946 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)`;]
6947 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
6948 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
6949 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`]
6950 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`)
6951 THEN ASM_REWRITE_TAC[fan80]
6952 THEN STRIP_TAC
6953 THEN REPEAT GEN_TAC
6954 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`
6955 THEN STRIP_TAC
6956 THENL(*1*)[
6957 FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
6958 THEN REWRITE_TAC[fan80]
6959 THEN STRIP_TAC
6960 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`u':real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH"))
6961 THEN DISJ_CASES_TAC(SET_RULE`
6962 ~(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))`)
6963 THENL(*2*)[
6964  MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
6965 `v:real^3`; `w:real^3` ]
6966 THEN POP_ASSUM MP_TAC
6967 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
6968 THEN ASM_REWRITE_TAC[]
6969 THEN STRIP_TAC
6970 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`u':real^3`] );(*2*)
6971
6972 POP_ASSUM MP_TAC
6973 THEN STRIP_TAC
6974 THENL(*3*)(*4GOAL*)[
6975
6976 ASM_REWRITE_TAC[]
6977 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)`;
6978 `v:real^3`;`u:real^3`; `w:real^3` ]
6979 THEN MATCH_MP_TAC properties_of_fully_surrounded1_fan
6980 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
6981 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*)
6982
6983 POP_ASSUM MP_TAC
6984 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
6985 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
6986 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`];(*3*)
6987
6988
6989 ASM_REWRITE_TAC[]
6990 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"))
6991 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`]
6992 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
6993 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`]
6994 THEN REMOVE_ASSUM_TAC
6995 THEN POP_ASSUM MP_TAC
6996 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
6997 THEN POP_ASSUM MP_TAC
6998 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
6999 THEN ASM_REWRITE_TAC[]
7000 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7001 THEN STRIP_TAC
7002 THEN STRIP_TAC
7003 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
7004 THEN POP_ASSUM MP_TAC
7005 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7006 THEN ASM_REWRITE_TAC[]
7007 THEN STRIP_TAC
7008 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7009 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`]
7010 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`]
7011 THEN POP_ASSUM MP_TAC
7012 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7013 THEN ASM_REWRITE_TAC[]
7014 THEN STRIP_TAC
7015 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
7016 ==>
7017 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
7018 THEN RESA_TAC
7019 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)`;
7020 `(w:real^3)`]
7021 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`]
7022 THEN POP_ASSUM MP_TAC
7023 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
7024 THEN ASM_REWRITE_TAC[]
7025 THEN STRIP_TAC
7026 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
7027       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
7028 /\ &0<= azim x w v u
7029 ==> azim x w (inverse1_sigma_fan x V E w u) v<=azim x w (inverse1_sigma_fan x V E w u) u
7030 `)
7031 THEN ASM_SIMP_TAC[azim]
7032 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC (SYM th) THEN DISCH_THEN(LABEL_TAC"YEUEMLINH"))
7033 THEN REMOVE_THEN "NHOLINH"(fun th-> MRESA_TAC th[`w:real^3`;`(inverse1_sigma_fan x V E w u):real^3`] )
7034 THEN STRIP_TAC
7035 THEN MP_TAC(REAL_ARITH`
7036 azim x w (inverse1_sigma_fan x V E w u) v <=
7037  azim x w (inverse1_sigma_fan x V E w u) u
7038 /\ azim x w (inverse1_sigma_fan x V E w u) u < pi
7039 ==> azim x w (inverse1_sigma_fan x V E w u) (v:real^3) < pi`)
7040 THEN ASM_REWRITE_TAC[]
7041 THEN STRIP_TAC
7042 THEN ASM_REWRITE_TAC[]
7043 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u) u =
7044       azim x w (inverse1_sigma_fan x V E w u) v + azim x w v u
7045 /\ azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
7046 ==> &0 < azim x w (inverse1_sigma_fan x V E w u) v
7047 `)
7048 THEN ASM_REWRITE_TAC[];(*3*)
7049 POP_ASSUM MP_TAC
7050 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7051 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7052 `v:real^3`;`u:real^3`; `w:real^3` ;`u':real^3`]](*3*)](*2*);(*1*)
7053
7054
7055
7056 MP_TAC(SET_RULE`{v', u':real^3} = {v, w}==> (v'=v /\ u'=w) \/ (v'=w /\ u'=v)`)
7057 THEN ASM_REWRITE_TAC[]
7058 THEN STRIP_TAC
7059 THENL[
7060 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7061 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7062 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)`;
7063 `v:real^3`;`u:real^3`; `w:real^3` ;]
7064 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
7065 THEN REWRITE_TAC[fan80]
7066 THEN STRIP_TAC
7067 THEN POP_ASSUM(fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"NHOLINH"))
7068 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`]
7069 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
7070 THEN MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`][DE_MORGAN_THM;]
7071 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`]
7072 THEN ABBREV_TAC`u1=sigma_fan x V E v u`
7073 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7074 `(v:real^3)`]
7075 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`]
7076 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
7077 `(v:real^3)`]
7078 THEN POP_ASSUM MP_TAC
7079 THEN ASM_REWRITE_TAC[]
7080 THEN STRIP_TAC
7081 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`u1:real^3`]
7082 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"))
7083 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
7084 ==> azim x v w (u1:real^3)<pi`)
7085 THEN ASM_SIMP_TAC[azim]
7086 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)`)
7087 THEN ASM_SIMP_TAC[azim]
7088 THEN STRIP_TAC
7089 THEN MP_TAC(SET_RULE`{v, u1} IN E/\ E UNION {{v, w:real^3}} = E1==>{v, w} IN E1 /\ {v, u1} IN E1`)
7090 THEN ASM_REWRITE_TAC[]
7091 THEN STRIP_TAC
7092 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`]
7093 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
7094 THEN FIND_ASSUM MP_TAC`{v,w:real^3} IN E`
7095 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7096 THEN ASM_REWRITE_TAC[];
7097 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7098 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7099 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)`;
7100 `v:real^3`;`u:real^3`; `w:real^3` ;]
7101 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`]]]);;
7102
7103
7104
7105
7106
7107
7108 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.
7109 FAN(x,V,E)
7110  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7111 /\ fan80(x,V,E)
7112 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7113 /\ {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)
7114 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7115 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7116 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7117 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7118 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7119 /\ (x,w,v,u)=f10
7120 /\ (x,v,u,w)=f20
7121 /\ (x,u,w,v)=f30
7122 /\ E UNION {{v,w}}= E1
7123 /\ (!E1. FAN(x,V,E1)  /\
7124          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
7125          fan80(x,V,E1)/\
7126          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7127 ==>
7128 conforming_fan (x,V,E1)`,
7129
7130 REPEAT STRIP_TAC
7131 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(E1:(real^3->bool)->bool)`)
7132 THEN POP_ASSUM MATCH_MP_TAC
7133 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7134 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7135 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)))`]
7136 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)))`]
7137 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)`;]
7138 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7139 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7140 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`]
7141 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`)
7142 THEN ASM_REWRITE_TAC[]
7143 THEN STRIP_TAC
7144 THEN MRESA_TAC ZSZIUQE_LEMMA[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7145 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7146 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7147 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]);;
7148
7149
7150
7151
7152 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.
7153 FAN(x,V,E)
7154  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7155 /\ fan80(x,V,E)
7156 /\ (!E1. FAN(x,V,E1)  /\
7157          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
7158          fan80(x,V,E1)/\
7159          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7160 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7161 /\ {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)
7162 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7163 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7164 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7165 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7166 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7167 /\ (x,w,v,u)=f10
7168 /\ (x,v,u,w)=f20
7169 /\ (x,u,w,v)=f30
7170 /\ E UNION {{v,w}}= E1
7171 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
7172 ==> dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) IN topological_component_yfan (x,V,E1)`,
7173 REPEAT STRIP_TAC
7174 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7175 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7176 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)))`]
7177 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)))`]
7178 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)`;]
7179 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7180 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7181 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`]
7182 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`)
7183 THEN ASM_REWRITE_TAC[]
7184 THEN STRIP_TAC
7185 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7186 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7187 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
7188 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7189 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
7190 ;`ds1:real^3#real^3#real^3#real^3->bool`
7191 ;`ds2:real^3#real^3#real^3#real^3->bool`
7192 ;`(f10:real^3#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 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;]
7194 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
7195 ==> 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))`)
7196 THEN ASM_REWRITE_TAC[]
7197 THEN STRIP_TAC
7198 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)`]);;
7199
7200
7201
7202
7203
7204 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.
7205 FAN(x,V,E)
7206  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7207 /\ fan80(x,V,E)
7208 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7209 /\ {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)
7210 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7211 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7212 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7213 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
7214 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
7215 /\ (x,w,v,u)=f10
7216 /\ (x,v,u,w)=f20
7217 /\ (x,u,w,v)=f30
7218 /\ E UNION {{v,w}}= E1
7219 /\ ~(y IN ds)
7220 /\ y IN d_fan(x,V,E)
7221 ==>
7222 sigma_fan x V E1 (pr2(y)) (pr3(y))= sigma_fan x V E (pr2(y)) (pr3(y))`,
7223
7224 REPEAT STRIP_TAC
7225 THEN POP_ASSUM MP_TAC
7226 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7227 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7228 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)))`]
7229 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)))`]
7230 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)`;]
7231 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7232 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7233 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`]
7234 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`)
7235 THEN ASM_REWRITE_TAC[fan80]
7236 THEN STRIP_TAC
7237 THEN STRIP_TAC
7238 THEN POP_ASSUM(fun th-> MP_TAC th THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
7239 THEN STRIP_TAC THEN MP_TAC th THEN ASM_REWRITE_TAC[] THEN STRIP_TAC)
7240 THEN ASM_REWRITE_TAC[pr2;pr3]
7241 THEN DISJ_CASES_TAC(SET_RULE`
7242 ~(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))`)
7243 THENL[
7244  MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7245 `v:real^3`; `w:real^3` ]
7246 THEN POP_ASSUM MP_TAC
7247 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
7248 THEN ASM_REWRITE_TAC[]
7249 THEN STRIP_TAC
7250 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`] );(*1*)
7251
7252 POP_ASSUM MP_TAC
7253 THEN STRIP_TAC
7254 THENL[
7255 SUBGOAL_THEN`y= f1:real^3#real^3#real^3#real^3`ASSUME_TAC
7256 THENL[
7257 ASM_REWRITE_TAC[]
7258 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7259 THEN EXISTS_TAC`x:real^3`
7260 THEN EXISTS_TAC`V:real^3->bool`
7261 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7262 THEN ASM_REWRITE_TAC[pr3;pr2]
7263 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7264 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
7265 MP_TAC(SET_RULE`y=(f1:real^3#real^3#real^3#real^3) /\ f1 IN ds ==> y IN ds`)
7266 THEN ASM_REWRITE_TAC[]
7267 THEN POP_ASSUM MP_TAC
7268 THEN ASM_REWRITE_TAC[]
7269 THEN SET_TAC[]];
7270
7271 POP_ASSUM MP_TAC
7272 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7273 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7274 `v:real^3`;`u:real^3`; `w:real^3` ;`w':real^3`];
7275
7276
7277 SUBGOAL_THEN`y=f3:real^3#real^3#real^3#real^3`ASSUME_TAC
7278 THENL[
7279 ASM_REWRITE_TAC[]
7280 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7281 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7282 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7283 THEN EXISTS_TAC`x:real^3`
7284 THEN EXISTS_TAC`V:real^3->bool`
7285 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7286 THEN ASM_REWRITE_TAC[pr3;pr2;PAIR_EQ]
7287 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
7288 THENL[
7289 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7290 THEN EXISTS_TAC`x:real^3`
7291 THEN EXISTS_TAC`V:real^3->bool`
7292 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7293 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
7294 THEN ASM_REWRITE_TAC[]
7295 THEN ASM_TAC
7296 THEN REWRITE_TAC[pr2;pr3]
7297 THEN REPEAT STRIP_TAC
7298 THEN ASM_REWRITE_TAC[]
7299 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
7300 THEN EXISTS_TAC`x:real^3`
7301 THEN EXISTS_TAC`u:real^3`
7302 THEN EXISTS_TAC`w:real^3`
7303 THEN EXISTS_TAC`v:real^3`
7304 THEN ASM_REWRITE_TAC[];
7305 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
7306 ==> 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`)
7307 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[pr2;pr3])
7308  THEN STRIP_TAC
7309 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)`
7310 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;f1_fan])
7311 THEN ASM_TAC
7312 THEN REWRITE_TAC[pr2;pr3]
7313 THEN REPEAT STRIP_TAC
7314 THEN ASM_REWRITE_TAC[]];
7315
7316 MP_TAC(SET_RULE`y=(f3:real^3#real^3#real^3#real^3) /\ f3 IN ds ==> y IN ds`)
7317 THEN ASM_REWRITE_TAC[]
7318 THEN POP_ASSUM MP_TAC
7319 THEN ASM_REWRITE_TAC[]
7320 THEN SET_TAC[]];
7321
7322 POP_ASSUM MP_TAC
7323 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7324 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT5[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
7325 `v:real^3`;`u:real^3`; `w:real^3` ;`w':real^3`]]]);;
7326
7327
7328
7329
7330 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.
7331 FAN(x,V,E)
7332  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7333 /\ fan80(x,V,E)
7334 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7335 /\ {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)
7336 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7337 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7338 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7339 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7340 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7341 /\ (x,w,v,u)=f10
7342 /\ (x,v,u,w)=f20
7343 /\ (x,u,w,v)=f30
7344 /\ E UNION {{v,w}}= E1
7345 ==> yfan(x,V,E) SUBSET yfan(x,V,E1) UNION aff_ge {x} {v, w}`,
7346
7347 REPEAT STRIP_TAC
7348 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2;]
7349 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])
7350 THEN REPEAT STRIP_TAC
7351 THEN ASM_REWRITE_TAC[SET_RULE`x' IN (:real^3)`]
7352 THEN DISJ_CASES_TAC(SET_RULE`~(x' IN aff_ge {x} {v, w:real^3})\/ (x' IN aff_ge {x} {v, w:real^3})`)
7353 THENL[
7354 ASM_REWRITE_TAC[]
7355 THEN REPEAT STRIP_TAC
7356 THEN POP_ASSUM MP_TAC
7357 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC `u':real^3->bool`th))
7358 THEN DISJ_CASES_TAC(SET_RULE`~(x' IN (u':real^3->bool))\/ (x' IN (u':real^3->bool))`)
7359 THENL[
7360 ASM_REWRITE_TAC[];
7361
7362 ASM_REWRITE_TAC[]
7363 THEN REPEAT STRIP_TAC
7364 THEN DISJ_CASES_TAC(SET_RULE`~(e = {v, w})\/ (e = {v, w:real^3})`)
7365 THENL[
7366
7367 ASM_REWRITE_TAC[];
7368 ASM_REWRITE_TAC[]
7369 THEN REMOVE_ASSUM_TAC
7370 THEN POP_ASSUM MP_TAC
7371 THEN ONCE_REWRITE_TAC[CONTRAPOS_THM]
7372 THEN STRIP_TAC THEN
7373 POP_ASSUM(fun th->  ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7374 THEN ASM_REWRITE_TAC[]]];
7375
7376 ASM_REWRITE_TAC[]]);;
7377
7378
7379
7380 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.
7381 FAN(x,V,E)
7382  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7383 /\ fan80(x,V,E)
7384 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7385 /\ {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)
7386 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7387 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7388 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7389 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7390 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7391 /\ (x,w,v,u)=f10
7392 /\ (x,v,u,w)=f20
7393 /\ (x,u,w,v)=f30
7394 /\ E UNION {{v,w}}= E1
7395 ==> yfan(x,V,E) SUBSET yfan(x,V,E1) UNION aff_gt {x} {v, w}`,
7396
7397
7398 REPEAT STRIP_TAC
7399 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7400 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7401 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)))`]
7402 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)))`]
7403 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)`;]
7404 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7405 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7406 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
7407 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7408 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
7409 ` (v:real^3)`]
7410 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
7411 ` (w:real^3)`]
7412 THEN POP_ASSUM MP_TAC
7413 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
7414 THEN ASM_REWRITE_TAC[]
7415 THEN STRIP_TAC
7416 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
7417 THEN MRESA_TAC lemma_yfanadd_aff_ge[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7418 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7419 THEN SUBGOAL_THEN`aff_ge {x} {w} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
7420 THENL[
7421 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
7422 THEN REPEAT STRIP_TAC
7423 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` w:real^3`]
7424 THEN EXISTS_TAC `{w,v'}:real^3->bool`
7425 THEN ASM_REWRITE_TAC[]
7426 THEN REMOVE_ASSUM_TAC
7427 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
7428 ` (w:real^3)`]
7429 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(w:real^3)`;` (v':real^3)`]
7430 THEN ASM_TAC THEN SET_TAC[IN];
7431 SUBGOAL_THEN`aff_ge {x} {v} SUBSET xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
7432 THENL[
7433 REWRITE_TAC[xfan;SUBSET;IN_ELIM_THM]
7434 THEN REPEAT STRIP_TAC
7435 THEN MRESA_TAC exists_edge_fully_surround_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`]
7436 THEN EXISTS_TAC `{v,v'}:real^3->bool`
7437 THEN ASM_REWRITE_TAC[]
7438 THEN REMOVE_ASSUM_TAC
7439 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
7440 ` (v:real^3)`]
7441 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (v':real^3)`]
7442 THEN ASM_TAC THEN SET_TAC[IN];
7443 POP_ASSUM MP_TAC
7444 THEN POP_ASSUM MP_TAC
7445 THEN POP_ASSUM MP_TAC
7446 THEN REWRITE_TAC[yfan;SUBSET;UNION;IN_ELIM_THM]
7447 THEN REPEAT STRIP_TAC
7448 THEN POP_ASSUM (fun th->
7449 POP_ASSUM MP_TAC
7450 THEN POP_ASSUM MP_TAC
7451 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7452 THEN REWRITE_TAC[th]
7453 THEN ASSUME_TAC th)
7454 THEN STRIP_TAC
7455 THENL[
7456
7457 ASM_REWRITE_TAC[];
7458 ASM_REWRITE_TAC[];
7459
7460 REPEAT STRIP_TAC
7461 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7462 THEN ASM_REWRITE_TAC[]
7463 THEN POP_ASSUM MP_TAC
7464 THEN POP_ASSUM MP_TAC
7465 THEN POP_ASSUM MP_TAC
7466 THEN SET_TAC[];
7467
7468
7469 STRIP_TAC
7470 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `x':real^3` th))
7471 THEN ASM_REWRITE_TAC[]
7472 THEN POP_ASSUM MP_TAC
7473 THEN POP_ASSUM MP_TAC
7474 THEN POP_ASSUM MP_TAC
7475 THEN SET_TAC[]]]]);;
7476
7477
7478
7479
7480
7481 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.
7482 FAN(x,V,E)
7483  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7484 /\ fan80(x,V,E)
7485 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7486 /\ {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)
7487 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7488 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7489 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7490 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7491 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7492 /\ (x,w,v,u)=f10
7493 /\ (x,v,u,w)=f20
7494 /\ (x,u,w,v)=f30
7495 /\ E UNION {{v,w}}= E1
7496 ==>  yfan(x,V,E1) SUBSET yfan(x,V,E)`,
7497
7498 REPEAT STRIP_TAC
7499 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2]
7500 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;IN_ELIM_THM;IN_SING;UNION])
7501 THEN SET_TAC[]);;
7502
7503
7504
7505
7506 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.
7507 FAN(x,V,E)
7508  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7509 /\ fan80(x,V,E)
7510 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7511 /\ {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)
7512 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7513 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7514 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7515 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7516 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7517 /\ (x,w,v,u)=f10
7518 /\ (x,v,u,w)=f20
7519 /\ (x,u,w,v)=f30
7520 /\ E UNION {{v,w}}= E1
7521 ==> yfan(x,V,E) = yfan(x,V,E1) UNION aff_gt {x} {v, w}`,
7522
7523 REPEAT STRIP_TAC
7524 THEN MRESA_TAC lemma_yfanadd_aff_gt[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7525 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7526 THEN MRESA_TAC lemma_yfanadd_aff_gt1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7527 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7528 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`;]
7529 THEN POP_ASSUM MP_TAC
7530 THEN POP_ASSUM MP_TAC
7531 THEN POP_ASSUM MP_TAC
7532 THEN SET_TAC[]);;
7533
7534
7535
7536
7537
7538 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.
7539 FAN(x,V,E)
7540  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7541 /\ fan80(x,V,E)
7542 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7543 /\ {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)
7544 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7545 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7546 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7547 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7548 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7549 /\ (x,w,v,u)=f10
7550 /\ (x,v,u,w)=f20
7551 /\ (x,u,w,v)=f30
7552 /\ E UNION {{v,w}}= E1
7553 ==> dartset_leads_into_fan x V E1 ds1 SUBSET  dartset_leads_into_fan x V E ds`,
7554
7555
7556 REPEAT STRIP_TAC
7557 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7558 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7559 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)))`]
7560 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)))`]
7561 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)`;]
7562 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7563 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7564 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`]
7565 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`)
7566 THEN ASM_REWRITE_TAC[]
7567 THEN STRIP_TAC
7568 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7569 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7570 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 )`
7571 THEN SUBGOAL_THEN `f1=f1_fan x V E (y:real^3#real^3#real^3#real^3)` ASSUME_TAC
7572 THENL(*1*)[
7573 POP_ASSUM(fun th-> REWRITE_TAC[SYM th;f1_fan;EQ_PAIR_4])
7574 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`v:real^3`]
7575 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u:real^3`)
7576 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]
7577 THEN POP_ASSUM MATCH_MP_TAC
7578 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
7579 THEN EXISTS_TAC`x:real^3`
7580 THEN EXISTS_TAC`v:real^3`
7581 THEN EXISTS_TAC`u:real^3`
7582 THEN EXISTS_TAC`sigma_fan x V E  v u :real^3`
7583 THEN ASM_REWRITE_TAC[];(*1*)
7584
7585 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
7586       d1_fan (x:real^3,V,E)` ASSUME_TAC
7587 THENL(*2*)[
7588 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7589 THEN EXISTS_TAC`x:real^3`
7590 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7591 THEN EXISTS_TAC`v:real^3`
7592 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
7593 THEN ASM_REWRITE_TAC[]
7594 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
7595 `v:real^3`]
7596 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7597 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`]
7598 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*)
7599 POP_ASSUM MP_TAC
7600 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7601 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`;]
7602 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
7603 `ds:real^3#real^3#real^3#real^3->bool`]
7604 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
7605 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
7606 THENL(*3*)[
7607 EXPAND_TAC"y"
7608 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
7609 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)`;
7610 `v:real^3`;`u:real^3`; `w:real^3` ]
7611 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7612 THEN MP_TAC(SET_RULE`E UNION {{v, w:real^3}} = E1==>{v, w}IN E1`)
7613 THEN ASM_REWRITE_TAC[]
7614 THEN STRIP_TAC
7615 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;`v:real^3`]
7616 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);(*3*)
7617
7618 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
7619       d1_fan (x:real^3,V,E1)` ASSUME_TAC
7620 THENL(*4*)[
7621 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7622 THEN EXISTS_TAC`x:real^3`
7623 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7624 THEN EXISTS_TAC`v:real^3`
7625 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u ) v :real^3`
7626 THEN ASM_REWRITE_TAC[]
7627 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
7628 `v:real^3`]
7629 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7630 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`]
7631 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`]
7632 THEN POP_ASSUM MP_TAC
7633 THEN RESA_TAC
7634 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`)
7635 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7636 THEN ASM_REWRITE_TAC[]
7637 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7638 `v:real^3`; `w:real^3` ]
7639 THEN POP_ASSUM MP_TAC
7640 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7641 THEN RESA_TAC
7642 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)`])
7643 THEN POP_ASSUM MP_TAC
7644 THEN DISJ_CASES_TAC(SET_RULE`(sigma_fan x V E v u = w:real^3) \/ ~(sigma_fan x V E v u = w)`)
7645 THENL(*5*)[
7646 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7647 THEN FIND_ASSUM MP_TAC`{v, w:real^3} IN E`
7648 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7649 THEN ASM_REWRITE_TAC[];(*5*)
7650
7651 ASM_REWRITE_TAC[]
7652 THEN RESA_TAC](*5*);(*4*)
7653
7654
7655 POP_ASSUM MP_TAC
7656 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
7657 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
7658 THENL(*5*)[
7659 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`
7660 THEN EXISTS_TAC`0`
7661 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*5*)
7662
7663  MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7664 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7665 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`;]
7666 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
7667 `ds1:real^3#real^3#real^3#real^3->bool`]
7668 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
7669 THEN FIND_ASSUM MP_TAC `(y:real^3#real^3#real^3#real^3) IN d1_fan (x,V,E)`
7670 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
7671 THEN STRIP_TAC
7672 THEN ASM_REWRITE_TAC[pr2;pr3]
7673 THEN POP_ASSUM MP_TAC
7674 THEN DISCH_THEN(LABEL_TAC"EM")
7675 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
7676 THEN POP_ASSUM MP_TAC
7677 THEN DISCH_THEN(LABEL_TAC"LINH")
7678 THEN MP_TAC(SET_RULE`{v', w'} IN E /\ E UNION {{v, w}} = E1 ==> {v':real^3, w'} IN E1`)
7679 THEN RESA_TAC
7680 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
7681 THEN POP_ASSUM MP_TAC
7682 THEN DISCH_THEN(LABEL_TAC"LINH1")
7683 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'`)
7684 THEN ASM_REWRITE_TAC[PI_WORKS;]
7685 THEN STRIP_TAC
7686 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`]
7687 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(min (min (h:real) (h':real)) (pi/ &2))/ &2`[SET_RULE`~(A={})<=> ?y. y IN A`])
7688 THEN SUBGOAL_THEN`y' IN
7689       rw_dart_fan x V E1 (x,v',w',sigma_fan x V E1 v' w')
7690       (cos (min (min h h') (pi / &2) / &2))`
7691 ASSUME_TAC
7692 THENL(*6*)[
7693 POP_ASSUM MP_TAC
7694 THEN
7695   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
7696 `(v':real^3)`]
7697 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
7698 THEN DISCH_TAC
7699 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
7700 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7701 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
7702 THEN DISCH_TAC
7703 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
7704 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7705 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
7706 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7707 `v:real^3`; `w:real^3` ]
7708 THEN POP_ASSUM MP_TAC
7709 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7710 THEN RESA_TAC
7711 THEN POP_ASSUM (fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`])
7712 THEN POP_ASSUM MP_TAC
7713 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7714 THEN ASM_REWRITE_TAC[SET_RULE`~(v' IN {v, w}) <=> ~(v =v') /\ ~(v' = w)`]
7715 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7716 `(v:real^3)`]
7717 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`]
7718 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)`]
7719 THEN POP_ASSUM MP_TAC
7720 THEN RESA_TAC
7721 THEN REMOVE_THEN "EM" (fun th-> MP_TAC th THEN ASSUME_TAC(th))
7722 THEN EXPAND_TAC"y"
7723 THEN REWRITE_TAC[EQ_PAIR_4]
7724 THEN STRIP_TAC
7725 THEN REMOVE_ASSUM_TAC
7726 THEN REMOVE_ASSUM_TAC
7727 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
7728 THEN POP_ASSUM MP_TAC
7729 THEN POP_ASSUM MP_TAC
7730 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`~(v:real^3 = sigma_fan x V E v u)`
7731 THEN DISJ_CASES_TAC(SET_RULE`(sigma_fan x V E v u = w:real^3) \/ ~(sigma_fan x V E v u = w)`)
7732 THENL(*7*)[
7733 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
7734 THEN FIND_ASSUM MP_TAC`{v, w:real^3} IN E`
7735 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7736 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`~({w, v:real^3} IN E)`;(*7*)
7737 POP_ASSUM (fun th-> REWRITE_TAC[th])
7738 THEN STRIP_TAC
7739 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
7740 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
7741
7742 REMOVE_THEN"LINH"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y':real^3`])
7743 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7744 THEN REMOVE_THEN"LINH1"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y':real^3`])
7745 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7746 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7747 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7748 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`]
7749 THEN POP_ASSUM MATCH_MP_TAC
7750 THEN SET_TAC[]]]]]]]);;
7751
7752
7753
7754
7755
7756 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.
7757 FAN(x,V,E)
7758  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7759 /\ fan80(x,V,E)
7760 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7761 /\ {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)
7762 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7763 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7764 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7765 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7766 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7767 /\ (x,w,v,u)=f10
7768 /\ (x,v,u,w)=f20
7769 /\ (x,u,w,v)=f30
7770 /\ E UNION {{v,w}}= E1
7771 ==> dartset_leads_into_fan x V E1 ds2 SUBSET  dartset_leads_into_fan x V E ds`,
7772
7773 REPEAT STRIP_TAC
7774 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7775 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7776 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)))`]
7777 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)))`]
7778 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)`;]
7779 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7780 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7781 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`]
7782 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`)
7783 THEN ASM_REWRITE_TAC[]
7784 THEN STRIP_TAC
7785 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7786 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7787 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
7788 `ds:real^3#real^3#real^3#real^3->bool`]
7789 THEN POP_ASSUM (fun th-> MRESA1_TAC th `f2:real^3#real^3#real^3#real^3`)
7790 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)`;
7791 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7792 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7793 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7794 THEN MP_TAC(SET_RULE`ds2 = {(f10:real^3#real^3#real^3#real^3), f20, f30}==> f30 IN ds2`)
7795 THEN RESA_TAC
7796 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
7797 `ds2:real^3#real^3#real^3#real^3->bool`]
7798 THEN POP_ASSUM (fun th-> MRESA1_TAC th `f30:real^3#real^3#real^3#real^3`)
7799 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2;pr3])`x,u,w,v = f30:real^3#real^3#real^3#real^3`
7800 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7801 THEN POP_ASSUM MP_TAC
7802 THEN DISCH_THEN(LABEL_TAC"LINH")
7803 THEN MP_TAC(SET_RULE`{u, w} IN E /\ E UNION {{v, w}} = E1 ==> {u:real^3, w} IN E1`)
7804 THEN RESA_TAC
7805 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u:real^3`;`w:real^3`]
7806 THEN POP_ASSUM MP_TAC
7807 THEN DISCH_THEN(LABEL_TAC"LINH1")
7808 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'`)
7809 THEN ASM_REWRITE_TAC[PI_WORKS;]
7810 THEN STRIP_TAC
7811 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`]
7812 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(min (min (h:real) (h':real)) (pi/ &2))/ &2`[SET_RULE`~(A={})<=> ?y. y IN A`])
7813 THEN SUBGOAL_THEN`y IN
7814       rw_dart_fan x V E1 (x,u,w,sigma_fan x V E1 u w)
7815       (cos (min (min h h') (pi / &2) / &2))`
7816 ASSUME_TAC
7817 THENL[
7818 POP_ASSUM MP_TAC
7819 THEN
7820   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7821 `(u:real^3)`]
7822
7823 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
7824 THEN DISCH_TAC
7825 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `u:real^3`th)
7826 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7827 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
7828 THEN DISCH_TAC
7829 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `u:real^3`th)
7830 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
7831 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
7832 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`
7833 THEN ASM_REWRITE_TAC[]
7834 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7835 `v:real^3`; `w:real^3` ]
7836 THEN POP_ASSUM MP_TAC
7837 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7838 THEN RESA_TAC
7839 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
7840 THEN POP_ASSUM MP_TAC
7841 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7842 THEN
7843   MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7844 `(v:real^3)`]
7845 THEN ASM_REWRITE_TAC[SET_RULE`~(v' IN {v, w}) <=> ~(v =v') /\ ~(v' = w)`]
7846 THEN STRIP_TAC
7847 THEN ASM_REWRITE_TAC[];
7848 REMOVE_THEN"LINH"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y:real^3`])
7849 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7850 THEN REMOVE_THEN"LINH1"(fun th-> MRESA_TAC th[`(min (min (h:real) (h':real)) (pi/ &2))/ &2`;`y:real^3`])
7851 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7852 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7853 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7854 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`]
7855 THEN POP_ASSUM MATCH_MP_TAC
7856 THEN SET_TAC[]]);;
7857
7858
7859
7860
7861
7862 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.
7863 FAN(x,V,E)
7864  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
7865 /\ fan80(x,V,E)
7866 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
7867 /\ {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)
7868 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
7869 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
7870 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
7871 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
7872 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
7873 /\ (x,w,v,u)=f10
7874 /\ (x,v,u,w)=f20
7875 /\ (x,u,w,v)=f30
7876 /\ E UNION {{v,w}}= E1
7877 /\ (!E1. FAN(x,V,E1)  /\
7878          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
7879          fan80(x,V,E1)/\
7880          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
7881 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} =U1
7882 ==> U1 INTER aff_gt {x, v, w} {u} SUBSET dartset_leads_into_fan x V E1 ds2`,
7883
7884 REPEAT STRIP_TAC
7885 THEN POP_ASSUM MP_TAC
7886 THEN DISCH_THEN(LABEL_TAC"EM")
7887 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
7888 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
7889 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)))`]
7890 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)))`]
7891 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)`;]
7892 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
7893 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
7894 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`]
7895 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`)
7896 THEN ASM_REWRITE_TAC[]
7897 THEN STRIP_TAC
7898 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7899 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7900 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7901 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7902 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)`;
7903 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7904 THEN MRESA_TAC FANADD_CONFORMING[`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 POP_ASSUM MP_TAC
7907 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
7908 THEN STRIP_TAC
7909 THEN REMOVE_ASSUM_TAC
7910 THEN REMOVE_ASSUM_TAC
7911 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds2:real^3#real^3#real^3#real^3->bool`)
7912 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7913 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
7914 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
7915 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
7916 THEN REPEAT STRIP_TAC
7917 THEN POP_ASSUM MP_TAC
7918 THEN POP_ASSUM MP_TAC
7919 THEN POP_ASSUM MP_TAC
7920 THEN POP_ASSUM MP_TAC
7921 THEN DISCH_THEN(LABEL_TAC"LINH")
7922 THEN REPEAT STRIP_TAC
7923 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
7924 THEN ASM_REWRITE_TAC[]
7925 THEN STRIP_TAC
7926 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)
7927 THEN MP_TAC(SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}==> y =f10\/ y =f20\/ y =f30`)
7928 THEN RESA_TAC
7929
7930 THENL[
7931
7932 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`
7933 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`]
7934 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7935 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)`;
7936 `v:real^3`;`u:real^3`; `w:real^3` ]
7937 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7938 THEN ASM_REWRITE_TAC[];
7939
7940 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`
7941 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {v, u} IN E==> {v, u} IN E1`)
7942 THEN RESA_TAC
7943 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`]
7944 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7945 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)`;
7946 `v:real^3`;`u:real^3`; `w:real^3` ]
7947 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, v, u} {w}`)
7948 THEN POP_ASSUM MATCH_MP_TAC
7949 THEN SUBGOAL_THEN `x,v,u,sigma_fan x V E v u IN d1_fan (x,V,E)` ASSUME_TAC
7950 THENL[
7951 REWRITE_TAC[d1_fan;IN_ELIM_THM]
7952 THEN EXISTS_TAC`x:real^3`
7953 THEN EXISTS_TAC`v:real^3`
7954 THEN EXISTS_TAC`u:real^3`
7955 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
7956 THEN ASM_REWRITE_TAC[];
7957 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]
7958 THEN EXISTS_TAC`(x,v,u:real^3, sigma_fan x (V:real^3->bool) E v u)`
7959 THEN ASM_REWRITE_TAC[f1_fan]
7960 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
7961 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`]
7962 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)];
7963
7964 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`
7965 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {u,w} IN E==> {u,w} IN E1`)
7966 THEN RESA_TAC
7967 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`]
7968 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
7969 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
7970 `v:real^3`; `w:real^3` ]
7971 THEN POP_ASSUM MP_TAC
7972 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7973 THEN RESA_TAC
7974 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
7975 THEN POP_ASSUM MP_TAC
7976 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
7977 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
7978 `(u:real^3)`]
7979 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
7980 `(v:real^3)`]
7981 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
7982 THEN RESA_TAC
7983 THEN RESA_TAC
7984 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, u,w} {v}`)
7985 THEN POP_ASSUM MATCH_MP_TAC
7986 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
7987 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
7988 THENL[
7989 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
7990 THEN EXISTS_TAC`x:real^3`
7991 THEN EXISTS_TAC`V:real^3->bool`
7992 THEN EXISTS_TAC`E:(real^3->bool)->bool`
7993 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
7994 THEN ASM_REWRITE_TAC[]
7995 THEN ASM_TAC
7996 THEN REWRITE_TAC[pr2;pr3]
7997 THEN REPEAT STRIP_TAC
7998 THEN ASM_REWRITE_TAC[]
7999 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
8000 THEN EXISTS_TAC`x:real^3`
8001 THEN EXISTS_TAC`u:real^3`
8002 THEN EXISTS_TAC`w:real^3`
8003 THEN EXISTS_TAC`v:real^3`
8004 THEN ASM_REWRITE_TAC[];
8005
8006 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
8007 ==> 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`)
8008 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[pr2;pr3])
8009  THEN STRIP_TAC
8010 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;f1_fan])
8011 THEN ASM_REWRITE_TAC[]
8012 THEN ASM_TAC
8013 THEN REWRITE_TAC[pr2;pr3]
8014 THEN REPEAT STRIP_TAC
8015 THEN ASM_REWRITE_TAC[]
8016 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`]]]);;
8017
8018
8019
8020
8021
8022
8023 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.
8024 FAN(x,V,E)
8025  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8026 /\ fan80(x,V,E)
8027 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8028 /\ {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)
8029 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8030 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8031 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8032 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8033 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8034 /\ (x,w,v,u)=f10
8035 /\ (x,v,u,w)=f20
8036 /\ (x,u,w,v)=f30
8037 /\ E UNION {{v,w}}= E1
8038 ==> inverse1_sigma_fan x V E1 w v =  inverse1_sigma_fan x V E w u`,
8039
8040 REPEAT STRIP_TAC
8041 THEN POP_ASSUM MP_TAC
8042 THEN DISCH_THEN(LABEL_TAC"EM")
8043 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8044 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8045 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)))`]
8046 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)))`]
8047 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)`;]
8048 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8049 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8050 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`]
8051 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`)
8052 THEN ASM_REWRITE_TAC[]
8053 THEN STRIP_TAC
8054 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8055 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8056 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8057 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8058 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)`;
8059 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8060 THEN MATCH_MP_TAC MONO_SIGMA_FAN
8061 THEN EXISTS_TAC`x:real^3`
8062 THEN EXISTS_TAC`V:real^3->bool`
8063 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
8064 THEN EXISTS_TAC`w:real^3`
8065 THEN ASM_REWRITE_TAC[]
8066 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8067 THEN REMOVE_ASSUM_TAC
8068 THEN REMOVE_ASSUM_TAC
8069 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8070 THEN POP_ASSUM MP_TAC
8071 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8072 THEN RESA_TAC
8073 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, w:real^3} IN E /\ E UNION {{v,w}}= E1
8074 ==> {inverse1_sigma_fan x V E w u, w} IN E1`)
8075 THEN RESA_TAC
8076 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8077 THEN REMOVE_ASSUM_TAC
8078 THEN REMOVE_ASSUM_TAC
8079 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8080 THEN POP_ASSUM MP_TAC
8081 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8082 THEN RESA_TAC
8083 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8084 THEN RESA_TAC
8085 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8086 THEN ASM_REWRITE_TAC[]
8087 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8088 THEN REMOVE_ASSUM_TAC
8089 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8090 THEN POP_ASSUM MP_TAC
8091 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8092 THEN RESA_TAC
8093 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
8094 `v:real^3`;`u:real^3`; `w:real^3` ;`inverse1_sigma_fan x V E w u:real^3`]
8095 THEN POP_ASSUM MP_TAC
8096 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8097 THEN RESA_TAC);;
8098
8099
8100
8101 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.
8102 FAN(x,V,E)
8103  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8104 /\ fan80(x,V,E)
8105 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8106 /\ {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)
8107 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8108 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8109 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8110 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8111 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8112 /\ (x,w,v,u)=f10
8113 /\ (x,v,u,w)=f20
8114 /\ (x,u,w,v)=f30
8115 /\ E UNION {{v,w}}= E1
8116 ==> 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}`,
8117
8118
8119
8120 REPEAT STRIP_TAC
8121 THEN POP_ASSUM MP_TAC
8122 THEN DISCH_THEN(LABEL_TAC"EM")
8123 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8124 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8125 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)))`]
8126 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)))`]
8127 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)`;]
8128 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8129 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8130 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`]
8131 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`)
8132 THEN ASM_REWRITE_TAC[]
8133 THEN STRIP_TAC
8134 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8135 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8136 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)`;
8137 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8138 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8139 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8140 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8141 THEN REMOVE_ASSUM_TAC
8142 THEN REMOVE_ASSUM_TAC
8143 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8144 THEN POP_ASSUM MP_TAC
8145 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8146 THEN RESA_TAC
8147 THEN POP_ASSUM MP_TAC
8148 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8149 THEN RESA_TAC
8150 THEN MP_TAC(SET_RULE`{w:real^3,inverse1_sigma_fan x V E w u } IN E /\ E UNION {{v,w}}= E1
8151 ==> {w:real^3,inverse1_sigma_fan x V E w u} IN E1`)
8152 THEN RESA_TAC
8153 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8154 THEN RESA_TAC
8155 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
8156 THEN REMOVE_ASSUM_TAC
8157 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
8158 THEN POP_ASSUM MP_TAC
8159 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8160 THEN RESA_TAC
8161 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8162 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8163 THEN POP_ASSUM MP_TAC
8164 THEN REWRITE_TAC[fan80]
8165 THEN STRIP_TAC
8166 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
8167 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`]
8168 THEN POP_ASSUM MP_TAC
8169 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
8170 THEN RESA_TAC
8171 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`;]
8172 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`(v:real^3)`;`w:real^3`]
8173 THEN POP_ASSUM MP_TAC
8174 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
8175 THEN RESA_TAC
8176 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`; ]
8177 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`;]
8178 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8179 THEN REMOVE_ASSUM_TAC
8180 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8181 THEN POP_ASSUM MP_TAC
8182 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8183 THEN RESA_TAC
8184 THEN FIND_ASSUM MP_TAC`fan80 (x,V:real^3->bool,E)`
8185 THEN REWRITE_TAC[fan80]
8186 THEN STRIP_TAC
8187 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
8188 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`]
8189 THEN POP_ASSUM MP_TAC
8190 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
8191 THEN RESA_TAC
8192 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(u:real^3)`;`w:real^3`]
8193 THEN POP_ASSUM MP_TAC
8194 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
8195 THEN RESA_TAC
8196
8197 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`; ]
8198 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`;]);;
8199
8200
8201
8202 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.
8203 FAN(x,V,E)
8204  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8205 /\ fan80(x,V,E)
8206 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8207 /\ {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)
8208 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8209 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8210 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8211 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8212 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8213 /\ (x,w,v,u)=f10
8214 /\ (x,v,u,w)=f20
8215 /\ f30=(x,u,w,v)
8216 /\ E UNION {{v,w}}= E1
8217 ==> f30= f2`,
8218
8219
8220 REPEAT STRIP_TAC
8221 THEN POP_ASSUM MP_TAC
8222 THEN DISCH_THEN(LABEL_TAC"EM")
8223 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8224 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8225 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)))`]
8226 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)))`]
8227 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)`;]
8228 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8229 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8230 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`]
8231 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)`)
8232 THEN ASM_REWRITE_TAC[]
8233 THEN STRIP_TAC
8234 THEN POP_ASSUM MP_TAC
8235 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
8236 THEN STRIP_TAC
8237 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;pr2;pr3] THEN REPEAT STRIP_TAC THEN ASM_REWRITE_TAC[]));;
8238
8239
8240
8241
8242
8243 let CONDITION_DART_IN_NODE=prove(`!x V E f y y1. FAN (x,V,E)
8244 /\(!v. v IN V ==> CARD (set_of_edge v V E) > 1)
8245 /\ f IN (node_set (hypermap1_of_fanx (x,V,E)) )
8246 /\ y IN f
8247 /\ y1 IN d1_fan(x,V,E)
8248 /\ pr2 y1= pr2 y
8249 ==> y1 IN f`,
8250
8251 REWRITE_TAC[d1_fan;IN_ELIM_THM]
8252 THEN REPEAT STRIP_TAC
8253 THEN POP_ASSUM MP_TAC
8254 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8255 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`;]
8256 THEN MP_TAC(SET_RULE`y IN f /\ f SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V,E)`)
8257 THEN ASM_REWRITE_TAC[]
8258 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
8259 THEN STRIP_TAC
8260 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]
8261 THEN RESA_TAC
8262 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)`]
8263 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
8264 THEN REMOVE_ASSUM_TAC
8265 THEN REMOVE_ASSUM_TAC
8266 THEN REMOVE_ASSUM_TAC
8267 THEN REMOVE_ASSUM_TAC
8268 THEN REMOVE_ASSUM_TAC
8269 THEN REMOVE_ASSUM_TAC
8270 THEN REMOVE_ASSUM_TAC
8271 THEN REMOVE_ASSUM_TAC
8272 THEN REMOVE_ASSUM_TAC
8273 THEN REMOVE_ASSUM_TAC
8274 THEN POP_ASSUM MP_TAC
8275 THEN REWRITE_TAC[set_of_orbits_points_fan;IN_ELIM_THM]
8276 THEN RESA_TAC
8277 THEN EXISTS_TAC`i:num`
8278 THEN ASM_REWRITE_TAC[power_map_points ]
8279 THEN ARITH_TAC);;
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289 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.
8290 FAN(x,V,E)
8291  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8292 /\ fan80(x,V,E)
8293 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8294 /\ {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)
8295 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8296 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8297 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8298 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8299 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8300 /\ (x,w,v,u)=f10
8301 /\ (x,v,u,w)=f20
8302 /\ (x,u,w,v)=f30
8303 /\ E UNION {{v,w}}= E1
8304 /\ (!E1. FAN(x,V,E1)  /\
8305          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
8306          fan80(x,V,E1)/\
8307          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8308 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} =U1
8309 ==> U1 INTER aff_gt {x, v, w} {sigma_fan x V E v u} SUBSET dartset_leads_into_fan x V E1 ds1`,
8310
8311
8312 REPEAT STRIP_TAC
8313 THEN POP_ASSUM MP_TAC
8314 THEN DISCH_THEN(LABEL_TAC"EM")
8315 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8316 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8317 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)))`]
8318 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)))`]
8319 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)`;]
8320 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8321 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8322 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`]
8323 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`)
8324 THEN ASM_REWRITE_TAC[]
8325 THEN STRIP_TAC
8326 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8327 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8328 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8329 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8330 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)`;
8331 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8332 THEN MRESA_TAC FANADD_CONFORMING[`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 POP_ASSUM MP_TAC
8335 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
8336 THEN STRIP_TAC
8337 THEN REMOVE_ASSUM_TAC
8338 THEN REMOVE_ASSUM_TAC
8339 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds1:real^3#real^3#real^3#real^3->bool`)
8340 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
8341 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
8342 THEN REPEAT STRIP_TAC
8343 THEN POP_ASSUM MP_TAC
8344 THEN POP_ASSUM MP_TAC
8345 THEN POP_ASSUM MP_TAC
8346 THEN POP_ASSUM MP_TAC
8347 THEN DISCH_THEN(LABEL_TAC"LINH")
8348 THEN STRIP_TAC
8349 THEN DISCH_THEN(LABEL_TAC"LINH1")
8350 THEN STRIP_TAC
8351 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8352 THEN ASM_REWRITE_TAC[]
8353 THEN STRIP_TAC
8354 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)
8355 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`]
8356 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)`)
8357 THEN ASM_REWRITE_TAC[]
8358 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM;pr2;pr3;f1_fan]
8359 THEN RESA_TAC
8360 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`]
8361 THEN MP_TAC(ARITH_RULE`3 <= ( CARD (ds1:real^3#real^3#real^3#real^3->bool)):num
8362 ==> ~((CARD (ds1:real^3#real^3#real^3#real^3->bool)):num =0)`)
8363 THEN RESA_TAC
8364 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`]
8365 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`]
8366 THEN USE_THEN "LINH1" MP_TAC
8367 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`
8368 THEN POP_ASSUM MP_TAC
8369 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w) IN d1_fan(x:real^3,V,E1)`ASSUME_TAC
8370 THENL(*1*)[
8371 ASM_REWRITE_TAC[face;d1_fan;IN_ELIM_THM]
8372 THEN EXISTS_TAC`x:real^3`
8373 THEN EXISTS_TAC`v:real^3`
8374 THEN EXISTS_TAC`w:real^3`
8375 THEN EXISTS_TAC`sigma_fan x V E1 v (w:real^3)`
8376 THEN ASM_REWRITE_TAC[];(*1*)
8377
8378
8379 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)))`]
8380 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)`)
8381 THEN DISCH_THEN(LABEL_TAC"YEU")
8382 THEN DISJ_CASES_TAC(SET_RULE`(v' IN {v,w:real^3}) \/ ~(v' IN {v,w})`)
8383 THENL(*2*)[
8384
8385 POP_ASSUM MP_TAC
8386 THEN REWRITE_TAC[SET_RULE`A IN {B,C}<=> A=B\/ A=C`]
8387 THEN STRIP_TAC
8388 THENL(*3*)[
8389
8390 MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8391 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8392 THEN MRESAL_TAC SRPRNPL[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;][simple_hypermap]
8393 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(x,v,w,sigma_fan x V E1 v w:real^3)`)
8394 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)`)
8395 THEN RESA_TAC
8396 THEN SUBGOAL_THEN`node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) IN
8397       node_set (hypermap1_of_fanx (x,V:real^3->bool,E1))` ASSUME_TAC
8398 THENL(*4*)[
8399 ASM_REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
8400 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E1 v w:real^3)`
8401 THEN ASM_REWRITE_TAC[node];(*4*)
8402
8403
8404 SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN
8405       node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w:real^3)`ASSUME_TAC
8406 THENL(*5*)[
8407 ASM_REWRITE_TAC[node;orbit_map;IN_ELIM_THM]
8408 THEN EXISTS_TAC`0:num`
8409 THEN REWRITE_TAC[POWER;I_DEF]
8410 THEN ARITH_TAC;(*5*)
8411
8412
8413  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]
8414 THEN MP_TAC(SET_RULE`y IN
8415       node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)/\
8416 node (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w) INTER
8417       ds1 =
8418       {(x,v,w,sigma_fan x V E1 v w)}
8419 /\ y IN ds1==> y IN {(x,v,w,sigma_fan x V E1 v w)}
8420 `)
8421 THEN ASM_REWRITE_TAC[IN_SING;EQ_PAIR_4]
8422 THEN STRIP_TAC
8423 THEN REMOVE_THEN "YEU" MP_TAC
8424 THEN ASM_REWRITE_TAC[POWER;I_DEF;EQ_PAIR_4]
8425 THEN RESA_TAC
8426 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`]
8427 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8428 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)`;
8429 `v:real^3`;`u:real^3`; `w:real^3` ]](*5*)](*4*);(*3*)
8430
8431
8432
8433 MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`w:real^3`]
8434 THEN REMOVE_ASSUM_TAC
8435 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
8436 THEN POP_ASSUM MP_TAC
8437 THEN POP_ASSUM(fun th-> MRESA1_TAC th`v:real^3`)
8438 THEN STRIP_TAC
8439 THEN SUBGOAL_THEN`x,w,inverse1_sigma_fan x V E1 w v,v IN d1_fan (x,V,E1)`ASSUME_TAC
8440 THENL(*4*)[
8441
8442 REWRITE_TAC[d1_fan;IN_ELIM_THM]
8443 THEN EXISTS_TAC`x:real^3`
8444 THEN EXISTS_TAC`w:real^3`
8445 THEN EXISTS_TAC`inverse1_sigma_fan x V E1 w v:real^3`
8446 THEN EXISTS_TAC`v:real^3`
8447 THEN ASM_REWRITE_TAC[];(*4*)
8448
8449 MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8450 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8451 THEN MRESAL_TAC SRPRNPL[`x:real^3`;`V:real^3->bool`;`(E1:(real^3->bool)->bool)`;][simple_hypermap]
8452 THEN POP_ASSUM (fun th-> MRESA1_TAC th `x,w,inverse1_sigma_fan x V E1 w v,v:real^3`)
8453 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
8454 THENL(*5*)[
8455 REWRITE_TAC[f1_fan];(*5*)
8456
8457 SUBGOAL_THEN`x:real^3,v,w,sigma_fan x V E1 v w IN ds1`ASSUME_TAC
8458 THENL(*6*)[
8459
8460 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`
8461 THEN EXISTS_TAC`0:num`
8462 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8463 THEN ARITH_TAC;(*6*)
8464
8465 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`]
8466 THEN POP_ASSUM MP_TAC
8467 THEN REMOVE_ASSUM_TAC
8468 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8469 THEN STRIP_TAC
8470 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`;]
8471 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)`)
8472 THEN RESA_TAC
8473 THEN SUBGOAL_THEN`node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v) IN
8474       node_set (hypermap1_of_fanx (x,V:real^3->bool,E1))` ASSUME_TAC
8475 THENL(*7*)[
8476
8477
8478 ASM_REWRITE_TAC[node_set;IN_ELIM_THM;set_of_orbits]
8479 THEN EXISTS_TAC`(x,w,inverse1_sigma_fan x V E1 w v,v:real^3)`
8480 THEN ASM_REWRITE_TAC[node];(*7*)
8481
8482 SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E1 w v,v)IN
8483       node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v:real^3)`ASSUME_TAC
8484 THENL(*8*)[
8485
8486 ASM_REWRITE_TAC[node;orbit_map;IN_ELIM_THM]
8487 THEN EXISTS_TAC`0:num`
8488 THEN REWRITE_TAC[POWER;I_DEF]
8489 THEN ARITH_TAC;(*8*)
8490
8491  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]
8492 THEN MP_TAC(SET_RULE`y IN
8493       node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v)/\
8494 node (hypermap1_of_fanx (x,V,E1)) (x,w,inverse1_sigma_fan x V E1 w v,v) INTER
8495       ds1 =
8496       {(x,w,inverse1_sigma_fan x V E1 w v,v)}
8497 /\ y IN ds1==> y IN {(x,w,inverse1_sigma_fan x V E1 w v,v:real^3)}
8498 `)
8499 THEN ASM_REWRITE_TAC[IN_SING;EQ_PAIR_4]
8500 THEN STRIP_TAC
8501 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`]
8502 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8503 THEN MRESA_TAC aff_gt_eq_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8504 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8505 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x:real^3, w, inverse1_sigma_fan x V E w u} {u}`)
8506 THEN POP_ASSUM MATCH_MP_TAC
8507 THEN EXISTS_TAC`(x, w, inverse1_sigma_fan x V E w u,u:real^3)`
8508 THEN REWRITE_TAC[pr2;pr3;f1_fan]
8509 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
8510 THEN REMOVE_ASSUM_TAC
8511 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8512 THEN POP_ASSUM MP_TAC
8513 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8514 THEN RESA_TAC
8515 THEN POP_ASSUM MP_TAC
8516 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
8517 THEN POP_ASSUM MP_TAC
8518 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8519 THEN RESA_TAC
8520 THEN STRIP_TAC
8521 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`]
8522 THEN POP_ASSUM MP_TAC
8523 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8524 THEN RESA_TAC
8525 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)`
8526 ASSUME_TAC
8527 THENL(*9*)[REWRITE_TAC[f1_fan;EQ_PAIR_4];(*9*)
8528
8529
8530 POP_ASSUM(fun th-> REWRITE_TAC[th])
8531 THEN MATCH_MP_TAC condition_f1_fan_in_face_set
8532 THEN EXISTS_TAC`x:real^3`
8533 THEN EXISTS_TAC`V:real^3->bool`
8534 THEN EXISTS_TAC`E:(real^3->bool)->bool`
8535 THEN EXISTS_TAC`(x,u,w,sigma_fan x V E u w:real^3)`
8536 THEN ASM_REWRITE_TAC[]
8537 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8538 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8539 ](*9*)](*8*)](*7*)](*6*)](*5*)](*4*)](*3*);(*2*)
8540
8541
8542 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`]
8543 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
8544 THEN FIND_ASSUM MP_TAC`{v', w':real^3} IN E1`
8545 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`
8546 THEN STRIP_TAC
8547 THENL(*3*)[
8548
8549
8550 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8551 `v:real^3`; `w:real^3` ]
8552 THEN POP_ASSUM MP_TAC
8553 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8554 THEN RESA_TAC
8555 THEN POP_ASSUM (fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`])
8556 THEN POP_ASSUM MP_TAC
8557 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8558 THEN RESA_TAC
8559 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th `aff_gt {x, v', w'} {sigma_fan x V E1 v' w':real^3}`)
8560 THEN POP_ASSUM MATCH_MP_TAC
8561 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
8562 THEN ASM_REWRITE_TAC[pr2;pr3;f1_fan]
8563 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`]
8564 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)`)
8565 THENL(*4*)[
8566
8567 SUBGOAL_THEN`~(ds = face (hypermap1_of_fanx (x,V,E)) (x,v',w',sigma_fan x V E v' w':real^3))`ASSUME_TAC
8568 THENL(*5*)[
8569
8570 POP_ASSUM MP_TAC
8571 THEN MATCH_MP_TAC MONO_NOT
8572 THEN RESA_TAC
8573 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
8574 THEN EXISTS_TAC`0:num`
8575 THEN REWRITE_TAC[POWER;I_DEF]
8576 THEN ARITH_TAC;(*5*)
8577
8578 ABBREV_TAC`ds0=face (hypermap1_of_fanx (x,V,E)) (x,v',w',sigma_fan x V E v' (w':real^3))`
8579 THEN SUBGOAL_THEN`ds0 IN face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
8580 THENL(*6*)[
8581
8582 REWRITE_TAC[face_set; set_of_orbits;IN_ELIM_THM]
8583 THEN EXISTS_TAC`(x,v',w':real^3,sigma_fan x V E v' w')`
8584 THEN ASM_REWRITE_TAC[]
8585 THEN EXPAND_TAC "ds0"
8586 THEN REWRITE_TAC[face]
8587 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
8588 THEN EXISTS_TAC`x:real^3`
8589 THEN EXISTS_TAC`v':real^3`
8590 THEN EXISTS_TAC`w':real^3`
8591 THEN EXISTS_TAC`sigma_fan x V E v' w':real^3`
8592 THEN ASM_REWRITE_TAC[];(*6*)
8593
8594 MRESAL_TAC DOMAIN_TRANF_FACE_DELETE_DS
8595 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8596 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
8597 ;`ds1:real^3#real^3#real^3#real^3->bool`
8598 ;`ds2:real^3#real^3#real^3#real^3->bool`
8599 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
8600 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;][DELETE;IN_ELIM_THM]
8601 THEN REMOVE_ASSUM_TAC
8602 THEN POP_ASSUM MP_TAC
8603 THEN MRESA_TAC unique_tranf_fan
8604 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8605 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
8606 ;`ds1:real^3#real^3#real^3#real^3->bool`
8607 ;`ds2:real^3#real^3#real^3#real^3->bool`
8608 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
8609 ; `(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`
8610 ;`(ds1:real^3#real^3#real^3#real^3->bool)`
8611 ;`((x,v',w':real^3,sigma_fan x V E v' w'):real^3#real^3#real^3#real^3)`;]
8612 THEN POP_ASSUM MATCH_MP_TAC
8613 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;tran]
8614 THEN REMOVE_THEN "YEU" MP_TAC
8615 THEN RESA_TAC
8616 THEN REMOVE_THEN "LINH1" MP_TAC
8617 THEN ASM_REWRITE_TAC[]
8618 THEN STRIP_TAC
8619 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`][]
8620 THEN REMOVE_ASSUM_TAC
8621 THEN REMOVE_ASSUM_TAC
8622 THEN EXPAND_TAC "ds0"
8623 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;face;IN_ELIM_THM;orbit_map])
8624 THEN EXISTS_TAC`0:num`
8625 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8626 THEN ARITH_TAC](*6*)](*5*);(*4*)
8627
8628 ASM_REWRITE_TAC[]](*4*);(*3*)
8629
8630 POP_ASSUM MP_TAC
8631 THEN REWRITE_TAC[IN_SING]
8632 THEN POP_ASSUM MP_TAC
8633 THEN SET_TAC[]]]]);;
8634
8635
8636
8637
8638
8639
8640 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.
8641 FAN(x,V,E)
8642  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8643 /\ fan80(x,V,E)
8644 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8645 /\ {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)
8646 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8647 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8648 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8649 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8650 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8651 /\ (x,w,v,u)=f10
8652 /\ (x,v,u,w)=f20
8653 /\ (x,u,w,v)=f30
8654 /\ E UNION {{v,w}}= E1
8655 /\ (!E1. FAN(x,V,E1)  /\
8656          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
8657          fan80(x,V,E1)/\
8658          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8659 /\  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
8660 ==> U1 INTER aff_gt {x, v, w} {u} SUBSET dartset_leads_into_fan x V E1 ds2`,
8661
8662
8663
8664 REPEAT STRIP_TAC
8665 THEN POP_ASSUM MP_TAC
8666 THEN DISCH_THEN(LABEL_TAC"EM")
8667 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8668 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8669 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)))`]
8670 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)))`]
8671 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)`;]
8672 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8673 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8674 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`]
8675 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`)
8676 THEN ASM_REWRITE_TAC[]
8677 THEN STRIP_TAC
8678 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8679 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8680 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8681 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8682 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)`;
8683 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8684 THEN MRESA_TAC FANADD_CONFORMING[`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 POP_ASSUM MP_TAC
8687 THEN ASM_REWRITE_TAC[conforming_fan;conforming_half_space_fan]
8688 THEN STRIP_TAC
8689 THEN REMOVE_ASSUM_TAC
8690 THEN REMOVE_ASSUM_TAC
8691 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds2:real^3#real^3#real^3#real^3->bool`)
8692 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8693 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8694 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
8695 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER])
8696 THEN REPEAT STRIP_TAC
8697 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
8698 THEN ASM_REWRITE_TAC[]
8699 THEN STRIP_TAC
8700 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)
8701 THEN MP_TAC(SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}==> y =f10\/ y =f20\/ y =f30`)
8702 THEN RESA_TAC
8703 THENL[
8704
8705 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`
8706 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`]
8707 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8708 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)`;
8709 `v:real^3`;`u:real^3`; `w:real^3` ]
8710 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8711 THEN ASM_REWRITE_TAC[];
8712
8713 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`
8714 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {v, u} IN E==> {v, u} IN E1`)
8715 THEN RESA_TAC
8716 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`]
8717 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8718 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)`;
8719 `v:real^3`;`u:real^3`; `w:real^3` ]
8720 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`u:real^3`]
8721 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`)
8722 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`]
8723 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
8724
8725
8726
8727 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`
8728 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 /\ {u,w} IN E==> {u,w} IN E1`)
8729 THEN RESA_TAC
8730 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`]
8731 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8732 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8733 `v:real^3`; `w:real^3` ]
8734 THEN POP_ASSUM MP_TAC
8735 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8736 THEN RESA_TAC
8737 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
8738 THEN POP_ASSUM MP_TAC
8739 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8740 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
8741 `(u:real^3)`]
8742 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
8743 `(v:real^3)`]
8744 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
8745 THEN RESA_TAC
8746 THEN RESA_TAC]);;
8747
8748
8749
8750
8751
8752
8753
8754
8755 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.
8756 FAN(x,V,E)
8757  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8758 /\ fan80(x,V,E)
8759 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8760 /\ {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)
8761 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8762 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8763 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8764 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8765 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8766 /\ (x,w,v,u)=f10
8767 /\ (x,v,u,w)=f20
8768 /\ (x,u,w,v)=f30
8769 /\ E UNION {{v,w}}= E1
8770 /\ (!E1. FAN(x,V,E1)  /\
8771          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
8772          fan80(x,V,E1)/\
8773          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8774 /\  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
8775 ==> U1 INTER aff_gt {x, v, w} {sigma_fan x V E v u} SUBSET dartset_leads_into_fan x V E1 ds1`,
8776
8777 REPEAT STRIP_TAC
8778 THEN POP_ASSUM MP_TAC
8779 THEN DISCH_THEN(LABEL_TAC"EM")
8780 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8781 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8782 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)))`]
8783 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)))`]
8784 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)`;]
8785 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8786 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8787 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`]
8788 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`)
8789 THEN ASM_REWRITE_TAC[]
8790 THEN STRIP_TAC
8791 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8792 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8793 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8794 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8795 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)`;
8796 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8797
8798 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8799 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8800 THEN POP_ASSUM MP_TAC
8801 THEN REMOVE_THEN "EM"(fun th-> REWRITE_TAC[SYM th;INTERS;IN_ELIM_THM;INTER;SUBSET])
8802 THEN REPEAT STRIP_TAC
8803 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
8804 THEN RESA_TAC
8805 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)`;
8806 `v:real^3`;`u:real^3`; `w:real^3` ]
8807 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
8808 `v:real^3`]
8809 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`]
8810 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)`;
8811 `v:real^3`]
8812 THEN REMOVE_ASSUM_TAC
8813 THEN POP_ASSUM MP_TAC
8814 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
8815 THEN STRIP_TAC
8816 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`)
8817 THEN RESA_TAC
8818 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
8819 THEN DISCH_TAC
8820 THEN POP_ASSUM (fun th -> MP_TAC th
8821 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
8822 THEN DISCH_TAC
8823 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
8824
8825 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`]
8826 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`]
8827 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`]
8828 THEN POP_ASSUM MP_TAC
8829 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
8830 THEN STRIP_TAC
8831 THEN MP_TAC(SET_RULE` x' IN aff_gt {x, sigma_fan x V E v u,v} {w} /\
8832 x' IN aff_gt {x, w, sigma_fan x V E v u} {v}
8833 /\ x' IN aff_gt {x, v, w} {sigma_fan x V E v u}
8834
8835 /\ aff_gt {x, sigma_fan x V E v u, v} {w} INTER
8836  aff_gt {x, v, w} {sigma_fan x V E v u} INTER
8837  aff_gt {x, w, sigma_fan x V E v u} {v} SUBSET
8838  dart_leads_into x V E1 v w
8839 ==> (x':real^3) IN dart_leads_into x V E1 v w`)
8840 THEN RESA_TAC
8841 THEN POP_ASSUM MP_TAC
8842 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
8843 THEN RESA_TAC
8844 THEN SUBGOAL_THEN`(x,v,w:real^3,sigma_fan x V E v u:real^3) IN ds1` ASSUME_TAC
8845 THENL[
8846 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`
8847 THEN EXISTS_TAC`0:num`
8848 THEN ASM_REWRITE_TAC[POWER;I_DEF]
8849 THEN ARITH_TAC;
8850 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
8851 `ds1:real^3#real^3#real^3#real^3->bool`]
8852 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])]);;
8853
8854
8855
8856 let aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_1=prove(`!a x y z w:real^3.
8857 azim a x y z < pi
8858 /\ &0< azim a x y z
8859 /\ azim a x y w < pi
8860 /\ &0< azim a x y w
8861 /\ DISJOINT {a, x} {w}
8862 /\ ~collinear {a, x, w}
8863 /\ ~coplanar {a, x, y, z}
8864 ==> aff_gt {a,x,y}{z} INTER aff{a,x,w} SUBSET aff_gt {a,x} {w}`,
8865
8866 REPEAT STRIP_TAC
8867 THEN POP_ASSUM (fun th-> MP_TAC th
8868 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
8869 THEN  RESA_TAC THEN ASSUME_TAC th)
8870 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`a:real^3`;`x:real^3`;`z:real^3`;`y:real^3`]
8871 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`z:real^3`;`y:real^3`]
8872 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8873 THEN REWRITE_TAC[AFFINE_HULL_3;aff;INTER;SUBSET;IN_ELIM_THM]
8874 THEN MRESAL_TAC  AFF_GT_2_1[`a:real^3`;`x:real^3`;`w:real^3`][IN_ELIM_THM]
8875 THEN REPEAT STRIP_TAC
8876 THEN EXISTS_TAC`u:real`
8877 THEN EXISTS_TAC`v:real`
8878 THEN EXISTS_TAC`w':real`
8879 THEN ASM_REWRITE_TAC[]
8880 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[th])
8881 THEN REWRITE_TAC[VECTOR_ARITH`(u % a + v % x + w' % w) - a=  v % (x-a) + w' % (w-a) +((u+v +w')- &1)% a`]
8882 THEN REPEAT STRIP_TAC
8883 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)`;])
8884 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL;DOT_CROSS_SELF;REAL_ARITH`v * &0 +A=A`]
8885 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`w:real^3`;`y:real^3`]
8886 THEN STRIP_TAC
8887 THEN MRESA_TAC REAL_LT_LCANCEL_IMP[`((x - a) cross (y - a)) dot (w - a:real^3)`;`&0`;`w':real`]
8888 THEN POP_ASSUM MATCH_MP_TAC
8889 THEN POP_ASSUM MP_TAC
8890 THEN REAL_ARITH_TAC);;
8891
8892
8893
8894
8895
8896 let aff_gt_3_1_INTER_aff_SUBSET_aff_gt_2_14=prove(`!a x y z:real^3.
8897 ~coplanar {a, x, y, z}
8898 ==> aff_gt {a,x,y}{z} INTER aff{a,x,z} SUBSET aff_gt {a,x} {z}`,
8899
8900 REPEAT STRIP_TAC
8901 THEN POP_ASSUM (fun th-> MP_TAC th
8902 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
8903 THEN  RESA_TAC THEN ASSUME_TAC th)
8904 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`a:real^3`;`x:real^3`;`z:real^3`;`y:real^3`]
8905 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`a:real^3`; `x:real^3`;`z:real^3`;`y:real^3`]
8906 THEN REWRITE_TAC[AFFINE_HULL_3;aff;INTER;SUBSET;IN_ELIM_THM]
8907 THEN MRESA_TAC notcoplanar_disjoint[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8908 THEN MRESA_TAC notcoplanar_disjoints[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`]
8909 THEN MP_TAC(SET_RULE`~(a=z) /\ ~(x=z:real^3)==>DISJOINT {a, x} {z}`)
8910 THEN RESA_TAC
8911 THEN MRESAL_TAC  AFF_GT_2_1[`a:real^3`;`x:real^3`;`z:real^3`][IN_ELIM_THM]
8912 THEN MRESAL_TAC  AFF_GT_3_1[`a:real^3`;`x:real^3`;`y:real^3`;`z:real^3`][IN_ELIM_THM]
8913 THEN REPEAT STRIP_TAC
8914 THEN EXISTS_TAC`u:real`
8915 THEN EXISTS_TAC`v:real`
8916 THEN EXISTS_TAC`w:real`
8917 THEN ASM_REWRITE_TAC[]
8918 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th] THEN MP_TAC th)
8919 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % a + t2 % x + t3 % y + t4 % z = u % a + v % x + w % z
8920 <=> ((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`]
8921 THEN DISJ_CASES_TAC(REAL_ARITH`~(w-t4= &0)\/ w=t4:real`)
8922 THENL[
8923 STRIP_TAC
8924 THEN MP_TAC(SET_RULE`(w - t4) % (z - a:real^3) = t3 % (y - a) + (t2 - v) % (x - a)
8925 ==> (inv (w-t4))%((w - t4) % (z - a)) =(inv (w-t4))%( t3 % (y - a) + (t2 - v) % (x - a))`)
8926 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
8927 THEN MRESA1_TAC REAL_MUL_LINV `w-t4:real`
8928 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`]
8929 THEN STRIP_TAC
8930 THEN FIND_ASSUM MP_TAC`~(coplanar{a, x, y, z:real^3})`
8931 THEN REWRITE_TAC[COPLANAR_DET_EQ_0]
8932 THEN ASM_REWRITE_TAC[DET_3;VECTOR_3;VECTOR_ADD_COMPONENT;VECTOR_MUL_COMPONENT]
8933 THEN REAL_ARITH_TAC;
8934
8935 ASM_REWRITE_TAC[]]);;
8936
8937
8938
8939
8940 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.
8941 FAN(x,V,E)
8942  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
8943 /\ fan80(x,V,E)
8944 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
8945 /\ {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)
8946 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
8947 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
8948 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
8949 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
8950 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
8951 /\ (x,w,v,u)=f10
8952 /\ (x,v,u,w)=f20
8953 /\ (x,u,w,v)=f30
8954 /\ E UNION {{v,w}}= E1
8955 /\ (!E1. FAN(x,V,E1)  /\
8956          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
8957          fan80(x,V,E1)/\
8958          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
8959 /\ 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}
8960
8961 ==> U1 INTER aff {x,v,w} SUBSET  aff_gt {x} {v, w} `,
8962
8963 REPEAT STRIP_TAC
8964 THEN POP_ASSUM MP_TAC
8965 THEN DISCH_THEN(LABEL_TAC"EM")
8966 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
8967 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
8968 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)))`]
8969 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)))`]
8970 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)`;]
8971 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
8972 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
8973 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`]
8974 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`)
8975 THEN ASM_REWRITE_TAC[]
8976 THEN STRIP_TAC
8977 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8978 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8979 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
8980 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
8981 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
8982 THEN DISCH_TAC
8983 THEN POP_ASSUM (fun th -> MP_TAC th
8984 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
8985 THEN DISCH_TAC
8986 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
8987 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)`;
8988 `v:real^3`;`u:real^3`; `w:real^3` ]
8989 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
8990 THEN RESA_TAC
8991 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
8992 THEN DISCH_TAC
8993 THEN POP_ASSUM (fun th -> MP_TAC th
8994 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
8995 THEN DISCH_TAC
8996 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
8997 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
8998 THEN RESA_TAC
8999 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9000 `(v:real^3)`]
9001 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9002 `v:real^3`]
9003 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`]
9004 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)`;
9005 `v:real^3`]
9006 THEN REMOVE_ASSUM_TAC
9007 THEN POP_ASSUM MP_TAC
9008 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9009 THEN STRIP_TAC
9010 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9011 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`]
9012 THEN POP_ASSUM MP_TAC
9013 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9014 THEN STRIP_TAC
9015 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`]
9016 THEN POP_ASSUM MP_TAC
9017 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9018 THEN DISCH_TAC
9019 THEN POP_ASSUM (fun th -> MP_TAC th
9020 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9021 THEN DISCH_TAC
9022 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
9023 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`]
9024 THEN POP_ASSUM MP_TAC
9025 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
9026 THEN STRIP_TAC
9027 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`;]
9028 THEN POP_ASSUM MP_TAC
9029 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
9030 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
9031 THEN SET_TAC[]);;
9032
9033
9034
9035
9036
9037
9038 let aff_3_rep_cross_dot=prove(`!x:real^3  v:real^3 u:real^3.
9039 ~collinear {x,v,u}
9040
9041 ==> aff {x,v,u} ={y:real^3|   (((v-x) cross (u-x)) dot (y-x)) = &0}`,
9042  REWRITE_TAC[AFFINE_HULL_3;aff;IN_ELIM_THM;EXTENSION]
9043 THEN REPEAT STRIP_TAC
9044 THEN EQ_TAC
9045 THENL[
9046 STRIP_TAC
9047 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(u' % x + v' % v + w % u) - x= ((u'+v'+w)- &1)%x + v'%(v-x)+ w%(u-x)`
9048 ;VECTOR_ARITH`(&1- &1)%X+A=A`;DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
9049 THEN REAL_ARITH_TAC;
9050 DISCH_THEN(LABEL_TAC"ME")
9051 THEN MP_TAC(ISPECL[`x:real^3`;`v:real^3`;`u:real^3`]properties_coordinate) THEN RESA_TAC
9052 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)`;]
9053 THEN POP_ASSUM MP_TAC
9054 THEN ASM_REWRITE_TAC[SPAN_3;EXTENSION]
9055  THEN DISCH_TAC THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(x':real^3)-(x:real^3)`th) THEN ASSUME_TAC(th))
9056 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(u:real^3)-(x:real^3)`th)THEN ASSUME_TAC(th))
9057 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`(v:real^3)-(x:real^3)`th))
9058 THEN REWRITE_TAC[SET_RULE`(x:real^3) IN (:real^3)`;IN_ELIM_THM]
9059 THEN REPEAT STRIP_TAC
9060 THEN ABBREV_TAC`e1=e1_fan x v u:real^3`
9061 THEN ABBREV_TAC`e2=e2_fan x v u:real^3`
9062 THEN ABBREV_TAC`e3=e3_fan x v u:real^3`
9063 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)`]
9064 THEN MRESA_TAC ORTHONORMAL_CROSS[`e1:real^3`;`e2:real^3`;`e3:real^3`;]
9065 THEN REMOVE_THEN "ME" MP_TAC
9066 THEN ASM_REWRITE_TAC[CROSS_LMUL;CROSS_RMUL;CROSS_LADD;CROSS_RADD;CROSS_REFL;]
9067 THEN REDUCE_VECTOR_TAC
9068 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
9069 THEN ASM_REWRITE_TAC[]
9070 THEN ASM_REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9071 THEN ASM_REWRITE_TAC[]
9072 THEN FIND_ASSUM MP_TAC`orthonormal e1 e2 (e3:real^3)`
9073 THEN REWRITE_TAC[orthonormal]
9074 THEN STRIP_TAC
9075 THEN ASM_REWRITE_TAC[]
9076 THEN ONCE_REWRITE_TAC[DOT_SYM]
9077 THEN ASM_REWRITE_TAC[]
9078 THEN REDUCE_ARITH_TAC
9079 THEN FIND_ASSUM MP_TAC`(v - x) dot (e2:real^3) = &0:real`
9080 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9081 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9082 THEN ASM_REWRITE_TAC[]
9083 THEN ONCE_REWRITE_TAC[DOT_SYM]
9084 THEN ASM_REWRITE_TAC[]
9085 THEN REDUCE_ARITH_TAC
9086 THEN RESA_TAC
9087 THEN FIND_ASSUM MP_TAC`(u - x) dot (e2:real^3) = &0:real`
9088 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`u - x = u'' % e1 + v'' % e2 + w' % e3:real^3`
9089 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9090 THEN ASM_REWRITE_TAC[]
9091 THEN ONCE_REWRITE_TAC[DOT_SYM]
9092 THEN ASM_REWRITE_TAC[]
9093 THEN REDUCE_ARITH_TAC
9094 THEN RESA_TAC
9095 THEN REDUCE_ARITH_TAC
9096 THEN FIND_ASSUM MP_TAC`(v - x) dot (e1:real^3) = &0:real`
9097 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9098 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9099 THEN ASM_REWRITE_TAC[]
9100 THEN ONCE_REWRITE_TAC[DOT_SYM]
9101 THEN ASM_REWRITE_TAC[]
9102 THEN REDUCE_ARITH_TAC
9103 THEN RESA_TAC
9104 THEN REWRITE_TAC[REAL_ARITH`u' * w' * --v''' + w * u'' * v''' = (w * u''-u' * w') * v''':real `]
9105 THEN REDUCE_ARITH_TAC
9106 THEN FIND_ASSUM MP_TAC`&0 < (u - x) dot (e1:real^3)`
9107 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`u - x = u'' % e1 + v'' % e2 + w' % e3:real^3`
9108 THEN REWRITE_TAC[DOT_LADD;DOT_RADD;DOT_LMUL;DOT_RMUL;DOT_LNEG]
9109 THEN ASM_REWRITE_TAC[]
9110 THEN ONCE_REWRITE_TAC[DOT_SYM]
9111 THEN ASM_REWRITE_TAC[]
9112 THEN REDUCE_ARITH_TAC
9113 THEN RESA_TAC
9114 THEN REDUCE_ARITH_TAC
9115 THEN FIND_ASSUM MP_TAC`dist (v,x) % e3 = v - x        :real^3`
9116 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`v - x = u' % e1 + v' % e2 + w % e3:real^3`
9117 THEN POP_ASSUM MP_TAC
9118 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9119 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9120 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
9121 THEN STRIP_TAC
9122 THEN REDUCE_VECTOR_TAC
9123 THEN STRIP_TAC
9124 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`)
9125 THEN POP_ASSUM( fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
9126 THEN REWRITE_TAC[DOT_LMUL]
9127 THEN ASM_REWRITE_TAC[]
9128 THEN REDUCE_ARITH_TAC
9129 THEN STRIP_TAC
9130 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th;dist])
9131 THEN MRESA_TAC collinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;]
9132 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
9133 THEN RESA_TAC
9134 THEN MP_TAC(REAL_ARITH`&0 < u''==> ~(u''= &0)`)
9135 THEN RESA_TAC
9136 THEN ASM_REWRITE_TAC[REAL_ENTIRE]
9137 THEN RESA_TAC
9138 THEN MP_TAC(ISPEC`(norm(v-x:real^3))`REAL_MUL_LINV)
9139 THEN RESA_TAC
9140 THEN MP_TAC(ISPEC`u'':real`REAL_MUL_LINV)
9141 THEN RESA_TAC
9142 THEN REDUCE_VECTOR_TAC
9143 THEN EXISTS_TAC`&1- (w''-u''' * inv(u'':real) * w') * inv(norm(v-x:real^3))- u''' * inv(u'':real)`
9144 THEN EXISTS_TAC`(w''-u''' * inv(u'':real) * w') * inv(norm(v-x:real^3))`
9145 THEN EXISTS_TAC`u''' * inv(u'':real)`
9146 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - (w'' - u''' * inv u'' * w') * inv (norm (v - x)) - u''' * inv u'' +
9147  (w'' - u''' * inv u'' * w') * inv (norm (v - x)) +
9148  u''' * inv u'' =
9149  &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`
9150 ;REAL_ARITH`(A*B)*C=A*(B*C)`]
9151 THEN VECTOR_ARITH_TAC]);;
9152
9153
9154
9155
9156
9157
9158
9159 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.
9160 FAN(x,V,E)
9161  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9162 /\ fan80(x,V,E)
9163 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9164 /\ {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)
9165 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9166 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9167 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9168 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9169 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9170 /\ (x,w,v,u)=f10
9171 /\ (x,v,u,w)=f20
9172 /\ (x,u,w,v)=f30
9173 /\ E UNION {{v,w}}= E1
9174 ==> 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) `,
9175
9176 REPEAT STRIP_TAC
9177 THEN POP_ASSUM MP_TAC
9178 THEN DISCH_THEN(LABEL_TAC"EM")
9179 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9180 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9181 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)))`]
9182 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)))`]
9183 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)`;]
9184 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9185 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9186 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`]
9187 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`)
9188 THEN ASM_REWRITE_TAC[]
9189 THEN STRIP_TAC
9190 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9191 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9192 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9193 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9194 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)`;
9195 `v:real^3`;`u:real^3`; `w:real^3` ]
9196 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9197 THEN RESA_TAC
9198 THEN POP_ASSUM (fun th-> MP_TAC th
9199 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9200 THEN RESA_TAC THEN ASSUME_TAC th)
9201 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9202 THEN DISCH_TAC
9203 THEN POP_ASSUM (fun th -> MP_TAC th
9204 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9205 THEN DISCH_TAC
9206 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`v:real^3`])
9207 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
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 [`u:real^3`;`w:real^3`])
9213 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`]
9214 THEN POP_ASSUM MP_TAC
9215 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,d,b,c}`]
9216 THEN STRIP_TAC
9217 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
9218 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `w:real^3`;`u:real^3`;`v:real^3`]
9219 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`w:real^3`;`v:real^3`;`u:real^3`]
9220 THEN ONCE_REWRITE_TAC[CROSS_SKEW]
9221 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)`;
9222 `v:real^3`;`u:real^3`; `w:real^3` ]
9223 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9224 THEN DISCH_TAC
9225 THEN POP_ASSUM (fun th -> MP_TAC th
9226 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9227 THEN DISCH_TAC
9228 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9229 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9230 `v:real^3`]
9231 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`]
9232 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)`;
9233 `v:real^3`]
9234 THEN REMOVE_ASSUM_TAC
9235 THEN POP_ASSUM MP_TAC
9236 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9237 THEN STRIP_TAC
9238 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`)
9239 THEN RESA_TAC
9240 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`]
9241 THEN POP_ASSUM MP_TAC
9242 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,c,b,d}`]
9243 THEN STRIP_TAC
9244 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`sigma_fan x V E v u`;`w:real^3`]
9245 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`]
9246 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`]
9247 THEN POP_ASSUM MP_TAC
9248 THEN ONCE_REWRITE_TAC[SET_RULE`{a,b,c,d}={a,b,d,c}`]
9249 THEN RESA_TAC
9250 THEN MRESA_TAC aff_3_rep_cross_dot[`x:real^3`;`v:real^3`;`w:real^3`]
9251 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION;DOT_LNEG]
9252 THEN GEN_TAC
9253 THEN EQ_TAC
9254 THENL[SET_TAC[];
9255 REAL_ARITH_TAC]);;
9256
9257
9258
9259 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.
9260 FAN(x,V,E)
9261  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9262 /\ fan80(x,V,E)
9263 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9264 /\ {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)
9265 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9266 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9267 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9268 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9269 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9270 /\ (x,w,v,u)=f10
9271 /\ (x,v,u,w)=f20
9272 /\ (x,u,w,v)=f30
9273 /\ E UNION {{v,w}}= E1
9274 /\ (!E1. FAN(x,V,E1)  /\
9275          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9276          fan80(x,V,E1)/\
9277          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9278 /\ 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}
9279 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9280 ==> U1 SUBSET U `,
9281 REPEAT STRIP_TAC
9282 THEN POP_ASSUM MP_TAC
9283 THEN DISCH_THEN(LABEL_TAC"EM")
9284 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9285 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9286 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)))`]
9287 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)))`]
9288 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)`;]
9289 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9290 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9291 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`]
9292 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`)
9293 THEN ASM_REWRITE_TAC[]
9294 THEN STRIP_TAC
9295 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9296 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9297 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9298 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9299
9300 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)`;
9301 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9302 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)`;
9303 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9304 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)`;
9305 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9306 THEN MRESA_TAC SPACE3_EQ_UNION_3SET
9307 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9308 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9309 THEN ASM_TAC
9310 THEN SET_TAC[]);;
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321 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.
9322 FAN(x,V,E)
9323  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9324 /\ fan80(x,V,E)
9325 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9326 /\ {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)
9327 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9328 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9329 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9330 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9331 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9332 /\ (x,w,v,u)=f10
9333 /\ (x,v,u,w)=f20
9334 /\ (x,u,w,v)=f30
9335 /\ E UNION {{v,w}}= E1
9336 /\ (!E1. FAN(x,V,E1)  /\
9337          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9338          fan80(x,V,E1)/\
9339          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9340 /\  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}
9341 ==> open U`,
9342 REPEAT STRIP_TAC
9343 THEN POP_ASSUM MP_TAC
9344 THEN DISCH_THEN(LABEL_TAC"EM")
9345 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9346 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9347 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)))`]
9348 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)))`]
9349 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)`;]
9350 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9351 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9352 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`]
9353 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`)
9354 THEN ASM_REWRITE_TAC[]
9355 THEN STRIP_TAC
9356 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9357 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9358 THEN MATCH_MP_TAC OPEN_INTER
9359 THEN STRIP_TAC
9360 THENL[
9361  MATCH_MP_TAC OPEN_AFF_GT_3_1
9362 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9363 THEN DISCH_TAC
9364 THEN POP_ASSUM (fun th -> MP_TAC th
9365 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9366 THEN DISCH_TAC
9367 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
9368 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`]
9369 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9370 THEN ASM_REWRITE_TAC[];
9371
9372 MATCH_MP_TAC OPEN_INTER
9373 THEN STRIP_TAC
9374 THENL[
9375  MATCH_MP_TAC OPEN_AFF_GT_3_1
9376 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9377 THEN DISCH_TAC
9378 THEN POP_ASSUM (fun th -> MP_TAC th
9379 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9380 THEN DISCH_TAC
9381 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
9382 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9383 `v:real^3`]
9384 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`]
9385 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)`;
9386 `v:real^3`]
9387 THEN REMOVE_ASSUM_TAC
9388 THEN POP_ASSUM MP_TAC
9389 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9390 THEN STRIP_TAC
9391 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`]
9392 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
9393 THEN ASM_REWRITE_TAC[];
9394
9395
9396 MATCH_MP_TAC OPEN_INTER
9397 THEN STRIP_TAC
9398 THENL[ MATCH_MP_TAC OPEN_AFF_GT_3_1
9399 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9400 THEN RESA_TAC
9401 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)`;
9402 `v:real^3`;`u:real^3`; `w:real^3` ]
9403 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9404 THEN DISCH_TAC
9405 THEN POP_ASSUM (fun th -> MP_TAC th
9406 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9407 THEN DISCH_TAC
9408 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9409 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9410 `v:real^3`]
9411 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`]
9412 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)`;
9413 `v:real^3`]
9414 THEN REMOVE_ASSUM_TAC
9415 THEN POP_ASSUM MP_TAC
9416 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9417 THEN STRIP_TAC
9418 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`)
9419 THEN RESA_TAC
9420 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`]
9421 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
9422 THEN ASM_REWRITE_TAC[];
9423  MATCH_MP_TAC OPEN_AFF_GT_3_1
9424 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> { v,w} IN E1`)
9425 THEN RESA_TAC
9426 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)`;
9427 `v:real^3`;`u:real^3`; `w:real^3` ]
9428 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9429 THEN DISCH_TAC
9430 THEN POP_ASSUM (fun th -> MP_TAC th
9431 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9432 THEN DISCH_TAC
9433 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`w:real^3`])
9434 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9435 `v:real^3`]
9436 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`]
9437 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)`;
9438 `v:real^3`]
9439 THEN REMOVE_ASSUM_TAC
9440 THEN POP_ASSUM MP_TAC
9441 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9442 THEN STRIP_TAC
9443 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`)
9444 THEN RESA_TAC
9445 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`]]]]);;
9446
9447
9448
9449 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.
9450 FAN(x,V,E)
9451  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9452 /\ fan80(x,V,E)
9453 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9454 /\ {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)
9455 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9456 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9457 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9458 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9459 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9460 /\ (x,w,v,u)=f10
9461 /\ (x,v,u,w)=f20
9462 /\ (x,u,w,v)=f30
9463 /\ E UNION {{v,w}}= E1
9464 /\ (!E1. FAN(x,V,E1)  /\
9465          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9466          fan80(x,V,E1)/\
9467          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9468 ==> aff_gt {x, v, u} {sigma_fan x V E v u}= aff_gt {x, v, u} {w}`,
9469 REPEAT STRIP_TAC
9470 THEN POP_ASSUM MP_TAC
9471 THEN DISCH_THEN(LABEL_TAC"EM")
9472 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9473 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9474 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)))`]
9475 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)))`]
9476 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)`;]
9477 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9478 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9479 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`]
9480 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`)
9481 THEN ASM_REWRITE_TAC[]
9482 THEN STRIP_TAC
9483 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9484 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9485 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9486 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9487 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
9488 THEN DISCH_TAC
9489 THEN POP_ASSUM (fun th -> MP_TAC th
9490 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
9491 THEN DISCH_TAC
9492 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
9493 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
9494 `v:real^3`]
9495 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`]
9496 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)`;
9497 `v:real^3`]
9498 THEN REMOVE_ASSUM_TAC
9499 THEN POP_ASSUM MP_TAC
9500 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9501 THEN STRIP_TAC
9502 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`]
9503 THEN POP_ASSUM MP_TAC
9504 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9505 THEN ASM_REWRITE_TAC[]
9506 THEN STRIP_TAC
9507 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E v u`]
9508 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`]
9509 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`;]
9510 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9511 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)`;
9512 `v:real^3`;`u:real^3`; `w:real^3` ]
9513 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
9514 THEN RESA_TAC
9515 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
9516 THEN REWRITE_TAC[fan80]
9517 THEN STRIP_TAC
9518 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v:real^3`;`u:real^3`])
9519 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,w} IN E1`)
9520 THEN RESA_TAC
9521 THEN POP_ASSUM MP_TAC
9522 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
9523 THEN STRIP_TAC
9524 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`]
9525 THEN POP_ASSUM MP_TAC
9526 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
9527 THEN ASM_REWRITE_TAC[]
9528 THEN STRIP_TAC
9529 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`sigma_fan x V E1 v u`]
9530 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`]
9531 THEN MRESA_TAC aff_gt_3_1_rep_cross_dot[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;]
9532 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
9533 THEN ASM_REWRITE_TAC[]);;
9534
9535
9536
9537
9538
9539 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.
9540 FAN(x,V,E)
9541  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9542 /\ fan80(x,V,E)
9543 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9544 /\ {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)
9545 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9546 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9547 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9548 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9549 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9550 /\ (x,w,v,u)=f10
9551 /\ (x,v,u,w)=f20
9552 /\ (x,u,w,v)=f30
9553 /\ E UNION {{v,w}}= E1
9554 /\ (!E1. FAN(x,V,E1)  /\
9555          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9556          fan80(x,V,E1)/\
9557          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9558 /\ 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}
9559 ==> aff_gt {x} {v,w} SUBSET U1 `,
9560
9561 REPEAT STRIP_TAC
9562 THEN POP_ASSUM MP_TAC
9563 THEN DISCH_THEN(LABEL_TAC"EM")
9564 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9565 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9566 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)))`]
9567 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)))`]
9568 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)`;]
9569 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9570 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9571 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`]
9572 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`)
9573 THEN ASM_REWRITE_TAC[]
9574 THEN STRIP_TAC
9575 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9576 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9577 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9578 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9579 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> { v,w} IN E1`)
9580 THEN RESA_TAC
9581 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9582 `(v:real^3)`]
9583 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
9584 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)`;
9585 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9586 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}`]
9587 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}`]
9588 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}`]
9589 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}`]
9590 THEN ASM_TAC
9591 THEN SET_TAC[]);;
9592
9593
9594
9595 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.
9596 FAN(x,V,E)
9597  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9598 /\ fan80(x,V,E)
9599 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9600 /\ {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)
9601 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9602 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9603 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9604 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9605 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9606 /\ (x,w,v,u)=f10
9607 /\ (x,v,u,w)=f20
9608 /\ (x,u,w,v)=f30
9609 /\ E UNION {{v,w}}= E1
9610 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9611 /\ (!E1. FAN(x,V,E1)  /\
9612          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9613          fan80(x,V,E1)/\
9614          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9615 /\  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}
9616 ==> U= U1 UNION dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2`,
9617
9618 REPEAT STRIP_TAC
9619 THEN POP_ASSUM MP_TAC
9620 THEN DISCH_THEN(LABEL_TAC"EM")
9621 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9622 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9623 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)))`]
9624 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)))`]
9625 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)`;]
9626 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9627 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9628 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`]
9629 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`)
9630 THEN ASM_REWRITE_TAC[]
9631 THEN STRIP_TAC
9632 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9633 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9634 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9635 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9636 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)`;
9637 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9638 THEN MRESA_TAC lemmaU1_subset_U[`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)`;`U:real^3->bool`;`U1:real^3->bool`]
9640 THEN POP_ASSUM MP_TAC
9641 THEN POP_ASSUM MP_TAC
9642 THEN SET_TAC[]);;
9643
9644
9645 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.
9646 FAN(x,V,E)
9647  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9648 /\ fan80(x,V,E)
9649 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9650 /\ {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)
9651 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9652 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9653 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9654 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9655 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9656 /\ (x,w,v,u)=f10
9657 /\ (x,v,u,w)=f20
9658 /\ (x,u,w,v)=f30
9659 /\ E UNION {{v,w}}= E1
9660 /\ (!E1. FAN(x,V,E1)  /\
9661          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9662          fan80(x,V,E1)/\
9663          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9664 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
9665 ==> open U `,
9666
9667 REPEAT STRIP_TAC
9668 THEN POP_ASSUM MP_TAC
9669 THEN DISCH_THEN(LABEL_TAC"EM")
9670 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9671 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9672 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)))`]
9673 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)))`]
9674 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)`;]
9675 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9676 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9677 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`]
9678 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`)
9679 THEN ASM_REWRITE_TAC[]
9680 THEN STRIP_TAC
9681 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9682 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9683 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9684 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9685 THEN MRESA_TAC lemma_rep_U_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9686 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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}`]
9687 THEN MATCH_MP_TAC OPEN_UNION
9688 THEN MRESA_TAC open_subsetU[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9689 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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}`]
9690 THEN MATCH_MP_TAC OPEN_UNION
9691 THEN MRESA_TAC FANADD_CONFORMING[`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)`;]
9693 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)`;
9694 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9695 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`]
9696 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`]
9697 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)`;
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 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`]
9700 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`]);;
9701
9702
9703 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.
9704 FAN(x,V,E)
9705  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9706 /\ fan80(x,V,E)
9707 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9708 /\ {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)
9709 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9710 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9711 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9712 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9713 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9714 /\ (x,w,v,u)=f10
9715 /\ (x,v,u,w)=f20
9716 /\ (x,u,w,v)=f30
9717 /\ E UNION {{v,w}}= E1
9718 /\ (!E1. FAN(x,V,E1)  /\
9719          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9720          fan80(x,V,E1)/\
9721          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9722 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
9723 ==>
9724 U INTER
9725  UNIONS
9726  (topological_component_yfan (x,V,E1) DELETE
9727   dartset_leads_into_fan x V E1 ds1 DELETE
9728   dartset_leads_into_fan x V E1 ds2) = {}`,
9729
9730 REPEAT STRIP_TAC
9731 THEN POP_ASSUM MP_TAC
9732 THEN DISCH_THEN(LABEL_TAC"EM")
9733 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9734 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9735 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)))`]
9736 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)))`]
9737 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)`;]
9738 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9739 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9740 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`]
9741 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`)
9742 THEN ASM_REWRITE_TAC[]
9743 THEN STRIP_TAC
9744 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9745 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9746 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9747 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9748 THEN ONCE_REWRITE_TAC[EXTENSION;]
9749 THEN REWRITE_TAC[UNIONS;INTER;IN_ELIM_THM;UNION;DELETE]
9750 THEN GEN_TAC
9751 THEN EQ_TAC
9752 THENL[
9753 REPEAT STRIP_TAC
9754 THENL[
9755  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9756 THEN FIND_ASSUM MP_TAC`u' IN topological_component_yfan (x:real^3,V,E1)`
9757 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9758 THEN STRIP_TAC
9759 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9760 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`x':real^3`]
9761 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)`;
9762 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9763 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`]
9764 THEN POP_ASSUM MP_TAC
9765 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
9766 THEN STRIP_TAC
9767 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9768 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y':real^3`;`x':real^3`];
9769
9770  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9771 THEN FIND_ASSUM MP_TAC`u' IN topological_component_yfan (x:real^3,V,E1)`
9772 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9773 THEN STRIP_TAC
9774 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9775 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`x':real^3`]
9776 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)`;
9777 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9778 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`]
9779 THEN POP_ASSUM MP_TAC
9780 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
9781 THEN STRIP_TAC
9782 THEN POP_ASSUM(fun th-> ASSUME_TAC(SYM th))
9783 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y':real^3`;`x':real^3`];
9784  MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`u':real^3->bool`]
9785 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`]
9786 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
9787 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
9788 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9789 ` (v:real^3)`]
9790 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`]
9791 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
9792 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}
9793 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
9794 THEN RESA_TAC
9795 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)={})`)
9796 THEN ASM_REWRITE_TAC[]
9797 THEN POP_ASSUM MP_TAC
9798 THEN REWRITE_TAC[yfan]
9799 THEN SET_TAC[]];
9800 SET_TAC[]]);;
9801
9802
9803 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.
9804 FAN(x,V,E)
9805  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9806 /\ fan80(x,V,E)
9807 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9808 /\ {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)
9809 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9810 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9811 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9812 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9813 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9814 /\ (x,w,v,u)=f10
9815 /\ (x,v,u,w)=f20
9816 /\ (x,u,w,v)=f30
9817 /\ E UNION {{v,w}}= E1
9818 /\ (!E1. FAN(x,V,E1)  /\
9819          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
9820          fan80(x,V,E1)/\
9821          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
9822 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
9823 ==> dartset_leads_into_fan x V E ds SUBSET U
9824 `,
9825
9826 REPEAT STRIP_TAC
9827 THEN POP_ASSUM MP_TAC
9828 THEN DISCH_THEN(LABEL_TAC"EM")
9829 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
9830 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9831 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)))`]
9832 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)))`]
9833 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)`;]
9834 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
9835 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
9836 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`]
9837 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`)
9838 THEN ASM_REWRITE_TAC[]
9839 THEN STRIP_TAC
9840 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9841 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9842 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9843 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9844 THEN POP_ASSUM MP_TAC
9845 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9846 THEN REWRITE_TAC[GSYM UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN]
9847 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN]
9848 THEN DISCH_THEN(LABEL_TAC"MA")
9849 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)`;
9850 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9851 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`]
9852 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)`;
9853 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9854 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`]
9855 THEN SUBGOAL_THEN`yfan (x,V,E) =
9856       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}`
9857 ASSUME_TAC
9858 THENL(*1*)[
9859 ASM_REWRITE_TAC[UNIONS;DELETE;UNION;IN_ELIM_THM]
9860 THEN POP_ASSUM MP_TAC
9861 THEN POP_ASSUM MP_TAC
9862 THEN POP_ASSUM MP_TAC
9863 THEN SET_TAC[];(*1*)
9864
9865 POP_ASSUM MP_TAC
9866 THEN REWRITE_TAC[SET_RULE`A UNION B UNION C UNION D=A UNION (C UNION B UNION D)`]
9867 THEN ASM_REWRITE_TAC[]
9868 THEN STRIP_TAC
9869 THEN POP_ASSUM(fun th-> MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"LINH"))
9870 THEN REMOVE_THEN"MA"(fun th-> MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"MA"))
9871 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`]
9872 THEN POP_ASSUM MP_TAC
9873 THEN ASM_REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
9874 THEN STRIP_TAC
9875 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
9876 THEN ASM_REWRITE_TAC[]
9877 THEN STRIP_TAC
9878 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
9879 ` (v:real^3)`]
9880 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
9881 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
9882 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
9883 THEN REWRITE_TAC[SUBSET]
9884 THEN GEN_TAC
9885 THEN MRESA_TAC dartset_leads_into_fanadd2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9886 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9887 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`)
9888 THEN RESA_TAC
9889 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan (x,V:real^3->bool,E)`;`y:real^3`;`y':real^3`]
9890 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9891 THEN STRIP_TAC
9892 THEN MRESA_TAC CONNECTED_COMPONENT_SUBSET[`yfan (x,V:real^3->bool,E)`;`y':real^3`]
9893 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'
9894 ==> x' IN yfan (x,V:real^3->bool,E)`)
9895 THEN ASM_REWRITE_TAC[]
9896 THEN REMOVE_THEN "MA"(fun th-> REWRITE_TAC[SYM th]
9897 THEN REMOVE_THEN "LINH"(fun th-> REWRITE_TAC[SYM th;UNION;IN_ELIM_THM]))
9898 THEN STRIP_TAC
9899 THEN SUBGOAL_THEN`?e1 e2.
9900                open e1 /\
9901                open e2 /\
9902                (connected_component (yfan (x,V,E)) y') SUBSET e1 UNION e2 /\
9903                e1 INTER e2 INTER (connected_component (yfan (x,V:real^3->bool,E)) y') = {} /\
9904                ~(e1 INTER (connected_component (yfan (x,V,E)) y') = {}) /\
9905                ~(e2 INTER (connected_component (yfan (x,V,E)) y') = {})` ASSUME_TAC
9906 THENL(*2*)[
9907
9908  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)`;
9909 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9910
9911 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9912 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9913 THEN EXISTS_TAC`U:real^3->bool`
9914 THEN EXISTS_TAC`UNIONS
9915       (topological_component_yfan (x,V:real^3->bool,E1) DELETE
9916        dartset_leads_into_fan x V E1 ds1 DELETE
9917        dartset_leads_into_fan x V E1 ds2)`
9918 THEN ASM_REWRITE_TAC[]
9919 THEN STRIP_TAC
9920 THENL(*3*)[
9921 MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;
9922 `dartset_leads_into_fan x V E1 ds1:real^3->bool`]
9923 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;
9924 `dartset_leads_into_fan x V E1 ds2:real^3->bool`]
9925 THEN MATCH_MP_TAC OPEN_UNIONS
9926 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
9927 THEN REPEAT STRIP_TAC
9928 THEN MRESA_TAC OPEN_TOPOLOGICAL_COMPONENT_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;
9929 `s:real^3->bool`];
9930
9931 STRIP_TAC
9932 THENL(*4*)[
9933
9934  MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9935 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
9936 THEN POP_ASSUM MP_TAC
9937 THEN MRESA_TAC UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN[`x:real^3`;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool)`;]
9938 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
9939 THEN STRIP_TAC
9940 THEN POP_ASSUM( fun th-> REMOVE_THEN "EM" (fun th-> REWRITE_TAC[SYM th])
9941 THEN REMOVE_ASSUM_TAC
9942 THEN REMOVE_ASSUM_TAC
9943 THEN REMOVE_ASSUM_TAC
9944 THEN POP_ASSUM MP_TAC THEN REWRITE_TAC[th])
9945 THEN SET_TAC[];
9946
9947 STRIP_TAC
9948 THENL(*5*)[
9949
9950 MRESA_TAC U_INTER_U2_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
9951 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
9952 THEN POP_ASSUM MP_TAC
9953 THEN SET_TAC[];(*5*)
9954
9955 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
9956 ==> y' IN U
9957 `)
9958 THEN RESA_TAC
9959 THEN SUBGOAL_THEN`y' IN connected_component (yfan (x,V:real^3->bool,E)) y'`ASSUME_TAC
9960 THENL(*6*)[
9961
9962 REWRITE_TAC[IN]
9963 THEN MATCH_MP_TAC CONNECTED_COMPONENT_REFL
9964 THEN ASM_REWRITE_TAC[]
9965 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`;]
9966 THEN ASM_TAC
9967 THEN SET_TAC[];(*6*)
9968
9969 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' = {})`)
9970 THEN RESA_TAC
9971 THEN ASM_TAC
9972 THEN SET_TAC[]]]]];(*2*)
9973 MRESA_TAC CONNECTED_CONNECTED_COMPONENT[`yfan(x,V:real^3->bool,E)`;`y':real^3`]
9974 THEN POP_ASSUM MP_TAC
9975 THEN ASM_REWRITE_TAC[connected]]]);;
9976
9977
9978
9979
9980
9981
9982
9983
9984
9985
9986
9987 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.
9988 FAN(x,V,E)
9989  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
9990 /\ fan80(x,V,E)
9991 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
9992 /\ {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)
9993 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
9994 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
9995 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
9996 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
9997 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
9998 /\ (x,w,v,u)=f10
9999 /\ (x,v,u,w)=f20
10000 /\ (x,u,w,v)=f30
10001 /\ E UNION {{v,w}}= E1
10002 /\ (!E1. FAN(x,V,E1)  /\
10003          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
10004          fan80(x,V,E1)/\
10005          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10006 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
10007 ==> dartset_leads_into_fan x V E ds =U
10008 `,
10009 REPEAT STRIP_TAC
10010 THEN POP_ASSUM MP_TAC
10011 THEN DISCH_THEN(LABEL_TAC"EM")
10012 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10013 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10014 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)))`]
10015 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)))`]
10016 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)`;]
10017 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10018 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10019 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`]
10020 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`)
10021 THEN ASM_REWRITE_TAC[]
10022 THEN STRIP_TAC
10023 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10024 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10025 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)`;
10026 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
10027 THEN MRESA_TAC dartset_leads_into_fanadd2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10028 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10029 THEN MRESA_TAC dartset_leads_into_fanadd1[`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 STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(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` ]
10033 THEN ASM_TAC
10034 THEN SET_TAC[]);;
10035
10036
10037
10038
10039
10040 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.
10041 FAN(x,V,E)
10042  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10043 /\ fan80(x,V,E)
10044 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10045 /\ {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)
10046 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10047 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10048 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10049 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10050 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10051 /\ (x,w,v,u)=f10
10052 /\ (x,v,u,w)=f20
10053 /\ (x,u,w,v)=f30
10054 /\ E UNION {{v,w}}= E1
10055 /\ (!E1. FAN (x,V,E1) /\
10056             (!v. v IN V ==> CARD (set_of_edge v V E1) > 1) /\
10057             fan80 (x,V,E1) /\
10058             N_FAN (x,V,E1) < N_FAN (x,V,E)
10059             ==> conforming_fan (x,V,E1))
10060 /\ dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}=U
10061 ==> U IN topological_component_yfan (x,V,E)`,
10062
10063
10064 REPEAT STRIP_TAC
10065 THEN POP_ASSUM MP_TAC
10066 THEN DISCH_THEN(LABEL_TAC"EM")
10067 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10068 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10069 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)))`]
10070 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)))`]
10071 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)`;]
10072 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10073 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10074 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`]
10075 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`)
10076 THEN ASM_REWRITE_TAC[]
10077 THEN STRIP_TAC
10078 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10079 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10080 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)`;
10081 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
10082 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10083 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`]);;
10084
10085
10086
10087
10088
10089
10090
10091
10092
10093
10094
10095
10096 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.
10097 FAN(x,V,E)
10098  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10099 /\ fan80(x,V,E)
10100 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10101 /\ {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)
10102 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10103 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10104 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10105 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10106 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10107 /\ (x,w,v,u)=f10
10108 /\ (x,v,u,w)=f20
10109 /\ (x,u,w,v)=f30
10110 /\ E UNION {{v,w}}= E1
10111 /\ ds0 IN face_set (hypermap1_of_fanx (x,V,E)) DELETE ds
10112 /\ (!E1. FAN(x,V,E1)  /\
10113          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
10114          fan80(x,V,E1)/\
10115          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10116
10117 ==> dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) = dartset_leads_into_fan x V E ds0`,
10118
10119 REPEAT STRIP_TAC
10120 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10121 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10122 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)))`]
10123 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)))`]
10124 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)`;]
10125 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10126 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10127 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`]
10128 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`)
10129 THEN ASM_REWRITE_TAC[]
10130 THEN STRIP_TAC
10131 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10132 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10133 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))`)
10134 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10135 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`]
10136 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10137 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
10138 THEN POP_ASSUM MP_TAC
10139 THEN POP_ASSUM MP_TAC
10140 THEN DISCH_THEN(LABEL_TAC"MAT")
10141 THEN STRIP_TAC
10142 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
10143 `ds0:real^3#real^3#real^3#real^3->bool`]
10144 THEN POP_ASSUM (fun th-> MRESA1_TAC th `y:real^3#real^3#real^3#real^3`)
10145 THEN MP_TAC(SET_RULE`ds0 SUBSET d1_fan (x,V,E) /\ y IN ds0==> y IN d1_fan ((x:real^3),V,E)`)
10146 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10147 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))
10148 THEN DISCH_THEN(LABEL_TAC"NHO") THEN ASSUME_TAC th)
10149 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
10150 THENL(*1*)[
10151 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;face]
10152 THEN EXISTS_TAC`(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`
10153 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th])
10154 THEN ASM_REWRITE_TAC[tran;d1_fan;IN_ELIM_THM]
10155 THEN EXISTS_TAC`x:real^3`
10156 THEN EXISTS_TAC`v':real^3`
10157 THEN EXISTS_TAC`w':real^3`
10158 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
10159 THEN ASM_REWRITE_TAC[]
10160 THEN MP_TAC(SET_RULE`{v', w'} IN E/\ E UNION {{v, w:real^3}} = E1==> {v', w'} IN E1`)
10161 THEN ASM_REWRITE_TAC[];(*1*)
10162
10163 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))`
10164 ASSUME_TAC
10165 THENL(*2*)[
10166 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
10167 THEN EXISTS_TAC`0:num`
10168 THEN REWRITE_TAC[POWER;I_DEF]
10169 THEN ARITH_TAC;(*2*)
10170
10171 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;
10172 `face (hypermap1_of_fanx (x,V,E1)) (tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`]
10173 THEN POP_ASSUM (fun th-> MRESA1_TAC th `(tran (x:real^3) V E1 (y:real^3#real^3#real^3#real^3))`)
10174 THEN POP_ASSUM MP_TAC
10175 THEN DISCH_THEN(LABEL_TAC"NHOEM")
10176 THEN REMOVE_THEN "NHO"(fun th-> REWRITE_TAC[SYM th;tran;pr2;pr3] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"LINH"))
10177 THEN MP_TAC(SET_RULE`{v', w'} IN E/\ E UNION {{v, w:real^3}} = E1==> {v', w'} IN E1`)
10178 THEN ASM_REWRITE_TAC[]
10179 THEN STRIP_TAC
10180 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
10181 THEN POP_ASSUM MP_TAC
10182 THEN DISCH_THEN(LABEL_TAC"NHO")
10183 THEN MRESA_TAC DART_LEADS_INTO [`x:real^3`;`(V:real^3->bool)`;`(E1:(real^3->bool)->bool)`;`v':real^3`;`w':real^3`]
10184 THEN POP_ASSUM MP_TAC
10185 THEN DISCH_THEN(LABEL_TAC"NHO1")
10186 THEN MATCH_MP_TAC unique_dart_leads_into
10187 THEN ASM_REWRITE_TAC[]
10188 THEN MP_TAC(REAL_ARITH`&0<h /\ &0< h'==> &0< min (h:real) (h':real)`)
10189 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10190 THEN EXISTS_TAC`min (h:real) (h':real)`
10191 THEN ASM_REWRITE_TAC[]
10192 THEN DISJ_CASES_TAC(SET_RULE`((y:real^3#real^3#real^3#real^3) IN ds)\/ ~(y IN ds)`)
10193 THENL(*3*)[
10194 MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds:real^3#real^3#real^3#real^3->bool`]
10195 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`]
10196 THEN POP_ASSUM MP_TAC
10197 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10198 THEN MRESA_TAC lemma_face_representation[`hypermap1_of_fanx(x:real^3,V,E)`;`ds0:real^3#real^3#real^3#real^3->bool`]
10199 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`]
10200 THEN POP_ASSUM MP_TAC
10201 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10202 THEN STRIP_TAC
10203 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10204 THEN STRIP_TAC
10205 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th; DELETE;IN_ELIM_THM] );(*3*)
10206
10207  REPEAT GEN_TAC THEN STRIP_TAC
10208 THEN  POP_ASSUM MP_TAC
10209 THEN MP_TAC(REAL_ARITH`s < min h h'==> s <  h' /\ s < h `)
10210 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10211 THEN  MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
10212 `(v':real^3)`]
10213 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E1) > 1)`
10214 THEN DISCH_TAC
10215 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
10216 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
10217 THEN FIND_ASSUM MP_TAC`(!v. v IN V==>CARD (set_of_edge (v:real^3) V E) > 1)`
10218 THEN DISCH_TAC
10219 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC `v':real^3`th)
10220 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN STRIP_TAC THEN ASSUME_TAC th))
10221 THEN ASM_REWRITE_TAC[rw_dart_fan;w_dart_fan]
10222 THEN MRESA_TAC INVARANT_SIGMA_FAN_ADD
10223 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10224 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10225 ;`ds1:real^3#real^3#real^3#real^3->bool`
10226 ;`ds2:real^3#real^3#real^3#real^3->bool`
10227 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10228 ;`(y:real^3#real^3#real^3#real^3)`;]
10229 THEN POP_ASSUM MP_TAC
10230 THEN REMOVE_THEN"NHOEM" MP_TAC
10231 THEN REMOVE_THEN "LINH"(fun th-> REWRITE_TAC[SYM th;pr2;pr3;tran] THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"LINH"))
10232 THEN DISCH_THEN(LABEL_TAC"NHOEM")
10233 THEN STRIP_TAC
10234 THEN ASM_REWRITE_TAC[]
10235 THEN STRIP_TAC
10236 THEN REMOVE_THEN "NHO"(fun th-> MRESAL_TAC th[`s:real`;`y':real^3`][rw_dart_fan;w_dart_fan])
10237 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH"))
10238 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
10239 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10240 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10241 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10242 THEN POP_ASSUM MP_TAC
10243 THEN DISCH_THEN(LABEL_TAC"NHOLINH")
10244 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}`)
10245 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`]
10246 THEN POP_ASSUM MP_TAC
10247 THEN DISCH_THEN(LABEL_TAC"YEULINH")
10248 THEN REWRITE_TAC[EXTENSION]
10249 THEN GEN_TAC
10250 THEN EQ_TAC
10251 THENL(*4*)[
10252 POP_ASSUM MP_TAC
10253 THEN SET_TAC[];(*4*)
10254
10255
10256  GEN_REWRITE_TAC(LAND_CONV o DEPTH_CONV)[IN;connected_component ]
10257 THEN STRIP_TAC
10258 THEN DISJ_CASES_TAC(SET_RULE(`(t INTER aff_gt {x} {v:real^3, w}={}) \/ ~(t INTER aff_gt {x} {v, w}={})`))
10259 THENL(*5*)[
10260 MP_TAC(SET_RULE`t SUBSET yfan (x,V,E1) UNION aff_gt {x} {v, w}/\ t INTER aff_gt {x} {v, w} = {}
10261 ==> t SUBSET yfan (x,V:real^3->bool,E1)`)
10262 THEN ASM_REWRITE_TAC[IN;connected_component ]
10263 THEN STRIP_TAC
10264 THEN EXISTS_TAC`t:real^3->bool`
10265 THEN ASM_REWRITE_TAC[]
10266 THEN ASM_TAC
10267 THEN SET_TAC[IN];(*5*)
10268
10269 POP_ASSUM MP_TAC
10270 THEN REWRITE_TAC[SET_RULE`~(A={})<=> ?z. z IN A`;INTER;IN_ELIM_THM]
10271 THEN STRIP_TAC
10272 THEN SUBGOAL_THEN`z IN connected_component (yfan (x,V:real^3->bool,E1) UNION aff_gt {x} {v, w}) y'`
10273 ASSUME_TAC
10274 THENL(*6*)[
10275 ASM_REWRITE_TAC[IN;connected_component ]
10276 THEN EXISTS_TAC`t:real^3->bool`
10277 THEN ASM_REWRITE_TAC[]
10278 THEN ASM_TAC
10279 THEN SET_TAC[IN];(*6*)
10280 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}
10281 ==> z IN dartset_leads_into_fan x (V:real^3->bool) E ds`)
10282 THEN ASM_REWRITE_TAC[]
10283 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`]
10284 THEN POP_ASSUM MP_TAC
10285 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10286 THEN STRIP_TAC
10287 THEN POP_ASSUM MP_TAC
10288 THEN DISCH_THEN(LABEL_TAC"EM")
10289 THEN ASM_REWRITE_TAC[]
10290 THEN STRIP_TAC
10291 THEN MP_TAC(SET_RULE`z IN connected_component (yfan (x,V,E1) UNION aff_gt {x} {v, w}) y''
10292 /\ z IN connected_component (yfan (x,V,E1) UNION aff_gt {x} {v, w}) y'
10293 ==> ~(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''={})`)
10294 THEN ASM_REWRITE_TAC[CONNECTED_COMPONENT_OVERLAP]
10295 THEN STRIP_TAC
10296 THEN REMOVE_THEN"YEULINH" MP_TAC
10297 THEN POP_ASSUM MP_TAC
10298 THEN REMOVE_THEN"NHOLINH" (fun th-> REWRITE_TAC[SYM th])
10299 THEN REMOVE_THEN"EM" (fun th-> REWRITE_TAC[SYM th])
10300 THEN REMOVE_THEN"BELINH" (fun th-> REWRITE_TAC[SYM th])
10301 THEN STRIP_TAC
10302 THEN ASM_REWRITE_TAC[]
10303 THEN REMOVE_THEN "NHO1"(fun th-> MRESAL_TAC th[`s:real`;`y':real^3`][rw_dart_fan;w_dart_fan])
10304 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN MP_TAC(th) THEN DISCH_THEN(LABEL_TAC"BELINH"))
10305 THEN REMOVE_THEN "NHOEM"(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH12"))
10306 THEN REMOVE_THEN "MAT" MP_TAC
10307 THEN ASM_REWRITE_TAC[]
10308 THEN REMOVE_THEN "LINH"(fun th-> ASM_REWRITE_TAC[SYM th;tran])
10309 THEN STRIP_TAC
10310 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN MP_TAC(SYM th) THEN DISCH_THEN(LABEL_TAC"BELINH123"))
10311 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)`;
10312 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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
10313       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
10314       aff_gt {x} {v, w}:real^3->bool`]
10315 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10316 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10317 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10318 ` (v:real^3)`]
10319 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`]
10320 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10321 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}
10322 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10323 THEN RESA_TAC
10324 THEN MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10325 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10326 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10327 ;`ds1:real^3#real^3#real^3#real^3->bool`
10328 ;`ds2:real^3#real^3#real^3#real^3->bool`
10329 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10330 ;`(ds0:real^3#real^3#real^3#real^3->bool)`;]
10331 THEN POP_ASSUM MP_TAC
10332 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10333 THEN STRIP_TAC
10334 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)`]
10335 THEN POP_ASSUM MP_TAC
10336 THEN REWRITE_TAC[yfan]
10337 THEN STRIP_TAC
10338 THEN STRIP_TAC
10339 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET xfan (x,V,E1)
10340 /\ 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
10341  dartset_leads_into_fan x V E1 ds1 UNION
10342  dartset_leads_into_fan x V E1 ds2 UNION
10343  aff_gt {x} {v, w}
10344 ==> 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
10345  dartset_leads_into_fan x V E1 ds1 UNION
10346  dartset_leads_into_fan x V E1 ds2`)
10347 THEN RESA_TAC
10348 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)`]
10349 THEN POP_ASSUM MP_TAC
10350 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10351 THEN STRIP_TAC
10352 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))`
10353 ASSUME_TAC
10354 THENL(*7*)[
10355 ASM_REWRITE_TAC[IN]
10356 THEN MATCH_MP_TAC CONNECTED_COMPONENT_REFL
10357 THEN ASM_REWRITE_TAC[];(*7*)
10358 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))
10359 /\ dartset_leads_into_fan x V E1 (tranf x V E E1 ds0) SUBSET
10360       dartset_leads_into_fan x V E1 ds1 UNION
10361       dartset_leads_into_fan x V E1 ds2
10362 ==> y''' IN dartset_leads_into_fan x V E1 ds1\/ y''' IN dartset_leads_into_fan x V E1 ds2`)
10363 THEN RESA_TAC
10364 THENL(*8*)[
10365
10366
10367 POP_ASSUM MP_TAC
10368 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)`;
10369 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10370 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)`]
10371 THEN POP_ASSUM MP_TAC
10372 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10373 THEN RESA_TAC
10374 THEN STRIP_TAC
10375 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y'''':real^3`;`y''':real^3`]
10376 THEN POP_ASSUM MP_TAC
10377 THEN REMOVE_ASSUM_TAC
10378 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10379 THEN POP_ASSUM MP_TAC
10380 THEN POP_ASSUM MP_TAC
10381 THEN POP_ASSUM MP_TAC
10382 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10383 THEN REPEAT STRIP_TAC
10384 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)`]
10385 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10386 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10387 THEN POP_ASSUM MP_TAC
10388 THEN ASM_REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10389 THEN STRIP_TAC
10390 THEN REMOVE_ASSUM_TAC
10391 THEN REMOVE_ASSUM_TAC
10392 THEN REMOVE_ASSUM_TAC
10393 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))`)
10394 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds1:real^3#real^3#real^3#real^3->bool)`
10395 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))`)
10396 THEN POP_ASSUM MP_TAC
10397 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10398 THEN ASM_REWRITE_TAC[];(*8*)
10399
10400 POP_ASSUM MP_TAC
10401 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)`;
10402 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10403 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)`]
10404 THEN POP_ASSUM MP_TAC
10405 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
10406 THEN RESA_TAC
10407 THEN STRIP_TAC
10408 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y'''':real^3`;`y''':real^3`]
10409 THEN POP_ASSUM MP_TAC
10410 THEN REMOVE_ASSUM_TAC
10411 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10412 THEN POP_ASSUM MP_TAC
10413 THEN POP_ASSUM MP_TAC
10414 THEN POP_ASSUM MP_TAC
10415 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10416 THEN REPEAT STRIP_TAC
10417 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)`]
10418 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10419 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10420 THEN POP_ASSUM MP_TAC
10421 THEN ASM_REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10422 THEN STRIP_TAC
10423 THEN REMOVE_ASSUM_TAC
10424 THEN REMOVE_ASSUM_TAC
10425 THEN REMOVE_ASSUM_TAC
10426 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))`)
10427 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds2:real^3#real^3#real^3#real^3->bool)`
10428 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))`)
10429 THEN POP_ASSUM MP_TAC
10430 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10431 THEN ASM_REWRITE_TAC[]]]]]]]]]);;
10432
10433
10434
10435
10436
10437 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.
10438 FAN(x,V,E)
10439  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10440 /\ fan80(x,V,E)
10441 /\ (!E1. FAN(x,V,E1)  /\
10442          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
10443          fan80(x,V,E1)/\
10444          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
10445 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10446 /\ {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)
10447 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10448 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10449 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10450 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10451 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10452 /\ (x,w,v,u)=f10
10453 /\ (x,v,u,w)=f20
10454 /\ (x,u,w,v)=f30
10455 /\ E UNION {{v,w}}= E1
10456 ==>
10457
10458 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
10459                                                          s = dartset_leads_into_fan x V E f)`,
10460
10461 REPEAT STRIP_TAC
10462 THEN POP_ASSUM MP_TAC
10463 THEN DISCH_THEN(LABEL_TAC"EM")
10464 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10465 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10466 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)))`]
10467 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)))`]
10468 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)`;]
10469 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10470 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10471 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`]
10472 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`)
10473 THEN ASM_REWRITE_TAC[]
10474 THEN STRIP_TAC
10475 THEN REWRITE_TAC[EXISTS_UNIQUE]
10476 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`s:real^3->bool`]
10477 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3->bool`
10478 THEN ASM_REWRITE_TAC[]
10479 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
10480 THEN REPEAT STRIP_TAC
10481 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10482 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10483 THEN POP_ASSUM MP_TAC
10484 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
10485 THEN REPEAT STRIP_TAC
10486 THEN REMOVE_ASSUM_TAC
10487 THEN REMOVE_ASSUM_TAC
10488 THEN REMOVE_ASSUM_TAC
10489 THEN POP_ASSUM MP_TAC
10490 THEN DISCH_THEN(LABEL_TAC"LINH1")
10491 THEN DISJ_CASES_TAC(SET_RULE`~(ds=y)\/ (y=ds:real^3#real^3#real^3#real^3->bool)`)
10492 THENL[
10493 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10494 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10495 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10496 ;`ds1:real^3#real^3#real^3#real^3->bool`
10497 ;`ds2:real^3#real^3#real^3#real^3->bool`
10498 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10499 ;`(y:real^3#real^3#real^3#real^3->bool)`;]
10500 THEN POP_ASSUM MP_TAC
10501 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10502 THEN STRIP_TAC
10503 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)`]
10504 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)`;
10505 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
10506 THEN POP_ASSUM MP_TAC
10507 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10508 THEN STRIP_TAC
10509 THEN DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
10510 THENL[
10511
10512 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10513 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10514 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10515 ;`ds1:real^3#real^3#real^3#real^3->bool`
10516 ;`ds2:real^3#real^3#real^3#real^3->bool`
10517 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10518 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
10519 THEN POP_ASSUM MP_TAC
10520 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10521 THEN STRIP_TAC
10522 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)`]
10523 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)`;
10524 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
10525 THEN POP_ASSUM MP_TAC
10526 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10527 THEN STRIP_TAC
10528 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))`)
10529 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))`)
10530 THEN POP_ASSUM MP_TAC
10531 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10532 THEN STRIP_TAC
10533 THEN MRESAL_TAC INJ_TRANF_FACE_DELETE_DS
10534 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10535 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10536 ;`ds1:real^3#real^3#real^3#real^3->bool`
10537 ;`ds2:real^3#real^3#real^3#real^3->bool`
10538 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10539 ;`(y:real^3#real^3#real^3#real^3->bool)`;`(f:real^3#real^3#real^3#real^3->bool)`][DELETE;IN_ELIM_THM];
10540
10541 REMOVE_THEN "LINH1" MP_TAC
10542 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)`;
10543 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
10544 THEN POP_ASSUM MP_TAC
10545 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10546 THEN POP_ASSUM MP_TAC
10547 THEN POP_ASSUM MP_TAC
10548 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10549 THEN STRIP_TAC
10550 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10551 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10552 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10553 ` (v:real^3)`]
10554 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`]
10555 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10556 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}
10557 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10558 THEN RESA_TAC
10559 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)`]
10560 THEN POP_ASSUM MP_TAC
10561 THEN REWRITE_TAC[yfan]
10562 THEN POP_ASSUM MP_TAC
10563 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
10564 THEN POP_ASSUM MP_TAC
10565 THEN SET_TAC[]];
10566
10567
10568 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10569 THEN DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
10570 THENL[
10571 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
10572 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10573 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10574 ;`ds1:real^3#real^3#real^3#real^3->bool`
10575 ;`ds2:real^3#real^3#real^3#real^3->bool`
10576 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10577 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
10578 THEN POP_ASSUM MP_TAC
10579 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10580 THEN STRIP_TAC
10581 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)`]
10582 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)`;
10583 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
10584 THEN POP_ASSUM MP_TAC
10585 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
10586 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)`;
10587 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
10588 THEN STRIP_TAC
10589 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
10590 THEN ASM_REWRITE_TAC[] THEN STRIP_TAC
10591 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
10592 ` (v:real^3)`]
10593 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`]
10594 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
10595 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}
10596 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
10597 THEN RESA_TAC
10598 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)`]
10599 THEN POP_ASSUM MP_TAC
10600 THEN REWRITE_TAC[yfan]
10601 THEN POP_ASSUM MP_TAC
10602 THEN MRESA_TAC exists_in_aff_gt_disjoint[`x:real^3`;`v:real^3`;`w:real^3`]
10603 THEN POP_ASSUM MP_TAC
10604 THEN SET_TAC[];
10605 ASM_REWRITE_TAC[]]]);;
10606
10607
10608
10609
10610 let RADIAL_AFF_GT_1_2 = prove(`!x u v r.
10611      (DISJOINT {(x:real^B)} {u,v} /\ (r > &0) ) ==>
10612      radial_norm r x (aff_gt {x} {u,v} INTER normball x r)`,
10613 REWRITE_TAC[radial_norm]
10614 THEN REPEAT STRIP_TAC
10615 THENL[SET_TAC[];
10616 UNDISCH_TAC `(x:real^B) + u' IN aff_gt {x} {u, v} INTER normball x r`
10617 THEN ASM_SIMP_TAC[AFF_GT_1_2]
10618 THEN REWRITE_TAC[IN_ELIM_THM;IN_INTER]
10619 THEN REPEAT STRIP_TAC
10620 THENL[
10621 EXISTS_TAC `&1 + (t:real) * t1 - t`
10622 THEN EXISTS_TAC `(t:real) * t2`
10623 THEN EXISTS_TAC `(t:real) * t3`
10624 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`;]
10625 THEN MP_TAC(REAL_ARITH`t> &0 ==> &0< t`) THEN RESA_TAC
10626 THEN SUBGOAL_THEN `&0 < t * t2 /\ &0 < t * t3` (fun t -> REWRITE_TAC[t])
10627 THENL[ ASM_MESON_TAC[REAL_LT_MUL];REMOVE_ASSUM_TAC
10628 THEN REMOVE_ASSUM_TAC
10629 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10630 THEN VECTOR_ARITH_TAC];
10631
10632
10633 MATCH_MP_TAC aff_normball
10634 THEN ASM_REWRITE_TAC[]]]);;
10635
10636
10637 let NORMBALL_SUBSET=prove(`!x r r'. r<= r' ==> normball x r SUBSET normball x r'`,
10638 REPEAT STRIP_TAC
10639 THEN REWRITE_TAC[SUBSET;IN_ELIM_THM;normball]
10640 THEN GEN_TAC
10641 THEN POP_ASSUM MP_TAC
10642 THEN REAL_ARITH_TAC);;
10643
10644
10645 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')))`,
10646 REWRITE_TAC[radial_norm]
10647 THEN REPEAT STRIP_TAC
10648 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`r':real`;`r:real`]
10649 THENL[
10650 ASM_TAC
10651 THEN SET_TAC[];
10652 POP_ASSUM MP_TAC
10653 THEN POP_ASSUM MP_TAC
10654 THEN POP_ASSUM MP_TAC
10655 THEN POP_ASSUM MP_TAC
10656 THEN POP_ASSUM MP_TAC
10657 THEN DISCH_THEN(LABEL_TAC"A")
10658 THEN REPEAT STRIP_TAC
10659 THEN MP_TAC(SET_RULE`x + u IN C INTER normball x r'
10660 /\ normball x r' SUBSET normball x r
10661 ==> (x:real^3) + u IN C INTER normball x r`)
10662 THEN RESA_TAC
10663 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)`)
10664 THEN RESA_TAC
10665 THEN MRESA1_TAC REAL_LT_INV`r':real`
10666 THEN MRESA1_TAC REAL_MUL_LINV`r':real`
10667 THEN MRESA_TAC REAL_LT_MUL[`r:real`;`inv r':real`]
10668 THEN MRESA_TAC REAL_LT_MUL[`t :real`;` r * inv r':real`]
10669 THEN MRESA_TAC REAL_LT_LMUL[` r * inv r':real`;`t * norm (u :real^3)`;`r' :real`;]
10670 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')`)
10671 THEN RESA_TAC
10672 THEN POP_ASSUM MP_TAC
10673 THEN REWRITE_TAC[REAL_ARITH`A * &1=A`]
10674 THEN STRIP_TAC
10675 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th`u:real^3`)
10676 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])
10677 THEN POP_ASSUM MP_TAC
10678 THEN MRESA1_TAC REAL_ABS_REFL `t:real`
10679 THEN MRESA1_TAC REAL_ABS_REFL `t * r * inv r':real`
10680 THEN ASM_REWRITE_TAC[normball;IN_ELIM_THM;dist;VECTOR_ARITH`(A+B)-A=B:real^3`;NORM_MUL]]);;
10681
10682
10683 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.
10684 FAN(x,V,E)
10685  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10686 /\ fan80(x,V,E)
10687 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10688 /\ {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)
10689 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10690 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10691 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10692 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10693 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10694 /\ (x,w,v,u)=f10
10695 /\ (x,v,u,w)=f20
10696 /\ (x,u,w,v)=f30
10697 /\ E UNION {{v,w}}= E1
10698 /\ ds0 IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds
10699 ==> tranf x V E E1 ds0= IMAGE (tran x V E1) ds0`,
10700 REPEAT STRIP_TAC
10701 THEN POP_ASSUM MP_TAC
10702 THEN DISCH_THEN(LABEL_TAC"EM")
10703 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10704 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10705 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)))`]
10706 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)))`]
10707 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)`;]
10708 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10709 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10710 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`]
10711 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`)
10712 THEN ASM_REWRITE_TAC[]
10713 THEN STRIP_TAC
10714 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10715 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10716 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))`)
10717 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"LINH")
10718 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`]
10719 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10720 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
10721 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)`)
10722 THEN RESA_TAC
10723 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)`
10724 ASSUME_TAC
10725 THENL[
10726 POP_ASSUM MP_TAC
10727 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
10728 THEN RESA_TAC
10729 THEN REWRITE_TAC[tran]
10730 THEN EXISTS_TAC`x:real^3`
10731 THEN EXISTS_TAC`v':real^3`
10732 THEN EXISTS_TAC`w':real^3`
10733 THEN EXISTS_TAC`sigma_fan x V E1 v' w':real^3`
10734 THEN ASM_REWRITE_TAC[]
10735 THEN ASM_TAC
10736 THEN SET_TAC[];
10737 SUBGOAL_THEN`~(y IN ds:real^3#real^3#real^3#real^3->bool)` ASSUME_TAC
10738 THENL[
10739 FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
10740 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
10741 THEN RESA_TAC
10742 THEN STRIP_TAC
10743 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]
10744 THEN REWRITE_TAC[orbit_map;IN_ELIM_THM]
10745 THEN USE_THEN"EM"MP_TAC
10746 THEN REWRITE_TAC[DELETE;face_set;IN_ELIM_THM;set_of_orbits]
10747 THEN ASM_REWRITE_TAC[]
10748 THEN STRIP_TAC
10749 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10750 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]
10751 THEN POP_ASSUM MP_TAC
10752 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10753 THEN REMOVE_ASSUM_TAC
10754 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10755 THEN REMOVE_ASSUM_TAC
10756 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
10757 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10758 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10759 THEN SET_TAC[];
10760
10761 ASM_REWRITE_TAC[IMAGE;face;orbit_map;EXTENSION;IN_ELIM_THM]
10762 THEN USE_THEN"LINH"MP_TAC
10763 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
10764 THEN ASM_REWRITE_TAC[]
10765 THEN STRIP_TAC
10766 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10767 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]
10768 THEN REWRITE_TAC[orbit_map;IN_ELIM_THM]
10769 THEN EQ_TAC
10770 THEN REPEAT STRIP_TAC
10771 THENL[
10772
10773
10774 EXISTS_TAC`(res (f1_fan x V E) (d1_fan (x,V,E)) POWER n) (y:real^3#real^3#real^3#real^3)`
10775 THEN STRIP_TAC
10776 THENL[
10777 EXISTS_TAC`n:num`
10778 THEN ASM_REWRITE_TAC[];
10779
10780 ASM_REWRITE_TAC[]
10781 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)))`]
10782 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
10783 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)))`]
10784 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)` )
10785 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
10786 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10787 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10788 ;`ds1:real^3#real^3#real^3#real^3->bool`
10789 ;`ds2:real^3#real^3#real^3#real^3->bool`
10790 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10791 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]];
10792
10793
10794 EXISTS_TAC`n:num`
10795 THEN ASM_REWRITE_TAC[]
10796 THEN ASM_REWRITE_TAC[]
10797 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)))`]
10798 THEN POP_ASSUM (fun th-> MRESA1_TAC th`y:real^3#real^3#real^3#real^3` )
10799 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)))`]
10800 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)` )
10801 THEN MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER
10802 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10803 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
10804 ;`ds1:real^3#real^3#real^3#real^3->bool`
10805 ;`ds2:real^3#real^3#real^3#real^3->bool`
10806 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
10807 ;`(y:real^3#real^3#real^3#real^3)`;`n:num`]
10808 ]]])
10809 ;;
10810
10811
10812 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.
10813 FAN(x,V,E)
10814  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
10815 /\ fan80(x,V,E)
10816 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
10817 /\ {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)
10818 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
10819 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
10820 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
10821 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
10822 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
10823 /\ (x,w,v,u)=f10
10824 /\ (x,v,u,w)=f20
10825 /\ (x,u,w,v)=f30
10826 /\ E UNION {{v,w}}= E1
10827 /\ ds0 IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds
10828 /\ y IN ds0
10829 ==> azim_fan x V E1 (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y))
10830 = azim_fan x V E (pr2 y) (pr3 y)`,
10831
10832
10833
10834 REPEAT STRIP_TAC
10835 THEN POP_ASSUM MP_TAC
10836 THEN DISCH_THEN(LABEL_TAC"EM")
10837 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
10838 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
10839 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)))`]
10840 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)))`]
10841 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)`;]
10842 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
10843 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
10844 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`]
10845 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`)
10846 THEN ASM_REWRITE_TAC[]
10847 THEN STRIP_TAC
10848 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10849 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
10850 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))`)
10851 THEN ASM_REWRITE_TAC[] THEN DISCH_THEN(LABEL_TAC"LINH")
10852 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`]
10853 THEN MRESA_TAC TRANF[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10854 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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` ]
10855 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)`)
10856 THEN RESA_TAC
10857 THEN POP_ASSUM MP_TAC
10858 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
10859 THEN STRIP_TAC
10860 THEN ASM_REWRITE_TAC[tran;pr2;pr3;azim_fan]
10861 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
10862 `(v':real^3)`]
10863 THEN REMOVE_ASSUM_TAC
10864 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`
10865 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`
10866 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
10867 THEN RESA_TAC
10868 THEN RESA_TAC
10869 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 ))`)
10870 THENL[
10871
10872 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
10873 `v:real^3`; `w:real^3` ]
10874 THEN POP_ASSUM MP_TAC
10875 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10876 THEN ASM_REWRITE_TAC[]
10877 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
10878 THEN STRIP_TAC
10879 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`]);
10880 POP_ASSUM MP_TAC
10881 THEN STRIP_TAC
10882 THENL[
10883
10884 POP_ASSUM MP_TAC
10885 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10886 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`];
10887
10888 SUBGOAL_THEN`f1=y:real^3#real^3#real^3#real^3`
10889 ASSUME_TAC
10890 THENL[
10891  MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10892 THEN RESA_TAC
10893 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];
10894 POP_ASSUM MP_TAC
10895 THEN RESA_TAC
10896 THEN REMOVE_THEN "LINH" MP_TAC
10897 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10898 THEN STRIP_TAC
10899 THEN REMOVE_THEN "EM" MP_TAC
10900 THEN RESA_TAC
10901 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]
10902 THEN POP_ASSUM MP_TAC
10903 THEN REMOVE_ASSUM_TAC
10904 THEN POP_ASSUM MP_TAC
10905 THEN RESA_TAC
10906 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10907 THEN REMOVE_ASSUM_TAC
10908 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10909 THEN FIND_ASSUM MP_TAC`ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
10910 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10911 THEN STRIP_TAC
10912 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]
10913 THEN POP_ASSUM MP_TAC
10914 THEN POP_ASSUM MP_TAC
10915 THEN RESA_TAC
10916 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10917 THEN RESA_TAC
10918 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10919 THEN ASM_REWRITE_TAC[]
10920 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10921 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10922 THEN SET_TAC[]];
10923
10924
10925 POP_ASSUM MP_TAC
10926 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
10927 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`];
10928
10929
10930 SUBGOAL_THEN`f3=y:real^3#real^3#real^3#real^3`
10931 ASSUME_TAC
10932 THENL[
10933  MP_TAC(SET_RULE`y IN ds0 /\ ds0 SUBSET d1_fan (x,V,E)==> y IN d1_fan (x,V:real^3->bool,E)`)
10934 THEN RESA_TAC
10935 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]
10936 THEN POP_ASSUM MATCH_MP_TAC
10937 THEN REWRITE_TAC[PAIR_EQ]
10938 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
10939 THENL[
10940 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
10941 THEN EXISTS_TAC`x:real^3`
10942 THEN EXISTS_TAC`V:real^3->bool`
10943 THEN EXISTS_TAC`E:(real^3->bool)->bool`
10944 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
10945 THEN ASM_REWRITE_TAC[]
10946 THEN ASM_TAC
10947 THEN REWRITE_TAC[pr2;pr3]
10948 THEN REPEAT STRIP_TAC
10949 THEN ASM_REWRITE_TAC[]
10950 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
10951 THEN EXISTS_TAC`x:real^3`
10952 THEN EXISTS_TAC`u:real^3`
10953 THEN EXISTS_TAC`w:real^3`
10954 THEN EXISTS_TAC`v:real^3`
10955 THEN ASM_REWRITE_TAC[];
10956
10957 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
10958 ==> 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`)
10959 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[])
10960 THEN ASM_REWRITE_TAC[]
10961  THEN STRIP_TAC
10962 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;f1_fan])
10963 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`(x,u,w,(v:real^3)) = f30:real^3#real^3#real^3#real^3`
10964 THEN REWRITE_TAC[]];
10965
10966 POP_ASSUM MP_TAC
10967 THEN RESA_TAC
10968 THEN REMOVE_THEN "LINH" MP_TAC
10969 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10970 THEN STRIP_TAC
10971 THEN REMOVE_THEN "EM" MP_TAC
10972 THEN RESA_TAC
10973 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]
10974 THEN POP_ASSUM MP_TAC
10975 THEN REMOVE_ASSUM_TAC
10976 THEN POP_ASSUM MP_TAC
10977 THEN RESA_TAC
10978 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10979 THEN REMOVE_ASSUM_TAC
10980 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10981 THEN FIND_ASSUM MP_TAC`ds IN face_set (hypermap1_of_fanx (x:real^3,V,E))`
10982 THEN REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
10983 THEN STRIP_TAC
10984 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]
10985 THEN POP_ASSUM MP_TAC
10986 THEN POP_ASSUM MP_TAC
10987 THEN RESA_TAC
10988 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10989 THEN RESA_TAC
10990 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
10991 THEN ASM_REWRITE_TAC[]
10992 THEN FIND_ASSUM MP_TAC`ds0 IN face_set (hypermap1_of_fanx (x,V:real^3->bool,E)) DELETE ds`
10993 THEN REWRITE_TAC[DELETE;IN_ELIM_THM]
10994 THEN SET_TAC[]]]]);;
10995
10996
10997
10998
10999 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.
11000 FAN(x,V,E)
11001  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11002 /\ fan80(x,V,E)
11003 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11004 /\ {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)
11005 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11006 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11007 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11008 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11009 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11010 /\ (x,w,v,u)=f10
11011 /\ (x,v,u,w)=f20
11012 /\ (x,u,w,v)=f30
11013 /\ E UNION {{v,w}}= E1
11014 /\ (!E1. FAN(x,V,E1)  /\
11015          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
11016          fan80(x,V,E1)/\
11017          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
11018 /\ f IN face_set (hypermap1_of_fanx (x,V,E))
11019  ==> let U = dartset_leads_into_fan x V E f in
11020                ((!r. measurable (ball (x,r) INTER U)) /\
11021                eventually_radial x U)  `,
11022
11023
11024
11025 REPEAT STRIP_TAC
11026 THEN POP_ASSUM MP_TAC
11027 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11028 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11029 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)))`]
11030 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)))`]
11031 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)`;]
11032 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11033 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11034 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`]
11035 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`)
11036 THEN ASM_REWRITE_TAC[]
11037 THEN STRIP_TAC
11038 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11039 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11040 THEN POP_ASSUM MP_TAC
11041 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
11042 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
11043 THEN REPEAT STRIP_TAC
11044 THEN POP_ASSUM MP_TAC
11045 THEN REMOVE_ASSUM_TAC
11046 THEN POP_ASSUM MP_TAC
11047 THEN DISCH_THEN(LABEL_TAC"LINH")
11048 THEN STRIP_TAC
11049 THENL(*1*)[
11050 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
11051 THENL(*2*)[
11052 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
11053 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11054 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
11055 ;`ds1:real^3#real^3#real^3#real^3->bool`
11056 ;`ds2:real^3#real^3#real^3#real^3->bool`
11057 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11058 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
11059 THEN POP_ASSUM MP_TAC
11060 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11061 THEN STRIP_TAC
11062 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)`;
11063 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
11064 THEN POP_ASSUM MP_TAC
11065 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11066 THEN STRIP_TAC
11067 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*)
11068
11069 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)`;
11070 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
11071 THEN REWRITE_TAC[SET_RULE`A INTER (B UNION C UNION D)=(A INTER B) UNION (A INTER C) UNION (A INTER D)`]
11072 THEN MATCH_MP_TAC MEASURABLE_UNION
11073 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)`;
11074 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11075 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)`;
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)`;]
11077 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)`)
11078 THEN MATCH_MP_TAC MEASURABLE_UNION
11079 THEN ASM_REWRITE_TAC[MEASURABLE_BALL_AFF_GT]];(*1*)
11080
11081
11082 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
11083 THENL(*2*)[
11084 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
11085 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11086 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
11087 ;`ds1:real^3#real^3#real^3#real^3->bool`
11088 ;`ds2:real^3#real^3#real^3#real^3->bool`
11089 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11090 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
11091 THEN POP_ASSUM MP_TAC
11092 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11093 THEN STRIP_TAC
11094 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)`;
11095 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
11096 THEN POP_ASSUM MP_TAC
11097 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
11098 THEN STRIP_TAC
11099 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*)
11100
11101 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)`;
11102 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
11103 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)`;
11104 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11105 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)`;
11106 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11107 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)`)
11108 THEN ASM_TAC
11109 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;]
11110 THEN REPEAT STRIP_TAC
11111 THEN REMOVE_ASSUM_TAC
11112 THEN POP_ASSUM MP_TAC
11113 THEN REMOVE_ASSUM_TAC
11114 THEN POP_ASSUM MP_TAC
11115 THEN REMOVE_ASSUM_TAC
11116 THEN REMOVE_ASSUM_TAC
11117 THEN POP_ASSUM MP_TAC
11118 THEN DISCH_THEN(LABEL_TAC"LINH1")
11119 THEN STRIP_TAC
11120 THEN DISCH_THEN(LABEL_TAC"LINH2")
11121 THEN EXISTS_TAC`min r (r':real)`
11122 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'`)
11123 THEN RESA_TAC
11124 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`min r r':real`;`r:real`]
11125 THEN MRESA_TAC NORMBALL_SUBSET[`x:real^3`;`min r r':real`;`r':real`]
11126 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)`]
11127 THEN REWRITE_TAC[UNION;IN_ELIM_THM]
11128 THEN REPEAT STRIP_TAC
11129 THEN MP_TAC(REAL_ARITH`t  * norm u' < min r r'==>  t * norm u' <  r'  /\  t * norm (u':real^3) < r`)
11130 THEN RESA_TAC
11131 THENL[
11132
11133 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]
11134 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11135 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`);(**)
11136
11137 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`]
11138 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11139 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`);
11140
11141
11142 MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w:real^3} IN E1`) THEN RESA_TAC
11143 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E1:(real^3->bool)->bool)`;`w:real^3`;`v:real^3`]
11144 THEN MRESAL_TAC RADIAL_AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`;`min r r':real`;][radial_norm]
11145 THEN POP_ASSUM (fun th-> MRESA1_TAC th`u':real^3`)
11146 THEN POP_ASSUM (fun th-> MRESA1_TAC th`t:real`)]]]);;
11147
11148
11149
11150 let SOL_AFF_GT_2_1=prove(`!x:real^3 v:real^3 u:real^3.
11151 ~collinear {x,v,u}==>   sol x (aff_gt {x} {v,u})= &0`,
11152 REPEAT STRIP_TAC
11153 THEN MRESA_TAC  MEASURABLE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`]
11154 THEN MP_TAC(ISPECL[`(x:real^3)`;` (v:real^3)`;` (u:real^3)`]th3) THEN RESA_TAC
11155 THEN MRESAL_TAC RADIAL_AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`;][REAL_ARITH`&1> &0`]
11156 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]
11157 THEN MRESA_TAC MEASURE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`u:real^3`;`&1:real`]
11158 THEN REAL_ARITH_TAC);;
11159
11160
11161
11162 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.
11163 FAN(x,V,E)
11164  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11165 /\ fan80(x,V,E)
11166 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11167 /\ {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)
11168 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11169 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11170 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11171 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11172 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11173 /\ (x,w,v,u)=f10
11174 /\ (x,v,u,w)=f20
11175 /\ (x,u,w,v)=f30
11176 /\ E UNION {{v,w}}= E1
11177 ==> inverse1_sigma_fan x V E1 v (sigma_fan x V E v u) =  w`,
11178
11179 REPEAT STRIP_TAC
11180 THEN POP_ASSUM MP_TAC
11181 THEN DISCH_THEN(LABEL_TAC"EM")
11182 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11183 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11184 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)))`]
11185 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)))`]
11186 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)`;]
11187 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11188 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11189 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`]
11190 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`)
11191 THEN ASM_REWRITE_TAC[]
11192 THEN STRIP_TAC
11193 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11194 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11195 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11196 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11197 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)`;
11198 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11199 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11200 THEN EXISTS_TAC`x:real^3`
11201 THEN EXISTS_TAC`V:real^3->bool`
11202 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11203 THEN EXISTS_TAC`v:real^3`
11204 THEN ASM_REWRITE_TAC[]
11205 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11206 `v:real^3`]
11207 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`]
11208 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)`;
11209 `v:real^3`]
11210 THEN MP_TAC(SET_RULE`{v, sigma_fan x V E v u:real^3} IN E /\ E UNION {{v,w}}= E1
11211 ==> {v, sigma_fan x V E v u} IN E1/\ {v,w} IN E1`)
11212 THEN RESA_TAC
11213 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11214 THEN REMOVE_ASSUM_TAC
11215 THEN REMOVE_ASSUM_TAC
11216 THEN POP_ASSUM(fun th-> MRESA1_TAC th `sigma_fan x V E v u:real^3`)
11217 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11218 THEN REMOVE_ASSUM_TAC
11219 THEN POP_ASSUM(fun th-> MRESA1_TAC th `sigma_fan x V E v u:real^3`)
11220 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)`
11221 ;`v:real^3`;`u:real^3`; `w:real^3`]);;
11222
11223
11224
11225 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.
11226 FAN(x,V,E)
11227  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11228 /\ fan80(x,V,E)
11229 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11230 /\ {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)
11231 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11232 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11233 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11234 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11235 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11236 /\ (x,w,v,u)=f10
11237 /\ (x,v,u,w)=f20
11238 /\ (x,u,w,v)=f30
11239 /\ E UNION {{v,w}}= E1
11240 ==> inverse1_sigma_fan x V E1 v w=u`,
11241 REPEAT STRIP_TAC
11242 THEN POP_ASSUM MP_TAC
11243 THEN DISCH_THEN(LABEL_TAC"EM")
11244 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11245 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11246 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)))`]
11247 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)))`]
11248 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)`;]
11249 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11250 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11251 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`]
11252 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`)
11253 THEN ASM_REWRITE_TAC[]
11254 THEN STRIP_TAC
11255 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11256 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11257 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11258 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11259 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)`;
11260 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11261 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11262 THEN EXISTS_TAC`x:real^3`
11263 THEN EXISTS_TAC`V:real^3->bool`
11264 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11265 THEN EXISTS_TAC`v:real^3`
11266 THEN ASM_REWRITE_TAC[]
11267 THEN MP_TAC(SET_RULE`{v, u:real^3} IN E /\ E UNION {{v,w}}= E1
11268 ==> {v, u} IN E1/\ {v,w} IN E1`)
11269 THEN RESA_TAC
11270 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11271 THEN REMOVE_ASSUM_TAC
11272 THEN REMOVE_ASSUM_TAC
11273 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
11274 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`v:real^3`]
11275 THEN REMOVE_ASSUM_TAC
11276 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
11277 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)`
11278 ;`v:real^3`;`u:real^3`; `w:real^3`]);;
11279
11280
11281
11282 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.
11283 FAN(x,V,E)
11284  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11285 /\ fan80(x,V,E)
11286 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11287 /\ {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)
11288 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11289 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11290 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11291 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
11292 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
11293 /\ (x,w,v,u)=f10
11294 /\ (x,v,u,w)=f20
11295 /\ (x,u,w,v)=f30
11296 /\ E UNION {{v,w}}= E1
11297 ==> inverse1_sigma_fan x V E1 u v=w`,
11298 REPEAT STRIP_TAC
11299 THEN POP_ASSUM MP_TAC
11300 THEN DISCH_THEN(LABEL_TAC"EM")
11301 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11302 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11303 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)))`]
11304 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)))`]
11305 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)`;]
11306 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11307 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11308 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`]
11309 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`)
11310 THEN ASM_REWRITE_TAC[]
11311 THEN STRIP_TAC
11312 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11313 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11314 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11315 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11316 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)`;
11317 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11318 THEN MATCH_MP_TAC MONO_SIGMA_FAN
11319 THEN EXISTS_TAC`x:real^3`
11320 THEN EXISTS_TAC`V:real^3->bool`
11321 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
11322 THEN EXISTS_TAC`u:real^3`
11323 THEN ASM_REWRITE_TAC[]
11324 THEN MP_TAC(SET_RULE`{v, u:real^3} IN E /\ { u:real^3,w} IN E /\ E UNION {{v,w}}= E1
11325 ==>  {u,w} IN E1/\ {v,w} IN E1/\ {v,u} IN E1 `)
11326 THEN RESA_TAC
11327 THEN POP_ASSUM MP_TAC
11328 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11329 THEN STRIP_TAC
11330 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11331 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`u:real^3`]
11332 THEN REMOVE_ASSUM_TAC
11333 THEN REMOVE_ASSUM_TAC
11334 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11335 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`u:real^3`]
11336 THEN REMOVE_ASSUM_TAC
11337 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11338 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11339 `v:real^3`; `w:real^3` ]
11340 THEN POP_ASSUM MP_TAC
11341 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11342 THEN RESA_TAC
11343 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
11344 THEN POP_ASSUM MP_TAC
11345 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11346 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11347 `(u:real^3)`]
11348 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11349 `(v:real^3)`]
11350 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
11351 THEN RESA_TAC
11352 THEN RESA_TAC);;
11353
11354
11355
11356
11357
11358 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.
11359 FAN(x,V,E)
11360  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
11361 /\ fan80(x,V,E)
11362 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
11363 /\ {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)
11364 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
11365 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
11366 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
11367 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
11368 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
11369 /\ (x,w,v,u)=f10
11370 /\ (x,v,u,w)=f20
11371 /\ (x,u,w,v)=f30
11372 /\ E UNION {{v,w}}= E1
11373 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
11374 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
11375 ==> (ds1 UNION ds2) DELETE ed1 DELETE ed2 SUBSET IMAGE (tran x V E1) ds`,
11376 REPEAT STRIP_TAC
11377 THEN POP_ASSUM MP_TAC
11378 THEN DISCH_THEN(LABEL_TAC"EM")
11379 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
11380 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
11381 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)))`]
11382 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)))`]
11383 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)`;]
11384 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
11385 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
11386 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)`;
11387 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11388
11389 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)`;
11390 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11391 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`]
11392 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`]
11393 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`]
11394 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`)
11395 THEN ASM_REWRITE_TAC[]
11396 THEN STRIP_TAC
11397 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
11398 THEN RESA_TAC
11399 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11400 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11401 THEN REWRITE_TAC[face;IN_ELIM_THM]
11402 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
11403 THENL(*1*)[
11404
11405 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
11406 THEN EXISTS_TAC`0`
11407 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*1*)
11408
11409 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`]
11410 THEN MP_TAC(ARITH_RULE`3<= CARD (ds1:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds1=0)`)
11411 THEN RESA_TAC
11412 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`]
11413 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`]
11414 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`]
11415 THEN MP_TAC(ARITH_RULE`3<= CARD (ds2:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds2=0)`)
11416 THEN RESA_TAC
11417 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`]
11418 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`]
11419 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)`)
11420 THEN ASM_REWRITE_TAC[]
11421 THEN STRIP_TAC
11422 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
11423 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
11424 THEN RESA_TAC
11425 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`]
11426 THEN POP_ASSUM MP_TAC
11427 THEN REWRITE_TAC[face]
11428 THEN ASM_REWRITE_TAC[]
11429 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
11430 THEN RESA_TAC
11431 THEN REWRITE_TAC[orbit_map;IMAGE;IN_ELIM_THM;UNION;DELETE;SUBSET]
11432 THEN GEN_TAC
11433 THEN REPEAT STRIP_TAC
11434 THENL(*1*)[
11435
11436 EXISTS_TAC`(res (f1_fan x V E) (d1_fan (x,V,E)) POWER k)
11437       f2:real^3#real^3#real^3#real^3`
11438 THEN STRIP_TAC
11439 THENL(*2*)[
11440
11441 EXISTS_TAC`k:num`
11442 THEN ASM_REWRITE_TAC[ARITH_RULE`k:num>=0`];(*2*)
11443
11444 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)))`]
11445 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3` )
11446 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)))`]
11447 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` )
11448 THEN DISJ_CASES_TAC(ARITH_RULE`k=0 \/ k>0`)
11449 THENL(*3*)[
11450
11451 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF])
11452 THEN SET_TAC[];(*3*)
11453
11454  SUBGOAL_THEN`?m. k= SUC m`ASSUME_TAC
11455 THENL(*4*)[
11456 EXISTS_TAC`k-1:num`
11457 THEN POP_ASSUM MP_TAC
11458 THEN ARITH_TAC;(*4*)
11459
11460 POP_ASSUM MP_TAC
11461 THEN RESA_TAC
11462 THEN REWRITE_TAC[POWER;o_DEF;]
11463 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
11464 THENL(*5*)[
11465 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11466 THEN EXISTS_TAC`x:real^3`
11467 THEN EXISTS_TAC`V:real^3->bool`
11468 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11469 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11470 THEN ASM_REWRITE_TAC[]
11471 THEN ASM_TAC
11472 THEN REWRITE_TAC[pr2;pr3]
11473 THEN REPEAT STRIP_TAC
11474 THEN ASM_REWRITE_TAC[]
11475 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11476 THEN EXISTS_TAC`x:real^3`
11477 THEN EXISTS_TAC`u:real^3`
11478 THEN EXISTS_TAC`w:real^3`
11479 THEN EXISTS_TAC`v:real^3`
11480 THEN ASM_REWRITE_TAC[];(*5*)
11481
11482 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
11483 THEN REWRITE_TAC[f1_fan]
11484 THEN ASM_REWRITE_TAC[]
11485 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11486 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11487 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,v) =
11488  tran x (V:real^3->bool) E1
11489  (x,w,inverse1_sigma_fan x V E w u,u:real^3)`
11490 ASSUME_TAC
11491 THENL(*6*)[
11492 REWRITE_TAC[tran]
11493 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
11494 THEN REMOVE_ASSUM_TAC
11495 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11496 THEN POP_ASSUM MP_TAC
11497 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11498 THEN RESA_TAC;(*6*)
11499
11500 POP_ASSUM(fun th-> REWRITE_TAC[th])
11501 THEN ONCE_REWRITE_TAC[SET_RULE`x=y <=> y=x`]
11502 THEN ABBREV_TAC`y=(x,w,inverse1_sigma_fan x V E w u,u:real^3)`
11503 THEN SUBGOAL_THEN`y IN d1_fan (x,V:real^3->bool,E)` ASSUME_TAC
11504 THENL(*7*)[
11505
11506 POP_ASSUM(fun th-> REWRITE_TAC[SYM th; d1_fan;IN_ELIM_THM])
11507 THEN EXISTS_TAC`x:real^3`
11508 THEN EXISTS_TAC`w:real^3`
11509 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
11510 THEN EXISTS_TAC`u:real^3`
11511 THEN ASM_REWRITE_TAC[]
11512 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11513 THEN REMOVE_ASSUM_TAC
11514 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
11515 THEN POP_ASSUM MP_TAC
11516 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11517 THEN RESA_TAC
11518 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
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;(*7*)
11524
11525
11526 MRESAL_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
11527 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11528 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
11529 ;`ds1:real^3#real^3#real^3#real^3->bool`
11530 ;`ds2:real^3#real^3#real^3#real^3->bool`
11531 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11532 ;`(y:real^3#real^3#real^3#real^3)`;`m:num`][f1_fan;]
11533 THEN POP_ASSUM MATCH_MP_TAC
11534 THEN REWRITE_TAC[GSYM f1_fan]
11535 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)`
11536 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
11537 THENL(*8*)[
11538
11539
11540 INDUCT_TAC
11541 THENL(*9*)[
11542
11543 STRIP_TAC
11544 THEN GEN_TAC
11545 THEN REWRITE_TAC[ARITH_RULE`k<=0 <=> k=0`]
11546 THEN STRIP_TAC
11547 THEN ASM_REWRITE_TAC[]
11548 THEN REWRITE_TAC[POWER;I_DEF]
11549 THEN EXPAND_TAC"y"
11550 THEN EXPAND_TAC"y1"
11551 THEN REWRITE_TAC[EQ_PAIR_4]
11552 THEN REPEAT STRIP_TAC
11553 THENL(*10*)[
11554
11555 REMOVE_ASSUM_TAC
11556 THEN REMOVE_ASSUM_TAC
11557 THEN POP_ASSUM (fun th-> ASSUME_TAC (SYM th))
11558 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11559 `v:real^3`]
11560 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`]
11561 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (w:real^3)`;
11562 `v:real^3`]
11563 THEN REMOVE_ASSUM_TAC
11564 THEN POP_ASSUM MP_TAC
11565 THEN REWRITE_TAC[]
11566 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11567 THEN ASM_REWRITE_TAC[];(*10*)
11568
11569 FIND_ASSUM MP_TAC`pr2 f2=u:real^3`
11570 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;pr2])
11571 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (w:real^3)`;
11572 `u:real^3`]](*10*);(*9*)
11573
11574
11575
11576 POP_ASSUM MP_TAC
11577 THEN DISCH_THEN(LABEL_TAC"A")
11578 THEN STRIP_TAC
11579 THEN GEN_TAC
11580 THEN MP_TAC(ARITH_RULE`SUC m' < m ==> m' < m:num`)
11581 THEN RESA_TAC
11582 THEN REWRITE_TAC[ARITH_RULE`k <= SUC m'<=> k <= m' \/ k = SUC m'`]
11583 THEN STRIP_TAC
11584 THENL(*10*)[
11585
11586 REMOVE_THEN "A" MP_TAC
11587 THEN ASM_REWRITE_TAC[]
11588 THEN STRIP_TAC
11589 THEN POP_ASSUM(fun th-> MRESA1_TAC th`k':num`);(*10*)
11590
11591 REMOVE_THEN "A" MP_TAC
11592 THEN ASM_REWRITE_TAC[ARITH_RULE`k<= m' <=> k < SUC m'`]
11593 THEN DISCH_THEN(LABEL_TAC"LINH")
11594 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
11595 THENL(*11*)[
11596
11597 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11598 THEN EXISTS_TAC`x:real^3`
11599 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11600 THEN EXISTS_TAC`v:real^3`
11601 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
11602 THEN ASM_REWRITE_TAC[]
11603 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11604 `v:real^3`]
11605 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`]
11606 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)`;
11607 `v:real^3`]
11608 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11609 THEN ASM_REWRITE_TAC[];(*11*)
11610
11611
11612 SUBGOAL_THEN`!k. k < SUC m'
11613             ==> (~(pr2 ((f1_fan x V E POWER k) y) = sigma_fan x V E v u) /\
11614             pr3 ((f1_fan x V E POWER k) y) = v) \/
11615             (~(pr2 ((f1_fan x V E POWER k) y) = u) /\
11616             pr3 ((f1_fan x V E POWER k) y) = w) \/
11617 ~(pr3 ((f1_fan x V E POWER k) y) IN {v, w})` ASSUME_TAC
11618 THENL(*12*)[
11619
11620
11621 REPEAT STRIP_TAC
11622 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`k'':num`)
11623 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k'':num`;]
11624 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
11625 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]
11626 THEN POP_ASSUM MP_TAC
11627 THEN EXPAND_TAC"y1"
11628 THEN REWRITE_TAC[pr2;pr3]
11629 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]
11630 THEN POP_ASSUM MP_TAC
11631 THEN SET_TAC[];(*12*)
11632
11633 MRESA_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
11634 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11635 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
11636 ;`ds1:real^3#real^3#real^3#real^3->bool`
11637 ;`ds2:real^3#real^3#real^3#real^3->bool`
11638 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
11639 ;`(y:real^3#real^3#real^3#real^3)`;`SUC m':num`]
11640 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)) /\
11641  ~(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
11642 THENL(*13*)[
11643
11644 ASM_REWRITE_TAC[]
11645 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)))  `
11646 ASSUME_TAC
11647 THENL(*14*)[
11648
11649 EXPAND_TAC"y"
11650 THEN EXPAND_TAC"y1"
11651 THEN REWRITE_TAC[tran;f1_fan]
11652 THEN MRESA_TAC inverse1_sigma_fan_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11653 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11654 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
11655 THEN REMOVE_ASSUM_TAC
11656 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
11657 THEN POP_ASSUM MP_TAC
11658 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11659 THEN RESA_TAC
11660 THEN MRESA_TAC SIGMA_FAN_OF_FANADD_AT_POINT6[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
11661 `v:real^3`;`u:real^3`; `w:real^3` ;`inverse1_sigma_fan x V E w u:real^3`];(*14*)
11662
11663
11664
11665 ASM_REWRITE_TAC[]
11666 THEN REPEAT STRIP_TAC
11667 THENL(*15*)[
11668 POP_ASSUM MP_TAC
11669 THEN REWRITE_TAC[POWER;o_DEF]
11670 THEN STRIP_TAC
11671 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]
11672 THEN MP_TAC(ARITH_RULE`SUC m':num < m /\ SUC m=k /\ k< CARD (ds1:real^3#real^3#real^3#real^3->bool)
11673 ==> SUC(SUC (SUC m'))< CARD ds1`)
11674 THEN ASM_REWRITE_TAC[]
11675 THEN REWRITE_TAC[face]
11676 THEN ASM_REWRITE_TAC[]
11677 THEN FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`k= SUC m:num`
11678 THEN RESA_TAC
11679 THEN POP_ASSUM MP_TAC
11680 THEN POP_ASSUM MP_TAC
11681 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)))  `
11682 ASSUME_TAC
11683 THENL(*16*)[
11684 EXPAND_TAC"y1"
11685 THEN REWRITE_TAC[tran;f1_fan]
11686 THEN MRESA_TAC inverse1_sigma_fan_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11687 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11688 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)`;
11689 `v:real^3`;`u:real^3`; `w:real^3` ];(*16*)
11690
11691 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)`
11692 ASSUME_TAC
11693 THENL(*17*)[
11694
11695 REWRITE_TAC[d1_fan;IN_ELIM_THM;tran]
11696 THEN EXISTS_TAC`x:real^3`
11697 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11698 THEN EXISTS_TAC`v:real^3`
11699 THEN EXISTS_TAC`sigma_fan x V E1 (sigma_fan x V E v u) v:real^3`
11700 THEN ASM_REWRITE_TAC[]
11701 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11702 `v:real^3`]
11703 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`]
11704 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)`;
11705 `v:real^3`]
11706 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11707 THEN EXPAND_TAC"y1"
11708 THEN ASM_REWRITE_TAC[]
11709 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`)
11710 THEN ASM_REWRITE_TAC[];(*17*)
11711
11712
11713 MRESA_TAC ds1_in_face_set_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11714 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11715 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`;]
11716
11717 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`;]
11718 THEN POP_ASSUM MP_TAC
11719 THEN REWRITE_TAC[face]
11720 THEN POP_ASSUM MP_TAC
11721 THEN POP_ASSUM MP_TAC
11722 THEN POP_ASSUM MP_TAC
11723 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC(SYM th))
11724 THEN STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC
11725 THEN ASM_REWRITE_TAC[orbit_map]
11726 THEN STRIP_TAC
11727 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`
11728 ASSUME_TAC
11729 THENL(*18*)[
11730
11731 ASM_REWRITE_TAC[]
11732 THEN REWRITE_TAC[face;orbit_map]
11733 THEN POP_ASSUM MP_TAC
11734 THEN ASM_REWRITE_TAC[]
11735 THEN STRIP_TAC
11736 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
11737 THEN REWRITE_TAC[EXTENSION;IN_ELIM_THM]
11738 THEN GEN_TAC
11739 THEN EQ_TAC
11740 THENL(*19*)[
11741
11742 REPEAT STRIP_TAC
11743 THEN EXISTS_TAC`(n:num)`
11744 THEN ASM_REWRITE_TAC[]
11745 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)))`]
11746 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*)
11747 REPEAT STRIP_TAC
11748 THEN EXISTS_TAC`(n:num)`
11749 THEN ASM_REWRITE_TAC[]
11750 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)))`]
11751 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*)
11752
11753
11754
11755 POP_ASSUM (fun th-> REWRITE_TAC[th])
11756 THEN ASM_REWRITE_TAC[]
11757 THEN REWRITE_TAC[face]
11758 THEN ASM_REWRITE_TAC[]
11759 THEN REWRITE_TAC[face;orbit_map]
11760 THEN ASM_REWRITE_TAC[]
11761 THEN ARITH_TAC](*18*)](*17*)](*16*);(*15*)
11762
11763 POP_ASSUM MP_TAC
11764 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
11765 THEN STRIP_TAC
11766 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)`
11767 ASSUME_TAC
11768 THENL(*16*)[
11769 EXPAND_TAC "y"
11770 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM;tran]
11771 THEN EXISTS_TAC`x:real^3`
11772 THEN EXISTS_TAC`w:real^3`
11773 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
11774 THEN EXISTS_TAC`sigma_fan x V E1 w (inverse1_sigma_fan x V E w u):real^3`
11775 THEN ASM_REWRITE_TAC[]
11776 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11777 THEN REMOVE_ASSUM_TAC
11778 THEN REMOVE_ASSUM_TAC
11779 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
11780 THEN POP_ASSUM MP_TAC
11781 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11782 THEN RESA_TAC
11783 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, w:real^3} IN E /\ E UNION {{v,w}}= E1
11784 ==> {inverse1_sigma_fan x V E w u, w} IN E1`)
11785 THEN RESA_TAC;(*16*)
11786
11787 MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11788 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)` ]
11789 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)`;
11790 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11791
11792 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`;]
11793 THEN POP_ASSUM MP_TAC
11794 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
11795 THENL(*17*)[
11796
11797 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11798 THEN EXISTS_TAC`x:real^3`
11799 THEN EXISTS_TAC`V:real^3->bool`
11800 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11801 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11802 THEN ASM_REWRITE_TAC[]
11803 THEN ASM_TAC
11804 THEN REWRITE_TAC[pr2;pr3]
11805 THEN REPEAT STRIP_TAC
11806 THEN ASM_REWRITE_TAC[]
11807 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11808 THEN EXISTS_TAC`x:real^3`
11809 THEN EXISTS_TAC`u:real^3`
11810 THEN EXISTS_TAC`w:real^3`
11811 THEN EXISTS_TAC`v:real^3`
11812 THEN ASM_REWRITE_TAC[];(*17*)
11813 REWRITE_TAC[tran]
11814 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
11815 THEN ASM_REWRITE_TAC[]
11816 THEN EXPAND_TAC"y"
11817 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11818 `v:real^3`; `w:real^3` ]
11819 THEN POP_ASSUM MP_TAC
11820 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11821 THEN RESA_TAC
11822 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
11823 THEN POP_ASSUM MP_TAC
11824 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11825 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
11826 `(u:real^3)`]
11827 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
11828 `(v:real^3)`]
11829 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
11830 THEN RESA_TAC
11831 THEN RESA_TAC
11832 THEN REWRITE_TAC[SET_RULE`f30 IN {f10, f20, f30}`]
11833 THEN REWRITE_TAC[SET_RULE`y IN {f10, f20, f30:real^3#real^3#real^3#real^3}<=> y =f10\/ y =f20\/ y =f30`]
11834 THEN RESA_TAC
11835 THENL(*18*)[
11836
11837 POP_ASSUM MP_TAC
11838 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`
11839 THEN STRIP_TAC
11840 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
11841 THEN REMOVE_ASSUM_TAC
11842 THEN REMOVE_ASSUM_TAC
11843 THEN POP_ASSUM(fun th -> MP_TAC(ISPEC `u:real^3` th))
11844 THEN REMOVE_ASSUM_TAC
11845 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
11846 THEN ASM_REWRITE_TAC[]
11847 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11848 THEN ASM_REWRITE_TAC[];(*18*)
11849
11850 POP_ASSUM MP_TAC
11851 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`
11852 THEN STRIP_TAC
11853 THEN REMOVE_ASSUM_TAC
11854 THEN REMOVE_ASSUM_TAC
11855 THEN POP_ASSUM MP_TAC
11856 THEN ASM_REWRITE_TAC[]
11857 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
11858 `(v:real^3)`];(*18*)
11859
11860 POP_ASSUM MP_TAC
11861 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`
11862 THEN STRIP_TAC
11863 THEN REMOVE_ASSUM_TAC
11864 THEN REMOVE_ASSUM_TAC
11865 THEN POP_ASSUM MP_TAC
11866 THEN ASM_REWRITE_TAC[]](*18*)](*17*)](*16*)](*15*)](*14*);(*13*)
11867
11868
11869 POP_ASSUM MP_TAC
11870 THEN SET_TAC[]](*13*)](*12*)](*11*)](*10*)](*9*);(*8*)
11871
11872
11873 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
11874 THENL(*9*)[
11875
11876 POP_ASSUM MP_TAC
11877 THEN DISCH_THEN(LABEL_TAC"LINH1")
11878 THEN GEN_TAC
11879 THEN DISJ_CASES_TAC(ARITH_RULE`m=0 \/ m>0`)
11880 THENL(*10*)[
11881 ASM_REWRITE_TAC[]
11882 THEN ARITH_TAC;(*10*)
11883 MP_TAC(ARITH_RULE`m>0==> m-1< m`)
11884 THEN RESA_TAC
11885 THEN STRIP_TAC
11886 THEN MP_TAC(ARITH_RULE`k'<m:num ==> k'<= m-1`)
11887 THEN RESA_TAC
11888 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m-1:num`)
11889 THEN POP_ASSUM (fun th-> MRESA1_TAC th`k':num`)](*10*);(*9*)
11890
11891 POP_ASSUM MP_TAC
11892 THEN DISCH_THEN(LABEL_TAC"LINH1")
11893 THEN REPEAT STRIP_TAC
11894 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m':num`)
11895 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;]
11896 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
11897 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]
11898 THEN POP_ASSUM MP_TAC
11899 THEN EXPAND_TAC"y1"
11900 THEN REWRITE_TAC[pr2;pr3]
11901
11902 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]
11903 THEN POP_ASSUM MP_TAC
11904 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
11905 THENL(*10*)[
11906
11907 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11908 THEN EXISTS_TAC`x:real^3`
11909 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11910 THEN EXISTS_TAC`v:real^3`
11911 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
11912 THEN ASM_REWRITE_TAC[]
11913 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
11914 `v:real^3`]
11915 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`]
11916 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)`;
11917 `v:real^3`]
11918 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11919 THEN ASM_REWRITE_TAC[];(*10*)
11920
11921 ASM_REWRITE_TAC[]
11922 THEN SET_TAC[]](*10*)](*9*)](*8*)]]]]]];(*1*)
11923
11924
11925
11926 ASM_REWRITE_TAC[]
11927 THEN MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11928 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11929 THEN POP_ASSUM MP_TAC
11930 THEN REWRITE_TAC[face;]
11931 THEN ASM_REWRITE_TAC[]
11932 THEN STRIP_TAC
11933 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
11934 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
11935 THENL(*2*)[
11936
11937 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11938 THEN EXISTS_TAC`x:real^3`
11939 THEN EXISTS_TAC`V:real^3->bool`
11940 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11941 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
11942 THEN ASM_REWRITE_TAC[]
11943 THEN ASM_TAC
11944 THEN REWRITE_TAC[pr2;pr3]
11945 THEN REPEAT STRIP_TAC
11946 THEN ASM_REWRITE_TAC[]
11947 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11948 THEN EXISTS_TAC`x:real^3`
11949 THEN EXISTS_TAC`u:real^3`
11950 THEN EXISTS_TAC`w:real^3`
11951 THEN EXISTS_TAC`v:real^3`
11952 THEN ASM_REWRITE_TAC[];(*2*)
11953
11954 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
11955 THENL(*3*)[
11956
11957 REWRITE_TAC[d1_fan;IN_ELIM_THM]
11958 THEN EXISTS_TAC`x:real^3`
11959 THEN EXISTS_TAC`w:real^3`
11960 THEN EXISTS_TAC`v:real^3`
11961 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
11962 THEN ASM_REWRITE_TAC[]
11963 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
11964 THEN ASM_TAC
11965 THEN SET_TAC[];(*3*)
11966
11967 MP_TAC(ARITH_RULE`k<3==> k=0 \/ k= SUC 0\/ k = SUC(SUC 0)`)
11968 THEN RESA_TAC
11969 THENL(*4*)[
11970 POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF])
11971 THEN SET_TAC[];(*4*)
11972
11973
11974 ASM_REWRITE_TAC[POWER;I_DEF;o_DEF]
11975 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)))`]
11976 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])
11977 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
11978 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
11979 THEN EXISTS_TAC`(x,v,u,sigma_fan x V E v u:real^3)`
11980 THEN ASM_REWRITE_TAC[tran]
11981 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)`
11982 ;`v:real^3`;`u:real^3`; `w:real^3`]
11983 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)`ASSUME_TAC
11984 THENL(*5*)[
11985 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
11986 THEN EXISTS_TAC`x:real^3`
11987 THEN EXISTS_TAC`V:real^3->bool`
11988 THEN EXISTS_TAC`E:(real^3->bool)->bool`
11989 THEN ASM_REWRITE_TAC[PAIR_EQ]
11990 THEN ASM_REWRITE_TAC[pr2;pr3]
11991 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
11992 THEN EXISTS_TAC`x:real^3`
11993 THEN EXISTS_TAC`v:real^3`
11994 THEN EXISTS_TAC`u:real^3`
11995 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
11996 THEN ASM_REWRITE_TAC[];(*5*)
11997
11998 FIND_ASSUM(MP_TAC)`f1 IN ds:real^3#real^3#real^3#real^3->bool`
11999 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
12000 THEN ASM_REWRITE_TAC[orbit_map;IN_ELIM_THM]
12001 THEN STRIP_TAC
12002 THEN EXISTS_TAC`n:num`
12003 THEN ASM_REWRITE_TAC[f1_fan]](*5*);(*4*)
12004
12005
12006  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)))`]
12007 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])
12008 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12009 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12010 THEN MRESA_TAC inverse1_sigma_fan_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12011 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12012 THEN EXISTS_TAC`(x:real^3,u:real^3,w:real^3,v:real^3)`
12013 THEN REWRITE_TAC[tran]
12014 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12015 `v:real^3`; `w:real^3` ]
12016 THEN POP_ASSUM MP_TAC
12017 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12018 THEN RESA_TAC
12019 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
12020 THEN POP_ASSUM MP_TAC
12021 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12022 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12023 `(u:real^3)`]
12024 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12025 `(v:real^3)`]
12026 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
12027 THEN RESA_TAC
12028 THEN RESA_TAC
12029 THEN EXISTS_TAC`0:num`
12030 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF]
12031 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12032 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12033 ]]]]]);;
12034
12035
12036
12037
12038
12039 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.
12040 FAN(x,V,E)
12041  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12042 /\ fan80(x,V,E)
12043 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12044 /\ {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)
12045 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12046 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12047 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12048 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
12049 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
12050 /\ (x,w,v,u)=f10
12051 /\ (x,v,u,w)=f20
12052 /\ (x,u,w,v)=f30
12053 /\ E UNION {{v,w}}= E1
12054 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
12055 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
12056 ==> IMAGE (tran x V E1) ds SUBSET (ds1 UNION ds2) DELETE ed1 DELETE ed2 `,
12057
12058
12059
12060 REPEAT STRIP_TAC
12061 THEN POP_ASSUM MP_TAC
12062 THEN DISCH_THEN(LABEL_TAC"EM")
12063 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12064 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12065 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)))`]
12066 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)))`]
12067 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)`;]
12068 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12069 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12070 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)`;
12071 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12072
12073 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)`;
12074 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12075 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`]
12076 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`]
12077 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`]
12078 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`)
12079 THEN ASM_REWRITE_TAC[]
12080 THEN STRIP_TAC
12081 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
12082 THEN RESA_TAC
12083 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12084 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12085 THEN REWRITE_TAC[face;IN_ELIM_THM]
12086 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
12087 THENL(*1*)[
12088 ASM_REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
12089 THEN EXISTS_TAC`0`
12090 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];(*1*)
12091
12092 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
12093 THENL(*2*)[
12094
12095 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12096 THEN EXISTS_TAC`x:real^3`
12097 THEN EXISTS_TAC`w:real^3`
12098 THEN EXISTS_TAC`v:real^3`
12099 THEN EXISTS_TAC`sigma_fan x V E1 w v:real^3`
12100 THEN ASM_REWRITE_TAC[]
12101 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12102 THEN ASM_TAC
12103 THEN SET_TAC[];(*2*)
12104
12105 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`]
12106 THEN MP_TAC(ARITH_RULE`3<= CARD (ds:real^3#real^3#real^3#real^3->bool) ==> ~(CARD ds=0)`)
12107 THEN RESA_TAC
12108 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)`)
12109 THEN ASM_REWRITE_TAC[]
12110 THEN STRIP_TAC
12111 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
12112 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
12113 THEN RESA_TAC
12114 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`]
12115 THEN POP_ASSUM MP_TAC
12116 THEN REWRITE_TAC[face]
12117 THEN ASM_REWRITE_TAC[]
12118 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
12119 THEN RESA_TAC
12120 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]
12121 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`]
12122 THEN POP_ASSUM (fun th-> ONCE_REWRITE_TAC[th])
12123 THEN ASM_REWRITE_TAC[orbit_map;IMAGE;IN_ELIM_THM;UNION;DELETE;SUBSET]
12124 THEN GEN_TAC
12125 THEN REPEAT STRIP_TAC
12126 THENL(*32GOAL*)[
12127
12128 DISJ_CASES_TAC(ARITH_RULE`k=0\/ k>0`)
12129 THENL(*4*)[
12130 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th;POWER;I_DEF] THEN REPEAT STRIP_TAC)
12131 THEN POP_ASSUM MP_TAC
12132 THEN RESA_TAC
12133 THEN SUBGOAL_THEN(`(?n. n >= 0 /\
12134       tran x V E1 (f2:real^3#real^3#real^3#real^3) =
12135       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12136       (x,w,v,sigma_fan x V E1 w v:real^3))`)
12137 ASSUME_TAC
12138 THENL(*5*)[
12139
12140 EXISTS_TAC`SUC(SUC 0:num)`
12141 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(SUC 0)>=0`]
12142 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)))`]
12143 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])
12144 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12145 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12146 THEN MRESA_TAC inverse1_sigma_fan_FANADD3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12147 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12148 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
12149 THENL(*6*)[
12150
12151 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12152 THEN EXISTS_TAC`x:real^3`
12153 THEN EXISTS_TAC`V:real^3->bool`
12154 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12155 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12156 THEN ASM_REWRITE_TAC[]
12157 THEN ASM_TAC
12158 THEN REWRITE_TAC[pr2;pr3]
12159 THEN REPEAT STRIP_TAC
12160 THEN ASM_REWRITE_TAC[]
12161 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12162 THEN EXISTS_TAC`x:real^3`
12163 THEN EXISTS_TAC`u:real^3`
12164 THEN EXISTS_TAC`w:real^3`
12165 THEN EXISTS_TAC`v:real^3`
12166 THEN ASM_REWRITE_TAC[];(*6*)
12167
12168 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12169 THEN REWRITE_TAC[tran]
12170 THEN ASM_REWRITE_TAC[]
12171 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12172 `v:real^3`; `w:real^3` ]
12173 THEN POP_ASSUM MP_TAC
12174 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12175 THEN RESA_TAC
12176 THEN POP_ASSUM (fun th-> MRESA_TAC th[`u:real^3`;`w:real^3`])
12177 THEN POP_ASSUM MP_TAC
12178 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12179 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
12180 `(u:real^3)`]
12181 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
12182 `(v:real^3)`]
12183 THEN MP_TAC(SET_RULE`~(v=u:real^3)/\ ~(u=w)==> ~(u IN {v,w})`)
12184 THEN RESA_TAC
12185 THEN RESA_TAC](*6*);(*5*)
12186
12187 ASM_REWRITE_TAC[]](*5*);(*4*)
12188
12189
12190 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`)
12191 THEN RESA_TAC
12192 THEN POP_ASSUM MP_TAC
12193 THEN ONCE_REWRITE_TAC[orbit_map]
12194 THEN RESA_TAC
12195 THENL(*5*)[
12196
12197
12198  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)))`]
12199 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12200 THEN POP_ASSUM MP_TAC
12201 THEN REMOVE_ASSUM_TAC
12202 THEN REMOVE_ASSUM_TAC
12203 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)))`]
12204 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12205 THEN POP_ASSUM MP_TAC
12206 THEN REMOVE_ASSUM_TAC
12207 THEN REMOVE_ASSUM_TAC
12208 THEN REWRITE_TAC[orbit_map]
12209 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;COM_POWER;o_DEF])
12210 THEN REMOVE_ASSUM_TAC
12211 THEN REMOVE_ASSUM_TAC
12212 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12213 THEN RESA_TAC
12214 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
12215 THEN STRIP_TAC
12216 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`;]
12217 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12218 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
12219 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)`])
12220 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12221 THEN SUBGOAL_THEN`(?n. n >= 0 /\
12222       tran x V E1 (f1:real^3#real^3#real^3#real^3) =
12223       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12224       (x,w,v:real^3,sigma_fan x V E1 w v))`
12225 ASSUME_TAC
12226 THENL(*6*)[
12227 EXISTS_TAC`SUC(0:num)`
12228 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC(0)>=0`]
12229 THEN ASM_REWRITE_TAC[POWER;I_DEF;o_DEF]
12230 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)))`]
12231 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])
12232 THEN MRESA_TAC inverse1_sigma_fan_FANADD2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12233 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12234 THEN ASM_REWRITE_TAC[tran]
12235 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)`
12236 ;`v:real^3`;`u:real^3`; `w:real^3`]
12237 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)`ASSUME_TAC
12238 THENL(*7*)[
12239 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12240 THEN EXISTS_TAC`x:real^3`
12241 THEN EXISTS_TAC`V:real^3->bool`
12242 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12243 THEN ASM_REWRITE_TAC[PAIR_EQ]
12244 THEN ASM_REWRITE_TAC[pr2;pr3]
12245 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12246 THEN EXISTS_TAC`x:real^3`
12247 THEN EXISTS_TAC`v:real^3`
12248 THEN EXISTS_TAC`u:real^3`
12249 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12250 THEN ASM_REWRITE_TAC[];(*7*)
12251
12252 FIND_ASSUM(MP_TAC)`f1 IN ds:real^3#real^3#real^3#real^3->bool`
12253 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[th])](*7*);(*6*)
12254
12255
12256 ASM_REWRITE_TAC[]](*6*);(*5*)
12257
12258
12259 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)))`]
12260 THEN POP_ASSUM (fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3` )
12261 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)))`]
12262 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` )
12263 THEN POP_ASSUM MP_TAC
12264 THEN SUBGOAL_THEN`?m. k= SUC m`ASSUME_TAC
12265 THENL(*6*)[
12266
12267 EXISTS_TAC`k-1:num`
12268 THEN FIND_ASSUM MP_TAC`k:num>0`
12269 THEN ARITH_TAC;(*6*)
12270
12271 POP_ASSUM MP_TAC
12272 THEN RESA_TAC
12273 THEN RESA_TAC
12274 THEN ASM_REWRITE_TAC[POWER;o_DEF;]
12275 THEN SUBGOAL_THEN`(?n. n >= 0 /\
12276       tran x V E1 ((f1_fan x V E POWER m) f3) =
12277       (res (f1_fan x V E1) (d1_fan (x,V,E1)) POWER n)
12278       (x,v,w,sigma_fan x V E1 v w:real^3))`ASSUME_TAC
12279 THENL(*7*)[
12280
12281 EXISTS_TAC`SUC m:num`
12282 THEN ASM_REWRITE_TAC[ARITH_RULE`SUC m>=0`;POWER;o_DEF;f1_fan]
12283 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12284 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12285 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,v) =
12286  tran x (V:real^3->bool) E1
12287  (x,w,inverse1_sigma_fan x V E w u,u:real^3)`
12288 ASSUME_TAC
12289 THENL(*8*)[
12290
12291 REWRITE_TAC[tran]
12292 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
12293 THEN REMOVE_ASSUM_TAC
12294 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
12295 THEN POP_ASSUM MP_TAC
12296 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12297 THEN RESA_TAC;(*8*)
12298 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12299 THEN SUBGOAL_THEN`(x,w,inverse1_sigma_fan x V E w u,u:real^3)= f1_fan x V E f2`
12300 ASSUME_TAC
12301 THENL(*9*)[
12302
12303  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
12304 THENL(*10*)[
12305
12306 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12307 THEN EXISTS_TAC`x:real^3`
12308 THEN EXISTS_TAC`V:real^3->bool`
12309 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12310 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12311 THEN ASM_REWRITE_TAC[]
12312 THEN ASM_TAC
12313 THEN REWRITE_TAC[pr2;pr3]
12314 THEN REPEAT STRIP_TAC
12315 THEN ASM_REWRITE_TAC[]
12316 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12317 THEN EXISTS_TAC`x:real^3`
12318 THEN EXISTS_TAC`u:real^3`
12319 THEN EXISTS_TAC`w:real^3`
12320 THEN EXISTS_TAC`v:real^3`
12321 THEN ASM_REWRITE_TAC[];(*10*)
12322 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12323 THEN REWRITE_TAC[f1_fan]
12324 THEN ASM_REWRITE_TAC[]](*10*);(*9*)
12325
12326
12327 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
12328 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[SYM th])
12329 THEN ASM_REWRITE_TAC[]
12330 THEN ABBREV_TAC`y=(x,w,inverse1_sigma_fan x V E w u,u:real^3)`
12331 THEN SUBGOAL_THEN`y IN d1_fan (x,V:real^3->bool,E)` ASSUME_TAC
12332 THENL(*10*)[
12333
12334 POP_ASSUM(fun th-> REWRITE_TAC[SYM th; d1_fan;IN_ELIM_THM])
12335 THEN EXISTS_TAC`x:real^3`
12336 THEN EXISTS_TAC`w:real^3`
12337 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
12338 THEN EXISTS_TAC`u:real^3`
12339 THEN ASM_REWRITE_TAC[]
12340 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
12341 THEN REMOVE_ASSUM_TAC
12342 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12343 THEN POP_ASSUM MP_TAC
12344 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12345 THEN RESA_TAC
12346 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
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;(*10*)
12352
12353 MRESAL_TAC TRAN_COMMUTATIVE_F1_FAN_POWER3
12354 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12355 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
12356 ;`ds1:real^3#real^3#real^3#real^3->bool`
12357 ;`ds2:real^3#real^3#real^3#real^3->bool`
12358 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
12359 ;`(y:real^3#real^3#real^3#real^3)`;`m:num`][f1_fan;]
12360 THEN POP_ASSUM MATCH_MP_TAC
12361 THEN REWRITE_TAC[GSYM f1_fan]
12362 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)`
12363 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
12364
12365 THENL(*11*)[
12366
12367 STRIP_TAC
12368 THEN SUBGOAL_THEN`y= f1_fan x V E(f1_fan x V E(f1_fan (x:real^3) V E y1))` ASSUME_TAC
12369 THENL(*12*)[
12370
12371 EXPAND_TAC "y"
12372 THEN EXPAND_TAC "y1"
12373 THEN REWRITE_TAC[f1_fan]
12374 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
12375 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12376 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`]
12377 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`);(*12*)
12378
12379 SUBGOAL_THEN`(f1_fan (x:real^3) V E POWER SUC (SUC 0)) y1 = f2`ASSUME_TAC
12380 THENL(*13*)[
12381
12382 EXPAND_TAC "y1"
12383 THEN REWRITE_TAC[f1_fan;POWER;I_DEF;o_DEF]
12384 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
12385 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12386 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`u:real^3`]
12387 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
12388 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12389 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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*)
12390
12391 ASM_REWRITE_TAC[]
12392 THEN REPEAT STRIP_TAC
12393 THENL(*14*)[
12394
12395 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]
12396 THEN MP_TAC(ARITH_RULE`m':num < m /\ SUC m=k /\ SUC k< CARD (ds:real^3#real^3#real^3#real^3->bool)
12397 ==> SUC(SUC (SUC m'))< CARD ds`)
12398 THEN ASM_REWRITE_TAC[orbit_map]
12399 THEN FIND_ASSUM (fun th -> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)`k= SUC m:num`
12400 THEN POP_ASSUM MP_TAC
12401 THEN RESA_TAC
12402 THEN POP_ASSUM MP_TAC
12403 THEN POP_ASSUM MP_TAC
12404 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
12405 THENL(*15*)[
12406 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12407 THEN EXISTS_TAC`x:real^3`
12408 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12409 THEN EXISTS_TAC`v:real^3`
12410 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
12411 THEN ASM_REWRITE_TAC[]
12412 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
12413 `v:real^3`]
12414 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`]
12415 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)`;
12416 `v:real^3`]
12417 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12418 THEN ASM_REWRITE_TAC[];(*15*)
12419
12420 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)`;]
12421 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)`;]
12422 THEN POP_ASSUM MP_TAC
12423 THEN REWRITE_TAC[face]
12424 THEN ASM_REWRITE_TAC[]
12425 THEN REWRITE_TAC[orbit_map]
12426 THEN RESA_TAC
12427 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}`
12428 ASSUME_TAC
12429 THENL(*16*)[
12430  REWRITE_TAC[EXTENSION;IN_ELIM_THM]
12431 THEN GEN_TAC
12432 THEN EQ_TAC
12433 THENL(*17*)[
12434 REPEAT STRIP_TAC
12435 THEN EXISTS_TAC`(n:num)`
12436 THEN ASM_REWRITE_TAC[]
12437 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)))`]
12438 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y1:real^3#real^3#real^3#real^3)`);(*17*)
12439
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*);(*16*)
12445
12446 ASM_REWRITE_TAC[]
12447 THEN ARITH_TAC](*16*)](*15*);(*14*)
12448
12449 POP_ASSUM MP_TAC
12450 THEN POP_ASSUM MP_TAC
12451 THEN POP_ASSUM MP_TAC
12452 THEN REWRITE_TAC[POWER;o_DEF;I_DEF]
12453 THEN STRIP_TAC
12454 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
12455 THEN REPEAT STRIP_TAC
12456 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]
12457 THEN POP_ASSUM MP_TAC
12458 THEN REWRITE_TAC[orbit_map]
12459 THEN STRIP_TAC
12460 THEN MP_TAC(ARITH_RULE`m':num < m /\ SUC m=k /\ SUC k< CARD (ds:real^3#real^3#real^3#real^3->bool)
12461 ==> (SUC m')< CARD ds`)
12462 THEN ASM_REWRITE_TAC[orbit_map]
12463 THEN FIND_ASSUM (fun th -> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)`k= SUC m:num`
12464 THEN POP_ASSUM MP_TAC
12465 THEN RESA_TAC
12466 THEN POP_ASSUM MP_TAC
12467 THEN POP_ASSUM MP_TAC
12468 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}`
12469 ASSUME_TAC
12470 THENL(*15*)[
12471
12472  REWRITE_TAC[EXTENSION;IN_ELIM_THM]
12473 THEN GEN_TAC
12474 THEN EQ_TAC
12475 THENL(*16*)[
12476 REPEAT STRIP_TAC
12477 THEN EXISTS_TAC`(n:num)`
12478 THEN ASM_REWRITE_TAC[]
12479 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)))`]
12480 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`);(*16*)
12481
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*);(*15*)
12487
12488 ASM_REWRITE_TAC[]
12489 THEN ARITH_TAC](*15*)](*14*)](*13*)](*12*);(*11*)
12490
12491 POP_ASSUM MP_TAC
12492 THEN DISCH_THEN(LABEL_TAC"LINH1")
12493 THEN REPEAT STRIP_TAC
12494 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`m':num`)
12495 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`m':num`;]
12496 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((y:real^3#real^3#real^3#real^3))`)
12497 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]
12498 THEN POP_ASSUM MP_TAC
12499 THEN EXPAND_TAC"y1"
12500 THEN REWRITE_TAC[pr2;pr3]
12501 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]
12502 THEN POP_ASSUM MP_TAC
12503 THEN SUBGOAL_THEN `y1 IN d1_fan(x,V:real^3->bool,E)`ASSUME_TAC
12504 THENL(*12*)[
12505 REWRITE_TAC[d1_fan;IN_ELIM_THM]
12506 THEN EXISTS_TAC`x:real^3`
12507 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12508 THEN EXISTS_TAC`v:real^3`
12509 THEN EXISTS_TAC`sigma_fan x V E (sigma_fan x V E v u) v:real^3`
12510 THEN ASM_REWRITE_TAC[]
12511 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
12512 `v:real^3`]
12513 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`]
12514 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)`;
12515 `v:real^3`]
12516 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12517 THEN ASM_REWRITE_TAC[];(*12*)
12518
12519 ASM_REWRITE_TAC[]
12520 THEN SET_TAC[]](*12*)](*11*)](*10*)](*9*)](*8*);(*7*)
12521
12522 ASM_REWRITE_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
12523
12524 POP_ASSUM MP_TAC
12525 THEN POP_ASSUM MP_TAC
12526 THEN POP_ASSUM MP_TAC
12527 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)))`]
12528 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12529 THEN STRIP_TAC
12530 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`]
12531 THEN POP_ASSUM(fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3`)
12532 THEN POP_ASSUM MP_TAC
12533 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
12534 THEN RESA_TAC
12535 THEN ASM_REWRITE_TAC[tran]
12536 THEN RESA_TAC
12537 THEN REWRITE_TAC[EQ_PAIR_4]
12538 THEN STRIP_TAC
12539 THEN REMOVE_ASSUM_TAC
12540 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12541 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12542 THEN REMOVE_ASSUM_TAC
12543 THEN REMOVE_ASSUM_TAC
12544 THEN REMOVE_ASSUM_TAC
12545 THEN POP_ASSUM MP_TAC
12546 THEN REWRITE_TAC[]
12547 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12548 THEN ASM_REWRITE_TAC[];(*3*)
12549
12550 POP_ASSUM MP_TAC
12551 THEN POP_ASSUM MP_TAC
12552 THEN POP_ASSUM MP_TAC
12553 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)))`]
12554 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(f2:real^3#real^3#real^3#real^3)`)
12555 THEN STRIP_TAC
12556 THEN MRESA_TAC into_domain1_power_efn_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool) `;`k:num`]
12557 THEN POP_ASSUM(fun th-> MRESA1_TAC th`f2:real^3#real^3#real^3#real^3`)
12558 THEN POP_ASSUM MP_TAC
12559 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
12560 THEN RESA_TAC
12561 THEN ASM_REWRITE_TAC[tran]
12562 THEN RESA_TAC
12563 THEN REWRITE_TAC[EQ_PAIR_4]
12564 THEN STRIP_TAC
12565 THEN REMOVE_ASSUM_TAC
12566 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12567 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12568 THEN REMOVE_ASSUM_TAC
12569 THEN REMOVE_ASSUM_TAC
12570 THEN REMOVE_ASSUM_TAC
12571 THEN POP_ASSUM MP_TAC
12572 THEN ASM_REWRITE_TAC[]]]]);;
12573
12574
12575
12576
12577 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.
12578 FAN(x,V,E)
12579  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12580 /\ fan80(x,V,E)
12581 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12582 /\ {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)
12583 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12584 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12585 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12586 /\ ds1=face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
12587 /\ ds2=face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
12588 /\ (x,w,v,u)=f10
12589 /\ (x,v,u,w)=f20
12590 /\ (x,u,w,v)=f30
12591 /\ E UNION {{v,w}}= E1
12592 /\ ed1=(x,v,w,sigma_fan x V E1 v w)
12593 /\ ed2=(x,w,v,sigma_fan x V E1 w v)
12594 ==> IMAGE (tran x V E1) ds = (ds1 UNION ds2) DELETE ed1 DELETE ed2 `,
12595 REPEAT STRIP_TAC
12596 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)`;
12597 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
12598 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)`;
12599 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
12600 THEN POP_ASSUM MP_TAC
12601 THEN POP_ASSUM MP_TAC
12602 THEN SET_TAC[]);;
12603
12604 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.
12605 FAN(x,V,E)
12606  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12607 /\ fan80(x,V,E)
12608 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12609 /\ {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)
12610 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12611 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12612 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12613 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
12614 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
12615 /\ (x,w,v,u)=f10
12616 /\ (x,v,u,w)=f20
12617 /\ (x,u,w,v)=f30
12618 /\ E UNION {{v,w}}= E1
12619 /\ y IN ds
12620 /\ ~(y=f1)
12621 /\ ~(y=f3)
12622 ==> azim_fan x V E1 (pr2 (tran x V E1 y)) (pr3 (tran x V E1 y))
12623 = azim_fan x V E (pr2 y) (pr3 y)`,
12624
12625 REPEAT STRIP_TAC
12626 THEN POP_ASSUM MP_TAC
12627 THEN DISCH_THEN(LABEL_TAC"EM")
12628 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12629 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12630 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)))`]
12631 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)))`]
12632 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)`;]
12633 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12634 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12635 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12636 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12637 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`]
12638 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)`)
12639 THEN RESA_TAC
12640 THEN POP_ASSUM (fun th-> ASSUME_TAC(th) THEN MP_TAC th
12641 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM])
12642 THEN STRIP_TAC
12643 THEN ASM_REWRITE_TAC[tran;pr2;pr3;azim_fan]
12644 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
12645 `(v':real^3)`]
12646 THEN REMOVE_ASSUM_TAC
12647 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`
12648 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`
12649 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
12650 THEN RESA_TAC
12651 THEN RESA_TAC
12652 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 ))`)
12653
12654 THENL[
12655
12656 MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12657 `v:real^3`; `w:real^3` ]
12658 THEN POP_ASSUM MP_TAC
12659 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12660 THEN ASM_REWRITE_TAC[]
12661 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12662 THEN STRIP_TAC
12663 THEN POP_ASSUM(fun th-> MRESA_TAC th[`v':real^3`;`w':real^3`]);
12664
12665 POP_ASSUM MP_TAC
12666 THEN STRIP_TAC
12667 THENL[
12668
12669 POP_ASSUM MP_TAC
12670 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12671 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`];
12672
12673 SUBGOAL_THEN`(x',v',w',w1)=f1:real^3#real^3#real^3#real^3` ASSUME_TAC
12674 THENL[
12675 ASM_REWRITE_TAC[]
12676 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
12677 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12678 THEN EXISTS_TAC`x:real^3`
12679 THEN EXISTS_TAC`V:real^3->bool`
12680 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12681 THEN ASM_REWRITE_TAC[]
12682 THEN REWRITE_TAC[pr2;pr3]
12683 THEN ASM_REWRITE_TAC[]
12684 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12685 THEN EXISTS_TAC`x:real^3`
12686 THEN EXISTS_TAC`v:real^3`
12687 THEN EXISTS_TAC`u:real^3`
12688 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
12689 THEN ASM_REWRITE_TAC[];
12690
12691 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] )
12692 THEN SET_TAC[]];
12693
12694
12695
12696 POP_ASSUM MP_TAC
12697 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12698 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`];
12699
12700 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12701 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
12702 THEN SUBGOAL_THEN`x,
12703  w,
12704  inverse1_sigma_fan x V E w u,
12705  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
12706 THENL[
12707 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
12708 THENL[
12709
12710 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
12711 THEN EXISTS_TAC`x:real^3`
12712 THEN EXISTS_TAC`V:real^3->bool`
12713 THEN EXISTS_TAC`E:(real^3->bool)->bool`
12714 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
12715 THEN ASM_REWRITE_TAC[]
12716 THEN ASM_TAC
12717 THEN REWRITE_TAC[pr2;pr3]
12718 THEN REPEAT STRIP_TAC
12719 THEN ASM_REWRITE_TAC[]
12720 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
12721 THEN EXISTS_TAC`x:real^3`
12722 THEN EXISTS_TAC`u:real^3`
12723 THEN EXISTS_TAC`w:real^3`
12724 THEN EXISTS_TAC`v:real^3`
12725 THEN ASM_REWRITE_TAC[];
12726 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
12727 THEN REWRITE_TAC[f1_fan]
12728 THEN ASM_REWRITE_TAC[]
12729 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
12730 THEN REMOVE_ASSUM_TAC
12731 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
12732 THEN POP_ASSUM MP_TAC
12733 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
12734 THEN RESA_TAC];
12735
12736 POP_ASSUM MP_TAC
12737 THEN ASM_REWRITE_TAC[]
12738 THEN POP_ASSUM MP_TAC
12739 THEN ASM_REWRITE_TAC[]
12740 THEN STRIP_TAC
12741 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] )
12742 THEN SET_TAC[]]]]);;
12743
12744
12745
12746
12747
12748
12749
12750
12751 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.
12752 FAN(x,V,E)
12753  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
12754 /\ fan80(x,V,E)
12755 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
12756 /\ {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)
12757 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
12758 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
12759 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
12760 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
12761 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
12762 /\ (x,w,v,u)=f10
12763 /\ (x,v,u,w)=f20
12764 /\ (x,u,w,v)=f30
12765 /\ E UNION {{v,w}}= E1
12766 /\ (!E1. FAN(x,V,E1)  /\
12767          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
12768          fan80(x,V,E1)/\
12769          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
12770 ==> conforming_solid_angle_fan(x,V,E)`,
12771
12772
12773
12774 REPEAT STRIP_TAC
12775 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
12776 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
12777 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)))`]
12778 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)))`]
12779 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)`;]
12780 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
12781 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
12782 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`]
12783 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`)
12784 THEN ASM_REWRITE_TAC[]
12785 THEN STRIP_TAC
12786 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12787 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12788 THEN POP_ASSUM MP_TAC
12789 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
12790 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
12791 THEN REPEAT STRIP_TAC
12792 THEN POP_ASSUM MP_TAC
12793 THEN REMOVE_ASSUM_TAC
12794 THEN POP_ASSUM MP_TAC
12795 THEN DISCH_THEN(LABEL_TAC"LINH")
12796 THEN STRIP_TAC
12797 THEN MRESA_TAC eventally_measurable_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12798 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12799 THEN POP_ASSUM MP_TAC
12800 THEN REWRITE_TAC[conforming_fan;conforming_solid_angle_fan;]
12801 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
12802 THEN REPEAT STRIP_TAC
12803 THENL(*1*)[
12804 POP_ASSUM MP_TAC
12805 THEN POP_ASSUM(fun th-> MRESA1_TAC th`r:real`);(*1*)
12806
12807
12808 DISJ_CASES_TAC(SET_RULE`~(ds=f)\/ (f=ds:real^3#real^3#real^3#real^3->bool)`)
12809 THENL(*2*)[
12810
12811 MRESA_TAC DOMAIN_TRANF_FACE_DELETE_DS
12812 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12813 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
12814 ;`ds1:real^3#real^3#real^3#real^3->bool`
12815 ;`ds2:real^3#real^3#real^3#real^3->bool`
12816 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
12817 ;`(f:real^3#real^3#real^3#real^3->bool)`;]
12818 THEN POP_ASSUM MP_TAC
12819 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
12820 THEN STRIP_TAC
12821 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)`;
12822 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
12823 THEN POP_ASSUM MP_TAC
12824 THEN ASM_REWRITE_TAC[DELETE;IN_ELIM_THM]
12825 THEN STRIP_TAC
12826 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)`)
12827 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`]
12828 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)`;
12829 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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]
12830 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)`
12831 ASSUME_TAC
12832 THENL(*3*)[
12833
12834 REPEAT STRIP_TAC
12835 THEN MP_TAC(SET_RULE`x' IN f /\ y IN (f:real^3#real^3#real^3#real^3->bool)
12836 /\ 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) `)
12837 THEN RESA_TAC
12838 THEN MRESA_TAC INJ_TRAN_D1_FAN
12839 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
12840 `x':real^3#real^3#real^3#real^3`;`(y:real^3#real^3#real^3#real^3)`];(*3*)
12841
12842
12843 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`]
12844 THEN REWRITE_TAC[o_DEF; ]
12845 THEN SUBGOAL_THEN `(!y. y IN f
12846            ==> 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)) -
12847                pi =
12848                azim_fan x V E (pr2 y) (pr3 y) - pi)`
12849 ASSUME_TAC
12850 THENL(*4*)[
12851
12852 REPEAT STRIP_TAC
12853 THEN MRESAL_TAC azim_fanadd_eq[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12854 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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*)
12855
12856 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*)
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866 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)`;
12867 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
12868 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)`;
12869 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12870 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)`;
12871 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12872 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])
12873 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'`)
12874 THEN RESA_TAC
12875 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]
12876 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]
12877 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)`
12878 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)`
12879 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`]
12880 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)`
12881 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)`)
12882
12883 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(ds1:real^3#real^3#real^3#real^3->bool)`
12884 THEN MRESA1_TAC th`(ds2:real^3#real^3#real^3#real^3->bool)`)
12885 THEN SUBGOAL_THEN`dartset_leads_into_fan x V E1 f' INTER
12886       dartset_leads_into_fan x V E1 (ds2:real^3#real^3#real^3#real^3->bool) =
12887       {}`
12888 ASSUME_TAC
12889 THENL(*4*)[
12890
12891 POP_ASSUM MP_TAC
12892 THEN DISCH_THEN(LABEL_TAC"LINH1")
12893 THEN REWRITE_TAC[SET_RULE`A INTER B ={} <=> ~(?z. z IN A /\ z IN B)`]
12894 THEN STRIP_TAC
12895 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`]
12896 THEN POP_ASSUM MP_TAC
12897 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM]
12898 THEN STRIP_TAC
12899 THEN POP_ASSUM (fun th-> MP_TAC(SYM th) THEN STRIP_TAC)
12900 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E1)`;`y:real^3`;`z:real^3`]
12901 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`]
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 REMOVE_THEN "LINH1" MP_TAC
12908 THEN RESA_TAC
12909 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12910 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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*)
12911
12912
12913 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]
12914 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`]
12915 THEN MP_TAC(SET_RULE`E UNION {{v,w}}=E1==> {v,w:real^3} IN E1`) THEN RESA_TAC
12916 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
12917 `(v:real^3)`]
12918 THEN MRESA_TAC  MEASURABLE_AFF_GT_2_1_INTER_BALL[`x:real^3`;`v:real^3`;`w:real^3`;`(min r r'):real`]
12919 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`]
12920 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`]
12921 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`]
12922 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
12923 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}
12924 ==> aff_gt {x:real^3} {v, w} SUBSET xfan (x,V:real^3->bool,E1)`)
12925 THEN RESA_TAC
12926 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]
12927 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]
12928 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET xfan (x,V,E1)/\
12929 dartset_leads_into_fan x V E1 f' SUBSET (:real^3) DIFF xfan (x,V,E1)/\
12930 dartset_leads_into_fan x V E1 ds2 SUBSET (:real^3) DIFF xfan (x,V,E1)
12931 ==> (dartset_leads_into_fan x V E1 f' UNION
12932        dartset_leads_into_fan x V E1 ds2) INTER
12933       aff_gt {x} {v, w:real^3} =
12934       {}`)
12935 THEN RESA_TAC
12936 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`]
12937 THEN MRESA_TAC SOL_AFF_GT_2_1 [`x:real^3`;`v:real^3`;`w:real^3`]
12938 THEN REWRITE_TAC[REAL_ARITH`((&2 * pi + sum f' (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) +
12939   &2 * pi +
12940   sum ds2 (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) +
12941  &0= &4 * pi + (sum f' (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi) +
12942   sum ds2 (\y. azim_fan x V E1 (pr2 y) (pr3 y) - pi)) `]
12943 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`]
12944 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`]
12945 THEN MRESA_TAC disjoint_ds1_and_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
12946 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
12947 THEN SUBGOAL_THEN`(f':real^3#real^3#real^3#real^3->bool) INTER ds2 ={}`
12948 ASSUME_TAC
12949 THENL(*5*)[
12950 POP_ASSUM MP_TAC
12951 THEN DISCH_THEN(LABEL_TAC"LINH1")
12952 THEN REWRITE_TAC[SET_RULE`A INTER B ={} <=> ~(?z. z IN A /\ z IN B)`]
12953 THEN STRIP_TAC
12954 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))`
12955 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]
12956 THEN POP_ASSUM MP_TAC
12957 THEN POP_ASSUM MP_TAC
12958 THEN RESA_TAC
12959 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
12960 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))`
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 RESA_TAC
12967 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);(*5*)
12968
12969
12970
12971
12972
12973 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]
12974 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
12975 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`]
12976 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`]
12977 THEN MP_TAC(SET_RULE`f' SUBSET d1_fan (x,V,E1)/\ ds2 SUBSET d1_fan (x,V,E1)
12978 ==> f' UNION ds2 SUBSET d1_fan(x:real^3,V,E1)
12979 `)
12980 THEN RESA_TAC
12981 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E1:(real^3->bool)->bool)`]
12982 THEN MRESA_TAC FINITE_SUBSET[`((f' UNION ds2 ):real^3#real^3#real^3#real^3->bool)`;`d1_fan(x:real^3,V,E1)`]
12983 THEN SUBGOAL_THEN`x,v,w,sigma_fan x V E1 v w IN ds1` ASSUME_TAC
12984 THENL(*6*)[
12985 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`
12986 THEN EXISTS_TAC`0:num`
12987 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*6*)
12988
12989 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`)
12990 THEN RESA_TAC
12991 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`]
12992 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)`]
12993 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E1 w v) IN
12994       (f' UNION ds2) DELETE (x,v,w,sigma_fan x V E1 v w:real^3)`ASSUME_TAC
12995 THENL(*7*)[
12996 ASM_REWRITE_TAC[DELETE;IN_ELIM_THM;EQ_PAIR_4]
12997 THEN MATCH_MP_TAC(SET_RULE`A IN C ==> A IN B UNION C`)
12998 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`
12999 THEN EXISTS_TAC`0:num`
13000 THEN REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`];(*7*)
13001
13002
13003
13004
13005
13006 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`]
13007 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)`;
13008 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
13009 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13010 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)`
13011 ASSUME_TAC
13012 THENL(*8*)[
13013
13014 REPEAT STRIP_TAC
13015 THEN MP_TAC(SET_RULE`x' IN ds /\ y IN (ds:real^3#real^3#real^3#real^3->bool)
13016 /\ 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) `)
13017 THEN RESA_TAC
13018 THEN MRESA_TAC INJ_TRAN_D1_FAN
13019 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
13020 `x':real^3#real^3#real^3#real^3`;`(y:real^3#real^3#real^3#real^3)`];(*8*)
13021
13022
13023 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`]
13024 THEN REWRITE_TAC[o_DEF; ]
13025 THEN MRESA_TAC finite_d1_fan[`x:real^3`;` V:real^3->bool`;` (E:(real^3->bool)->bool)`]
13026 THEN MRESA_TAC FINITE_SUBSET[`(ds:real^3#real^3#real^3#real^3->bool)`;`d1_fan(x:real^3,V,E)`]
13027 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`]
13028 THEN MRESA_TAC FINITE_DELETE[`(ds ):real^3#real^3#real^3#real^3->bool`;`f1:real^3#real^3#real^3#real^3`]
13029 THEN SUBGOAL_THEN`f3 IN ds DELETE f1:real^3#real^3#real^3#real^3` ASSUME_TAC
13030 THENL(*9*)[
13031 ASM_REWRITE_TAC[IN_ELIM_THM;DELETE;]
13032 THEN STRIP_TAC
13033 THEN POP_ASSUM (fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13034 THEN FIND_ASSUM MP_TAC`pr2 f3=w:real^3`
13035 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`pr2 f3=v:real^3`
13036 THEN ASM_REWRITE_TAC[];(*9*)
13037
13038  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`]
13039 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`]
13040 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`]
13041 THEN SUBGOAL_THEN `(!y. y IN ds DELETE f1 DELETE f3
13042            ==> 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)) -
13043                pi =
13044                azim_fan x V E (pr2 y) (pr3 y) - pi)`
13045 ASSUME_TAC
13046 THENL(*10*)[
13047
13048 REWRITE_TAC[DELETE;IN_ELIM_THM]
13049 THEN REPEAT STRIP_TAC
13050 THEN MRESAL_TAC azim_fanadd_eq_ds[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13051 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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*)
13052
13053 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`]
13054 THEN REWRITE_TAC[REAL_ARITH`&4 * pi +
13055  (((sum (ds DELETE f1 DELETE f3) (\y. azim_fan x V E (pr2 y) (pr3 y) - pi) +
13056     azim_fan x V E1 (pr2 (tran x V E1 f3)) (pr3 (tran x V E1 f3)) - pi) +
13057    azim_fan x V E1 (pr2 (tran x V E1 f1)) (pr3 (tran x V E1 f1)) - pi) +
13058   azim_fan x V E1 (pr2 (x,w,v,sigma_fan x V E1 w v))
13059   (pr3 (x,w,v,sigma_fan x V E1 w v)) -
13060   pi) +
13061  azim_fan x V E1 (pr2 (x,v,w,sigma_fan x V E1 v w))
13062  (pr3 (x,v,w,sigma_fan x V E1 v w)) -
13063  pi =
13064  &2 * pi +
13065  (sum (ds DELETE f1 DELETE f3) (\y. azim_fan x V E (pr2 y) (pr3 y) - pi) +
13066   azim_fan x V E w (pr3 f3) - pi) +
13067  azim_fan x V E v u - pi
13068 <=> azim_fan x V E1 (pr2 (tran x V E1 f3)) (pr3 (tran x V E1 f3)) +
13069    azim_fan x V E1 (pr2 (tran x V E1 f1)) (pr3 (tran x V E1 f1))+
13070   azim_fan x V E1 (pr2 (x,w,v,sigma_fan x V E1 w v))
13071   (pr3 (x,w,v,sigma_fan x V E1 w v))  +
13072  azim_fan x V E1 (pr2 (x,v,w,sigma_fan x V E1 v w))
13073  (pr3 (x,v,w,sigma_fan x V E1 v w))  =
13074  azim_fan x V E w (pr3 f3) +
13075  azim_fan x V E v u`;pr2;pr3]
13076 THEN SUBGOAL_THEN`(x,v,u,sigma_fan x V E v u)=f1:real^3#real^3#real^3#real^3` ASSUME_TAC
13077 THENL(*11*)[
13078 ASM_REWRITE_TAC[]
13079 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13080 THEN MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13081 THEN EXISTS_TAC`x:real^3`
13082 THEN EXISTS_TAC`V:real^3->bool`
13083 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13084 THEN ASM_REWRITE_TAC[]
13085 THEN REWRITE_TAC[pr2;pr3]
13086 THEN ASM_REWRITE_TAC[]
13087 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13088 THEN EXISTS_TAC`x:real^3`
13089 THEN EXISTS_TAC`v:real^3`
13090 THEN EXISTS_TAC`u:real^3`
13091 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
13092 THEN ASM_REWRITE_TAC[];(*11*)
13093
13094 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13095 THEN SUBGOAL_THEN`x,
13096  w,
13097  inverse1_sigma_fan x V E w u,
13098  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
13099 THENL(*12*)[
13100 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
13101 THENL(*13*)[
13102 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13103 THEN EXISTS_TAC`x:real^3`
13104 THEN EXISTS_TAC`V:real^3->bool`
13105 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13106 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13107 THEN ASM_REWRITE_TAC[]
13108 THEN ASM_TAC
13109 THEN REWRITE_TAC[pr2;pr3]
13110 THEN REPEAT STRIP_TAC
13111 THEN ASM_REWRITE_TAC[]
13112 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13113 THEN EXISTS_TAC`x:real^3`
13114 THEN EXISTS_TAC`u:real^3`
13115 THEN EXISTS_TAC`w:real^3`
13116 THEN EXISTS_TAC`v:real^3`
13117 THEN ASM_REWRITE_TAC[];(*13*)
13118 POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
13119 THEN REWRITE_TAC[f1_fan]
13120 THEN ASM_REWRITE_TAC[]
13121 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13122 THEN REMOVE_ASSUM_TAC
13123 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13124 THEN POP_ASSUM MP_TAC
13125 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13126 THEN RESA_TAC](*13*);(*12*)
13127
13128 POP_ASSUM MP_TAC
13129 THEN ASM_REWRITE_TAC[]
13130 THEN STRIP_TAC
13131 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;tran;azim_fan])
13132 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`
13133 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`
13134 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
13135 THEN RESA_TAC
13136 THEN RESA_TAC
13137 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
13138 `(w:real^3)`]
13139 THEN POP_ASSUM MP_TAC
13140 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13141 THEN RESA_TAC
13142 THEN POP_ASSUM MP_TAC
13143 THEN REMOVE_ASSUM_TAC
13144 THEN REMOVE_ASSUM_TAC
13145 THEN STRIP_TAC
13146 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`
13147 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`
13148 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(w:real^3) IN V`
13149 THEN RESA_TAC
13150 THEN RESA_TAC
13151 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13152 THEN REMOVE_ASSUM_TAC
13153 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13154 THEN POP_ASSUM MP_TAC
13155 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13156 THEN POP_ASSUM MP_TAC
13157 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13158 THEN ASM_REWRITE_TAC[]
13159 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13160 THEN RESA_TAC
13161 THEN RESA_TAC
13162 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13163 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13164 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
13165 THEN REMOVE_ASSUM_TAC
13166 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
13167 THEN POP_ASSUM MP_TAC
13168 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13169 THEN RESA_TAC
13170 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)`;
13171 `v:real^3`;`u:real^3`; `w:real^3` ]
13172 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)`;
13173 `v:real^3`;`u:real^3`; `w:real^3` ]
13174 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)`;
13175 `v:real^3`;`u:real^3`; `w:real^3` ]
13176 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`]
13177 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`u:real^3`;`v:real^3`]
13178 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`]
13179 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`]
13180 THEN POP_ASSUM MP_TAC
13181 THEN RESA_TAC
13182 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`]
13183 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`]
13184 THEN POP_ASSUM MP_TAC
13185 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13186 THEN RESA_TAC
13187 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
13188 ==>
13189 azim x w v u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
13190 THEN RESA_TAC
13191 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;`(w:real^3)`]
13192 THEN POP_ASSUM MP_TAC
13193 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV)[SET_RULE`{A,B}={B,A}`]
13194 THEN RESA_TAC
13195 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`(w:real^3)`]
13196 THEN POP_ASSUM MP_TAC
13197 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV)[SET_RULE`{A,B}={B,A}`]
13198 THEN RESA_TAC
13199 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)`]
13200 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`]
13201 THEN REAL_ARITH_TAC
13202 ]]]]]]]]]]]);;
13203
13204
13205 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.
13206 FAN(x,V,E)
13207  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13208 /\ fan80(x,V,E)
13209 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13210 /\ {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)
13211 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w /\ pr3 f1 = u
13212 /\     pr3 f2 = w
13213 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13214 /\ sigma_fan x V E u w = v
13215 /\ ds1 = face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)
13216 /\ ds2 = face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)
13217 /\ (x,w,v,u)=f10
13218 /\ (x,v,u,w)=f20
13219 /\ (x,u,w,v)=f30
13220 /\ E UNION {{v,w}}= E1
13221
13222 /\ f IN face_set(hypermap1_of_fanx (x,V,E)) DELETE ds
13223 /\ y IN f
13224 ==>  tran x V E1 y IN tranf x V E E1 f`,
13225
13226 REPEAT STRIP_TAC
13227 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13228 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13229 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)))`]
13230 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)))`]
13231 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)`;]
13232 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13233 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13234 THEN MRESA_TAC unique_tranf_fan
13235 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13236 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3`
13237 ;`ds1:real^3#real^3#real^3#real^3->bool`
13238 ;`ds2:real^3#real^3#real^3#real^3->bool`
13239 ;`(f10:real^3#real^3#real^3#real^3)` ;`(f20:real^3#real^3#real^3#real^3)`;`(f30:real^3#real^3#real^3#real^3)`
13240 ; `f:real^3#real^3#real^3#real^3->bool`
13241 ;`(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)`
13242 ;`(y:real^3#real^3#real^3#real^3)`;]
13243 THEN REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
13244 THEN EXISTS_TAC`0:num`
13245 THEN ASM_REWRITE_TAC[POWER;I_DEF;ARITH_RULE`0>=0`]);;
13246
13247
13248
13249
13250 let TXFBALB_VERSION=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13251 FAN(x,V,E)
13252  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13253 /\ fan80(x,V,E)
13254 /\ ~(conforming_fan (x,V,E))
13255 /\ (!E1. FAN(x,V,E1)  /\
13256          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13257          fan80(x,V,E1)/\
13258          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13259 ==> conforming_solid_angle_fan(x,V,E)`,
13260 REPEAT STRIP_TAC
13261 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
13262 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`]
13263 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13264 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13265 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13266 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13267 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)`
13268 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)`
13269 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13270 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13271 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13272 THEN MRESA_TAC TXFBALB[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13273 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]);;
13274
13275
13276
13277 let conforming_bijection_fanadd_verrion=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13278 FAN(x,V,E)
13279  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13280 /\ fan80(x,V,E)
13281 /\ ~(conforming_fan (x,V,E))
13282 /\ (!E1. FAN(x,V,E1)  /\
13283          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13284          fan80(x,V,E1)/\
13285          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13286 ==>
13287 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
13288                                                          s = dartset_leads_into_fan x V E f)`,
13289
13290 REPEAT GEN_TAC
13291 THEN STRIP_TAC
13292 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
13293 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`]
13294 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13295 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13296 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13297 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13298 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)`
13299 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)`
13300 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13301 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13302 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13303 THEN MRESA_TAC conforming_bijection_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13304 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]);;
13305
13306 let OBHTHCD=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
13307 FAN(x,V,E)
13308  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13309 /\ fan80(x,V,E)
13310 /\ ~(conforming_fan (x,V,E))
13311 /\ (!E1. FAN(x,V,E1)  /\
13312          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13313          fan80(x,V,E1)/\
13314          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13315 ==>
13316 !s. s IN topological_component_yfan (x,V,E) ==> (?!f. f IN face_set (hypermap1_of_fanx (x,V,E)) /\
13317                                                          s = dartset_leads_into_fan x V E f)`,
13318
13319 REPEAT GEN_TAC
13320 THEN STRIP_TAC
13321 THEN MRESA_TAC nonconformin_fan_imp_exist_face_gt_3[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
13322 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`]
13323 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
13324 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
13325 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
13326 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
13327 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)`
13328 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)`
13329 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
13330 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
13331 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
13332 THEN MRESA_TAC conforming_bijection_fanadd[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13333 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]);;
13334
13335
13336
13337 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.
13338 FAN(x,V,E)
13339  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13340 /\ fan80(x,V,E)
13341 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13342 /\ {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)
13343 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13344 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13345 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13346 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13347 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13348 /\ (x,w,v,u)=f10
13349 /\ (x,v,u,w)=f20
13350 /\ (x,u,w,v)=f30
13351 /\ E UNION {{v,w}}= E1
13352 ==> 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`,
13353 REPEAT STRIP_TAC
13354 THEN POP_ASSUM MP_TAC
13355 THEN DISCH_THEN(LABEL_TAC"EM")
13356 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13357 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13358 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)))`]
13359 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)))`]
13360 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)`;]
13361 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13362 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13363 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`]
13364 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`)
13365 THEN ASM_REWRITE_TAC[]
13366 THEN STRIP_TAC
13367 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13368 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13369 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13370 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13371 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)`;
13372 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13373 THEN MATCH_MP_TAC MONO_SIGMA_FAN
13374 THEN EXISTS_TAC`x:real^3`
13375 THEN EXISTS_TAC`V:real^3->bool`
13376 THEN EXISTS_TAC`E1:(real^3->bool)->bool`
13377 THEN EXISTS_TAC`inverse1_sigma_fan x V E w u:real^3`
13378 THEN ASM_REWRITE_TAC[]
13379 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13380 THEN REMOVE_ASSUM_TAC
13381 THEN REMOVE_ASSUM_TAC
13382 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13383 THEN POP_ASSUM MP_TAC
13384 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13385 THEN RESA_TAC
13386 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u,w:real^3} IN E /\ E UNION {{v,w}}= E1
13387 ==>  {inverse1_sigma_fan x V E w u,w} IN E1`)
13388 THEN RESA_TAC
13389 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`]
13390 THEN REMOVE_ASSUM_TAC
13391 THEN REMOVE_ASSUM_TAC
13392 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13393 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`]
13394 THEN REMOVE_ASSUM_TAC
13395 THEN REMOVE_ASSUM_TAC
13396 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13397 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13398 THEN ASM_REWRITE_TAC[]
13399 THEN MP_TAC(SET_RULE`{inverse1_sigma_fan x V E w u, inverse1_sigma_fan x V E
13400                                      (inverse1_sigma_fan x V E w u)
13401                                      w:real^3} IN E /\ E UNION {{v,w}}= E1
13402 ==>  {inverse1_sigma_fan x V E w u, inverse1_sigma_fan x V E
13403                                      (inverse1_sigma_fan x V E w u)
13404                                      w} IN E1`)
13405 THEN RESA_TAC
13406 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`]
13407 THEN REMOVE_ASSUM_TAC
13408 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)
13409 THEN MRESA_TAC SIGMA_FAN_OF_FANADD1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13410 `v:real^3`; `w:real^3` ]
13411 THEN POP_ASSUM MP_TAC
13412 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13413 THEN RESA_TAC
13414 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`])
13415 THEN POP_ASSUM MP_TAC
13416 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13417 THEN ASM_REWRITE_TAC[]
13418 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`)
13419 THENL[
13420 RESA_TAC
13421 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`]
13422 THEN REMOVE_ASSUM_TAC
13423 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`);
13424
13425
13426 POP_ASSUM MP_TAC
13427 THEN STRIP_TAC
13428 THENL[
13429 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13430 THEN REMOVE_ASSUM_TAC
13431 THEN REMOVE_ASSUM_TAC
13432 THEN REMOVE_ASSUM_TAC
13433 THEN REMOVE_ASSUM_TAC
13434 THEN REMOVE_ASSUM_TAC
13435 THEN REMOVE_ASSUM_TAC
13436 THEN REMOVE_ASSUM_TAC
13437 THEN POP_ASSUM MP_TAC
13438 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13439 THEN ASM_REWRITE_TAC[];
13440
13441 POP_ASSUM MP_TAC
13442 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)`;
13443 `(w:real^3)`]
13444 THEN POP_ASSUM MP_TAC
13445 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13446 THEN ASM_REWRITE_TAC[]
13447 THEN RESA_TAC]]);;
13448
13449
13450 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.
13451 FAN(x,V,E)
13452  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13453 /\ fan80(x,V,E)
13454 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13455 /\ {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)
13456 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13457 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13458 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13459 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13460 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13461 /\ (x,w,v,u)=f10
13462 /\ (x,v,u,w)=f20
13463 /\ (x,u,w,v)=f30
13464 /\ E UNION {{v,w}}= E1
13465 /\ (!E1. FAN(x,V,E1)  /\
13466          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13467          fan80(x,V,E1)/\
13468          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13469 /\ z IN ds
13470 /\ ~(f3=z)
13471 ==> ~collinear {x, pr2 f3, pr2 z} /\
13472                   (f3 = f1_fan x V E z \/
13473                    z = f1_fan x V E f3 \/
13474                    aff_gt {x} {pr2 f3, pr2 z} SUBSET
13475                    dartset_leads_into_fan x V E ds)`,
13476
13477 REPEAT GEN_TAC
13478 THEN STRIP_TAC
13479 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
13480 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13481 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)))`]
13482 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)))`]
13483 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)`;]
13484 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13485 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
13486 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`]
13487 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)`)
13488 THEN ASM_REWRITE_TAC[]
13489 THEN STRIP_TAC
13490 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13491 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13492 THEN POP_ASSUM MP_TAC
13493 THEN REWRITE_TAC[conforming_fan;conforming_diagonal_fan;]
13494 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
13495 THEN STRIP_TAC
13496 THEN DISJ_CASES_TAC(SET_RULE`(z=f1:real^3#real^3#real^3#real^3)\/ z=f2 \/ (~(z=f1)/\ ~(z=f2))`)
13497 THENL(*1*)[
13498 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13499 THENL(*2*)[
13500 POP_ASSUM MP_TAC
13501 THEN ASM_REWRITE_TAC[]
13502 THEN MP_TAC(SET_RULE`E UNION {{v,w:real^3}}=E1==> {v,w:real^3} IN E1`)
13503 THEN RESA_TAC
13504 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
13505 `(v:real^3)`]
13506 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13507 THEN ASM_REWRITE_TAC[];(*2*)
13508
13509 ASM_REWRITE_TAC[]
13510 THEN MRESA_TAC STEP2_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`;
13511 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
13512 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13513 THEN ASM_REWRITE_TAC[]](*2*);(*1*)
13514
13515 POP_ASSUM MP_TAC
13516 THEN STRIP_TAC
13517 THENL(*2*)[
13518
13519 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13520 THENL(*3*)[
13521
13522 POP_ASSUM MP_TAC
13523 THEN ASM_REWRITE_TAC[]
13524 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13525 `(u:real^3)`]
13526 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13527 THEN ASM_REWRITE_TAC[];(*3*)
13528
13529 ASM_REWRITE_TAC[]](*3*);(*2*)
13530
13531
13532 POP_ASSUM MP_TAC
13533 THEN POP_ASSUM MP_TAC
13534 THEN POP_ASSUM MP_TAC
13535 THEN DISCH_THEN(LABEL_TAC"LINH")
13536 THEN STRIP_TAC
13537 THEN STRIP_TAC
13538 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)`;
13539 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13540 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> E SUBSET E1/\ {v,w} IN E1`)
13541 THEN RESA_TAC
13542 THEN MRESA_TAC INJ_TRAN_D1_FAN
13543 [`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`;`(E1:(real^3->bool)->bool)`;
13544 `f3:real^3#real^3#real^3#real^3`;`(z:real^3#real^3#real^3#real^3)`]
13545 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
13546 THENL(*3*)[
13547
13548 REWRITE_TAC[IMAGE;IN_ELIM_THM]
13549 THEN EXISTS_TAC`z:real^3#real^3#real^3#real^3`
13550 THEN ASM_REWRITE_TAC[];(*3*)
13551
13552 POP_ASSUM MP_TAC
13553 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
13554 THENL(*4*)[
13555
13556 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
13557 THENL(*5*)[
13558 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13559 THEN EXISTS_TAC`x:real^3`
13560 THEN EXISTS_TAC`V:real^3->bool`
13561 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13562 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13563 THEN ASM_REWRITE_TAC[]
13564 THEN ASM_TAC
13565 THEN REWRITE_TAC[pr2;pr3]
13566 THEN REPEAT STRIP_TAC
13567 THEN ASM_REWRITE_TAC[]
13568 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13569 THEN EXISTS_TAC`x:real^3`
13570 THEN EXISTS_TAC`u:real^3`
13571 THEN EXISTS_TAC`w:real^3`
13572 THEN EXISTS_TAC`v:real^3`
13573 THEN ASM_REWRITE_TAC[];(*5*)
13574 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan x V E f2 = f3:real^3#real^3#real^3#real^3`
13575 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th;f1_fan;tran] )
13576 THEN ASM_REWRITE_TAC[]
13577 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13578 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13579 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13580 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
13581 THEN REMOVE_ASSUM_TAC
13582 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
13583 THEN POP_ASSUM MP_TAC
13584 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13585 THEN RESA_TAC](*5*);(*4*)
13586
13587 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
13588 THENL(*5*)[
13589 REWRITE_TAC[f1_fan];(*5*)
13590
13591 SUBGOAL_THEN`x:real^3,v,w,sigma_fan x V E1 v w IN ds1`ASSUME_TAC
13592 THENL(*6*)[
13593 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`
13594 THEN EXISTS_TAC`0:num`
13595 THEN ASM_REWRITE_TAC[POWER;I_DEF]
13596 THEN ARITH_TAC;(*6*)
13597
13598 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`]
13599 THEN POP_ASSUM MP_TAC
13600 THEN REMOVE_ASSUM_TAC
13601 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13602 THEN STRIP_TAC
13603 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)`;
13604 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`]
13605 THEN MRESA_TAC reperentation_of_ds2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13606 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13607 THEN REWRITE_TAC[DELETE;IN_ELIM_THM;UNION]
13608 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)`;
13609 `v:real^3`;`u:real^3`; `w:real^3` ]
13610 THEN STRIP_TAC
13611 THENL(*7*)[
13612
13613 FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13614 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13615 THEN STRIP_TAC
13616 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])
13617 THENL(*8*)(*3GOAL*)[
13618
13619 POP_ASSUM MP_TAC
13620 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
13621 THEN STRIP_TAC
13622 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13623 THEN REMOVE_ASSUM_TAC
13624 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
13625 THEN REMOVE_ASSUM_TAC
13626 THEN REMOVE_ASSUM_TAC
13627 THEN REMOVE_ASSUM_TAC
13628 THEN POP_ASSUM MP_TAC
13629 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13630 THEN ASM_REWRITE_TAC[];(*8*)
13631
13632 POP_ASSUM MP_TAC
13633 THEN REWRITE_TAC[f1_fan;EQ_PAIR_4]
13634 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13635 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13636 THEN MRESA_TAC inverse1_sigma_fan_FANADD4[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13637 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
13638 THEN RESA_TAC
13639 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
13640 THENL(*9*)[
13641
13642 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13643 THEN EXISTS_TAC`x:real^3`
13644 THEN EXISTS_TAC`V:real^3->bool`
13645 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13646 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
13647 THEN ASM_REWRITE_TAC[]
13648 THEN ASM_TAC
13649 THEN REWRITE_TAC[pr2;pr3]
13650 THEN REPEAT STRIP_TAC
13651 THEN ASM_REWRITE_TAC[]
13652 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
13653 THEN EXISTS_TAC`x:real^3`
13654 THEN EXISTS_TAC`u:real^3`
13655 THEN EXISTS_TAC`w:real^3`
13656 THEN EXISTS_TAC`v:real^3`
13657 THEN ASM_REWRITE_TAC[];(*9*)
13658 FIND_ASSUM(fun th-> REWRITE_TAC[SYM th])`f1_fan x V E f2 = f3:real^3#real^3#real^3#real^3`
13659 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th;f1_fan;tran] )
13660 THEN ASM_REWRITE_TAC[]
13661 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
13662 THEN REMOVE_ASSUM_TAC
13663 THEN REMOVE_ASSUM_TAC
13664 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
13665 THEN POP_ASSUM MP_TAC
13666 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13667 THEN RESA_TAC
13668 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`]
13669 THEN REMOVE_ASSUM_TAC
13670 THEN POP_ASSUM(fun th-> MRESA1_TAC th `w:real^3`)](*9*);(*8*)
13671
13672 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)`;
13673 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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
13674       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
13675       aff_gt {x} {v, w}:real^3->bool`]
13676 THEN REMOVE_ASSUM_TAC
13677 THEN POP_ASSUM MP_TAC
13678 THEN SET_TAC[]](*8*);(*7*)
13679
13680
13681 POP_ASSUM MP_TAC
13682 THEN POP_ASSUM MP_TAC
13683 THEN POP_ASSUM MP_TAC
13684 THEN REWRITE_TAC[SET_RULE`A IN {B,C,D}<=> A=B \/ A=C \/ A=D`]
13685 THEN STRIP_TAC
13686 THENL(*8*)(*3 GOAL*)[
13687
13688 ASM_REWRITE_TAC[];(*8*)
13689
13690 POP_ASSUM MP_TAC
13691 THEN FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13692 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13693 THEN STRIP_TAC
13694 THEN ASM_REWRITE_TAC[tran]
13695 THEN EXPAND_TAC"f20"
13696 THEN REWRITE_TAC[EQ_PAIR_4]
13697 THEN STRIP_TAC
13698 THEN REMOVE_ASSUM_TAC
13699 THEN REWRITE_TAC[pr2]
13700 THEN ASM_REWRITE_TAC[]
13701 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
13702 ` (v:real^3)`]
13703 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13704 THEN ASM_REWRITE_TAC[]
13705 THEN REMOVE_ASSUM_TAC
13706 THEN REMOVE_ASSUM_TAC
13707 THEN REMOVE_ASSUM_TAC
13708 THEN REMOVE_ASSUM_TAC
13709 THEN REMOVE_ASSUM_TAC
13710 THEN REMOVE_ASSUM_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 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13718 THEN REMOVE_ASSUM_TAC
13719 THEN REMOVE_ASSUM_TAC
13720 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13721 THEN POP_ASSUM MP_TAC
13722 THEN ASM_REWRITE_TAC[]
13723 THEN SUBGOAL_THEN`f1=(x,v,u,sigma_fan x V E v u:real^3)` ASSUME_TAC
13724 THENL(*9*)[
13725 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
13726 THEN EXISTS_TAC`x:real^3`
13727 THEN EXISTS_TAC`V:real^3->bool`
13728 THEN EXISTS_TAC`E:(real^3->bool)->bool`
13729 THEN ASM_REWRITE_TAC[pr2;pr3;]
13730 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13731 THEN EXISTS_TAC`x:real^3`
13732 THEN EXISTS_TAC`v:real^3`
13733 THEN EXISTS_TAC`u:real^3`
13734 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
13735 THEN ASM_REWRITE_TAC[];(*9*)
13736
13737 POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
13738 THEN ASM_REWRITE_TAC[]](*9*);(*8*)
13739 POP_ASSUM MP_TAC
13740 THEN FIND_ASSUM MP_TAC`z IN d1_fan (x:real^3,V,E)`
13741 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13742 THEN STRIP_TAC
13743 THEN ASM_REWRITE_TAC[tran]
13744 THEN EXPAND_TAC"f30"
13745 THEN REWRITE_TAC[EQ_PAIR_4]
13746 THEN STRIP_TAC
13747 THEN REMOVE_ASSUM_TAC
13748 THEN REWRITE_TAC[pr2]
13749 THEN ASM_REWRITE_TAC[]
13750 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
13751 ` (u:real^3)`]
13752 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
13753 THEN ASM_REWRITE_TAC[]
13754 THEN REMOVE_ASSUM_TAC
13755 THEN REMOVE_ASSUM_TAC
13756 THEN REMOVE_ASSUM_TAC
13757 THEN REMOVE_ASSUM_TAC
13758 THEN REMOVE_ASSUM_TAC
13759 THEN REMOVE_ASSUM_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 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13767 THEN REMOVE_ASSUM_TAC
13768 THEN REMOVE_ASSUM_TAC
13769 THEN POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
13770 THEN POP_ASSUM MP_TAC
13771 THEN MRESA_TAC f2_EQ_F30_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
13772 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]]]]]]]]]);;
13773
13774
13775
13776
13777
13778
13779 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.
13780 FAN(x,V,E)
13781  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13782 /\ fan80(x,V,E)
13783 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13784 /\ {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)
13785 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13786 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13787 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13788 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13789 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13790 /\ (x,w,v,u)=f10
13791 /\ (x,v,u,w)=f20
13792 /\ (x,u,w,v)=f30
13793 /\ E UNION {{v,w}}= E1
13794 /\ (!E1. FAN(x,V,E1)  /\
13795          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13796          fan80(x,V,E1)/\
13797          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13798 /\ y IN ds
13799 ==> ?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)
13800 /\ {pr2 f2, pr2 f3} IN E
13801 /\ ~({pr2 f3, pr2 f1 } IN E)
13802 /\ {pr2 f1, pr2 f2 } IN E
13803 /\ sigma_fan x V E (pr2 f2) (pr2 f3)=pr2 f1
13804 /\ pr2 f3= pr3 f2
13805 /\ pr2 f2= pr3 f1
13806 /\ y=f3`,
13807
13808 REPEAT STRIP_TAC
13809 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)))`]
13810 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
13811 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`]
13812 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)`
13813 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)`
13814 THEN ABBREV_TAC`f4=f1_fan x V E (y:real^3#real^3#real^3#real^3)`
13815 THEN POP_ASSUM MP_TAC
13816 THEN DISCH_THEN(LABEL_TAC"VUT")
13817 THEN FIND_ASSUM MP_TAC`ds IN face_set(hypermap1_of_fanx (x,V:real^3->bool,E))`
13818 THEN REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits]
13819 THEN RESA_TAC
13820 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`]
13821 THEN POP_ASSUM MP_TAC
13822 THEN REWRITE_TAC[face]
13823 THEN ASM_REWRITE_TAC[]
13824 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
13825 THEN RESA_TAC
13826 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`]
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 MP_TAC(SET_RULE`y IN ds /\ ds SUBSET d1_fan(x,V,E)==> y IN d1_fan(x:real^3,V,E)`)
13832 THEN RESA_TAC
13833 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)))`]
13834 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13835 THEN REMOVE_ASSUM_TAC
13836 THEN REMOVE_ASSUM_TAC
13837 THEN REMOVE_ASSUM_TAC
13838 THEN MP_TAC(ARITH_RULE`CARD( ds:real^3#real^3#real^3#real^3->bool)>3 ==> CARD ds= SUC(CARD(ds)-1)`)
13839 THEN RESA_TAC
13840 THEN POP_ASSUM(fun th-> STRIP_TAC THEN POP_ASSUM(fun th1-> MP_TAC th1 THEN
13841 ONCE_REWRITE_TAC[th]
13842 THEN ASM_REWRITE_TAC[COM_POWER;o_DEF]
13843 THEN STRIP_TAC THEN MP_TAC th1))
13844 THEN MP_TAC(ARITH_RULE`CARD( ds:real^3#real^3#real^3#real^3->bool)>3 ==> CARD ds= SUC( SUC(CARD(ds)-2))`)
13845 THEN RESA_TAC
13846 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
13847 THEN ASM_REWRITE_TAC[COM_POWER;o_DEF]
13848 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC th)
13849 THEN STRIP_TAC
13850 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`;]
13851 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(y:real^3#real^3#real^3#real^3)`)
13852 THEN POP_ASSUM MP_TAC
13853 THEN REMOVE_ASSUM_TAC
13854 THEN REMOVE_ASSUM_TAC
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)-2: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) `;`SUC(0):num`;]
13863 THEN POP_ASSUM(fun th-> MRESAL1_TAC th`(f1':real^3#real^3#real^3#real^3)`[POWER;I_DEF;o_DEF])
13864 THEN POP_ASSUM MP_TAC
13865 THEN REMOVE_ASSUM_TAC
13866 THEN REMOVE_ASSUM_TAC
13867 THEN STRIP_TAC
13868 THEN MRESA_TAC MONO_F1_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13869 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)`])
13870 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)`]
13871 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)`]
13872 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`]
13873 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)`)
13874 THEN RESA_TAC
13875 THEN MRESA_TAC f_fan_no_fix_point[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
13876 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)`)
13877 THEN DISJ_CASES_TAC(SET_RULE`y=f1' \/ ~(y=f1':real^3#real^3#real^3#real^3)`)
13878 THENL(*1*)[
13879 MP_TAC(SET_RULE`f1'=y:real^3#real^3#real^3#real^3==> pr2 f1'= pr2 y`)
13880 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
13881 THEN REWRITE_TAC[]
13882 THEN STRIP_TAC
13883 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)`]
13884 THEN REMOVE_ASSUM_TAC
13885 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)`]
13886 THEN POP_ASSUM MP_TAC
13887 THEN POP_ASSUM MP_TAC
13888 THEN RESA_TAC THEN RESA_TAC
13889 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)`;
13890 ` pr2 (f2':real^3#real^3#real^3#real^3)`]
13891 THEN POP_ASSUM MP_TAC
13892 THEN POP_ASSUM MP_TAC
13893 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
13894 THEN RESA_TAC THEN RESA_TAC
13895 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})`)
13896 THENL(*2*)[
13897  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`]
13898 THEN POP_ASSUM MP_TAC
13899 THEN POP_ASSUM(fun th->REWRITE_TAC[SYM(th)])
13900 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)`
13901 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`(pr2 (f2':real^3#real^3#real^3#real^3)) IN V`
13902 THEN ARITH_TAC;(*2*)
13903
13904 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)`;
13905 ` pr2 (y:real^3#real^3#real^3#real^3)`]
13906 THEN ASM_TAC THEN SET_TAC[]];(*1*)
13907
13908
13909
13910 DISJ_CASES_TAC(SET_RULE`f4=f1' \/ ~(f4=f1':real^3#real^3#real^3#real^3)`)
13911 THENL(*2*)[
13912 SUBGOAL_THEN(`((f1_fan (x:real^3) V E) POWER 3) f1'=f1'`) ASSUME_TAC
13913
13914 THENL(*3*)[
13915 ASM_SIMP_TAC[ARITH_RULE`3= SUC(2)/\ 2= SUC(1) /\ 1= SUC(0)`;POWER;I_DEF;o_DEF];(*3*)
13916
13917  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
13918 THENL(*4*)[
13919 ASM_REWRITE_TAC[face;orbit_map;EXTENSION;IN_ELIM_THM]
13920 THEN GEN_TAC
13921 THEN EQ_TAC
13922 THEN STRIP_TAC
13923 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]
13924 THEN POP_ASSUM(fun th-> MRESA1_TAC th `f1':real^3#real^3#real^3#real^3`)
13925 THEN EXISTS_TAC`n:num`
13926 THEN ASM_REWRITE_TAC[];(*4*)
13927
13928 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`][]
13929 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)`]
13930 THEN POP_ASSUM MP_TAC
13931 THEN POP_ASSUM(fun th -> REWRITE_TAC[SYM th])
13932 THEN FIND_ASSUM MP_TAC`CARD( ds:real^3#real^3#real^3#real^3->bool)>3`
13933 THEN ARITH_TAC](*4*)](*3*);(*2*)
13934
13935 POP_ASSUM MP_TAC
13936 THEN DISCH_THEN(LABEL_TAC"EMYEU")
13937 THEN EXISTS_TAC`f1':real^3#real^3#real^3#real^3`
13938 THEN EXISTS_TAC`f2':real^3#real^3#real^3#real^3`
13939 THEN EXISTS_TAC`y:real^3#real^3#real^3#real^3`
13940 THEN ASM_REWRITE_TAC[]
13941 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)`]
13942 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)`]
13943 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)]
13944 THEN POP_ASSUM MP_TAC
13945 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)]
13946 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th)
13947 THEN POP_ASSUM MP_TAC
13948 THEN POP_ASSUM MP_TAC
13949 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)] THEN MP_TAC th) THEN ASSUME_TAC th)
13950 THEN STRIP_TAC
13951 THEN STRIP_TAC
13952 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[th] THEN MP_TAC th)
13953 THEN REPEAT STRIP_TAC THEN ASSUME_TAC (SYM th))
13954 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`]
13955 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
13956 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
13957 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th] THEN ASSUME_TAC (SYM th))
13958 THEN REPEAT STRIP_TAC
13959 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`;]
13960 THEN REMOVE_THEN "EMYEU" MP_TAC
13961 THEN REMOVE_THEN"VUT"(fun th-> REWRITE_TAC[SYM th])
13962 THEN ASM_TAC
13963 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
13964 THEN REPEAT (ASM_REWRITE_TAC[pr2;pr3] THEN STRIP_TAC THEN ASM_REWRITE_TAC[])
13965 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
13966 THEN POP_ASSUM MP_TAC
13967 THEN REMOVE_ASSUM_TAC
13968 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
13969 THEN STRIP_TAC
13970 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`]]]);;
13971
13972 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.
13973 FAN(x,V,E)
13974  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
13975 /\ fan80(x,V,E)
13976 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
13977 /\ {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)
13978 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
13979 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
13980 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
13981 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
13982 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
13983 /\ (x,w,v,u)=f10
13984 /\ (x,v,u,w)=f20
13985 /\ (x,u,w,v)=f30
13986 /\ E UNION {{v,w}}= E1
13987 /\ (!E1. FAN(x,V,E1)  /\
13988          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
13989          fan80(x,V,E1)/\
13990          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
13991 /\ y IN ds
13992 /\ z IN ds
13993 /\ ~(y=z)
13994 ==> ~collinear {x, pr2 y, pr2 z} /\
13995                   (y = f1_fan x V E z \/
13996                    z = f1_fan x V E y \/
13997                    aff_gt {x} {pr2 y, pr2 z} SUBSET
13998                    dartset_leads_into_fan x V E ds)`,
13999
14000 REPEAT GEN_TAC
14001 THEN STRIP_TAC
14002 THEN MRESA_TAC INDUCTION_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14003 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
14004 THEN POP_ASSUM MP_TAC
14005 THEN ABBREV_TAC`v'= pr2 (f1':real^3#real^3#real^3#real^3)`
14006 THEN ABBREV_TAC`u'= pr2 (f2':real^3#real^3#real^3#real^3)`
14007 THEN ABBREV_TAC`w'= pr2 (f3':real^3#real^3#real^3#real^3)`
14008 THEN ABBREV_TAC`E1'= E UNION {{v':real^3, w':real^3}}`
14009 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)`
14010 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)`
14011 THEN ABBREV_TAC`f10'= ((x,w',v',u'):real^3#real^3#real^3#real^3)`
14012 THEN ABBREV_TAC`f20'= ((x,v',u',w'):real^3#real^3#real^3#real^3)`
14013 THEN ABBREV_TAC`f30'= ((x,u',w',v'):real^3#real^3#real^3#real^3)`
14014 THEN STRIP_TAC
14015 THEN MRESA_TAC conforming_diagonal_fanadd1[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1':(real^3->bool)->bool)`;
14016 `ds:real^3#real^3#real^3#real^3->bool`; `(f1':real^3#real^3#real^3#real^3)` ;`(f2':real^3#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)`]
14017 THEN POP_ASSUM MP_TAC
14018 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14019 THEN ASM_REWRITE_TAC[]);;
14020
14021 let GGZWYRM=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14022 FAN(x,V,E)
14023  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14024 /\ fan80(x,V,E)
14025 /\ (!E1. FAN(x,V,E1)  /\
14026          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14027          fan80(x,V,E1)/\
14028          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14029 ==> conforming_diagonal_fan(x,V,E)`,
14030 REWRITE_TAC[conforming_diagonal_fan]
14031 THEN REPEAT GEN_TAC
14032 THEN STRIP_TAC
14033 THEN REPEAT GEN_TAC
14034 THEN STRIP_TAC
14035 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`]
14036 THEN MP_TAC(ARITH_RULE`3<= CARD (f:real^3#real^3#real^3#real^3->bool)==> CARD f=3 \/ CARD f>3`)
14037 THEN RESA_TAC
14038 THENL[
14039 POP_ASSUM MP_TAC
14040 THEN POP_ASSUM MP_TAC
14041 THEN POP_ASSUM MP_TAC
14042 THEN POP_ASSUM MP_TAC
14043 THEN POP_ASSUM MP_TAC
14044 THEN DISCH_THEN(LABEL_TAC"EM1")
14045 THEN DISCH_THEN(LABEL_TAC"EM2")
14046 THEN STRIP_TAC
14047 THEN STRIP_TAC
14048 THEN STRIP_TAC
14049 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`]
14050 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`]
14051 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`]
14052 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`]
14053 THEN REPEAT DISCH_TAC
14054 THEN REMOVE_THEN"EM1" MP_TAC
14055 THEN REMOVE_THEN"EM2" MP_TAC
14056 THEN RESA_TAC
14057 THEN RESA_TAC
14058 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)
14059 ==> (y=f1 /\ z= f2) \/ (y=f1 /\ z= f3) \/ (y=f2 /\ z= f1) \/ (y=f2 /\ z= f3)\/ (y=f3 /\ z= f1) \/ (y=f3 /\ z= f2)` )
14060 THEN RESA_TAC
14061 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14062 THEN ASM_REWRITE_TAC[];
14063 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`]
14064 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
14065 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
14066 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
14067 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
14068 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)`
14069 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)`
14070 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
14071 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
14072 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
14073 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)`;
14074 `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)`]
14075 ]);;
14076
14077 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.
14078 FAN(x,V,E)
14079  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14080 /\ fan80(x,V,E)
14081 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14082 /\ {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)
14083 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14084 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14085 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14086 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14087 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14088 /\ (x,w,v,u)=f10
14089 /\ (x,v,u,w)=f20
14090 /\ (x,u,w,v)=f30
14091 /\ E UNION {{v,w}}= E1
14092 /\ (!E1. FAN(x,V,E1)  /\
14093          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14094          fan80(x,V,E1)/\
14095          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14096 /\ U1=INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds}
14097 ==> U1 INTER aff {x, v, w} SUBSET aff_gt {x} {v, w}`,
14098 REPEAT STRIP_TAC
14099 THEN POP_ASSUM MP_TAC
14100 THEN DISCH_THEN(LABEL_TAC"EM")
14101 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14102 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14103 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)))`]
14104 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)))`]
14105 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)`;]
14106 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14107 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14108 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`]
14109 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`)
14110 THEN ASM_REWRITE_TAC[]
14111 THEN STRIP_TAC
14112 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14113 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14114 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14115 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14116 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14117 THEN DISCH_TAC
14118 THEN POP_ASSUM (fun th -> MP_TAC th
14119 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14120 THEN DISCH_TAC
14121 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
14122 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)`;
14123 `v:real^3`;`u:real^3`; `w:real^3` ]
14124 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1/\ {v,u} IN E ==> { v,u} IN E1`)
14125 THEN RESA_TAC
14126 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14127 THEN DISCH_TAC
14128 THEN POP_ASSUM (fun th -> MP_TAC th
14129 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14130 THEN DISCH_TAC
14131 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u:real^3`])
14132 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1 ==> {v,w:real^3} IN E1`)
14133 THEN RESA_TAC
14134 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14135 `(v:real^3)`]
14136 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`  (u:real^3)`;
14137 `v:real^3`]
14138 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`]
14139 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)`;
14140 `v:real^3`]
14141 THEN REMOVE_ASSUM_TAC
14142 THEN POP_ASSUM MP_TAC
14143 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14144 THEN STRIP_TAC
14145 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14146 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`]
14147 THEN POP_ASSUM MP_TAC
14148 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14149 THEN STRIP_TAC
14150 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`]
14151 THEN POP_ASSUM MP_TAC
14152 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14153 THEN DISCH_TAC
14154 THEN POP_ASSUM (fun th -> MP_TAC th
14155 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14156 THEN DISCH_TAC
14157 THEN POP_ASSUM (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`])
14158 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`]
14159 THEN POP_ASSUM MP_TAC
14160 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
14161 THEN STRIP_TAC
14162 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`;]
14163 THEN POP_ASSUM MP_TAC
14164 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
14165 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={A,C,B}`]
14166 THEN REWRITE_TAC[INTERS;INTER;SUBSET;IN_ELIM_THM]
14167 THEN REPEAT STRIP_TAC
14168 THENL[
14169 POP_ASSUM MP_TAC
14170 THEN POP_ASSUM MP_TAC
14171 THEN POP_ASSUM MP_TAC
14172 THEN DISCH_THEN(LABEL_TAC"LINH1")
14173 THEN SUBGOAL_THEN`(?y. y IN ds /\
14174            aff_gt {x, v, u} {sigma_fan x V E v u} =
14175            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y):real^3})`
14176 ASSUME_TAC
14177 THENL[
14178 EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
14179 THEN ASM_REWRITE_TAC[]
14180 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`]
14181 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3`]
14182 THEN POP_ASSUM (fun th-> MRESA1_TAC th`w:real^3`);
14183 STRIP_TAC
14184 THEN POP_ASSUM(fun th-> MRESA1_TAC th`aff_gt {x, v, u} {sigma_fan x V E v u:real^3}`)
14185 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`x':real^3`)];
14186
14187 POP_ASSUM MP_TAC
14188 THEN POP_ASSUM MP_TAC
14189 THEN POP_ASSUM MP_TAC
14190 THEN POP_ASSUM MP_TAC
14191 THEN DISCH_THEN(LABEL_TAC"LINH1")
14192 THEN STRIP_TAC
14193 THEN SUBGOAL_THEN `(?y. y IN ds /\
14194            aff_gt {x, u, w} {v} =
14195            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y):real^3})`
14196 ASSUME_TAC
14197 THENL[
14198 EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
14199 THEN ASM_REWRITE_TAC[]
14200 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`]
14201 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
14202 THENL[
14203 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14204 THEN EXISTS_TAC`x:real^3`
14205 THEN EXISTS_TAC`V:real^3->bool`
14206 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14207 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14208 THEN ASM_REWRITE_TAC[]
14209 THEN ASM_TAC
14210 THEN REWRITE_TAC[pr2;pr3]
14211 THEN REPEAT STRIP_TAC
14212 THEN ASM_REWRITE_TAC[]
14213 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14214 THEN EXISTS_TAC`x:real^3`
14215 THEN EXISTS_TAC`u:real^3`
14216 THEN EXISTS_TAC`w:real^3`
14217 THEN EXISTS_TAC`v:real^3`
14218 THEN ASM_REWRITE_TAC[];
14219 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14220 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14221 THEN REWRITE_TAC[f1_fan]
14222 THEN ASM_REWRITE_TAC[pr3]];
14223 STRIP_TAC
14224 THEN POP_ASSUM(fun th-> MRESA1_TAC th`aff_gt {x, u, w} {v:real^3}`)
14225 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th`x':real^3`)]]);;
14226
14227
14228 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.
14229 FAN(x,V,E)
14230  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14231 /\ fan80(x,V,E)
14232 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14233 /\ {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)
14234 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14235 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14236 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14237 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14238 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14239 /\ (x,w,v,u)=f10
14240 /\ (x,v,u,w)=f20
14241 /\ (x,u,w,v)=f30
14242 /\ E UNION {{v,w}}= E1
14243 /\ (!E1. FAN(x,V,E1)  /\
14244          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14245          fan80(x,V,E1)/\
14246          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14247 /\ INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y) } |  y IN ds} = U1
14248 /\ U= dartset_leads_into_fan x V E1 ds1 UNION dartset_leads_into_fan x V E1 ds2 UNION aff_gt {x} {v, w}
14249 ==> U1 SUBSET U`,
14250 REPEAT STRIP_TAC
14251 THEN POP_ASSUM MP_TAC
14252 THEN DISCH_THEN(LABEL_TAC"EM")
14253 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14254 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14255 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)))`]
14256 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)))`]
14257 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)`;]
14258 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14259 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14260 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`]
14261 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`)
14262 THEN ASM_REWRITE_TAC[]
14263 THEN STRIP_TAC
14264 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14265 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14266 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14267 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14268
14269 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)`;
14270 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
14271 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)`;
14272 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
14273 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)`;
14274 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
14275 THEN MRESA_TAC SPACE3_EQ_UNION_3SET
14276 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14277 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14278 THEN POP_ASSUM MP_TAC
14279 THEN POP_ASSUM MP_TAC
14280 THEN POP_ASSUM MP_TAC
14281 THEN POP_ASSUM MP_TAC
14282 THEN SET_TAC[]);;
14283
14284
14285
14286 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.
14287 FAN(x,V,E)
14288  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14289 /\ fan80(x,V,E)
14290 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14291 /\ {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)
14292 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14293 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14294 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14295 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14296 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14297 /\ (x,w,v,u)=f10
14298 /\ (x,v,u,w)=f20
14299 /\ (x,u,w,v)=f30
14300 /\ E UNION {{v,w}}= E1
14301 /\ (!E1. FAN(x,V,E1)  /\
14302          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14303          fan80(x,V,E1)/\
14304          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14305 ==> dartset_leads_into_fan x V E1 ds1 SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14306
14307 REPEAT STRIP_TAC
14308 THEN POP_ASSUM MP_TAC
14309 THEN DISCH_THEN(LABEL_TAC"EM")
14310 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14311 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14312 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)))`]
14313 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)))`]
14314 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)`;]
14315 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14316 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14317 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`]
14318 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`)
14319 THEN ASM_REWRITE_TAC[]
14320 THEN STRIP_TAC
14321 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14322 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14323 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
14324 THENL[
14325 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14326 THEN EXISTS_TAC`x:real^3`
14327 THEN EXISTS_TAC`V:real^3->bool`
14328 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14329 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14330 THEN ASM_REWRITE_TAC[]
14331 THEN ASM_TAC
14332 THEN REWRITE_TAC[pr2;pr3]
14333 THEN REPEAT STRIP_TAC
14334 THEN ASM_REWRITE_TAC[]
14335 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14336 THEN EXISTS_TAC`x:real^3`
14337 THEN EXISTS_TAC`u:real^3`
14338 THEN EXISTS_TAC`w:real^3`
14339 THEN EXISTS_TAC`v:real^3`
14340 THEN ASM_REWRITE_TAC[];
14341
14342 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14343 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14344 THEN REWRITE_TAC[f1_fan]
14345 THEN ASM_REWRITE_TAC[pr3]
14346 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14347 THEN REMOVE_ASSUM_TAC
14348 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14349 THEN POP_ASSUM MP_TAC
14350 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14351 THEN POP_ASSUM MP_TAC
14352 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14353 THEN ASM_REWRITE_TAC[]
14354 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14355 THEN STRIP_TAC
14356 THEN STRIP_TAC
14357 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`]
14358 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14359 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)`;
14360 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14361 THEN MRESA_TAC FANADD_CONFORMING[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14362 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14363 THEN POP_ASSUM MP_TAC
14364 THEN REWRITE_TAC[conforming_fan;conforming_half_space_fan]
14365 THEN REPEAT STRIP_TAC
14366 THEN REMOVE_ASSUM_TAC
14367 THEN REMOVE_ASSUM_TAC
14368 THEN POP_ASSUM(fun th-> MRESA1_TAC th`ds1:real^3#real^3#real^3#real^3->bool`)
14369 THEN MP_TAC(SET_RULE`dartset_leads_into_fan x V E1 ds1 =
14370       INTERS {aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E1 y)} | y IN ds1}
14371 ==> (!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})`)
14372 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
14373 THEN ASM_REWRITE_TAC[] THEN REWRITE_TAC[SYM th])
14374 THEN DISCH_THEN(LABEL_TAC"LINH")
14375 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E1 v w:real^3) IN ds1`ASSUME_TAC
14376 THENL[
14377
14378 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`
14379 THEN EXISTS_TAC`0`
14380 THEN ASM_REWRITE_TAC[ARITH_RULE`0>=0`;POWER;I_DEF];
14381 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]
14382 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]
14383 THEN POP_ASSUM MP_TAC
14384 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> {v, w} IN E1`)
14385 THEN RESA_TAC
14386 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
14387 THEN REMOVE_ASSUM_TAC
14388 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14389 THEN POP_ASSUM MP_TAC
14390 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14391 THEN POP_ASSUM MP_TAC
14392 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14393 THEN ASM_REWRITE_TAC[]
14394 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14395 THEN STRIP_TAC
14396 THEN STRIP_TAC
14397 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`]
14398 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14399 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14400 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14401 THEN MRESAL1_TAC th `(x,v,w,sigma_fan x V E1 v w:real^3)`[f1_fan;pr3;pr2])
14402 THEN POP_ASSUM MP_TAC
14403 THEN POP_ASSUM MP_TAC
14404 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14405 THEN REWRITE_TAC[fan80]
14406 THEN STRIP_TAC
14407 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E1 w v:real^3`])
14408 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`]
14409 THEN POP_ASSUM MP_TAC
14410 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14411 THEN RESA_TAC
14412 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`;]
14413 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;`(v:real^3)`;`w:real^3`]
14414 THEN POP_ASSUM MP_TAC
14415 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
14416 THEN RESA_TAC
14417 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`; ]
14418 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`;]
14419 THEN POP_ASSUM MP_TAC
14420 THEN DISCH_THEN(LABEL_TAC"CHANGE")
14421 THEN STRIP_TAC
14422 THEN REMOVE_THEN "CHANGE" MP_TAC
14423 THEN RESA_TAC
14424 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14425 THEN REWRITE_TAC[fan80]
14426 THEN STRIP_TAC
14427 THEN POP_ASSUM (fun th-> MRESA_TAC th[`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14428 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`]
14429 THEN POP_ASSUM MP_TAC
14430 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,D,B}`]
14431 THEN RESA_TAC
14432 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`;]
14433 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;`(u:real^3)`;`w:real^3`]
14434 THEN POP_ASSUM MP_TAC
14435 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
14436 THEN RESA_TAC
14437 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`; ]
14438 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`;]]]);;
14439
14440
14441
14442 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.
14443 FAN(x,V,E)
14444  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14445 /\ fan80(x,V,E)
14446 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14447 /\ {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)
14448 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14449 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14450 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14451 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14452 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14453 /\ (x,w,v,u)=f10
14454 /\ (x,v,u,w)=f20
14455 /\ (x,u,w,v)=f30
14456 /\ E UNION {{v,w}}= E1
14457 /\ (!E1. FAN(x,V,E1)  /\
14458          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14459          fan80(x,V,E1)/\
14460          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14461 ==> dartset_leads_into_fan x V E1 ds2 SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14462 REPEAT STRIP_TAC
14463 THEN POP_ASSUM MP_TAC
14464 THEN DISCH_THEN(LABEL_TAC"EM")
14465 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14466 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14467 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)))`]
14468 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)))`]
14469 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)`;]
14470 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14471 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14472 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`]
14473 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`)
14474 THEN ASM_REWRITE_TAC[]
14475 THEN STRIP_TAC
14476 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14477 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14478 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
14479 THENL[
14480 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14481 THEN EXISTS_TAC`x:real^3`
14482 THEN EXISTS_TAC`V:real^3->bool`
14483 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14484 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14485 THEN ASM_REWRITE_TAC[]
14486 THEN ASM_TAC
14487 THEN REWRITE_TAC[pr2;pr3]
14488 THEN REPEAT STRIP_TAC
14489 THEN ASM_REWRITE_TAC[]
14490 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14491 THEN EXISTS_TAC`x:real^3`
14492 THEN EXISTS_TAC`u:real^3`
14493 THEN EXISTS_TAC`w:real^3`
14494 THEN EXISTS_TAC`v:real^3`
14495 THEN ASM_REWRITE_TAC[];
14496
14497 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14498 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14499 THEN REWRITE_TAC[f1_fan]
14500 THEN ASM_REWRITE_TAC[pr3]
14501 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14502 THEN REMOVE_ASSUM_TAC
14503 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14504 THEN POP_ASSUM MP_TAC
14505 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14506 THEN POP_ASSUM MP_TAC
14507 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14508 THEN ASM_REWRITE_TAC[]
14509 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14510 THEN STRIP_TAC
14511 THEN STRIP_TAC
14512 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`]
14513 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14514 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14515 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14516 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)`;
14517 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14518 THEN MRESA_TAC card_ds2_fanadd_eq3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14519 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14520 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`]
14521 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14522 THEN MRESA_TAC reperentation_of_ds2[`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 REWRITE_TAC[SET_RULE`{pr2 y | y IN {f10, f20, f30}}={pr2 f10, pr2 f20, pr2 f30}`]
14525 THEN EXPAND_TAC"f10"
14526 THEN EXPAND_TAC"f20"
14527 THEN EXPAND_TAC"f30"
14528 THEN REWRITE_TAC[pr2]
14529 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14530 THEN DISCH_TAC
14531 THEN POP_ASSUM (fun th -> MP_TAC th
14532 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14533 THEN DISCH_TAC
14534 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"))
14535 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`]
14536 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`]
14537 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`]
14538 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14539 THEN MP_TAC(SET_RULE`{u,w} IN E/\ E UNION {{v, w:real^3}} = E1==>{v, w} IN E1 /\ {u,w} IN E1`)
14540 THEN RESA_TAC
14541 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)`;
14542 `v:real^3`;`u:real^3`; `w:real^3` ]
14543 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E1)`
14544 THEN DISCH_TAC
14545 THEN POP_ASSUM (fun th -> MP_TAC th
14546 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14547 THEN DISCH_TAC
14548 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`v:real^3`])
14549 THEN POP_ASSUM MP_TAC
14550 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14551 THEN RESA_TAC
14552 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`]
14553 THEN POP_ASSUM MP_TAC
14554 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14555 THEN RESA_TAC
14556 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (v:real^3)`;
14557 `(w:real^3)`]
14558 THEN POP_ASSUM MP_TAC
14559 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14560 THEN RESA_TAC
14561 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14562 `(u:real^3)`]
14563 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;`w:real^3`;`v:real^3`;`u: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 inter_aff_gt_3_1_is_aff_gt_2_2[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
14568 THEN POP_ASSUM MP_TAC
14569 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
14570 THEN RESA_TAC
14571 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14572 THEN ASM_REWRITE_TAC[SET_RULE`A INTER B INTER C= A INTER C INTER B`]
14573 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14574 THEN REMOVE_ASSUM_TAC
14575 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th;])
14576 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
14577 THENL[
14578 REWRITE_TAC[wedge;IN_ELIM_THM;SUBSET]
14579 THEN STRIP_TAC THEN STRIP_TAC
14580 THEN ASM_REWRITE_TAC[]
14581 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`)
14582 THEN RESA_TAC
14583 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`w:real^3`;`v:real^3`;`x':real^3`;`u:real^3`]
14584 THEN POP_ASSUM MP_TAC
14585 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14586 THEN RESA_TAC
14587 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`)
14588 THEN RESA_TAC
14589 THEN POP_ASSUM MP_TAC
14590 THEN POP_ASSUM MP_TAC
14591 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14592 THEN STRIP_TAC
14593 THEN STRIP_TAC
14594 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`]
14595 THEN POP_ASSUM MP_TAC
14596 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
14597 THEN RESA_TAC
14598 THEN MP_TAC(REAL_ARITH`azim x w v u < azim x w (inverse1_sigma_fan x V E w u) u
14599 /\ azim x w x' u < azim x w v u
14600 ==>
14601 azim x w x' u < azim x w (inverse1_sigma_fan x V E w u) u
14602 /\
14603 azim x w x' u <= azim x w (inverse1_sigma_fan x V E w u) (u:real^3)`)
14604 THEN RESA_TAC
14605 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`;
14606 `(w:real^3)`]
14607 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`]
14608 THEN POP_ASSUM MP_TAC
14609 THEN ONCE_REWRITE_TAC[SET_RULE`{B,C}={C,B}`]
14610 THEN RESA_TAC
14611 THEN MP_TAC(REAL_ARITH`azim x w (inverse1_sigma_fan x V E w u:real^3) u =
14612       azim x w (inverse1_sigma_fan x V E w u) x' + azim x w x' u
14613 /\ azim x w x' u < azim x w (inverse1_sigma_fan x V E w u) u
14614 /\ &0< azim x w x' u
14615 ==>
14616 &0 < azim x w (inverse1_sigma_fan x V E w u) x' /\
14617  azim x w (inverse1_sigma_fan x V E w u) x' <
14618  azim x w (inverse1_sigma_fan x V E w u) x' + azim x w x' u
14619 `)
14620 THEN ASM_REWRITE_TAC[];
14621 POP_ASSUM MP_TAC
14622 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`;
14623 `(w:real^3)`]
14624 THEN REMOVE_THEN "YEU EM"(fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14625 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`]
14626 THEN POP_ASSUM MP_TAC
14627 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14628 THEN RESA_TAC
14629 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`]
14630 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`]
14631 THEN POP_ASSUM MP_TAC
14632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
14633 THEN RESA_TAC
14634 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,C,A}`]
14635 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14636 THEN SET_TAC[]]]);;
14637
14638 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.
14639 FAN(x,V,E)
14640  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14641 /\ fan80(x,V,E)
14642 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14643 /\ {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)
14644 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14645 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14646 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14647 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14648 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14649 /\ (x,w,v,u)=f10
14650 /\ (x,v,u,w)=f20
14651 /\ (x,u,w,v)=f30
14652 /\ E UNION {{v,w}}= E1
14653 /\ (!E1. FAN(x,V,E1)  /\
14654          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14655          fan80(x,V,E1)/\
14656          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14657 ==> aff_gt {x} {v,w} SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14658 REPEAT STRIP_TAC
14659 THEN POP_ASSUM MP_TAC
14660 THEN DISCH_THEN(LABEL_TAC"EM")
14661 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14662 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14663 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)))`]
14664 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)))`]
14665 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)`;]
14666 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14667 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14668 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`]
14669 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`)
14670 THEN ASM_REWRITE_TAC[]
14671 THEN STRIP_TAC
14672 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14673 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14674 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
14675 THENL[
14676 MATCH_MP_TAC EQ_PAIR_IMP_EQ_4_FAN
14677 THEN EXISTS_TAC`x:real^3`
14678 THEN EXISTS_TAC`V:real^3->bool`
14679 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14680 THEN REWRITE_TAC[pr3;pr2;PAIR_EQ]
14681 THEN ASM_REWRITE_TAC[]
14682 THEN ASM_TAC
14683 THEN REWRITE_TAC[pr2;pr3]
14684 THEN REPEAT STRIP_TAC
14685 THEN ASM_REWRITE_TAC[]
14686 THEN ASM_REWRITE_TAC[d1_fan;IN_ELIM_THM]
14687 THEN EXISTS_TAC`x:real^3`
14688 THEN EXISTS_TAC`u:real^3`
14689 THEN EXISTS_TAC`w:real^3`
14690 THEN EXISTS_TAC`v:real^3`
14691 THEN ASM_REWRITE_TAC[];
14692
14693 FIND_ASSUM (fun th-> REWRITE_TAC[SYM th])`f1_fan (x:real^3) V E f2 = f3`
14694 THEN POP_ASSUM(fun th-> ONCE_REWRITE_TAC[th])
14695 THEN REWRITE_TAC[f1_fan]
14696 THEN ASM_REWRITE_TAC[pr3]
14697 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
14698 THEN REMOVE_ASSUM_TAC
14699 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14700 THEN POP_ASSUM MP_TAC
14701 THEN POP_ASSUM(fun th-> MRESA1_TAC th `u:real^3`)
14702 THEN POP_ASSUM MP_TAC
14703 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14704 THEN ASM_REWRITE_TAC[]
14705 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14706 THEN STRIP_TAC
14707 THEN STRIP_TAC
14708 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`]
14709 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
14710 THEN MP_TAC(SET_RULE` E UNION {{v, w:real^3}} = E1==> { v,w} IN E1`)
14711 THEN RESA_TAC
14712 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E1:(real^3->bool)->bool) `;` (w:real^3)`;
14713 `(v:real^3)`]
14714 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(v:real^3)`;`(w:real^3)`]
14715 THEN MATCH_MP_TAC(SET_RULE`A SUBSET B ==> C INTER A SUBSET B`)
14716 THEN MRESAL_TAC  AFF_GT_2_1[`x:real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
14717 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14718 THEN DISCH_TAC
14719 THEN POP_ASSUM (fun th -> MP_TAC th
14720 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14721 THEN DISCH_TAC
14722 THEN POP_ASSUM (fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])
14723 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`;
14724 `(w:real^3)`]
14725 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
14726 `(u:real^3)`]
14727 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`;]
14728 THEN POP_ASSUM MP_TAC
14729 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14730 THEN RESA_TAC
14731 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`]
14732 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]
14733 THEN POP_ASSUM MP_TAC
14734 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,B,C}`]
14735 THEN RESA_TAC
14736 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14737 THEN ASM_REWRITE_TAC[SUBSET;IN_ELIM_THM]
14738 THEN REPEAT STRIP_TAC
14739 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`]
14740 THEN MATCH_MP_TAC REAL_LT_MUL
14741 THEN ASM_REWRITE_TAC[]
14742 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`;]
14743 THEN POP_ASSUM MATCH_MP_TAC
14744 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
14745 THEN ASM_REWRITE_TAC[]
14746 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`)
14747 THEN RESA_TAC
14748 THEN MRESA_TAC inverse1_sigma_fan_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14749 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14750 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E1:(real^3->bool)->bool`;`w:real^3`]
14751 THEN REMOVE_ASSUM_TAC
14752 THEN POP_ASSUM(fun th-> MRESA1_TAC th `v:real^3`)
14753 THEN POP_ASSUM MP_TAC
14754 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
14755 THEN RESA_TAC
14756 THEN MRESA_TAC FAN80_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14757 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14758 THEN POP_ASSUM (fun th -> MP_TAC th
14759 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14760 THEN DISCH_TAC
14761 THEN POP_ASSUM (fun th-> MRESA_TAC th [`w:real^3`;`inverse1_sigma_fan x V E w u:real^3`])]);;
14762
14763
14764
14765 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.
14766 FAN(x,V,E)
14767  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14768 /\ fan80(x,V,E)
14769 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14770 /\ {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)
14771 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14772 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14773 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14774 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14775 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14776 /\ (x,w,v,u)=f10
14777 /\ (x,v,u,w)=f20
14778 /\ (x,u,w,v)=f30
14779 /\ E UNION {{v,w}}= E1
14780 /\ (!E1. FAN(x,V,E1)  /\
14781          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14782          fan80(x,V,E1)/\
14783          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14784 ==> dartset_leads_into_fan x V E ds SUBSET aff_gt {x, pr2 f3, pr3 f3} {pr3 (f1_fan x V E f3) }`,
14785
14786
14787
14788
14789
14790 REPEAT STRIP_TAC
14791 THEN POP_ASSUM MP_TAC
14792 THEN DISCH_THEN(LABEL_TAC"EM")
14793 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14794 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14795 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)))`]
14796 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)))`]
14797 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)`;]
14798 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14799 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14800 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`]
14801 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`)
14802 THEN ASM_REWRITE_TAC[]
14803 THEN STRIP_TAC
14804 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14805 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14806 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)`;
14807 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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
14808       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
14809       aff_gt {x} {v, w}:real^3->bool`]
14810 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE[`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 DART_FANADD_SUBSET_HALFSPACE1[`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)`;]
14814 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE2[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14815 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14816 THEN POP_ASSUM MP_TAC
14817 THEN POP_ASSUM MP_TAC
14818 THEN POP_ASSUM MP_TAC
14819 THEN SET_TAC[]);;
14820
14821 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.
14822 FAN(x,V,E)
14823  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14824 /\ fan80(x,V,E)
14825 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14826 /\ {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)
14827 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14828 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14829 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14830 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14831 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14832 /\ (x,w,v,u)=f10
14833 /\ (x,v,u,w)=f20
14834 /\ (x,u,w,v)=f30
14835 /\ E UNION {{v,w}}= E1
14836 /\ (!E1. FAN(x,V,E1)  /\
14837          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14838          fan80(x,V,E1)/\
14839          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14840 ==> 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}`,
14841
14842
14843 REPEAT GEN_TAC
14844 THEN STRIP_TAC
14845 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) })`]
14846 THEN REPEAT STRIP_TAC
14847 THEN MRESA_TAC INDUCTION_FANADD[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14848 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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`]
14849 THEN ABBREV_TAC`v'= pr2 (f1':real^3#real^3#real^3#real^3)`
14850 THEN ABBREV_TAC`u'= pr2 (f2':real^3#real^3#real^3#real^3)`
14851 THEN ABBREV_TAC`w'= pr2 (f3':real^3#real^3#real^3#real^3)`
14852 THEN ABBREV_TAC`E1'= E UNION {{v':real^3, w':real^3}}`
14853 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)`
14854 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)`
14855 THEN ABBREV_TAC`f10'= ((x,w',v',u'):real^3#real^3#real^3#real^3)`
14856 THEN ABBREV_TAC`f20'= ((x,v',u',w'):real^3#real^3#real^3#real^3)`
14857 THEN ABBREV_TAC`f30'= ((x,u',w',v'):real^3#real^3#real^3#real^3)`
14858 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE3[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1':(real^3->bool)->bool)`;
14859 `ds:real^3#real^3#real^3#real^3->bool`; `(f1':real^3#real^3#real^3#real^3)` ;`(f2':real^3#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)`]);;
14860
14861 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.
14862 FAN(x,V,E)
14863  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14864 /\ fan80(x,V,E)
14865 /\ ds IN face_set(hypermap1_of_fanx (x,V,E)) /\ CARD ds >3
14866 /\ {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)
14867 /\  pr2 f1 =v /\  pr2 f2 =u /\  pr2 f3=w
14868 /\ {v,u} IN E /\ {u,w} IN E /\ ~({w,v} IN E)
14869 /\ sigma_fan x V E u w = v /\ pr3 f1= u /\ pr3 f2= w
14870 /\ face (hypermap1_of_fanx (x,V,E1)) (x,v,w,sigma_fan x V E1 v w)= ds1
14871 /\ face (hypermap1_of_fanx (x,V,E1)) (x,w,v,sigma_fan x V E1 w v)=ds2
14872 /\ (x,w,v,u)=f10
14873 /\ (x,v,u,w)=f20
14874 /\ (x,u,w,v)=f30
14875 /\ E UNION {{v,w}}= E1
14876 /\ (!E1. FAN(x,V,E1)  /\
14877          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14878          fan80(x,V,E1)/\
14879          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14880 ==> 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}`,
14881 REPEAT STRIP_TAC
14882 THEN POP_ASSUM MP_TAC
14883 THEN DISCH_THEN(LABEL_TAC"EM")
14884 THEN MRESA_TAC STEP3_REDUCE_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; `(E1:(real^3->bool)->bool)`;
14885 `ds:real^3#real^3#real^3#real^3->bool`;`(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#real^3#real^3#real^3)`;`(f3:real^3#real^3#real^3#real^3)`;`v:real^3`;`u:real^3`; `w:real^3` ]
14886 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)))`]
14887 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)))`]
14888 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)`;]
14889 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
14890 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E1:(real^3->bool)->bool)`]
14891 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`]
14892 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`)
14893 THEN ASM_REWRITE_TAC[]
14894 THEN STRIP_TAC
14895 THEN MRESA_TAC YFANADD_AFF_GT[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14896 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)`;]
14897 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)`;
14898 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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
14899       dartset_leads_into_fan x (V:real^3->bool) E1 ds2 UNION
14900       aff_gt {x} {v, w}:real^3->bool`]
14901 THEN MRESA_TAC DART_FANADD_SUBSET_HALFSPACE4[`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 lemma_HYUAZSE
14904 [`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14905 `ds:real^3#real^3#real^3#real^3->bool`; `(f1:real^3#real^3#real^3#real^3)` ;`(f2:real^3#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)}`]
14906 THEN POP_ASSUM MP_TAC
14907 THEN POP_ASSUM MP_TAC
14908 THEN SET_TAC[]);;
14909
14910
14911 let HYUAZSE=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14912 FAN(x,V,E)
14913  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14914 /\ fan80(x,V,E)
14915 /\ (!E1. FAN(x,V,E1)  /\
14916          (!v. v IN V==>CARD (set_of_edge v V E1) > 1) /\
14917          fan80(x,V,E1)/\
14918          N_FAN(x,V,E1)< N_FAN(x,V,E) ==> conforming_fan (x,V,E1))
14919 ==> conforming_half_space_fan(x,V,E)`,
14920 REWRITE_TAC[conforming_half_space_fan]
14921 THEN REPEAT GEN_TAC
14922 THEN STRIP_TAC
14923 THEN REPEAT GEN_TAC
14924 THEN STRIP_TAC
14925 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`]
14926 THEN MP_TAC(ARITH_RULE`3<= CARD (f:real^3#real^3#real^3#real^3->bool)==> CARD f=3 \/ CARD f>3`)
14927 THEN RESA_TAC
14928 THENL[
14929 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`]
14930 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th);])
14931 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`]
14932 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}}
14933 = 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}`]
14934
14935 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
14936 THEN DISCH_TAC
14937 THEN POP_ASSUM (fun th -> MP_TAC th
14938 THEN REWRITE_TAC[fan80] THEN ASSUME_TAC th)
14939 THEN DISCH_TAC
14940 THEN POP_ASSUM (fun th -> MRESA_TAC th [`pr2 f2:real^3`;`pr2 f3:real^3`])
14941 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`]
14942 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`];
14943
14944
14945
14946 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`]
14947 THEN ABBREV_TAC`v= pr2 (f1:real^3#real^3#real^3#real^3)`
14948 THEN ABBREV_TAC`u= pr2 (f2:real^3#real^3#real^3#real^3)`
14949 THEN ABBREV_TAC`w= pr2 (f3:real^3#real^3#real^3#real^3)`
14950 THEN ABBREV_TAC`E1= E UNION {{v:real^3, w:real^3}}`
14951 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)`
14952 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)`
14953 THEN ABBREV_TAC`f10= ((x,w,v,u):real^3#real^3#real^3#real^3)`
14954 THEN ABBREV_TAC`f20= ((x,v,u,w):real^3#real^3#real^3#real^3)`
14955 THEN ABBREV_TAC`f30= ((x,u,w,v):real^3#real^3#real^3#real^3)`
14956 THEN MRESA_TAC DART_FANADD_EQ_HALFSPACE[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`; ` (E1:(real^3->bool)->bool)`;
14957 `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)`]]);;
14958
14959
14960
14961
14962
14963 let PIIJBJK=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
14964 FAN(x,V,E)
14965  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
14966 /\ fan80(x,V,E)
14967 ==> conforming_fan(x,V,E)`,
14968
14969 REPEAT STRIP_TAC
14970 THEN DISJ_CASES_TAC(SET_RULE`~(conforming_fan (x,V,E))\/ (conforming_fan (x:real^3,V,E))`)
14971 THENL[
14972 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)
14973 /\ fan80(x',V',E1) /\ ~(conforming_fan (x',V',E1))}`
14974 THEN ABBREV_TAC`n= (minimal) (S:num->bool)`
14975 THEN SUBGOAL_THEN`?y. y IN (S:num->bool)`ASSUME_TAC
14976 THENL[
14977 EXPAND_TAC"S"
14978 THEN REWRITE_TAC[IN_ELIM_THM]
14979 THEN EXISTS_TAC`(N_FAN(x:real^3,V,E))`
14980 THEN EXISTS_TAC`x:real^3`
14981 THEN EXISTS_TAC`V:real^3->bool`
14982 THEN EXISTS_TAC`E:(real^3->bool)->bool`
14983 THEN ASM_REWRITE_TAC[];
14984 POP_ASSUM MP_TAC
14985 THEN REWRITE_TAC[IN]
14986 THEN DISCH_TAC
14987 THEN MRESA1_TAC MINIMAL`S:num->bool`
14988 THEN SUBGOAL_THEN`n IN (S:num->bool)` ASSUME_TAC
14989 THENL[
14990 ASM_REWRITE_TAC[IN];
14991
14992 POP_ASSUM MP_TAC
14993 THEN EXPAND_TAC"S"
14994 THEN REWRITE_TAC[IN_ELIM_THM]
14995 THEN POP_ASSUM MP_TAC
14996 THEN DISCH_THEN(LABEL_TAC"LINHYEU")
14997 THEN STRIP_TAC
14998 THEN SUBGOAL_THEN`(!E2. FAN(x:real^3,V,E2)  /\
14999          (!v. v IN V==>CARD (set_of_edge v V E2) > 1) /\
15000          fan80(x,V,E2)/\
15001          N_FAN(x,V,E2)< N_FAN(x,V,E1) ==> conforming_fan (x,V,E2))
15002 `ASSUME_TAC
15003 THENL[
15004 REPEAT STRIP_TAC
15005 THEN REMOVE_THEN "LINHYEU"(fun th-> MRESA1_TAC th`N_FAN (x:real^3,V,E2)` )
15006 THEN MP_TAC(SET_RULE`~ (S (N_FAN (x:real^3,V,E2))) ==> ~(N_FAN (x,V,E2) IN S) `)
15007 THEN ASM_REWRITE_TAC[]
15008 THEN EXPAND_TAC"S"
15009 THEN REWRITE_TAC[IN_ELIM_THM;GSYM FORALL_NOT_THM;DE_MORGAN_THM]
15010 THEN STRIP_TAC
15011 THEN POP_ASSUM(fun th -> MRESA_TAC th[`x:real^3`;`V:real^3->bool`;`E2:(real^3->bool)->bool`]);
15012 MRESA_TAC nonconformin_fan_imp_n_fan_ge0[`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15013 THEN MRESA_TAC HYUAZSE[`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15014 THEN MRESA_TAC TXFBALB_VERSION
15015 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15016 THEN MRESA_TAC GGZWYRM
15017 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15018 THEN MRESA_TAC conforming_bijection_fanadd_verrion
15019 [`x':real^3`;`(V':real^3->bool)`;`(E1:(real^3->bool)->bool)`]
15020 THEN FIND_ASSUM MP_TAC`~conforming_fan (x':real^3,V',E1)`
15021 THEN REWRITE_TAC[conforming_fan]
15022 THEN ASM_REWRITE_TAC[conforming_bijection_fan]]]];
15023 ASM_REWRITE_TAC[]]);;
15024
15025
15026 let expand_xfan_eq_aff_gt_aff_ge=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15027 FAN(x,V,E)
15028  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15029 /\ fan80(x,V,E)
15030 ==> 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})`,
15031 REWRITE_TAC[UNIONS;UNION;]
15032 THEN ONCE_REWRITE_TAC[EXTENSION]
15033 THEN REWRITE_TAC[IN_ELIM_THM;]
15034 THEN REPEAT STRIP_TAC
15035 THEN EQ_TAC
15036 THENL[
15037 REPEAT STRIP_TAC
15038 THEN POP_ASSUM MP_TAC
15039 THEN POP_ASSUM MP_TAC
15040 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15041 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15042 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15043 `(v:real^3)`]
15044 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (w:real^3)`]
15045 THEN REWRITE_TAC[UNION]
15046 THEN RESA_TAC
15047 THEN REWRITE_TAC[IN_ELIM_THM]
15048 THEN STRIP_TAC
15049 THENL[
15050
15051
15052 SUBGOAL_THEN`(?u1. (?e. e IN E /\ u1 = aff_gt {x:real^3} e) /\ x' IN u1)`ASSUME_TAC
15053 THENL[
15054 EXISTS_TAC`aff_gt {x} {v, w:real^3}`
15055 THEN ASM_REWRITE_TAC[]
15056 THEN EXISTS_TAC`{v,w:real^3}`
15057 THEN ASM_REWRITE_TAC[];
15058 ASM_REWRITE_TAC[]];
15059
15060 SUBGOAL_THEN`(?u1. (?v. v IN V /\ u1 = aff_ge {x} {v:real^3}) /\ x' IN u1)` ASSUME_TAC
15061 THENL[
15062 EXISTS_TAC`aff_ge {x} {v:real^3}`
15063 THEN ASM_REWRITE_TAC[]
15064 THEN EXISTS_TAC`v:real^3`
15065 THEN ASM_REWRITE_TAC[];
15066 ASM_REWRITE_TAC[]];
15067
15068 SUBGOAL_THEN`(?u1. (?v. v IN V /\ u1 = aff_ge {x} {v:real^3}) /\ x' IN u1)` ASSUME_TAC
15069 THENL[
15070 EXISTS_TAC`aff_ge {x} {w:real^3}`
15071 THEN ASM_REWRITE_TAC[]
15072 THEN EXISTS_TAC`w:real^3`
15073 THEN ASM_REWRITE_TAC[]
15074 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
15075 `(w:real^3)`]
15076 THEN POP_ASSUM MP_TAC
15077 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15078 THEN RESA_TAC;
15079 ASM_REWRITE_TAC[]]];
15080
15081
15082 REPEAT STRIP_TAC
15083 THENL[
15084 POP_ASSUM MP_TAC
15085 THEN POP_ASSUM MP_TAC
15086 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15087 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15088 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15089 `(v:real^3)`]
15090 THEN RESA_TAC
15091 THEN RESA_TAC
15092 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3`]
15093 THEN MP_TAC(SET_RULE`x' IN aff_gt {x} {v, w} /\ aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w}
15094 ==> x' IN aff_ge {x:real^3} {v, w}`)
15095 THEN RESA_TAC
15096 THEN EXISTS_TAC`aff_ge {x:real^3} {v, w}`
15097 THEN ASM_REWRITE_TAC[]
15098 THEN EXISTS_TAC`{v,w:real^3}`
15099 THEN ASM_REWRITE_TAC[];
15100 POP_ASSUM MP_TAC
15101 THEN RESA_TAC
15102 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)`
15103 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15104 THEN STRIP_TAC
15105 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`]
15106 THEN REMOVE_ASSUM_TAC
15107 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;`v:real^3`]
15108 THEN POP_ASSUM MP_TAC
15109 THEN RESA_TAC
15110 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (u':real^3)`]
15111 THEN MP_TAC(SET_RULE`aff_ge {x} {v, u'} =
15112       aff_gt {x} {v, u'} UNION aff_ge {x} {v} UNION aff_ge {x} {u'}
15113 /\ x' IN aff_ge {x} {v}
15114 ==> x' IN aff_ge {x} {v, u':real^3} `)
15115 THEN RESA_TAC
15116 THEN EXISTS_TAC`aff_ge {x} {v, u':real^3}`
15117 THEN ASM_REWRITE_TAC[]
15118 THEN EXISTS_TAC`{v,u':real^3}`
15119 THEN ASM_REWRITE_TAC[]]]);;
15120
15121
15122
15123 let properties12_fan7=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15124 FAN(x,V,E)
15125  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15126 /\ fan80(x,V,E)
15127 ==> (UNIONS {aff_gt {x} e | e IN E}) INTER (UNIONS {aff_ge {x} {v}| v IN V})={}`,
15128
15129 REWRITE_TAC[SET_RULE`A={} <=> ~(?y. y IN A)`;IN_ELIM_THM;UNIONS;INTER]
15130 THEN REPEAT STRIP_TAC
15131 THEN POP_ASSUM MP_TAC
15132 THEN POP_ASSUM MP_TAC
15133 THEN POP_ASSUM MP_TAC
15134 THEN POP_ASSUM MP_TAC
15135 THEN POP_ASSUM MP_TAC
15136 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
15137 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
15138 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15139 `(v':real^3)`]
15140 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v':real^3)`;` (w:real^3)`]
15141 THEN POP_ASSUM (fun th-> MP_TAC(SYM th) THEN STRIP_TAC)
15142 THEN RESA_TAC
15143 THEN RESA_TAC
15144 THEN REPEAT STRIP_TAC
15145 THEN POP_ASSUM MP_TAC
15146 THEN RESA_TAC
15147 THEN POP_ASSUM MP_TAC
15148 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)`
15149 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15150 THEN STRIP_TAC
15151 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`]
15152 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u'':real^3)`;`v:real^3`]
15153 THEN POP_ASSUM MP_TAC
15154 THEN RESA_TAC
15155 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15156 THEN REWRITE_TAC[IN_ELIM_THM]
15157 THEN STRIP_TAC
15158 THEN SUBGOAL_THEN `v IN aff_gt {x} {v',w:real^3}` ASSUME_TAC
15159 THENL(*1*)[
15160 MRESA_TAC AFF_GT_1_2[`x:real^3`;`v':real^3`;`w:real^3`]
15161 THEN FIND_ASSUM MP_TAC`y IN aff_gt {x} {v', w:real^3}`
15162 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;IN_ELIM_THM])
15163 THEN RESA_TAC
15164 THEN MP_TAC(REAL_ARITH`&0 <= t2==> t2= &0 \/ &0 < t2`)
15165 THEN RESA_TAC
15166 THENL(*2*)[
15167 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th; REAL_ARITH`A+ &0=A`] THEN REPEAT STRIP_TAC)
15168 THEN POP_ASSUM MP_TAC
15169 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'  `]
15170 THEN FIND_ASSUM MP_TAC`~(w IN aff {x, v':real^3})`
15171 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15172 THEN MP_TAC(REAL_ARITH`&0< t3==> ~(t3= &0)`)
15173 THEN RESA_TAC
15174 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
15175 THEN REPEAT STRIP_TAC
15176 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)`)
15177 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15178 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`]
15179 THEN STRIP_TAC
15180 THEN SUBGOAL_THEN`?u1 v1. u1 + v1 = &1 /\ w = u1 % x + v1 % v':real^3` ASSUME_TAC
15181 THENL(*3*)[
15182 EXISTS_TAC`inv t3 * (t3 + t2'):real`
15183 THEN EXISTS_TAC`(inv t3 * --t2'):real`
15184 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3 * (t3 + t2') + inv t3 * --t2'= inv t3 * t3 `];(*3*)
15185
15186
15187 POP_ASSUM MP_TAC
15188 THEN ASM_REWRITE_TAC[]](*2*);
15189
15190 POP_ASSUM MP_TAC
15191 THEN POP_ASSUM MP_TAC
15192 THEN DISCH_THEN(LABEL_TAC"A")
15193 THEN STRIP_TAC
15194 THEN REMOVE_THEN "A" MP_TAC
15195 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v = t1' % x + t2' % v' + t3 % w
15196 <=> t2 % v = (t1'- t1) % x + t2' % v' + t3 % w`]
15197 THEN MP_TAC(REAL_ARITH`&0< t2 ==> ~(t2= &0)`)
15198 THEN RESA_TAC
15199 THEN MRESA1_TAC REAL_MUL_LINV`t2:real`
15200 THEN STRIP_TAC
15201 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)`)
15202 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15203 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`]
15204 THEN STRIP_TAC
15205 THEN MP_TAC(ISPEC`(t2:real)`REAL_LT_INV)
15206 THEN RESA_TAC
15207 THEN MP_TAC(ISPECL[`inv (t2:real)`;`(t2':real)`]REAL_LT_MUL)
15208 THEN RESA_TAC
15209 THEN MP_TAC(ISPECL[`inv (t2:real)`;`(t3:real)`]REAL_LT_MUL)
15210 THEN RESA_TAC
15211 THEN EXISTS_TAC`(inv t2 * (t1' - t1)):real`
15212 THEN EXISTS_TAC`(inv t2 * t2'):real`
15213 THEN EXISTS_TAC`(inv t2 * t3):real`
15214 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2 * (t1' - t1) + inv t2 * t2' + inv t2 * t3
15215 = inv t2 * (t2+(t1'+t2'+t3)- (t1+t2))`;REAL_ARITH`A+ &1 - &1=A`]];(*1*)
15216
15217 MP_TAC(SET_RULE`v IN aff_gt {x} {v', w} /\ aff_ge {x} {v', w} =
15218       aff_gt {x} {v', w} UNION aff_ge {x} {v'} UNION aff_ge {x} {w}
15219 ==> v IN aff_ge {x} {v', w:real^3}`)
15220 THEN RESA_TAC
15221 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)
15222 THEN RESA_TAC
15223 THENL[
15224
15225 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[SYM th] THEN REPEAT STRIP_TAC)
15226 THEN REMOVE_ASSUM_TAC
15227 THEN POP_ASSUM MP_TAC
15228 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
15229 THEN STRIP_TAC
15230 THEN POP_ASSUM MP_TAC
15231 THEN REWRITE_TAC[VECTOR_ARITH`v = t1' % x + t2' % v + t3 % w
15232 <=> t3 % w = (--t1') % x +(&1 - t2') % v`]
15233 THEN MP_TAC(REAL_ARITH`&0< t3==> ~(t3= &0)`)
15234 THEN RESA_TAC
15235 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
15236 THEN REPEAT STRIP_TAC
15237 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)`)
15238 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15239 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`]
15240 THEN STRIP_TAC
15241 THEN FIND_ASSUM MP_TAC`~(w IN aff {x, v:real^3})`
15242 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15243 THEN EXISTS_TAC`(inv t3 * --t1'):real`
15244 THEN EXISTS_TAC`(inv t3 * (&1 - t2')):real`
15245 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`];
15246 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
15247 THEN REMOVE_ASSUM_TAC
15248 THEN POP_ASSUM MP_TAC
15249 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v':real^3`;`w:real^3`][IN_ELIM_THM]
15250 THEN STRIP_TAC
15251 THEN POP_ASSUM MP_TAC
15252 THEN REWRITE_TAC[VECTOR_ARITH`w = t1' % x + t2' % v + t3 % w
15253 <=> (t2') % v = (--t1') % x +(&1 - t3) % w`]
15254 THEN MP_TAC(REAL_ARITH`&0< t2' ==> ~(t2'= &0)`)
15255 THEN RESA_TAC
15256 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
15257 THEN REPEAT STRIP_TAC
15258 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)`)
15259 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15260 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`]
15261 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
15262 `(w:real^3)`]
15263 THEN POP_ASSUM MP_TAC
15264 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15265 THEN RESA_TAC
15266 THEN STRIP_TAC
15267 THEN FIND_ASSUM MP_TAC`~(v' IN aff {w,x:real^3})`
15268 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
15269 THEN EXISTS_TAC`(inv t2' * (&1 - t3)):real`
15270 THEN EXISTS_TAC`(inv t2' * --t1'):real`
15271 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`]]]);;
15272
15273
15274 let yfan_union_aff_gt_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool).
15275 FAN(x,V,E)
15276  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15277 /\ fan80(x,V,E)
15278 ==> yfan(x,V,E) UNION (UNIONS {aff_gt {x} e | e IN E}) = (:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})`,
15279
15280 REPEAT STRIP_TAC
15281 THEN REWRITE_TAC[yfan;XFAN_EQ_UNIONS_AFF_GE_1_2;]
15282 THEN MRESA_TAC expand_xfan_eq_aff_gt_aff_ge[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
15283 THEN MRESA_TAC  properties12_fan7[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
15284 THEN POP_ASSUM MP_TAC
15285 THEN SET_TAC[]);;
15286
15287
15288 let exists_point_in_dartset_leads_into_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) ds.
15289 FAN(x,V,E)
15290  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15291 /\ fan80(x,V,E)
15292 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15293 ==> ?y. y IN dartset_leads_into_fan x V E ds`,
15294 REPEAT STRIP_TAC
15295 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`]
15296 THEN POP_ASSUM MP_TAC
15297 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15298 THEN RESA_TAC
15299 THEN EXISTS_TAC`y:real^3`
15300 THEN MRESA_TAC CONNECTED_COMPONENT_REFL[`yfan(x:real^3,V:real^3->bool,E)`;`y:real^3`]
15301 THEN ASM_REWRITE_TAC[IN]);;
15302
15303
15304
15305
15306 let NEGLIGIBLE_AFF_3_FAN=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) z:real^3.
15307 FAN (x,V,E) ==>  negligible (UNIONS {aff {x, z, v} | v IN V} )`,
15308
15309 REPEAT STRIP_TAC
15310 THEN POP_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan1] THEN STRIP_TAC THEN ASSUME_TAC th)
15311 THEN MATCH_MP_TAC NEGLIGIBLE_UNIONS
15312 THEN MRESAL_TAC FINITE_IMAGE[`(\e:real^3. aff {x:real^3,z:real^3,e})`;`V:(real^3->bool)`][IMAGE]
15313 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])
15314 THENL[
15315 REWRITE_TAC[EXTENSION;IN_ELIM_THM];
15316 REWRITE_TAC[IN_ELIM_THM]
15317 THEN REPEAT STRIP_TAC
15318 THEN ASM_REWRITE_TAC[NEGLIGIBLE_AFF_3]]);;
15319
15320
15321
15322
15323 let MEASURE_AFF_3_FAN=prove(`!x:real^3 V:real^3->bool E:(real^3->bool)->bool z:real^3.
15324 FAN (x,V,E) ==>  measure (UNIONS {aff {x, z, v} | v IN V})= &0`,
15325 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
15326 THEN POP_ASSUM MP_TAC
15327 THEN MESON_TAC[NEGLIGIBLE_AFF_3_FAN]);;
15328
15329
15330 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.
15331 FAN (x,V,E) ==>
15332 negligible ((UNIONS {aff {x, z, v} | v IN V} ) INTER normball y r)`,
15333 REPEAT STRIP_TAC
15334 THEN MATCH_MP_TAC NEGLIGIBLE_SUBSET
15335 THEN EXISTS_TAC `(UNIONS {aff {x, z, v:real^3} | v IN V} )`
15336 THEN ASM_SIMP_TAC[ SET_RULE`A INTER B SUBSET A`]
15337 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_3_FAN;]);;
15338
15339
15340 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.
15341 FAN (x,V,E) ==>  measure (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)= &0`,
15342 REPEAT STRIP_TAC THEN MATCH_MP_TAC MEASURE_EQ_0
15343 THEN POP_ASSUM MP_TAC
15344 THEN MESON_TAC[NEGLIGIBLE_AFF_3_UNION_INTER_BALL]);;
15345
15346
15347 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.
15348 FAN (x,V,E) ==>  (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)  has_measure  &0`,
15349 REPEAT STRIP_TAC
15350 THEN ASM_MESON_TAC[NEGLIGIBLE_AFF_3_UNION_INTER_BALL;HAS_MEASURE_0]);;
15351
15352
15353
15354 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.
15355 FAN (x,V,E) ==>    measurable (UNIONS {aff {x, z, v} | v IN V} INTER normball y r)`,
15356 REPEAT STRIP_TAC
15357 THEN ASM_SIMP_TAC[measurable;]
15358 THEN EXISTS_TAC`&0`
15359 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`]
15360 );;
15361
15362
15363 let measure_ball_diff_set_negligible=prove(`!x:real^3 V E z y r.
15364 FAN(x,V,E)/\ &0<= r
15365 ==> measure ( (normball y r) DIFF (UNIONS {aff {x,z,v}| v IN V}))= &4/ &3 *pi *r pow 3`,
15366 REPEAT STRIP_TAC
15367 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`]
15368 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`]
15369
15370 THEN MRESA_TAC VOLUME_BALL[`y:real^3`;`r:real`]
15371 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`]
15372 THEN ASM_SIMP_TAC[VOLUME_BALL;]
15373 THEN REAL_ARITH_TAC);;
15374
15375
15376
15377 let exists_measure_ball_diff_set_negligible=prove(`!x:real^3 V E y z r.
15378 FAN(x,V,E)/\ &0< r
15379 ==> ?a. a IN (normball y r) DIFF (UNIONS {aff {x,z,v}| v IN V})`,
15380 REPEAT STRIP_TAC
15381 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})`)
15382 THENL[
15383 MP_TAC(REAL_ARITH`&0<r ==> &0<= r`)
15384 THEN RESA_TAC
15385 THEN
15386 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; ]
15387 THEN POP_ASSUM MP_TAC
15388 THEN REWRITE_TAC[SET_RULE`A=B <=> B=A`;REAL_ENTIRE;REAL_ARITH`~(&4/ &3 = &0)`;]
15389 THEN MP_TAC(REAL_ARITH`&0< pi ==> ~(pi= &0)`)
15390 THEN ASM_REWRITE_TAC[PI_WORKS;]
15391 THEN RESA_TAC
15392 THEN MP_TAC(REAL_ARITH`&0< r ==> ~(r= &0)`)
15393 THEN RESA_TAC
15394 THEN RESA_TAC
15395 THEN  MRESA_TAC REAL_POW_EQ_0[`r:real`;`3`];
15396 ASM_REWRITE_TAC[]]);;
15397
15398
15399
15400 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.
15401 FAN(x,V,E)
15402 /\ conforming_fan (x,V,E)
15403  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15404 /\ fan80(x,V,E)
15405 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15406 /\ ds1 IN face_set(hypermap1_of_fanx (x,V,E))
15407 /\ Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})
15408 ==> ?y z. y IN dartset_leads_into_fan x V E ds
15409 /\ z IN dartset_leads_into_fan x V E ds1
15410 /\ segment[y,z] SUBSET Z `,
15411 REPEAT STRIP_TAC
15412 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`]
15413 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`]
15414 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`]
15415 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`]
15416 THEN POP_ASSUM MP_TAC
15417 THEN REWRITE_TAC[open_def]
15418 THEN STRIP_TAC
15419 THEN POP_ASSUM(fun th-> MRESA1_TAC th`y:real^3`)
15420 THEN POP_ASSUM MP_TAC
15421 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]
15422 THEN POP_ASSUM MP_TAC
15423 THEN DISCH_THEN(LABEL_TAC"LINH")
15424 THEN STRIP_TAC
15425 THEN POP_ASSUM(fun th-> MRESA1_TAC th`a:real^3`)
15426 THEN EXISTS_TAC`a:real^3`
15427 THEN EXISTS_TAC`y':real^3`
15428 THEN ASM_REWRITE_TAC[segment;SUBSET;IN_ELIM_THM;SET_RULE`(x:real^3) IN (:real^3)`]
15429 THEN REPEAT STRIP_TAC
15430 THEN REMOVE_THEN "LINH" MP_TAC
15431 THEN POP_ASSUM MP_TAC
15432 THEN ASM_REWRITE_TAC[UNIONS;IN_ELIM_THM]
15433 THEN REPEAT STRIP_TAC
15434 THEN EXISTS_TAC`aff{x,y',v:real^3}`
15435 THEN STRIP_TAC
15436 THENL(*1*)[
15437 EXISTS_TAC`v:real^3`
15438 THEN ASM_REWRITE_TAC[];(*1*)
15439 POP_ASSUM MP_TAC
15440 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)`
15441 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
15442 THEN STRIP_TAC
15443 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`]
15444 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u'':real^3)`;`v:real^3`]
15445 THEN POP_ASSUM MP_TAC
15446 THEN RESA_TAC
15447 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15448 THEN ASM_REWRITE_TAC[aff;AFFINE_HULL_3;IN_ELIM_THM]
15449 THEN STRIP_TAC
15450 THEN POP_ASSUM MP_TAC
15451 THEN MP_TAC(REAL_ARITH`u <= &1 ==> u= &1 \/ &0< (&1 -u)`)
15452 THEN RESA_TAC
15453 THENL(*2*)[
15454
15455 REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % a + &1 % y'=y'`]
15456 THEN STRIP_TAC
15457 THEN SUBGOAL_THEN`y' IN xfan(x:real^3,V:real^3->bool,E)` ASSUME_TAC
15458 THENL(*3*)[
15459 REWRITE_TAC[XFAN_EQ_UNIONS_AFF_GE_1_2;UNIONS;IN_ELIM_THM]
15460 THEN EXISTS_TAC`aff_ge {x} {v,u'':real^3}`
15461 THEN STRIP_TAC
15462 THENL(*4*)[
15463
15464 EXISTS_TAC`{v,u'':real^3}`
15465 THEN ASM_REWRITE_TAC[];(*4*)
15466 MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`u'':real^3`][IN_ELIM_THM]
15467 THEN EXISTS_TAC`t1:real`
15468 THEN EXISTS_TAC`t2:real`
15469 THEN EXISTS_TAC`&0:real`
15470 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*)
15471
15472 POP_ASSUM MP_TAC
15473 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`]
15474 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)`)
15475 THEN RESA_TAC
15476 THEN POP_ASSUM MP_TAC
15477 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
15478 THEN SET_TAC[]](*3*);(*2*)
15479
15480 MP_TAC(REAL_ARITH`&0< &1- u ==> ~((&1- u)= &0)`)
15481 THEN RESA_TAC
15482 THEN MRESA1_TAC REAL_MUL_LINV`&1- u:real`
15483 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - u) % a + u % y' = t1 % x + t2 % v <=>
15484 (&1 - u) % a = t1 % x + (--u) % y' + t2 % v`]
15485 THEN REPEAT STRIP_TAC
15486 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)`)
15487 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15488 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`]
15489 THEN STRIP_TAC
15490 THEN EXISTS_TAC`inv (&1 - u) * t1:real`
15491 THEN EXISTS_TAC`inv (&1 - u) * --u:real`
15492 THEN EXISTS_TAC`inv (&1 - u) * t2:real`
15493 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - u) * t1 + inv (&1 - u) * --u + inv (&1 - u) * t2=
15494 inv (&1 - u) * ((t1+t2)- u)`]]]);;
15495
15496
15497
15498 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.
15499 FAN(x,V,E)
15500
15501 /\ conforming_fan (x,V,E)
15502  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15503 /\ fan80(x,V,E)
15504 /\ ~(E={})
15505 /\ ds IN face_set (hypermap1_of_fanx (x,V,E))
15506 /\ y IN dartset_leads_into_fan x V E ds
15507 ==> aff_gt {x} {y}  SUBSET dartset_leads_into_fan x V E ds`,
15508 REPEAT STRIP_TAC
15509 THEN POP_ASSUM MP_TAC
15510 THEN DISCH_THEN(LABEL_TAC"YEU")
15511 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`]
15512 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`]
15513 THEN MRESAL_TAC AFF_GT_1_1[`x:real^3`;`y:real^3`][SET_RULE`DISJOINT {x} {y} <=> ~(x=y)`]
15514 THEN REMOVE_THEN"YEU" MP_TAC
15515 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15516 THEN REWRITE_TAC[conforming_fan;conforming_half_space_fan]
15517 THEN STRIP_TAC
15518 THEN REMOVE_ASSUM_TAC
15519 THEN REMOVE_ASSUM_TAC
15520 THEN POP_ASSUM(fun th-> MRESA1_TAC th `ds:real^3#real^3#real^3#real^3->bool`)
15521 THEN REWRITE_TAC[INTERS;IN_ELIM_THM;SUBSET]
15522 THEN DISCH_THEN(LABEL_TAC"LINH")
15523 THEN REPEAT STRIP_TAC
15524 THEN ASM_REWRITE_TAC[]
15525 THEN SUBGOAL_THEN`(?y. y IN ds /\
15526            aff_gt {x:real^3, pr2 y', pr3 y'} {pr3 (f1_fan x V E y')} =
15527            aff_gt {x, pr2 y, pr3 y} {pr3 (f1_fan x V E y)})` ASSUME_TAC
15528 THENL[
15529 EXISTS_TAC`y':real^3#real^3#real^3#real^3`
15530 THEN ASM_REWRITE_TAC[];
15531 REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th`u:real^3->bool`)
15532 THEN POP_ASSUM MP_TAC
15533 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)))`]
15534 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15535 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`]
15536 THEN MP_TAC(SET_RULE`y' IN ds /\ ds SUBSET d1_fan (x:real^3,V,E)==> y' IN d1_fan(x,V,E)`)
15537 THEN RESA_TAC
15538 THEN POP_ASSUM MP_TAC
15539 THEN REWRITE_TAC[d1_fan;IN_ELIM_THM]
15540 THEN RESA_TAC
15541 THEN REWRITE_TAC[pr2;pr3;f1_fan]
15542 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`]
15543 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15544 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
15545 THEN REWRITE_TAC[fan80]
15546 THEN DISCH_TAC
15547 THEN POP_ASSUM (fun th-> MRESA_TAC th [`v:real^3`;`w:real^3`])
15548 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
15549 `(v:real^3)`]
15550 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`]
15551 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)`]
15552 THEN POP_ASSUM MP_TAC
15553 THEN RESA_TAC
15554 THEN POP_ASSUM MP_TAC
15555 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15556 THEN ASM_REWRITE_TAC[]
15557 THEN STRIP_TAC
15558 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`]
15559 THEN POP_ASSUM MP_TAC
15560 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
15561 THEN ASM_REWRITE_TAC[]
15562 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
15563 THEN RESA_TAC
15564 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`]
15565 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]
15566 THEN STRIP_TAC
15567 THEN MATCH_MP_TAC REAL_LT_MUL
15568 THEN ASM_REWRITE_TAC[]]);;
15569
15570
15571 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 .
15572 FAN(x,V,E)
15573 /\ conforming_fan (x,V,E)
15574  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15575 /\ fan80(x,V,E)
15576 /\ ds IN face_set(hypermap1_of_fanx (x,V,E))
15577 /\ ds1 IN face_set(hypermap1_of_fanx (x,V,E))
15578 /\ Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v}| v IN V})
15579 /\ y IN dartset_leads_into_fan x V E ds
15580 /\ z IN dartset_leads_into_fan x V E ds1
15581 /\ ~(x=y) /\ ~(x=z)
15582 /\ segment[y,z] SUBSET Z
15583 ==> aff_gt {x} {y,z} SUBSET Z`,
15584 REWRITE_TAC[segment;SUBSET;IN_ELIM_THM]
15585 THEN REPEAT STRIP_TAC
15586 THEN POP_ASSUM MP_TAC
15587 THEN POP_ASSUM MP_TAC
15588 THEN DISCH_THEN(LABEL_TAC"LINH")
15589 THEN FIND_ASSUM(fun th-> MP_TAC th THEN REWRITE_TAC[FAN;fan2] THEN STRIP_TAC)`FAN(x:real^3,V,E)`
15590 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]
15591 THEN STRIP_TAC
15592 THEN STRIP_TAC
15593 THEN POP_ASSUM MP_TAC
15594 THEN ASM_REWRITE_TAC[]
15595 THEN MP_TAC(SET_RULE`~(x IN V) /\ v IN V==> ~(x=v:real^3)`)
15596 THEN RESA_TAC
15597 THEN MRESA_TAC AFF_GE_1_1[`x:real^3`;`v:real^3`]
15598 THEN REWRITE_TAC[IN_ELIM_THM]
15599 THEN STRIP_TAC
15600 THEN POP_ASSUM MP_TAC
15601 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % y + t3 % z = t1' % x + t2' % v
15602 <=> t2 % y + t3 % z = (t1' - t1) % x + t2' % v`]
15603 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0 < t3 ==> &0 < t2+ t3 /\ &0 <= t2+ t3 /\ ~(t2 +t3= &0)`)
15604 THEN RESA_TAC
15605 THEN MRESA1_TAC REAL_MUL_LINV`t2+t3:real`
15606 THEN STRIP_TAC
15607 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)`)
15608 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
15609 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`]
15610 THEN STRIP_TAC
15611 THEN ABBREV_TAC`v123= (inv (t2 + t3) * (t1' - t1)) % x + (inv (t2 + t3) * t2') % v:real^3`
15612 THEN SUBGOAL_THEN`v123 IN aff_ge {x} {v:real^3}` ASSUME_TAC
15613 THENL[
15614 ASM_REWRITE_TAC[IN_ELIM_THM]
15615 THEN EXISTS_TAC`(inv (t2 + t3) * (t1' - t1)):real`
15616 THEN EXISTS_TAC`(inv (t2 + t3) * t2'):real`
15617 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 + t3) * (t1' - t1) + inv (t2 + t3) * t2'
15618 = inv (t2 + t3) * ((t2+ t3)+ (t1'+ t2') - (t1+ t2+t3))`; REAL_ARITH`A + &1 - &1= A`]
15619 THEN MATCH_MP_TAC REAL_LE_MUL
15620 THEN ASM_REWRITE_TAC[]
15621 THEN MRESA1_TAC REAL_LE_INV`t2+ t3`;
15622
15623 SUBGOAL_THEN`(?u. (&0 <= u /\ u <= &1) /\ v123 = (&1 - u) % y + u % z:real^3)` ASSUME_TAC
15624 THENL[
15625 EXISTS_TAC`(inv (t2 + t3) * t3)`
15626 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`]
15627 THEN MRESA1_TAC REAL_LT_INV`t2+t3`
15628 THEN MP_TAC(REAL_ARITH`&0 < inv (t2 + t3) /\ &0< t2 /\ &0< t3 ==> &0 <= inv (t2 + t3) /\ &0<= t2 /\ &0<= t3`)
15629 THEN RESA_TAC
15630 THEN STRIP_TAC
15631 THEN MATCH_MP_TAC REAL_LE_MUL
15632 THEN ASM_REWRITE_TAC[];
15633 REMOVE_THEN "LINH"(fun th-> MRESAL1_TAC th`v123:real^3`[DIFF;IN_ELIM_THM;UNIONS])
15634 THEN POP_ASSUM MP_TAC
15635 THEN REWRITE_TAC[]
15636 THEN EXISTS_TAC`aff_ge {x} {v:real^3}`
15637 THEN ASM_REWRITE_TAC[]
15638 THEN EXISTS_TAC`v:real^3`
15639 THEN ASM_REWRITE_TAC[]]]);;
15640
15641 let aff_gt_1_2_subset_aff_1_3111=prove(`!x y z v u w:real^3.
15642 ~coplanar {x,v,u,w}
15643 /\ y IN aff_gt {x} {v,u}
15644 /\ z IN aff_gt {x} {v,w}
15645 ==> aff_gt {x} {y,z} SUBSET aff_gt {x} {v,u,w}`,
15646 REPEAT STRIP_TAC
15647 THEN POP_ASSUM MP_TAC
15648 THEN POP_ASSUM MP_TAC
15649 THEN DISCH_THEN(LABEL_TAC"LINH")
15650 THEN DISCH_THEN(LABEL_TAC"LINH1")
15651 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15652 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
15653 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
15654 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`u:real^3`;`y:real^3`]
15655 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`w:real^3`;`z:real^3`]
15656 THEN MRESA_TAC th3[`x:real^3`;`y:real^3`;`v:real^3`]
15657 THEN MRESA_TAC th3[`x:real^3`;`z:real^3`;`v:real^3`]
15658 THEN REMOVE_THEN "LINH" MP_TAC
15659 THEN REMOVE_THEN "LINH1" MP_TAC
15660 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`u:real^3`][IN_ELIM_THM]
15661 THEN MRESAL_TAC AFF_GT_1_2[`x:real^3`;`v:real^3`;`w:real^3`][IN_ELIM_THM]
15662 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)`]
15663 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]
15664 THEN REPEAT RESA_TAC
15665 THEN REWRITE_TAC[VECTOR_ARITH`    t1'' % x +
15666       t2'' % (t1' % x + t2' % v + t3' % u) +
15667       t3'' % (t1 % x + t2 % v + t3 % w)
15668 =      (t1''+ t2''* t1'+ t3'' *t1) % x +
15669         (t2'' * t2'+ t3'' *t2) % v + (t2''* t3') % u +
15670        (t3''* t3) % w`]
15671 THEN EXISTS_TAC`t1'' + t2'' * t1' + t3'' * t1:real`
15672 THEN EXISTS_TAC`t2'' * t2' + t3'' * t2:real`
15673 THEN EXISTS_TAC`t2'' * t3':real`
15674 THEN EXISTS_TAC`t3'' * t3:real`
15675 THEN ASM_REWRITE_TAC[REAL_ARITH`(t1'' + t2'' * t1' + t3'' * t1) +
15676  (t2'' * t2' + t3'' * t2) +
15677  t2'' * t3' +
15678  t3'' * t3 = t1'' +
15679       t2'' * (t1' + t2'+ t3') +
15680       t3'' * (t1 + t2 + t3 )`;REAL_ARITH`A * &1=A`]
15681 THEN STRIP_TAC
15682 THENL[
15683 MATCH_MP_TAC (REAL_ARITH`&0< A/\ &0< B==> &0< A+B`)
15684 THEN STRIP_TAC
15685 THEN MATCH_MP_TAC REAL_LT_MUL
15686 THEN ASM_REWRITE_TAC[];
15687
15688 STRIP_TAC
15689 THEN MATCH_MP_TAC REAL_LT_MUL
15690 THEN ASM_REWRITE_TAC[]]);;
15691
15692
15693 let AFF_GT_1_3_SUBSET_AFF_GT_1_3=prove(`!x v u w:real^3 t:real.
15694 ~coplanar {x,v,u,w}/\ &0< t/\ t< &1
15695 ==> aff_gt {x} {v,u,(&1-t) %u+ t %w} SUBSET aff_gt {x} {v,u,w}`,
15696 REPEAT STRIP_TAC
15697 THEN MP_TAC(REAL_ARITH`&0< t==> ~(t= &0)`)
15698 THEN RESA_TAC
15699 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`v:real^3`;`u:real^3`;`w:real^3`]
15700 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
15701 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
15702 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`u:real^3`]
15703 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`w:real^3`]
15704 THEN MRESA_TAC notcoplanar_imp_notcollinear_fan[`x:real^3`;`v:real^3`;`u:real^3`;`(&1-t) %u+ t %w:real^3`]
15705 THEN MRESA_TAC th3[`x:real^3`;`v:real^3`;`(&1-t) %u+ t %w:real^3`]
15706 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)`]
15707 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]
15708 THEN REPEAT RESA_TAC
15709 THEN EXISTS_TAC`t1:real`
15710 THEN EXISTS_TAC`t2:real`
15711 THEN EXISTS_TAC`t3 + t4 *( &1- t):real`
15712 THEN EXISTS_TAC`t4 *t:real`
15713 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % u + t4 % ((&1 - t) % u + t % w) =
15714  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`
15715 ]
15716 THEN STRIP_TAC
15717 THENL[
15718 MATCH_MP_TAC (REAL_ARITH`&0< A /\ &0< B==> &0< A+B`)
15719 THEN ASM_REWRITE_TAC[]
15720 THEN MATCH_MP_TAC REAL_LT_MUL
15721 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- A<=> A< &1`];
15722 MATCH_MP_TAC REAL_LT_MUL
15723 THEN ASM_REWRITE_TAC[REAL_ARITH`&0< &1- A<=> A< &1`]]);;
15724
15725
15726
15727
15728
15729
15730
15731
15732 let lemma_connect_hypermap=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) f1 f2.
15733 FAN(x,V,E)
15734 /\ conforming_fan (x,V,E)
15735  /\ (!v. v IN V==>CARD (set_of_edge v V E) > 1)
15736 /\ fan80(x,V,E)
15737 /\ f1 IN d_fan(x,V,E) /\ f2 IN d_fan(x,V,E)
15738 ==> ?D. D IN set_of_components(hypermap1_of_fanx (x,V,E))
15739 /\ f1 IN D /\ f2 IN D`,
15740 REPEAT STRIP_TAC
15741 THEN POP_ASSUM MP_TAC
15742 THEN POP_ASSUM MP_TAC
15743 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
15744 THEN REPEAT STRIP_TAC
15745 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)))`]
15746 THEN ABBREV_TAC`ds= face (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
15747 THEN ABBREV_TAC`ds1= face (hypermap1_of_fanx (x,V,E)) (f2:real^3#real^3#real^3#real^3)`
15748 THEN ABBREV_TAC`Z=(:real^3) DIFF (UNIONS {aff_ge {x} {v:real^3}| v IN V})`
15749 THEN SUBGOAL_THEN`ds IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15750 THENL(*1*)[
15751
15752 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15753 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15754 THEN EXPAND_TAC"ds"
15755 THEN REWRITE_TAC[face]
15756 THEN ASM_REWRITE_TAC[];(*1*)
15757
15758 SUBGOAL_THEN`ds1 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15759 THENL(*2*)[
15760
15761 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15762 THEN EXISTS_TAC`f2:real^3#real^3#real^3#real^3`
15763 THEN EXPAND_TAC"ds1"
15764 THEN REWRITE_TAC[face]
15765 THEN ASM_REWRITE_TAC[];(*2*)
15766
15767 SUBGOAL_THEN`f2 IN ds1:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15768 THENL(*3*)[
15769 EXPAND_TAC"ds1"
15770 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
15771 THEN EXISTS_TAC`0`
15772 THEN REWRITE_TAC[POWER;I_DEF]
15773 THEN ARITH_TAC;(*3*)
15774
15775 SUBGOAL_THEN`f1 IN ds:real^3#real^3#real^3#real^3->bool` ASSUME_TAC
15776 THENL(*4*)[
15777 EXPAND_TAC"ds"
15778 THEN REWRITE_TAC[face;orbit_map;IN_ELIM_THM]
15779 THEN EXISTS_TAC`0`
15780 THEN REWRITE_TAC[POWER;I_DEF]
15781 THEN ARITH_TAC;(*4*)
15782
15783 ABBREV_TAC`D= comb_component (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
15784 THEN MRESA_TAC lemma_component_subset[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`]
15785 THEN SUBGOAL_THEN`D IN set_of_components(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15786 THENL(*5*)[
15787
15788 ASM_REWRITE_TAC[set_of_components;set_part_components;IN_ELIM_THM]
15789 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15790 THEN ASM_REWRITE_TAC[];(*5*)
15791
15792
15793 SUBGOAL_THEN`(f1:real^3#real^3#real^3#real^3) IN D`ASSUME_TAC
15794 THENL(*6*)[
15795 EXPAND_TAC"D"
15796 THEN REWRITE_TAC[comb_component;IN_ELIM_THM;is_in_component]
15797 THEN ASM_REWRITE_TAC[]
15798 THEN EXISTS_TAC`(\m. (f1_fan (x:real^3) V E POWER m) f1)`
15799 THEN EXISTS_TAC`0`
15800 THEN REWRITE_TAC[POWER;I_DEF;is_path];(*6*)
15801
15802 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]
15803 THEN
15804 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))}`
15805 THEN ABBREV_TAC`t1= sup (TA:real->bool)`
15806 THEN SUBGOAL_THEN`&0 IN TA:real->bool `ASSUME_TAC
15807 THENL(*7*)[
15808  EXPAND_TAC"TA"
15809 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15810 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
15811 THEN ASM_REWRITE_TAC[];(*7*)
15812
15813
15814 MP_TAC(SET_RULE`&0 IN TA ==> ~(TA ={})`)
15815 THEN RESA_TAC
15816 THEN EXISTS_TAC`D:real^3#real^3#real^3#real^3->bool`
15817 THEN ASM_REWRITE_TAC[]
15818 THEN DISJ_CASES_TAC(SET_RULE`(y=z:real^3) \/ ~(z=y)`)
15819 THENL(*8*)[
15820
15821 POP_ASSUM(fun th-> ASM_TAC THEN REWRITE_TAC[th] THEN REPEAT STRIP_TAC)
15822 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`]
15823 THEN POP_ASSUM MP_TAC
15824 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15825 THEN RESA_TAC
15826 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds1`
15827 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15828 THEN STRIP_TAC
15829 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y:real^3`;`z:real^3`]
15830 THEN POP_ASSUM MP_TAC
15831 THEN REMOVE_ASSUM_TAC
15832 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15833 THEN STRIP_TAC
15834 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`]
15835 THEN POP_ASSUM MP_TAC
15836 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15837 THEN RESA_TAC
15838 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds`
15839 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15840 THEN STRIP_TAC
15841 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`z:real^3`]
15842 THEN POP_ASSUM MP_TAC
15843 THEN REMOVE_ASSUM_TAC
15844 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15845 THEN STRIP_TAC
15846 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`]
15847 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15848 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
15849 THEN STRIP_TAC
15850 THEN REMOVE_ASSUM_TAC
15851 THEN REMOVE_ASSUM_TAC
15852 THEN REMOVE_ASSUM_TAC
15853 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)`)
15854 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)`)
15855 THEN POP_ASSUM MP_TAC
15856 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15857 THEN STRIP_TAC
15858 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f1:real^3#real^3#real^3#real^3`]
15859 THEN ASM_TAC
15860 THEN SET_TAC[];(*8*)
15861
15862 SUBGOAL_THEN`(?b. !a. a IN TA ==> a <= b)` ASSUME_TAC
15863 THENL(*9*)[
15864
15865 EXISTS_TAC`&1`
15866 THEN EXPAND_TAC"TA"
15867 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15868 THEN REPEAT STRIP_TAC
15869 THEN ASM_REWRITE_TAC[];(*9*)
15870
15871 SUBGOAL_THEN`(!a. a IN TA ==> a <= &1)` ASSUME_TAC
15872 THENL(*10*)[
15873
15874 EXPAND_TAC"TA"
15875 THEN REWRITE_TAC[IN_ELIM_THM;REAL_ARITH`&0<= &0 /\ &0<= &1`;VECTOR_ARITH`(&1 - &0) % y + &0 % z=y`]
15876 THEN REPEAT STRIP_TAC
15877 THEN ASM_REWRITE_TAC[];(*10*)
15878
15879 MRESA1_TAC SUP`TA:real->bool`
15880 THEN POP_ASSUM(fun th-> MRESA1_TAC th `&1` THEN POP_ASSUM MP_TAC THEN ASSUME_TAC th THEN STRIP_TAC)
15881 THEN DISJ_CASES_TAC(SET_RULE` (t1:real) IN TA\/ ~(t1 IN TA)`)
15882 THENL(*11*)[
15883
15884 POP_ASSUM MP_TAC
15885 THEN EXPAND_TAC "TA"
15886 THEN REWRITE_TAC[IN_ELIM_THM]
15887 THEN STRIP_TAC
15888 THEN POP_ASSUM MP_TAC
15889 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E)) (f:real^3#real^3#real^3#real^3)`
15890 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f IN D==> f IN d1_fan (x,V,E)`)
15891 THEN RESA_TAC
15892 THEN SUBGOAL_THEN`ds2 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
15893 THENL(*12*)[
15894 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
15895 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3`
15896 THEN EXPAND_TAC"ds2"
15897 THEN REWRITE_TAC[face]
15898 THEN ASM_REWRITE_TAC[];(*12*)
15899
15900 MP_TAC(REAL_ARITH`(t1:real) <= &1 ==> t1= &1 \/ t1< &1`)
15901 THEN RESA_TAC
15902 THENL(*13*)[
15903
15904 ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
15905 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`]
15906 THEN POP_ASSUM MP_TAC
15907 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15908 THEN RESA_TAC
15909 THEN STRIP_TAC
15910 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`z:real^3`]
15911 THEN POP_ASSUM MP_TAC
15912 THEN REMOVE_ASSUM_TAC
15913 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15914 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`]
15915 THEN POP_ASSUM MP_TAC
15916 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
15917 THEN RESA_TAC
15918 THEN FIND_ASSUM MP_TAC`z IN dartset_leads_into_fan (x:real^3) V E ds1`
15919 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
15920 THEN STRIP_TAC
15921 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`z:real^3`]
15922 THEN REMOVE_ASSUM_TAC
15923 THEN REMOVE_ASSUM_TAC
15924 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15925 THEN STRIP_TAC
15926 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`]
15927 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
15928 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
15929 THEN STRIP_TAC
15930 THEN REMOVE_ASSUM_TAC
15931 THEN REMOVE_ASSUM_TAC
15932 THEN REMOVE_ASSUM_TAC
15933 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)`)
15934 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)`)
15935 THEN POP_ASSUM MP_TAC
15936 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
15937 THEN STRIP_TAC
15938 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`]
15939 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f:real^3#real^3#real^3#real^3`]
15940 THEN ASM_TAC
15941 THEN SET_TAC[];(*13*)
15942
15943 STRIP_TAC
15944 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`]
15945 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`]
15946 THEN POP_ASSUM MP_TAC
15947 THEN REWRITE_TAC[open_def]
15948 THEN STRIP_TAC
15949 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(&1 - t1) % y + t1 % z:real^3`)
15950 THEN POP_ASSUM MP_TAC
15951 THEN REWRITE_TAC[dist]
15952 THEN ABBREV_TAC`t2=min (inv(norm(z-y:real^3)) *e) (&1- t1)/ &2 + t1 `
15953 THEN MRESAL_TAC imp_norm_gl_zero_fan[`z:real^3`;`y:real^3`][REAL_ARITH`A>B <=> B<A`]
15954 THEN MRESA_TAC REAL_LT_MUL[`inv(norm(z-y:real^3))`;`e:real`]
15955 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
15956 /\ min (inv (norm (z - y)) * e) (&1 - t1) / &2  < e * inv (norm (z - y)) `)
15957 THEN RESA_TAC
15958 THEN MP_TAC(ISPEC`min (inv (norm (z - y:real^3)) * e) (&1 - t1) / &2:real`REAL_ABS_REFL)
15959 THEN RESA_TAC
15960 THEN SUBGOAL_THEN`norm (((&1 - t2) % y + t2 % z:real^3) - ((&1 - t1) % y + t1 % z)) < e`
15961 ASSUME_TAC
15962 THENL(*14*)[
15963 EXPAND_TAC"t2"
15964 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - (min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1)) % y +
15965    (min (inv (norm (z - y)) * e) (&1 - t1) / &2 + t1) % z) -
15966   ((&1 - t1) % y + t1 % z))
15967 = (min (inv (norm (z - y)) * e) (&1 - t1) / &2) % (z-y)`;NORM_MUL]
15968 THEN ASM_REWRITE_TAC[]
15969 THEN MRESA_TAC imp_norm_not_zero_fan[`z:real^3`;`y:real^3`]
15970 THEN MRESA1_TAC NORM_POS_LE`z-y:real^3`
15971 THEN MP_TAC(REAL_ARITH`&0 <= norm (z - y) /\ ~(norm (z - y) = &0) ==> &0 < norm (z - y:real^3)`)
15972 THEN RESA_TAC
15973 THEN MRESA1_TAC REAL_MUL_LINV`norm(z-y:real^3)`
15974 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*)
15975
15976 STRIP_TAC
15977 THEN POP_ASSUM(fun th-> MRESA1_TAC th`((&1 - t2) % y + t2 % z:real^3)`)
15978 THEN SUBGOAL_THEN`(t2:real) IN TA` ASSUME_TAC
15979 THENL(*15*)[
15980
15981 EXPAND_TAC "TA"
15982 THEN REWRITE_TAC[IN_ELIM_THM]
15983 THEN ASM_REWRITE_TAC[]
15984 THEN EXISTS_TAC`f:real^3#real^3#real^3#real^3`
15985 THEN ASM_REWRITE_TAC[];(*15*)
15986
15987 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t2:real` th))`!x:real. x IN TA ==> x <= t1`
15988 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;REAL_ARITH`A<=B <=> ~(B< A)`])
15989 THEN ASM_REWRITE_TAC[]](*15*)](*14*)](*13*)](*12*);(*11*)
15990
15991
15992 POP_ASSUM (fun th-> MP_TAC th THEN ASSUME_TAC th)
15993 THEN EXPAND_TAC "TA"
15994 THEN REWRITE_TAC[IN_ELIM_THM;DE_MORGAN_THM]
15995 THEN ASM_REWRITE_TAC[]
15996 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC`&0` th))`!x. x IN TA ==> x <= t1:real`
15997 THEN FIND_ASSUM (fun th-> REWRITE_TAC[th])`&0 IN TA`
15998 THEN RESA_TAC
15999 THEN REWRITE_TAC[NOT_EXISTS_THM;DE_MORGAN_THM]
16000 THEN DISCH_THEN(LABEL_TAC"LINH")
16001 THEN DISJ_CASES_TAC(SET_RULE`~(!e.
16002 &0< e ==>
16003 ?e1 f3. &0 < e1 /\ e1< e /\ f3 IN D
16004 /\ ((&1 -(t1-e1)) % y + (t1-e1) % z:real^3) IN
16005 dartset_leads_into_fan x V E (face (hypermap1_of_fanx (x:real^3,V,E)) f3))\/ (!e.
16006 &0< e ==>
16007 ?e1 f3. &0 < e1 /\ e1< e /\ f3 IN D
16008 /\ ((&1 -(t1-e1)) % y + (t1-e1) % z) IN
16009 dartset_leads_into_fan x V E (face (hypermap1_of_fanx (x:real^3,V,E)) f3)) `)
16010 THENL(*12*)[
16011
16012 POP_ASSUM MP_TAC
16013 THEN REWRITE_TAC[NOT_EXISTS_THM;NOT_IMP;NOT_FORALL_THM]
16014 THEN REWRITE_TAC[DE_MORGAN_THM]
16015 THEN STRIP_TAC
16016 THEN POP_ASSUM MP_TAC
16017 THEN DISCH_THEN(LABEL_TAC"LINH1")
16018 THEN SUBGOAL_THEN`(!a. a IN TA ==> a <= t1- e/ &2)`ASSUME_TAC
16019 THENL(*13*)[
16020
16021 GEN_TAC THEN
16022 STRIP_TAC
16023 THEN POP_ASSUM( fun th-> MP_TAC th THEN ASSUME_TAC th)
16024 THEN EXPAND_TAC "TA"
16025 THEN REWRITE_TAC[IN_ELIM_THM]
16026 THEN REPEAT STRIP_TAC
16027 THEN MP_TAC(REAL_ARITH`&0< e ==> &0< e/ &2 /\ e/ &2 < e`)
16028 THEN RESA_TAC
16029 THEN FIND_ASSUM (fun th-> MP_TAC(ISPEC `a:real` th))`!x. x IN TA ==> x <= t1:real`
16030 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`a:real IN TA`
16031 THEN STRIP_TAC
16032 THEN MP_TAC(REAL_ARITH`a<= t1==> a=t1 \/ a< t1`)
16033 THEN RESA_TAC
16034 THENL(*14*)[
16035
16036 FIND_ASSUM MP_TAC`a:real IN TA`
16037 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;] )
16038 THEN EXPAND_TAC"TA"
16039 THEN REWRITE_TAC[IN_ELIM_THM]
16040 THEN STRIP_TAC
16041 THEN  REMOVE_THEN"LINH"(fun th-> MRESA1_TAC th`f':real^3#real^3#real^3#real^3`);(*14*)
16042
16043
16044 MP_TAC(REAL_ARITH`a<t1==> &0< t1 -a`)
16045 THEN RESA_TAC
16046 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`])
16047 THEN MP_TAC(REAL_ARITH`~(t1 - a < e) /\ &0< e==> a<= t1 - e/ &2`)
16048 THEN RESA_TAC](*14*);(*13*)
16049
16050 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1- e / &2` th))`!b. (!x. x IN TA ==> x <= b) ==> t1 <= b:real`
16051 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
16052 THEN REMOVE_ASSUM_TAC
16053 THEN POP_ASSUM MP_TAC
16054 THEN REAL_ARITH_TAC](*13*);(*12*)
16055
16056
16057 POP_ASSUM MP_TAC
16058 THEN DISCH_THEN(LABEL_TAC"LINH1")
16059 THEN SUBGOAL_THEN`(&1 - t1) % y + t1 % z IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16060 THENL(*13*)[
16061
16062 REWRITE_TAC[IN_ELIM_THM]
16063 THEN EXISTS_TAC`t1:real`
16064 THEN ASM_REWRITE_TAC[];(*13*)
16065
16066
16067 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`)
16068 THEN RESA_TAC
16069 THEN POP_ASSUM MP_TAC
16070 THEN MRESA_TAC yfan_union_aff_gt_fan[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
16071 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th; UNION;IN_ELIM_THM;GSYM UNIONS_TOPOLOGICAL_COMPONENT_EQ_YFAN;UNIONS])
16072 THEN STRIP_TAC
16073 THENL(*14*)[
16074
16075 POP_ASSUM MP_TAC
16076 THEN MRESA_TAC version_JUTSTKG[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`u:real^3->bool`]
16077 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC
16078 THEN POP_ASSUM MP_TAC
16079  THEN REWRITE_TAC[SYM th])
16080 THEN REPEAT STRIP_TAC
16081 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`]
16082 THEN POP_ASSUM MP_TAC
16083 THEN REWRITE_TAC[open_def]
16084 THEN STRIP_TAC
16085 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(&1 - t1) % y + t1 % z:real^3`)
16086 THEN POP_ASSUM MP_TAC
16087 THEN REWRITE_TAC[dist]
16088 THEN DISCH_THEN(LABEL_TAC"LINH2")
16089 THEN MRESAL_TAC imp_norm_gl_zero_fan[`z:real^3`;`y:real^3`][REAL_ARITH`A>B <=> B<A`]
16090 THEN MRESA_TAC REAL_LT_MUL[`inv(norm(z-y:real^3))`;`e:real`]
16091 THEN REMOVE_THEN "LINH1" (fun th-> MRESA1_TAC th ` inv(norm(z-y:real^3)) * e:real`)
16092 THEN POP_ASSUM MP_TAC
16093 THEN SUBGOAL_THEN`norm (((&1 - (t1- e1)) % y + (t1- e1) % z:real^3) - ((&1 - t1) % y + t1 % z)) < e`
16094 ASSUME_TAC
16095 THENL(*15*)[
16096
16097 REWRITE_TAC[VECTOR_ARITH`(((&1 - (t1 - e1)) % y + (t1 - e1) % z) - ((&1 - t1) % y + t1 % z))
16098 = --(e1 %(z-y))`;NORM_NEG;NORM_MUL]
16099 THEN MRESA_TAC imp_norm_not_zero_fan[`z:real^3`;`y:real^3`]
16100 THEN MRESA1_TAC NORM_POS_LE`z-y:real^3`
16101 THEN MP_TAC(REAL_ARITH`&0 <= norm (z - y) /\ ~(norm (z - y) = &0) /\ &0< e1 ==> &0 < norm (z - y:real^3)/\ &0<= e1`)
16102 THEN RESA_TAC
16103 THEN MRESA1_TAC REAL_MUL_LINV`norm(z-y:real^3)`
16104 THEN MP_TAC(ISPEC`e1:real`REAL_ABS_REFL)
16105 THEN RESA_TAC
16106 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*)
16107
16108
16109 REMOVE_THEN"LINH2"(fun th-> MRESA1_TAC th`((&1 - (t1 - e1)) % y + (t1 - e1) % z):real^3`)
16110 THEN POP_ASSUM MP_TAC
16111 THEN ABBREV_TAC`y12=((&1 - (t1 - e1)) % y + (t1 - e1) % z):real^3`
16112 THEN ABBREV_TAC`ds2= face (hypermap1_of_fanx (x,V,E)) (f3:real^3#real^3#real^3#real^3)`
16113 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
16114 THEN RESA_TAC
16115 THEN SUBGOAL_THEN`ds2 IN face_set(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16116 THENL(*16*)[
16117
16118 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
16119 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
16120 THEN EXPAND_TAC"ds2"
16121 THEN REWRITE_TAC[face]
16122 THEN ASM_REWRITE_TAC[];(*16*)
16123
16124 STRIP_TAC
16125 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`]
16126 THEN POP_ASSUM MP_TAC
16127 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16128 THEN RESA_TAC
16129 THEN STRIP_TAC
16130 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y12:real^3`]
16131 THEN POP_ASSUM MP_TAC
16132 THEN REMOVE_ASSUM_TAC
16133 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16134 THEN REMOVE_ASSUM_TAC
16135 THEN POP_ASSUM MP_TAC
16136 THEN FIND_ASSUM MP_TAC`dartset_leads_into_fan x V E f IN topological_component_yfan (x:real^3,V,E)`
16137 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16138 THEN RESA_TAC
16139 THEN STRIP_TAC
16140 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y12:real^3`]
16141 THEN REMOVE_ASSUM_TAC
16142 THEN REMOVE_ASSUM_TAC
16143 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16144 THEN REMOVE_THEN "LINH"(fun th-> MRESA1_TAC th`f3:real^3#real^3#real^3#real^3`)
16145 THEN STRIP_TAC
16146 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[SYM th])](*16*)](*15*);(*14*)
16147
16148
16149 POP_ASSUM MP_TAC
16150 THEN POP_ASSUM MP_TAC
16151 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
16152 THEN POP_ASSUM(fun th-> POP_ASSUM MP_TAC THEN REWRITE_TAC[th] THEN STRIP_TAC)
16153 THEN RESA_TAC
16154 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
16155 `(v:real^3)`]
16156 THEN MP_TAC(REAL_ARITH`(t1:real) <= &1 ==> t1= &1 \/ t1< &1`)
16157 THEN RESA_TAC
16158 THENL(*15*)[
16159
16160 REWRITE_TAC[VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
16161 THEN STRIP_TAC
16162 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;` (w:real^3)`]
16163 THEN MP_TAC(SET_RULE`z IN aff_gt {x} {v, w} /\ aff_ge {x} {v, w} =
16164       aff_gt {x} {v, w} UNION aff_ge {x} {v} UNION aff_ge {x} {w}
16165 ==> z IN aff_ge {x} {v, w:real^3} `)
16166 THEN ASM_REWRITE_TAC[]
16167 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16168 THEN STRIP_TAC
16169 THEN SUBGOAL_THEN`z IN xfan(x:real^3,V:real^3->bool,E)`ASSUME_TAC
16170 THENL(*16*)[
16171 REWRITE_TAC[xfan;IN_ELIM_THM]
16172 THEN EXISTS_TAC`{v,w:real^3}`
16173 THEN ASM_REWRITE_TAC[IN]
16174 THEN ASM_MESON_TAC[IN];(*16*)
16175
16176 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`]
16177 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)`)
16178 THEN ASM_REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]](*16*);(*15*)
16179
16180 STRIP_TAC
16181 THEN ABBREV_TAC`v1=(&1 - t1) % y + t1 % z:real^3`
16182 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`w:real^3`;`v1:real^3`]
16183 THEN MP_TAC(SET_RULE`{v,w:real^3} IN E==> ~(E={})`)
16184 THEN RESA_TAC
16185 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`]
16186 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`]
16187 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`]
16188 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`]
16189 THEN SUBGOAL_THEN`~(collinear{x,y,z:real^3})` ASSUME_TAC
16190 THENL(*16*)[
16191
16192 MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (z:real^3)`;`(y:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16193 THEN STRIP_TAC
16194 THEN POP_ASSUM MP_TAC
16195 THEN POP_ASSUM MP_TAC
16196 THEN DISJ_CASES_TAC(REAL_ARITH`v'= &0\/ &0< -- v' \/ &0 < v'`)
16197 THENL(*17*)[
16198
16199 ASM_REWRITE_TAC[REAL_ARITH`A + &0=A`]
16200 THEN RESA_TAC
16201 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 % x + &0 % z= x`];(*17*)
16202
16203 POP_ASSUM MP_TAC
16204 THEN STRIP_TAC
16205 THENL(*18*)[
16206
16207 REWRITE_TAC[VECTOR_ARITH`y = u' % x + v' % z <=> u' % x =y +(--v') % z `]
16208 THEN DISJ_CASES_TAC(SET_RULE`u'= &0 \/ ~(u'= &0)`)
16209 THENL(*19*)[
16210
16211 ASM_REWRITE_TAC[REAL_ARITH`&0+A=A`;]
16212 THEN RESA_TAC
16213 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&0 % x = y + -- &1 % z <=>  y=z`];(*19*)
16214 STRIP_TAC
16215 THEN MRESA1_TAC REAL_MUL_LINV`u':real`
16216 THEN STRIP_TAC
16217 THEN MP_TAC(SET_RULE`u' % x = y + --v' % z ==> (inv (u')) %(u' % x ) = inv (u')%(y + --v' % z:real^3)`)
16218 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
16219 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`]
16220 THEN STRIP_TAC
16221 THEN SUBGOAL_THEN`x IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16222 THENL(*20*)[
16223 MP_TAC(REAL_ARITH`~(u'= &0) ==> &0< u'\/ &0 < -- u'`)
16224 THEN RESA_TAC
16225 THENL(*21*)[
16226
16227 REWRITE_TAC[IN_ELIM_THM]
16228 THEN EXISTS_TAC`(inv u' * --v')`
16229 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 `]
16230 THEN MP_TAC(REAL_ARITH`&0< -- v' /\ &0 < u' ==> &0<= -- v' /\ &0 <= u'`)
16231 THEN RESA_TAC
16232 THEN MRESA1_TAC REAL_LE_INV`u':real`
16233 THEN MATCH_MP_TAC REAL_LE_MUL
16234 THEN ASM_REWRITE_TAC[];(*21*)
16235
16236 MP_TAC(REAL_ARITH`&0< --v' /\ &0 < -- u' ==> &0 < --(u'+v')`)
16237 THEN RESA_TAC
16238 THEN POP_ASSUM MP_TAC
16239 THEN REAL_ARITH_TAC](*21*);(*20*)
16240
16241 MP_TAC(SET_RULE`x IN {(&1 - u) % y + u % z | &0 <= u /\ u <= &1}
16242 /\ {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1} SUBSET Z
16243 ==> x IN Z`)
16244 THEN ASM_REWRITE_TAC[]
16245 THEN REMOVE_ASSUM_TAC
16246 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16247 THEN EXPAND_TAC"Z"
16248 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;SET_RULE`x IN (:real^3)`;UNIONS;IN_ELIM_THM]
16249 THEN EXISTS_TAC`aff_ge {x} {v:real^3}`
16250 THEN MRESA_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `]
16251 THEN EXISTS_TAC`v:real^3`
16252 THEN ASM_REWRITE_TAC[]](*20*)](*19*);(*18*)
16253
16254
16255
16256 REPEAT STRIP_TAC
16257 THEN SUBGOAL_THEN`y IN aff_gt {x} {z:real^3}` ASSUME_TAC
16258 THENL(*19*)[
16259
16260 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`z:real^3`][IN_ELIM_THM;SET_RULE`DISJOINT {x} {y}<=> ~(x=y)`]
16261 THEN EXISTS_TAC`u':real`
16262 THEN EXISTS_TAC`v':real`
16263 THEN ASM_REWRITE_TAC[];(*19*)
16264
16265 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`]
16266 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
16267 ==>  y IN dartset_leads_into_fan x V E ds1`)
16268 THEN RESA_TAC
16269 THEN POP_ASSUM MP_TAC
16270 THEN REMOVE_ASSUM_TAC
16271 THEN REMOVE_ASSUM_TAC
16272 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16273 THEN REMOVE_ASSUM_TAC
16274 THEN REMOVE_ASSUM_TAC
16275 THEN REMOVE_ASSUM_TAC
16276 THEN REMOVE_ASSUM_TAC
16277 THEN REMOVE_ASSUM_TAC
16278 THEN POP_ASSUM MP_TAC
16279 THEN POP_ASSUM MP_TAC
16280 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16281 THEN RESA_TAC
16282 THEN RESA_TAC
16283 THEN STRIP_TAC
16284 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y:real^3`]
16285 THEN POP_ASSUM MP_TAC
16286 THEN REMOVE_ASSUM_TAC
16287 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16288 THEN REMOVE_ASSUM_TAC
16289 THEN FIND_ASSUM MP_TAC`y IN dartset_leads_into_fan (x:real^3) V E ds`
16290 THEN POP_ASSUM(fun th-> REWRITE_TAC[th] THEN ASSUME_TAC th)
16291 THEN STRIP_TAC
16292 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y:real^3`]
16293 THEN POP_ASSUM MP_TAC
16294 THEN REMOVE_ASSUM_TAC
16295 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16296 THEN STRIP_TAC
16297 THEN STRIP_TAC
16298 THEN SUBGOAL_THEN`&1 IN TA:real->bool` ASSUME_TAC
16299 THENL(*20*)[
16300
16301 EXPAND_TAC "TA"
16302 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`&0<= &1 /\ &1<= &1`;VECTOR_ARITH`(&1 - &1) % y + &1 % z=z`]
16303 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
16304 THEN ASM_REWRITE_TAC[];(*20*)
16305
16306
16307 FIND_ASSUM (fun th-> MP_TAC(ISPEC `&1` th))`!x. x IN TA ==> x <= t1:real`
16308 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
16309 THEN ASM_REWRITE_TAC[]
16310 THEN REMOVE_ASSUM_TAC
16311 THEN REMOVE_ASSUM_TAC
16312 THEN REMOVE_ASSUM_TAC
16313 THEN REMOVE_ASSUM_TAC
16314 THEN REMOVE_ASSUM_TAC
16315 THEN REMOVE_ASSUM_TAC
16316 THEN REMOVE_ASSUM_TAC
16317 THEN POP_ASSUM MP_TAC
16318 THEN REAL_ARITH_TAC](*20*)](*19*)](*18*)](*17*);(*16*)
16319
16320
16321 POP_ASSUM MP_TAC
16322 THEN SUBGOAL_THEN`v1 IN {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1}` ASSUME_TAC
16323 THENL(*17*)[
16324
16325 REWRITE_TAC[IN_ELIM_THM]
16326 THEN EXISTS_TAC`t1:real`
16327 THEN ASM_REWRITE_TAC[];(*17*)
16328
16329 SUBGOAL_THEN`~(x= v1:real^3)` ASSUME_TAC
16330 THENL(*18*)[
16331  STRIP_TAC
16332 THEN  MP_TAC(SET_RULE`v1 IN {(&1 - u) % y + u % z | &0 <= u /\ u <= &1}
16333 /\ {(&1 - u) % y + u % z:real^3 | &0 <= u /\ u <= &1} SUBSET Z
16334 ==> v1 IN Z`)
16335 THEN ASM_REWRITE_TAC[]
16336 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16337 THEN EXPAND_TAC"Z"
16338 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;SET_RULE`x IN (:real^3)`;UNIONS;IN_ELIM_THM]
16339 THEN EXISTS_TAC`aff_ge {x} {v:real^3}`
16340 THEN MRESA_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `]
16341 THEN EXISTS_TAC`v:real^3`
16342 THEN ASM_REWRITE_TAC[];(*18*)
16343
16344  MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
16345 THEN RESA_TAC
16346 THEN STRIP_TAC
16347 THEN SUBGOAL_THEN`~collinear{x,y,v1:real^3}` ASSUME_TAC
16348 THENL(*19*)[
16349
16350 POP_ASSUM MP_TAC
16351 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16352 THEN MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (y:real^3)`;`(z:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16353 THEN MRESAL_TAC collinear1_fan[`(x:real^3)` ;` (y:real^3)`;`(v1:real^3)`;][aff; AFFINE_HULL_2;IN_ELIM_THM]
16354 THEN REWRITE_TAC[CONTRAPOS_THM]
16355 THEN EXPAND_TAC"v1"
16356 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t1) % y + t1 % z = u' % x + v' % y
16357 <=> t1 % z= u' % x + (v'- &1 +t1) %y`]
16358 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
16359 THEN REPEAT STRIP_TAC
16360 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)`)
16361 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
16362 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`]
16363 THEN RESA_TAC
16364 THEN EXISTS_TAC`inv t1 * u':real`
16365 THEN EXISTS_TAC`(inv t1 * (v' - &1 + t1)):real`
16366 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*)
16367
16368 POP_ASSUM MP_TAC
16369 THEN REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16370 THEN STRIP_TAC
16371 THEN SUBGOAL_THEN`v1 IN aff_gt {x} {y,z:real^3}` ASSUME_TAC
16372 THENL(*20*)[
16373
16374 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)`]
16375 THEN EXISTS_TAC`&0`
16376 THEN EXISTS_TAC`&1- t1`
16377 THEN EXISTS_TAC`t1:real`
16378 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A= &0 % X +A`;REAL_ARITH`&0< &1- t1 <=> t1< &1`;]
16379 THEN MP_TAC(REAL_ARITH`&0<= t1 /\ ~(t1= &0)==> &0< t1`)
16380 THEN RESA_TAC
16381 THEN REAL_ARITH_TAC;(*20*)
16382
16383 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)`]
16384 THEN POP_ASSUM MP_TAC
16385 THEN REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16386 THEN RESA_TAC
16387 THEN DISJ_CASES_TAC(SET_RULE`coplanar{x,v1,v,y}\/ ~coplanar{x,v1,v,y:real^3}`)
16388 THENL(*21*)[
16389
16390 MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`][DE_MORGAN_THM;]
16391 THENL(*22*)[
16392
16393
16394 MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`]
16395 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x,v1:real^3}`;`{v:real^3}`]
16396 THEN MP_TAC(SET_RULE`y IN aff_gt {x, v1} {v}/\ aff_gt {x, v1} {v} SUBSET aff_ge {x, v1} {v}
16397 ==>  y IN aff_ge {x, v1} {v:real^3}`)
16398 THEN RESA_TAC
16399 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`]
16400 THENL(*23*)[
16401
16402 POP_ASSUM MP_TAC
16403 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16404 THEN STRIP_TAC
16405 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]
16406 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}
16407 /\ aff_gt {x} {y, z} SUBSET Z==> v IN Z`)
16408 THEN ASM_REWRITE_TAC[]
16409 THEN EXPAND_TAC"Z"
16410 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;UNIONS;NOT_EXISTS_THM;DE_MORGAN_THM]
16411 THEN MRESAL_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(v:real^3) `][IN_SING]
16412 THEN STRIP_TAC
16413 THEN POP_ASSUM (fun th-> MRESA1_TAC th `aff_ge {x} {v:real^3}`)
16414 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`);(*23*)
16415
16416
16417 POP_ASSUM MP_TAC
16418 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16419 THEN RESA_TAC
16420 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3}`;`{v:real^3,w}`]
16421 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w:real^3}
16422 /\ v1 IN aff_gt {x} {v, w} ==> v1 IN aff_ge {x} {v, w}`)
16423 THEN RESA_TAC
16424 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w:real^3`; `v:real^3`;`v1:real^3`]
16425 THEN POP_ASSUM MP_TAC
16426 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16427 THEN RESA_TAC
16428 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}`)
16429 THEN ASM_REWRITE_TAC[]
16430 THEN STRIP_TAC
16431 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`]
16432 THEN MP_TAC(SET_RULE`y IN dartset_leads_into_fan x V E ds
16433 /\ dartset_leads_into_fan x V E ds SUBSET yfan(x,V,E)==>  y IN yfan(x:real^3,V,E)`)
16434 THEN RESA_TAC
16435 THEN POP_ASSUM MP_TAC
16436 THEN REWRITE_TAC[yfan;DIFF;IN_ELIM_THM;xfan;NOT_EXISTS_THM;DE_MORGAN_THM]
16437 THEN STRIP_TAC
16438 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v,w:real^3}`)
16439 THEN ASM_TAC
16440 THEN REWRITE_TAC[IN]
16441 THEN REPEAT RESA_TAC](*23*);(*22*)
16442
16443
16444
16445
16446 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`v:real^3`;`v1:real^3`]
16447 THEN POP_ASSUM MP_TAC
16448 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16449 THEN ASM_REWRITE_TAC[]
16450 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16451 THEN STRIP_TAC
16452 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3 `;`v1:real^3`]
16453 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`]
16454 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v1:real^3`;`w:real^3`;`y:real^3`]
16455 THEN MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x,v1:real^3}`;`{w:real^3}`]
16456 THEN MP_TAC(SET_RULE`y IN aff_gt {x, v1} {w}/\ aff_gt {x, v1} {w} SUBSET aff_ge {x, v1} {w}
16457 ==>  y IN aff_ge {x, v1} {w:real^3}`)
16458 THEN RESA_TAC
16459 THEN MRESA_TAC decomposition_planar_by_angle_fan[`x:real^3`;`v1:real^3`;`w:real^3`;`y:real^3`]
16460 THENL(*23*)[
16461
16462 POP_ASSUM MP_TAC
16463 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16464 THEN STRIP_TAC
16465 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]
16466 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}
16467 /\ aff_gt {x} {y, z} SUBSET Z==> w IN Z`)
16468 THEN ASM_REWRITE_TAC[]
16469 THEN EXPAND_TAC"Z"
16470 THEN REWRITE_TAC[DIFF;IN_ELIM_THM;UNIONS;NOT_EXISTS_THM;DE_MORGAN_THM]
16471 THEN MRESAL_TAC point_in_aff_ge_1_1[`(x:real^3)`;`(w:real^3) `][IN_SING]
16472 THEN STRIP_TAC
16473 THEN POP_ASSUM (fun th-> MRESA1_TAC th `aff_ge {x} {w:real^3}`)
16474 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16475 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
16476 ` (w:real^3)`]
16477 THEN POP_ASSUM MP_TAC
16478 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16479 THEN ASM_REWRITE_TAC[];(*23*)
16480
16481
16482
16483 MRESA_TAC AFF_GT_SUBSET_AFF_GE[`{x:real^3}`;`{v:real^3,w}`]
16484 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w} SUBSET aff_ge {x} {v, w:real^3}
16485 /\ v1 IN aff_gt {x} {v, w} ==> v1 IN aff_ge {x} {v, w}`)
16486 THEN RESA_TAC
16487 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v:real^3`; `w:real^3`;`v1:real^3`]
16488 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}`)
16489 THEN ASM_REWRITE_TAC[]
16490 THEN STRIP_TAC
16491 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`]
16492 THEN MP_TAC(SET_RULE`y IN dartset_leads_into_fan x V E ds
16493 /\ dartset_leads_into_fan x V E ds SUBSET yfan(x,V,E)==>  y IN yfan(x:real^3,V,E)`)
16494 THEN RESA_TAC
16495 THEN POP_ASSUM MP_TAC
16496 THEN REWRITE_TAC[yfan;DIFF;IN_ELIM_THM;xfan;NOT_EXISTS_THM;DE_MORGAN_THM]
16497 THEN STRIP_TAC
16498 THEN POP_ASSUM(fun th-> MRESA1_TAC th`{v,w:real^3}`)
16499 THEN ASM_TAC
16500 THEN REWRITE_TAC[IN]
16501 THEN REPEAT RESA_TAC](*23*)](*22*);(*21*)
16502
16503
16504 MRESAL_TAC AZIM_EQ_0_PI_EQ_COPLANAR[`x:real^3`;`v1:real^3`;`v:real^3`;`y:real^3`][DE_MORGAN_THM;]
16505 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)`)
16506 THEN ASM_REWRITE_TAC[azim]
16507 THEN STRIP_TAC
16508 THENL(*22*)[
16509
16510 MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `y:real^3`;`v:real^3`]
16511 THEN ABBREV_TAC`u123=inverse1_sigma_fan x V E v w:real^3`
16512 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
16513 THEN REMOVE_ASSUM_TAC
16514 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16515 THEN POP_ASSUM MP_TAC
16516 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
16517 THEN STRIP_TAC
16518 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
16519 THEN REWRITE_TAC[fan80]
16520 THEN STRIP_TAC
16521 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u123:real^3`])
16522 THEN POP_ASSUM MP_TAC
16523 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16524 THEN RESA_TAC
16525 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u123:real^3)`;
16526 ` (v:real^3)`]
16527 THEN POP_ASSUM MP_TAC
16528 THEN POP_ASSUM MP_TAC
16529 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16530 THEN RESA_TAC
16531 THEN RESA_TAC
16532 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`]
16533 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`; `w:real^3`;`u123:real^3`]
16534 THEN POP_ASSUM MP_TAC
16535 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16536 THEN RESA_TAC
16537 THEN POP_ASSUM MP_TAC
16538 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16539 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16540 THEN STRIP_TAC
16541 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`;]
16542 THEN POP_ASSUM MP_TAC
16543 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
16544 THEN REWRITE_TAC[GSYM DOT_LNEG;GSYM CROSS_SKEW]
16545 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16546 THEN ASM_REWRITE_TAC[]
16547 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16548 THEN STRIP_TAC
16549 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)`]
16550 THEN POP_ASSUM MP_TAC
16551 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16552 THEN RESA_TAC
16553 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < t1' / &2 ==> ~collinear {x, (&1 - h) % v + h % u123, w:real^3})`ASSUME_TAC
16554 THENL(*23*)[
16555
16556 POP_ASSUM MP_TAC
16557 THEN DISCH_THEN(LABEL_TAC"CHANGE")
16558 THEN GEN_TAC THEN STRIP_TAC
16559 THEN REMOVE_THEN "CHANGE"(fun th-> MRESA1_TAC th`h:real`)
16560 THEN POP_ASSUM MATCH_MP_TAC
16561 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
16562 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
16563 THEN REAL_ARITH_TAC;(*23*)
16564
16565 MP_TAC(REAL_ARITH`&0< t1' /\ t1'<= &1==> &0< t1'/ &2 /\ t1'/ &2 < &1`)
16566 THEN RESA_TAC
16567 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`]
16568 THEN POP_ASSUM MP_TAC
16569 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
16570 THEN RESA_TAC
16571 THEN POP_ASSUM MP_TAC
16572 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16573 THEN RESA_TAC
16574 THEN POP_ASSUM MP_TAC
16575 THEN DISCH_THEN(LABEL_TAC"YEU")
16576 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w) IN d1_fan(x:real^3,V,E)`
16577 ASSUME_TAC
16578 THENL(*24*)[
16579
16580 REWRITE_TAC[d1_fan;IN_ELIM_THM]
16581 THEN EXISTS_TAC`x:real^3`
16582 THEN EXISTS_TAC`v:real^3`
16583 THEN EXISTS_TAC`w:real^3`
16584 THEN EXISTS_TAC`sigma_fan x V E v w:real^3`
16585 THEN ASM_REWRITE_TAC[];(*24*)
16586
16587 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w) IN
16588       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16589 THENL(*25*)[
16590
16591 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
16592 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
16593 THEN ASM_REWRITE_TAC[face];(*25*)
16594
16595 SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v) IN d1_fan(x:real^3,V,E)`
16596 ASSUME_TAC
16597 THENL(*26*)[
16598
16599 REWRITE_TAC[d1_fan;IN_ELIM_THM]
16600 THEN EXISTS_TAC`x:real^3`
16601 THEN EXISTS_TAC`w:real^3`
16602 THEN EXISTS_TAC`v:real^3`
16603 THEN EXISTS_TAC`sigma_fan x V E w v:real^3`
16604 THEN ASM_REWRITE_TAC[]
16605 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16606 THEN ASM_REWRITE_TAC[];(*26*)
16607
16608
16609 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) IN
16610       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
16611 THENL(*27*)[
16612
16613 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
16614 THEN EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
16615 THEN ASM_REWRITE_TAC[face];(*27*)
16616
16617 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
16618 THENL(*28*)[
16619
16620 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
16621 THEN EXISTS_TAC`SUC 0:num`
16622 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
16623 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)))`]
16624 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;])
16625 THEN REWRITE_TAC[f1_fan]
16626 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`];(*28*)
16627
16628 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)`)
16629 THEN RESA_TAC
16630 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`t/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
16631 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`]
16632 THEN POP_ASSUM MP_TAC
16633 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16634 THEN RESA_TAC
16635 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]
16636 THEN POP_ASSUM MP_TAC
16637 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16638 THEN RESA_TAC
16639 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`]
16640 THEN POP_ASSUM MP_TAC
16641 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16642 THEN RESA_TAC
16643 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
16644                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16645                 x' IN u} SUBSET
16646       dart_leads_into x V E v u123
16647 /\ a IN aff_gt {x} {(&1 - t / &2) % v + t / &2 % u123, w:real^3}
16648 /\ &0 < t / &2 /\ t / &2 < &1
16649 ==> a IN dart_leads_into x V E v u123`)
16650 THEN RESA_TAC
16651 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
16652 `(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`]
16653 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,v:real^3,u123:real^3,w:real^3)`[pr2;pr3])
16654 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`]
16655 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`y:real^3`;`v1:real^3`;`a:real^3`]
16656 THEN POP_ASSUM MP_TAC
16657 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16658 THEN RESA_TAC
16659 THEN POP_ASSUM MP_TAC
16660 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16661 THEN RESA_TAC
16662 THEN MRESA_TAC th3[`(x:real^3)` ;` (a:real^3)`;`(y:real^3)`;]
16663 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}`ASSUME_TAC
16664 THENL(*29*)[
16665
16666 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a:real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
16667 THEN EXISTS_TAC`&1-a':real`
16668 THEN EXISTS_TAC` a':real`
16669 THEN ASM_REWRITE_TAC[]
16670 THEN REAL_ARITH_TAC;(*29*)
16671
16672
16673 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`]
16674 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {(&1 - t / &2) % v + t / &2 % u123, w:real^3}`
16675 ASSUME_TAC
16676 THENL(*30*)[
16677
16678 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`]
16679 THEN POP_ASSUM MP_TAC
16680 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16681 THEN RESA_TAC
16682 THEN MRESA_TAC th3[`x:real^3`;`(&1 - t / &2) % v + t / &2 % u123:real^3`;`w:real^3`]
16683 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`(&1 - t / &2) % v + t / &2 % u123:real^3`;`w:real^3`]
16684 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`a:real^3`;`a':real`][VECTOR_ARITH`a' % (a - x) + x=(&1 - a') % x + a' % a`])
16685 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16686 THEN RESA_TAC;(*30*)
16687
16688 MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`w:real^3`;`v:real^3`;`u123:real^3`]
16689 THEN POP_ASSUM MP_TAC
16690 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16691 THEN RESA_TAC
16692 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t/ &2:real`)
16693 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`]
16694 THEN POP_ASSUM MP_TAC
16695 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16696 THEN RESA_TAC
16697 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`]
16698 THEN POP_ASSUM MP_TAC
16699 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16700 THEN RESA_TAC
16701 THEN MP_TAC(SET_RULE`aff_gt {x} {w, (&1 - t / &2) % v + t / &2 % u123, v} SUBSET
16702       {x' | ?u. (?a. (&0 < a /\ a < &1) /\
16703                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16704                 x' IN u}
16705 /\ {x' | ?u. (?a. (&0 < a /\ a < &1) /\
16706                      u = aff_gt {x} {(&1 - a) % v + a % u123, w}) /\
16707                 x' IN u} SUBSET
16708       dart_leads_into x V E v u123
16709 ==>
16710 aff_gt {x} {w, (&1 - t / &2) % v + t / &2 % u123, v:real^3} SUBSET
16711 dart_leads_into x V E v u123
16712 `)
16713 THEN ASM_REWRITE_TAC[]
16714 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16715 THEN RESA_TAC
16716 THEN MP_TAC(SET_RULE`aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
16717       aff_gt {x} {w, v, (&1 - t / &2) % v + t / &2 % u123}
16718
16719 /\ aff_gt {x} {w, v, (&1 - t / &2) % v + t / &2 % u123} SUBSET
16720       dart_leads_into x V E v u123
16721
16722 ==>
16723 aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
16724 dart_leads_into x V E v u123
16725 `)
16726 THEN ASM_REWRITE_TAC[]
16727 THEN STRIP_TAC
16728 THEN MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
16729 THEN MP_TAC(REAL_ARITH`t'< &1/\ &0<= t1 /\ ~(t1= &0)==> &0< &1- t' /\ ~(&1- t' = &0) /\ &0< t1`)
16730 THEN RESA_TAC
16731 THEN MRESAL_TAC REAL_LT_MUL[`t1:real`;`&1- t':real`][REAL_ARITH`t1*(&1- t')= t1- t' * t1`]
16732 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th `t1 - t' * t1:real`)
16733 THEN SUBGOAL_THEN`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3}`
16734 ASSUME_TAC
16735 THENL(*31*)[
16736
16737 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`]
16738 THEN MP_TAC(SET_RULE`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}
16739 /\ aff_gt {x} {a} SUBSET dart_leads_into x V E v u123
16740 /\ dart_leads_into x V E v u123 SUBSET yfan (x,V,E)
16741 ==> (&1 - t') % y + t' % v1 IN yfan(x,V,E)`)
16742 THEN RESA_TAC
16743 THEN POP_ASSUM MP_TAC
16744 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
16745 THEN STRIP_TAC
16746 THEN MRESA_TAC x_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
16747 THEN MP_TAC(SET_RULE`~((&1 - t') % y + t' % v1 IN xfan (x,V:real^3->bool,E)) /\ x IN xfan (x,V,E)
16748 ==> ~(x= (&1 - t') % y + t' % v1:real^3)`)
16749 THEN RESA_TAC
16750 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)`;
16751 VECTOR_ARITH`t1' % x + t2 % v1 + t3 % ((&1 - t') % y + t' % v1)
16752 = t1' % x + (t3 *(&1 - t')) % y + (t2+ t3*t') % v1`]
16753 THEN EXPAND_TAC"v1"
16754 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x +
16755      (t3 * (&1 - t')) % y +
16756      (t2 + t3 * t') % ((&1 - t1) % y + t1 % z)
16757 = t1' % x +
16758      (t3 * (&1 - t') + (t2 + t3 * t') * (&1 - t1)) % y +
16759      ((t2 + t3 * t') * t1) % z`]
16760 THEN MRESA1_TAC REAL_MUL_LINV`&1- t':real`
16761 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
16762 THEN EXISTS_TAC`&0`
16763 THEN EXISTS_TAC `inv t1 * (t1- e1)- ((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t')* t' :real`
16764 THEN EXISTS_TAC`((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t'):real`
16765 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)+
16766   (t1 - e1) * inv t1 * (&1 - t1)= &1 - (t1 - e1)`; REAL_ARITH`A * &1=A`
16767 ;VECTOR_ARITH` &0 % x + A +B= A+B`;
16768 REAL_ARITH`&0 +
16769  inv t1 * (t1 - e1) -
16770  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') * t' +
16771  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t')
16772 = inv t1 * (t1 - e1) +
16773  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') *(&1- t')`;
16774 REAL_ARITH`inv t1 * (t1 - e1) + &1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)
16775 = (t1 - e1)*(inv t1 * t1 )  + &1 - (t1 - e1)`
16776 ; REAL_ARITH`A+ &1-A= &1`]
16777 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-(t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)=
16778 &1- (&1+ inv t1 - inv t1* t1) *(t1 - e1) `; REAL_ARITH`A +B-A=B`
16779 ;REAL_ARITH`inv t1 * (t1 - e1) = inv t1 * t1 - inv t1 * e1`
16780 ;REAL_ARITH`A-(A-B)=B`;
16781 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') * t'
16782 = &1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * inv (&1 - t') * (&1-t')`;
16783 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * &1=
16784 &1- (inv t1 * e1) * inv (&1 - t')` ]
16785 THEN STRIP_TAC
16786 THENL(*32*)[
16787
16788 REWRITE_TAC[ REAL_ARITH`&0< &1 - (inv t1 * e1) * inv (&1 - t')
16789 <=>  ((inv t1) * inv (&1 -t')) * e1 < &1`;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
16790 THEN MP_TAC(REAL_ARITH` &0< t1 - t' * t1==> ~(t1 - t' * t1= &0)`)
16791 THEN RESA_TAC
16792 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
16793 THEN MRESA1_TAC REAL_MUL_LINV`t1- t' * t1:real`
16794 THEN MRESA_TAC REAL_LT_LMUL[`inv (t1- t' * t1):real`;`e1:real`;`t1- t' * t1:real`];(*32*)
16795
16796 REWRITE_TAC[ REAL_ARITH`&0< (inv t1 * e1) * inv (&1 - t')
16797 <=>  &0< ((inv t1) * inv (&1 -t')) * e1 `;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
16798 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
16799 THEN MATCH_MP_TAC REAL_LT_MUL
16800 THEN ASM_REWRITE_TAC[]](*32*);(*31*)
16801
16802 MP_TAC(SET_RULE`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN
16803       aff_gt {x} {v1, (&1 - t') % y + t' % v1}
16804 /\ aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3} SUBSET
16805       dart_leads_into x V E v u123
16806 ==> (&1 - (t1 - e1)) % y + (t1 - e1) % z IN
16807       dart_leads_into x V E v u123`)
16808 THEN RESA_TAC
16809 THEN POP_ASSUM MP_TAC
16810 THEN REMOVE_ASSUM_TAC
16811 THEN POP_ASSUM MP_TAC
16812 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
16813 THEN RESA_TAC
16814 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) f3 IN
16815       face_set (hypermap1_of_fanx (x:real^3,V,E))`
16816 ASSUME_TAC
16817 THENL(*32*)[
16818
16819 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
16820 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
16821 THEN REWRITE_TAC[face]
16822 THEN ASM_REWRITE_TAC[];(*32*)
16823
16824 ABBREV_TAC`y123=(&1 - (t1 - e1)) % y + (t1 - e1) % z:real^3`
16825 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`]
16826 THEN POP_ASSUM MP_TAC
16827 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16828 THEN RESA_TAC
16829 THEN STRIP_TAC
16830 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y123:real^3`]
16831 THEN POP_ASSUM MP_TAC
16832 THEN REMOVE_ASSUM_TAC
16833 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16834 THEN STRIP_TAC
16835 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`]
16836 THEN POP_ASSUM MP_TAC
16837 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
16838 THEN RESA_TAC
16839 THEN STRIP_TAC
16840 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y123:real^3`]
16841 THEN POP_ASSUM MP_TAC
16842 THEN REMOVE_ASSUM_TAC
16843 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16844 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`]
16845 THEN STRIP_TAC
16846 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
16847 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
16848 THEN STRIP_TAC
16849 THEN REMOVE_ASSUM_TAC
16850 THEN REMOVE_ASSUM_TAC
16851 THEN REMOVE_ASSUM_TAC
16852 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)`)
16853 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)`)
16854 THEN POP_ASSUM MP_TAC
16855 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16856 THEN STRIP_TAC
16857 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`]
16858 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f3:real^3#real^3#real^3#real^3`]
16859 THEN POP_ASSUM MP_TAC
16860 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16861 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
16862 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
16863 THENL(*33*)[
16864 REWRITE_TAC[face;IN_ELIM_THM; orbit_map]
16865 THEN EXISTS_TAC`0`
16866 THEN ASM_REWRITE_TAC[ARITH_RULE`0>= 0`;POWER;I_DEF];(*33*)
16867
16868 STRIP_TAC
16869 THEN MP_TAC(SET_RULE`x,w,v,sigma_fan x V E w v IN
16870       face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3)
16871 /\ face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) SUBSET D
16872 ==> x,w,v,sigma_fan x V E w v IN D`)
16873 THEN RESA_TAC
16874 THEN ABBREV_TAC`u12=inverse1_sigma_fan x V E w v:real^3`
16875 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
16876 THEN REMOVE_ASSUM_TAC
16877 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
16878 THEN POP_ASSUM MP_TAC
16879 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
16880 THEN POP_ASSUM MP_TAC
16881 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16882 THEN ASM_REWRITE_TAC[]
16883 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16884 THEN  REPEAT STRIP_TAC
16885 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
16886 THEN REWRITE_TAC[fan80]
16887 THEN STRIP_TAC
16888 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`u12:real^3`])
16889 THEN POP_ASSUM MP_TAC
16890 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16891 THEN RESA_TAC
16892 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u12:real^3)`;
16893 ` (w:real^3)`]
16894 THEN POP_ASSUM MP_TAC
16895 THEN POP_ASSUM MP_TAC
16896 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16897 THEN RESA_TAC
16898 THEN RESA_TAC
16899 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`]
16900 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`; `v:real^3`;`u12:real^3`]
16901 THEN POP_ASSUM MP_TAC
16902 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
16903 THEN RESA_TAC
16904 THEN POP_ASSUM MP_TAC
16905 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16906 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16907 THEN STRIP_TAC
16908 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < &1 / &2 ==> ~collinear {x, v, (&1 - h) % w + h % u12:real^3})`
16909 ASSUME_TAC
16910 THENL(*34*)[
16911 REPEAT STRIP_TAC
16912 THEN POP_ASSUM MP_TAC
16913 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`]
16914 THEN POP_ASSUM MATCH_MP_TAC
16915 THEN POP_ASSUM MP_TAC
16916 THEN REAL_ARITH_TAC;(*34*)
16917
16918 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`z:real^3`;`y:real^3`;`v1:real^3`]
16919 THEN POP_ASSUM MP_TAC
16920 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16921 THEN RESA_TAC
16922 THEN POP_ASSUM MP_TAC
16923 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16924 THEN RESA_TAC
16925 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`z:real^3`;`y:real^3 `;`v1:real^3`]
16926 THEN POP_ASSUM MP_TAC
16927 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
16928 THEN REWRITE_TAC[SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y) /\ ~(x=z)`;]
16929 THEN RESA_TAC
16930 THEN MP_TAC(REAL_ARITH`azim x v1 v y < pi ==> azim x v1 v y <= pi`)
16931 THEN RESA_TAC
16932 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`v:real^3`;`y:real^3`]
16933 THEN MP_TAC(REAL_ARITH`pi = azim x v1 z v + azim x v1 v y /\
16934 &0< azim x v1 v y /\ azim x v1 v y< pi ==> &0< azim x v1 z v  /\ azim x v1 z v < pi`)
16935 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
16936 THEN STRIP_TAC
16937 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `v:real^3`;`z:real^3`]
16938 THEN POP_ASSUM MP_TAC
16939 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16940 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
16941 THEN STRIP_TAC
16942 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`]
16943 THEN POP_ASSUM MP_TAC
16944 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
16945 THEN ASM_REWRITE_TAC[]
16946 THEN STRIP_TAC
16947 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`t''/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
16948 THEN POP_ASSUM MP_TAC
16949 THEN MP_TAC(REAL_ARITH`&0 < t''/\ t'' < &1 ==> &0 < t'' / &2 /\ t'' / &2 < t''/\ t'' / &2< &1`)
16950 THEN RESA_TAC
16951 THEN STRIP_TAC
16952 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`]
16953 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]
16954 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`]
16955 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
16956                      u = aff_gt {x} {v, (&1 - a) % w + a % u12}) /\
16957                 x' IN u} SUBSET
16958       dart_leads_into x V E w u12
16959 /\ a'' IN aff_gt {x} {v, (&1 - t'' / &2) % w + t'' / &2 % u12:real^3}
16960 /\ &0< t''/ &2 /\ t''/ &2< &1
16961 ==> a'' IN dart_leads_into x V E w u12`)
16962 THEN RESA_TAC
16963 THEN POP_ASSUM MP_TAC
16964 THEN SUBGOAL_THEN`x,w,u12,v IN
16965       face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3)`ASSUME_TAC
16966 THENL(*35*)[
16967
16968 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
16969 THEN EXISTS_TAC`SUC 0:num`
16970 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
16971 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)))`]
16972 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;])
16973 THEN REWRITE_TAC[f1_fan]
16974 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`];(*35*)
16975
16976 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
16977 `(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`]
16978 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,w:real^3,u12:real^3,v:real^3)`[pr2;pr3])
16979 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
16980 THEN STRIP_TAC
16981 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`]
16982 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`a'':real^3`]
16983 THEN MRESA_TAC th3[`(x:real^3)` ;` (a'':real^3)`;`(v1:real^3)`;]
16984 THEN SUBGOAL_THEN`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a'':real^3}`ASSUME_TAC
16985 THENL(*36*)[
16986
16987 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a'':real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
16988 THEN EXISTS_TAC`&1-a''':real`
16989 THEN EXISTS_TAC` a''':real`
16990 THEN ASM_REWRITE_TAC[]
16991 THEN REAL_ARITH_TAC;(*36*)
16992
16993 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`]
16994 THEN MP_TAC(SET_RULE`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a''}
16995 /\ aff_gt {x} {a''} SUBSET
16996       dartset_leads_into_fan x V E
16997       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3))
16998 ==> (&1 - t''') % v1 + t''' % z IN
16999       dartset_leads_into_fan x V E
17000       (face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w))`)
17001 THEN ASM_REWRITE_TAC[]
17002 THEN EXPAND_TAC"v1"
17003 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t''') % ((&1 - t1) % y + t1 % z) + t''' % z
17004 =(&1 - (t1+ (&1 - t1)*t''')) % y + (t1+ (&1 - t1)*t''') % z`]
17005 THEN SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w:real^3) IN D`ASSUME_TAC
17006 THENL(*37*)[
17007
17008 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`]
17009 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`]
17010 THEN REMOVE_ASSUM_TAC
17011 THEN REMOVE_ASSUM_TAC
17012 THEN POP_ASSUM MP_TAC
17013 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)))`]
17014 THEN REMOVE_ASSUM_TAC
17015 THEN REMOVE_ASSUM_TAC
17016 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`)
17017 THEN REWRITE_TAC[e_fan;POWER;I_DEF;o_DEF];(*37*)
17018
17019
17020 STRIP_TAC
17021 THEN SUBGOAL_THEN `t1 + (&1 - t1) * t''' IN TA:real->bool`ASSUME_TAC
17022 THENL(*38*)[
17023
17024 EXPAND_TAC"TA"
17025 THEN REWRITE_TAC[IN_ELIM_THM]
17026 THEN STRIP_TAC
17027 THENL(*39*)[
17028
17029 MATCH_MP_TAC(REAL_ARITH`&0<= A /\ &0<=B ==> &0<=A+B`)
17030 THEN ASM_REWRITE_TAC[]
17031 THEN MATCH_MP_TAC REAL_LE_MUL
17032 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17033 THEN MATCH_MP_TAC(REAL_ARITH`&0<A ==> &0<=A `)
17034 THEN ASM_REWRITE_TAC[];(*39*)
17035 STRIP_TAC
17036 THENL(*40*)[
17037
17038 REWRITE_TAC[REAL_ARITH`t1 + (&1 - t1) * t''' <= &1<=> &0 <= (&1 - t1)* (&1- t''')`]
17039 THEN MATCH_MP_TAC REAL_LE_MUL
17040 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17041 THEN MATCH_MP_TAC(REAL_ARITH`A< &1 ==> A<= &1 `)
17042 THEN ASM_REWRITE_TAC[];(*40*)
17043
17044 EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
17045 THEN ASM_REWRITE_TAC[]](*40*)](*39*);(*38*)
17046
17047 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1 + (&1 - t1) * t''':real` th))`!x. x IN TA ==> x <= t1`
17048 THEN MP_TAC(SET_RULE`t1 + (&1 - t1) * t''' IN TA /\ ~(t1 IN TA)==> ~(t1=t1 + (&1 - t1) * t''')`)
17049 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
17050 THEN ASM_REWRITE_TAC[]
17051 THEN STRIP_TAC
17052 THEN STRIP_TAC
17053 THEN MP_TAC(REAL_ARITH`t1 + (&1 - t1) * t''' <= t1 /\ ~(t1= t1 + (&1 - t1) * t''') /\ t1<= &1 /\ &0< t'''
17054 ==> (&1 - t1) * t'''< &0:real /\ &0<= (&1 -t1)/\ &0<= t'''`)
17055 THEN RESA_TAC
17056 THEN MRESA_TAC REAL_LE_MUL[`(&1- t1):real`;`t''':real`]
17057 THEN POP_ASSUM MP_TAC
17058 THEN REMOVE_ASSUM_TAC
17059 THEN REMOVE_ASSUM_TAC
17060 THEN POP_ASSUM MP_TAC
17061 THEN REAL_ARITH_TAC](*38*)](*37*)](*36*)](*35*)](*34*)](*33*)](*32*)](*31*)](*30*)](*29*)](*28*)](*27*)](*26*)](*25*)](*24*)](*23*);(*22*)
17062
17063
17064 POP_ASSUM MP_TAC
17065 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`w:real^3`;`v:real^3`;`v1:real^3`]
17066 THEN POP_ASSUM MP_TAC
17067 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17068 THEN RESA_TAC
17069 THEN POP_ASSUM MP_TAC
17070 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17071 THEN RESA_TAC
17072 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`;`w:real^3 `;`v1:real^3`]
17073 THEN STRIP_TAC
17074 THEN MP_TAC(REAL_ARITH`pi < azim x v1 v y==> pi <= azim x v1 v y`)
17075 THEN RESA_TAC
17076 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`w:real^3`;`y:real^3`]
17077 THEN MP_TAC(REAL_ARITH`pi < azim x v1 v y
17078 /\ azim x v1 v y = pi + azim x v1 w y /\ azim x v1 v y< &2 * pi
17079 ==> &0< azim x v1 w y /\ azim x v1 w y< pi`)
17080 THEN ASM_REWRITE_TAC[azim]
17081 THEN STRIP_TAC
17082 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `y:real^3`;`w:real^3`]
17083 THEN ABBREV_TAC`u123=inverse1_sigma_fan x V E w v:real^3`
17084 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`w:real^3`]
17085 THEN REMOVE_ASSUM_TAC
17086 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
17087 THEN POP_ASSUM MP_TAC
17088 THEN POP_ASSUM (fun th-> MRESA1_TAC th `v:real^3`)
17089 THEN POP_ASSUM MP_TAC
17090 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17091 THEN ASM_REWRITE_TAC[]
17092 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17093 THEN REPEAT STRIP_TAC
17094 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
17095 THEN REWRITE_TAC[fan80]
17096 THEN STRIP_TAC
17097 THEN POP_ASSUM (fun th -> MRESA_TAC th [`w:real^3`;`u123:real^3`])
17098 THEN POP_ASSUM MP_TAC
17099 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17100 THEN RESA_TAC
17101 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u123:real^3)`;
17102 ` (w:real^3)`]
17103 THEN POP_ASSUM MP_TAC
17104 THEN POP_ASSUM MP_TAC
17105 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17106 THEN RESA_TAC
17107 THEN RESA_TAC
17108 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`]
17109 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`w:real^3`; `v:real^3`;`u123:real^3`]
17110 THEN POP_ASSUM MP_TAC
17111 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17112 THEN RESA_TAC
17113 THEN POP_ASSUM MP_TAC
17114 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17115 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17116 THEN STRIP_TAC
17117 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`;]
17118 THEN POP_ASSUM MP_TAC
17119 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
17120 THEN REWRITE_TAC[GSYM DOT_LNEG;GSYM CROSS_SKEW]
17121 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17122 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17123 THEN ASM_REWRITE_TAC[]
17124 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17125 THEN STRIP_TAC
17126 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)`]
17127 THEN POP_ASSUM MP_TAC
17128 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17129 THEN RESA_TAC
17130 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < t1' / &2 ==> ~collinear {x, (&1 - h) % w + h % u123, v:real^3})`ASSUME_TAC
17131 THENL(*23*)[
17132
17133 POP_ASSUM MP_TAC
17134 THEN DISCH_THEN(LABEL_TAC"CHANGE")
17135 THEN GEN_TAC THEN STRIP_TAC
17136 THEN REMOVE_THEN "CHANGE"(fun th-> MRESA1_TAC th`h:real`)
17137 THEN POP_ASSUM MATCH_MP_TAC
17138 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
17139 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
17140 THEN REAL_ARITH_TAC;(*23*)
17141
17142 MP_TAC(REAL_ARITH`&0< t1' /\ t1'<= &1==> &0< t1'/ &2 /\ t1'/ &2 < &1`)
17143 THEN RESA_TAC
17144 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`]
17145 THEN POP_ASSUM MP_TAC
17146 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
17147 THEN RESA_TAC
17148 THEN POP_ASSUM MP_TAC
17149 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17150 THEN RESA_TAC
17151 THEN POP_ASSUM MP_TAC
17152 THEN DISCH_THEN(LABEL_TAC"YEU")
17153 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v) IN d1_fan(x:real^3,V,E)`
17154 ASSUME_TAC
17155 THENL(*24*)[
17156
17157 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17158 THEN EXISTS_TAC`x:real^3`
17159 THEN EXISTS_TAC`w:real^3`
17160 THEN EXISTS_TAC`v:real^3`
17161 THEN EXISTS_TAC`sigma_fan x V E w v:real^3`
17162 THEN ASM_REWRITE_TAC[]
17163 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17164 THEN ASM_REWRITE_TAC[];(*24*)
17165
17166 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v) IN
17167       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17168 THENL(*25*)[
17169
17170 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
17171 THEN EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
17172 THEN ASM_REWRITE_TAC[face];(*25*)
17173
17174 SUBGOAL_THEN`(x,v,w,sigma_fan x V E v w) IN d1_fan(x:real^3,V,E)`
17175 ASSUME_TAC
17176 THENL(*26*)[
17177
17178 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17179 THEN EXISTS_TAC`x:real^3`
17180 THEN EXISTS_TAC`v:real^3`
17181 THEN EXISTS_TAC`w:real^3`
17182 THEN EXISTS_TAC`sigma_fan x V E v w:real^3`
17183 THEN ASM_REWRITE_TAC[];(*26*)
17184
17185
17186 SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E  v w) IN
17187       face_set (hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17188 THENL(*27*)[
17189
17190 REWRITE_TAC[face_set;IN_ELIM_THM;set_of_orbits;]
17191 THEN EXISTS_TAC`(x,v,w,sigma_fan x V E v w:real^3)`
17192 THEN ASM_REWRITE_TAC[face];(*27*)
17193
17194 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
17195 THENL(*28*)[
17196
17197 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
17198 THEN EXISTS_TAC`SUC 0:num`
17199 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
17200 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)))`]
17201 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;])
17202 THEN REWRITE_TAC[f1_fan]
17203 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w:real^3`];(*28*)
17204
17205 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)`)
17206 THEN RESA_TAC
17207 THEN REMOVE_THEN "YEU" (fun th-> MRESAL1_TAC th`t/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
17208 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`]
17209 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]
17210 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`]
17211 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
17212                      u = aff_gt {x} {(&1 - a) % w + a % u123, v}) /\
17213                 x' IN u} SUBSET
17214       dart_leads_into x V E w u123
17215 /\ a IN aff_gt {x} {(&1 - t / &2) % w + t / &2 % u123, v:real^3}
17216 /\ &0 < t / &2 /\ t / &2 < &1
17217 ==> a IN dart_leads_into x V E w u123`)
17218 THEN RESA_TAC
17219 THEN POP_ASSUM MP_TAC
17220 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17221 THEN RESA_TAC
17222 THEN MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
17223 `(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`]
17224 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,w:real^3,u123:real^3,v:real^3)`[pr2;pr3])
17225 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`]
17226 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`y:real^3`;`v1:real^3`;`a:real^3`]
17227 THEN POP_ASSUM MP_TAC
17228 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17229 THEN RESA_TAC
17230 THEN POP_ASSUM MP_TAC
17231 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
17232 THEN RESA_TAC
17233 THEN MRESA_TAC th3[`(x:real^3)` ;` (a:real^3)`;`(y:real^3)`;]
17234 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}`ASSUME_TAC
17235 THENL(*29*)[
17236
17237 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a:real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
17238 THEN EXISTS_TAC`&1-a':real`
17239 THEN EXISTS_TAC` a':real`
17240 THEN ASM_REWRITE_TAC[]
17241 THEN REAL_ARITH_TAC;(*29*)
17242
17243
17244 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`]
17245 THEN SUBGOAL_THEN`(&1 - t') % y + t' % v1 IN aff_gt {x} {(&1 - t / &2) % w + t / &2 % u123, v:real^3}`
17246 ASSUME_TAC
17247 THENL(*30*)[
17248
17249 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`]
17250 THEN POP_ASSUM MP_TAC
17251 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17252 THEN RESA_TAC
17253 THEN MRESA_TAC th3[`x:real^3`;`(&1 - t / &2) % w + t / &2 % u123:real^3`;`v:real^3`]
17254 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`(&1 - t / &2) % w + t / &2 % u123:real^3`;`v:real^3`]
17255 THEN POP_ASSUM (fun th-> MRESAL_TAC th[`a:real^3`;`a':real`][VECTOR_ARITH`a' % (a - x) + x=(&1 - a') % x + a' % a`])
17256 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17257 THEN RESA_TAC;(*30*)
17258
17259 MRESA_TAC continuous_coplanar_fan[`x:real^3 `;`v:real^3`;`w:real^3`;`u123:real^3`]
17260 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t/ &2:real`)
17261 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`]
17262 THEN POP_ASSUM MP_TAC
17263 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17264 THEN RESA_TAC
17265 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`]
17266 THEN MP_TAC(SET_RULE`aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123} SUBSET
17267       {x' | ?u. (?a. (&0 < a /\ a < &1) /\
17268                      u = aff_gt {x} {v, (&1 - a) % w + a % u123}) /\
17269                 x' IN u}
17270 /\
17271 {x' | ?u. (?a. (&0 < a /\ a < &1) /\
17272                      u = aff_gt {x} {v, (&1 - a) % w + a % u123}) /\
17273                 x' IN u} SUBSET
17274       dart_leads_into x V E w u123
17275 ==>
17276 aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % u123} SUBSET
17277 dart_leads_into x V E w u123 `)
17278 THEN RESA_TAC
17279 THEN MP_TAC(SET_RULE`aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
17280       aff_gt {x} {v, w, (&1 - t / &2) % w + t / &2 % 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
17285 ==>  aff_gt {x} {v1, (&1 - t') % y + t' % v1} SUBSET
17286 dart_leads_into x V E w u123`)
17287 THEN RESA_TAC
17288 THEN MP_TAC(SET_RULE`&0 IN TA /\ ~(t1 IN TA)==> ~(t1= &0)`)
17289 THEN MP_TAC(REAL_ARITH`t'< &1/\ &0<= t1 /\ ~(t1= &0)==> &0< &1- t' /\ ~(&1- t' = &0) /\ &0< t1`)
17290 THEN RESA_TAC
17291 THEN MRESAL_TAC REAL_LT_MUL[`t1:real`;`&1- t':real`][REAL_ARITH`t1*(&1- t')= t1- t' * t1`]
17292 THEN REMOVE_THEN "LINH1"(fun th-> MRESA1_TAC th `t1 - t' * t1:real`)
17293 THEN SUBGOAL_THEN`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3}`
17294 ASSUME_TAC
17295 THENL(*31*)[
17296
17297 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`]
17298 THEN MP_TAC(SET_RULE`(&1 - t') % y + t' % v1 IN aff_gt {x} {a:real^3}
17299 /\ aff_gt {x} {a} SUBSET dart_leads_into x V E w u123
17300 /\ dart_leads_into x V E w u123 SUBSET yfan (x,V,E)
17301 ==> (&1 - t') % y + t' % v1 IN yfan(x,V,E)`)
17302 THEN RESA_TAC
17303 THEN POP_ASSUM MP_TAC
17304 THEN REWRITE_TAC[yfan;IN_ELIM_THM;DIFF]
17305 THEN STRIP_TAC
17306 THEN MRESA_TAC x_in_xfan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`]
17307 THEN MP_TAC(SET_RULE`~((&1 - t') % y + t' % v1 IN xfan (x,V:real^3->bool,E)) /\ x IN xfan (x,V,E)
17308 ==> ~(x= (&1 - t') % y + t' % v1:real^3)`)
17309 THEN RESA_TAC
17310 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)`;
17311 VECTOR_ARITH`t1' % x + t2 % v1 + t3 % ((&1 - t') % y + t' % v1)
17312 = t1' % x + (t3 *(&1 - t')) % y + (t2+ t3*t') % v1`]
17313 THEN EXPAND_TAC"v1"
17314 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x +
17315      (t3 * (&1 - t')) % y +
17316      (t2 + t3 * t') % ((&1 - t1) % y + t1 % z)
17317 = t1' % x +
17318      (t3 * (&1 - t') + (t2 + t3 * t') * (&1 - t1)) % y +
17319      ((t2 + t3 * t') * t1) % z`]
17320 THEN MRESA1_TAC REAL_MUL_LINV`&1- t':real`
17321 THEN MRESA1_TAC REAL_MUL_LINV`t1:real`
17322 THEN EXISTS_TAC`&0`
17323 THEN EXISTS_TAC `inv t1 * (t1- e1)- ((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t')* t' :real`
17324 THEN EXISTS_TAC`((&1 - (t1 - e1)) - inv t1 * (t1- e1) *(&1- t1)) * inv(&1- t'):real`
17325 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)+
17326   (t1 - e1) * inv t1 * (&1 - t1)= &1 - (t1 - e1)`; REAL_ARITH`A * &1=A`
17327 ;VECTOR_ARITH` &0 % x + A +B= A+B`;
17328 REAL_ARITH`&0 +
17329  inv t1 * (t1 - e1) -
17330  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') * t' +
17331  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t')
17332 = inv t1 * (t1 - e1) +
17333  (&1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)) * inv (&1 - t') *(&1- t')`;
17334 REAL_ARITH`inv t1 * (t1 - e1) + &1 - (t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)
17335 = (t1 - e1)*(inv t1 * t1 )  + &1 - (t1 - e1)`
17336 ; REAL_ARITH`A+ &1-A= &1`]
17337 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-(t1 - e1) - inv t1 * (t1 - e1) * (&1 - t1)=
17338 &1- (&1+ inv t1 - inv t1* t1) *(t1 - e1) `; REAL_ARITH`A +B-A=B`
17339 ;REAL_ARITH`inv t1 * (t1 - e1) = inv t1 * t1 - inv t1 * e1`
17340 ;REAL_ARITH`A-(A-B)=B`;
17341 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') * t'
17342 = &1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * inv (&1 - t') * (&1-t')`;
17343 REAL_ARITH`&1 - inv t1 * e1 - (inv t1 * e1) * inv (&1 - t') + (inv t1 * e1) * &1=
17344 &1- (inv t1 * e1) * inv (&1 - t')` ]
17345 THEN STRIP_TAC
17346 THENL(*32*)[
17347
17348 REWRITE_TAC[ REAL_ARITH`&0< &1 - (inv t1 * e1) * inv (&1 - t')
17349 <=>  ((inv t1) * inv (&1 -t')) * e1 < &1`;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
17350 THEN MP_TAC(REAL_ARITH` &0< t1 - t' * t1==> ~(t1 - t' * t1= &0)`)
17351 THEN RESA_TAC
17352 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
17353 THEN MRESA1_TAC REAL_MUL_LINV`t1- t' * t1:real`
17354 THEN MRESA_TAC REAL_LT_LMUL[`inv (t1- t' * t1):real`;`e1:real`;`t1- t' * t1:real`];(*32*)
17355
17356
17357 REWRITE_TAC[ REAL_ARITH`&0< (inv t1 * e1) * inv (&1 - t')
17358 <=>  &0< ((inv t1) * inv (&1 -t')) * e1 `;GSYM REAL_INV_MUL; REAL_ARITH`A*( &1- B)=A- B*A`]
17359 THEN MRESA1_TAC REAL_LT_INV`t1- t' * t1:real`
17360 THEN MATCH_MP_TAC REAL_LT_MUL
17361 THEN ASM_REWRITE_TAC[]](*32*);(*31*)
17362
17363
17364 MP_TAC(SET_RULE`(&1 - (t1 - e1)) % y + (t1 - e1) % z IN
17365       aff_gt {x} {v1, (&1 - t') % y + t' % v1}
17366 /\ aff_gt {x} {v1, (&1 - t') % y + t' % v1:real^3} SUBSET
17367       dart_leads_into x V E w u123
17368 ==> (&1 - (t1 - e1)) % y + (t1 - e1) % z IN
17369       dart_leads_into x V E w u123`)
17370 THEN RESA_TAC
17371 THEN POP_ASSUM MP_TAC
17372 THEN REMOVE_ASSUM_TAC
17373 THEN POP_ASSUM MP_TAC
17374 THEN MP_TAC(SET_RULE`D SUBSET d1_fan (x:real^3,V,E) /\ f3 IN D==> f3 IN d1_fan (x,V,E)`)
17375 THEN RESA_TAC
17376 THEN SUBGOAL_THEN`face (hypermap1_of_fanx (x,V,E)) f3 IN
17377       face_set (hypermap1_of_fanx (x:real^3,V,E))`
17378 ASSUME_TAC
17379 THENL(*32*)[
17380
17381 ASM_REWRITE_TAC[face_set;set_of_orbits;IN_ELIM_THM]
17382 THEN EXISTS_TAC`f3:real^3#real^3#real^3#real^3`
17383 THEN REWRITE_TAC[face]
17384 THEN ASM_REWRITE_TAC[];(*32*)
17385
17386 ABBREV_TAC`y123=(&1 - (t1 - e1)) % y + (t1 - e1) % z:real^3`
17387 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`]
17388 THEN POP_ASSUM MP_TAC
17389 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
17390 THEN RESA_TAC
17391 THEN STRIP_TAC
17392 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y':real^3`;`y123:real^3`]
17393 THEN POP_ASSUM MP_TAC
17394 THEN REMOVE_ASSUM_TAC
17395 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17396 THEN STRIP_TAC
17397 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`]
17398 THEN POP_ASSUM MP_TAC
17399 THEN REWRITE_TAC[topological_component_yfan;IN_ELIM_THM;]
17400 THEN RESA_TAC
17401 THEN STRIP_TAC
17402 THEN MRESA_TAC CONNECTED_COMPONENT_EQ[`yfan(x:real^3, (V:real^3->bool) ,E)`;`y'':real^3`;`y123:real^3`]
17403 THEN POP_ASSUM MP_TAC
17404 THEN REMOVE_ASSUM_TAC
17405 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17406 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`]
17407 THEN STRIP_TAC
17408 THEN FIND_ASSUM MP_TAC`conforming_fan (x:real^3,V,E)`
17409 THEN REWRITE_TAC[conforming_fan;conforming_bijection_fan;EXISTS_UNIQUE]
17410 THEN STRIP_TAC
17411 THEN REMOVE_ASSUM_TAC
17412 THEN REMOVE_ASSUM_TAC
17413 THEN REMOVE_ASSUM_TAC
17414 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)`)
17415 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)`)
17416 THEN POP_ASSUM MP_TAC
17417 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17418 THEN STRIP_TAC
17419 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`]
17420 THEN MRESA_TAC lemma_face_subset_component[`hypermap1_of_fanx (x:real^3,V,E)`;`f3:real^3#real^3#real^3#real^3`]
17421 THEN POP_ASSUM MP_TAC
17422 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17423 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM th])
17424 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
17425 THENL(*33*)[
17426 REWRITE_TAC[face;IN_ELIM_THM; orbit_map]
17427 THEN EXISTS_TAC`0`
17428 THEN ASM_REWRITE_TAC[ARITH_RULE`0>= 0`;POWER;I_DEF];(*33*)
17429
17430 STRIP_TAC
17431 THEN MP_TAC(SET_RULE`x,v,w,sigma_fan x V E v w IN
17432       face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w:real^3)
17433 /\ face (hypermap1_of_fanx (x,V,E)) (x,v,w,sigma_fan x V E v w) SUBSET D
17434 ==> x,v,w,sigma_fan x V E v w IN D`)
17435 THEN RESA_TAC
17436 THEN ABBREV_TAC`u12=inverse1_sigma_fan x V E v w:real^3`
17437 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`;`v:real^3`]
17438 THEN REMOVE_ASSUM_TAC
17439 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
17440 THEN POP_ASSUM MP_TAC
17441 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w:real^3`)
17442 THEN  REPEAT STRIP_TAC
17443 THEN FIND_ASSUM MP_TAC`fan80 (x:real^3,V,E)`
17444 THEN REWRITE_TAC[fan80]
17445 THEN STRIP_TAC
17446 THEN POP_ASSUM (fun th -> MRESA_TAC th [`v:real^3`;`u12:real^3`])
17447 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u12:real^3)`;
17448 ` (v:real^3)`]
17449 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`]
17450 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v:real^3`; `w:real^3`;`u12:real^3`]
17451 THEN POP_ASSUM MP_TAC
17452 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17453 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17454 THEN STRIP_TAC
17455 THEN SUBGOAL_THEN`(!h. &0 < h /\ h < &1 / &2 ==> ~collinear {x, w, (&1 - h) % v + h % u12:real^3})`
17456 ASSUME_TAC
17457 THENL(*34*)[
17458
17459 REPEAT STRIP_TAC
17460 THEN POP_ASSUM MP_TAC
17461 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`]
17462 THEN POP_ASSUM MATCH_MP_TAC
17463 THEN POP_ASSUM MP_TAC
17464 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17465 THEN ASM_REWRITE_TAC[]
17466 THEN REAL_ARITH_TAC;(*34*)
17467
17468 MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`z:real^3`;`y:real^3`;`v1:real^3`]
17469 THEN POP_ASSUM MP_TAC
17470 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17471 THEN RESA_TAC
17472 THEN POP_ASSUM MP_TAC
17473 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17474 THEN RESA_TAC
17475 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`z:real^3`;`y:real^3 `;`v1:real^3`]
17476 THEN POP_ASSUM MP_TAC
17477 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17478 THEN REWRITE_TAC[SET_RULE`DISJOINT{x} {y,z} <=> ~(x= y) /\ ~(x=z)`;]
17479 THEN RESA_TAC
17480 THEN MP_TAC(REAL_ARITH`azim x v1 w y < pi ==> azim x v1 w y <= pi`)
17481 THEN RESA_TAC
17482 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`w:real^3`;`y:real^3`]
17483 THEN MP_TAC(REAL_ARITH`pi = azim x v1 z w + azim x v1 w y /\
17484 &0< azim x v1 w y /\ azim x v1 w y< pi ==> &0< azim x v1 z w  /\ azim x v1 z w < pi`)
17485 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th])
17486 THEN STRIP_TAC
17487 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `w:real^3`;`z:real^3`]
17488 THEN POP_ASSUM MP_TAC
17489 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17490 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
17491 THEN STRIP_TAC
17492 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`]
17493 THEN POP_ASSUM MP_TAC
17494 THEN CONV_TAC(TOP_DEPTH_CONV let_CONV)
17495 THEN ASM_REWRITE_TAC[]
17496 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17497 THEN ASM_REWRITE_TAC[]
17498 THEN STRIP_TAC
17499 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`t''/ &2:real`[SET_RULE`~(A={}) <=> ?a. a IN A`;INTER;IN_ELIM_THM])
17500 THEN POP_ASSUM MP_TAC
17501 THEN MP_TAC(REAL_ARITH`&0 < t''/\ t'' < &1 ==> &0 < t'' / &2 /\ t'' / &2 < t''/\ t'' / &2< &1`)
17502 THEN RESA_TAC
17503 THEN STRIP_TAC
17504 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`]
17505 THEN POP_ASSUM MP_TAC
17506 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17507 THEN ASM_REWRITE_TAC[]
17508 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17509 THEN STRIP_TAC
17510 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]
17511 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`]
17512 THEN POP_ASSUM MP_TAC
17513 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17514 THEN RESA_TAC
17515 THEN MP_TAC(SET_RULE`{x' | ?u. (?a. (&0 < a /\ a < &1) /\
17516                      u = aff_gt {x} {(&1 - a) % v + a % u12,w}) /\
17517                 x' IN u} SUBSET
17518       dart_leads_into x V E v u12
17519 /\ a'' IN aff_gt {x} {(&1 - t'' / &2) % v + t'' / &2 % u12:real^3,w}
17520 /\ &0< t''/ &2 /\ t''/ &2< &1
17521 ==> a'' IN dart_leads_into x V E v u12`)
17522 THEN RESA_TAC
17523 THEN POP_ASSUM MP_TAC
17524 THEN SUBGOAL_THEN`x,v,u12,w IN
17525       face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3)`ASSUME_TAC
17526 THENL(*35*)[
17527 REWRITE_TAC[face;IN_ELIM_THM;orbit_map]
17528 THEN EXISTS_TAC`SUC 0:num`
17529 THEN ASM_REWRITE_TAC[POWER; ARITH_RULE`SUC 0 >= 0`;I_DEF;o_DEF]
17530 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)))`]
17531 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;])
17532 THEN REWRITE_TAC[f1_fan]
17533 THEN MRESA_TAC INVERSE1_SIGMA_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`];(*35*)
17534
17535 MRESA_TAC DARTSET_LEADS_INTO_FAN[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;
17536 `(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`]
17537 THEN POP_ASSUM (fun th-> MRESAL1_TAC th `(x:real^3,v:real^3,u12:real^3,w:real^3)`[pr2;pr3])
17538 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
17539 THEN STRIP_TAC
17540 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`]
17541 THEN POP_ASSUM MP_TAC
17542 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17543 THEN RESA_TAC
17544 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v1:real^3`;`z:real^3`;`a'':real^3`]
17545 THEN POP_ASSUM MP_TAC
17546 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17547 THEN RESA_TAC
17548 THEN MRESA_TAC th3[`(x:real^3)` ;` (a'':real^3)`;`(v1:real^3)`;]
17549 THEN POP_ASSUM MP_TAC
17550 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
17551 THEN RESA_TAC
17552 THEN SUBGOAL_THEN`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a'':real^3}`ASSUME_TAC
17553 THENL(*36*)[
17554
17555 MRESAL_TAC AFF_GT_1_1[`x:real^3`;`a'':real^3`][SET_RULE`DISJOINT{x} {y} <=> ~(x= y)`;IN_ELIM_THM]
17556 THEN EXISTS_TAC`&1-a''':real`
17557 THEN EXISTS_TAC` a''':real`
17558 THEN ASM_REWRITE_TAC[]
17559 THEN REAL_ARITH_TAC;(*36*)
17560
17561 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`]
17562 THEN MP_TAC(SET_RULE`(&1 - t''') % v1 + t''' % z IN aff_gt {x} {a''}
17563 /\ aff_gt {x} {a''} SUBSET
17564       dartset_leads_into_fan x V E
17565       (face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v:real^3))
17566 ==> (&1 - t''') % v1 + t''' % z IN
17567       dartset_leads_into_fan x V E
17568       (face (hypermap1_of_fanx (x,V,E)) (x,w,v,sigma_fan x V E w v))`)
17569 THEN ASM_REWRITE_TAC[]
17570 THEN EXPAND_TAC"v1"
17571 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t''') % ((&1 - t1) % y + t1 % z) + t''' % z
17572 =(&1 - (t1+ (&1 - t1)*t''')) % y + (t1+ (&1 - t1)*t''') % z`]
17573 THEN SUBGOAL_THEN`(x,w,v,sigma_fan x V E w v:real^3) IN D`ASSUME_TAC
17574 THENL(*37*)[
17575
17576 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`]
17577 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`]
17578 THEN REMOVE_ASSUM_TAC
17579 THEN REMOVE_ASSUM_TAC
17580 THEN POP_ASSUM MP_TAC
17581 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)))`]
17582 THEN REMOVE_ASSUM_TAC
17583 THEN REMOVE_ASSUM_TAC
17584 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`)
17585 THEN REWRITE_TAC[e_fan;POWER;I_DEF;o_DEF];(*37*)
17586
17587
17588 STRIP_TAC
17589 THEN SUBGOAL_THEN `t1 + (&1 - t1) * t''' IN TA:real->bool`ASSUME_TAC
17590 THENL(*38*)[
17591 EXPAND_TAC"TA"
17592 THEN REWRITE_TAC[IN_ELIM_THM]
17593 THEN STRIP_TAC
17594 THENL(*39*)[
17595
17596 MATCH_MP_TAC(REAL_ARITH`&0<= A /\ &0<=B ==> &0<=A+B`)
17597 THEN ASM_REWRITE_TAC[]
17598 THEN MATCH_MP_TAC REAL_LE_MUL
17599 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17600 THEN MATCH_MP_TAC(REAL_ARITH`&0<A ==> &0<=A `)
17601 THEN ASM_REWRITE_TAC[];(*39*)
17602 STRIP_TAC
17603 THENL(*40*)[
17604
17605 REWRITE_TAC[REAL_ARITH`t1 + (&1 - t1) * t''' <= &1<=> &0 <= (&1 - t1)* (&1- t''')`]
17606 THEN MATCH_MP_TAC REAL_LE_MUL
17607 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &1- A<=> A<= &1`]
17608 THEN MATCH_MP_TAC(REAL_ARITH`A< &1 ==> A<= &1 `)
17609 THEN ASM_REWRITE_TAC[];(*40*)
17610
17611 EXISTS_TAC`(x,w,v,sigma_fan x V E w v:real^3)`
17612 THEN ASM_REWRITE_TAC[]](*40*)](*39*);(*38*)
17613
17614 FIND_ASSUM (fun th-> MP_TAC(ISPEC `t1 + (&1 - t1) * t''':real` th))`!x. x IN TA ==> x <= t1`
17615 THEN MP_TAC(SET_RULE`t1 + (&1 - t1) * t''' IN TA /\ ~(t1 IN TA)==> ~(t1=t1 + (&1 - t1) * t''')`)
17616 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
17617 THEN ASM_REWRITE_TAC[]
17618 THEN STRIP_TAC
17619 THEN STRIP_TAC
17620 THEN MP_TAC(REAL_ARITH`t1 + (&1 - t1) * t''' <= t1 /\ ~(t1= t1 + (&1 - t1) * t''') /\ t1<= &1 /\ &0< t'''
17621 ==> (&1 - t1) * t'''< &0:real /\ &0<= (&1 -t1)/\ &0<= t'''`)
17622 THEN RESA_TAC
17623 THEN MRESA_TAC REAL_LE_MUL[`(&1- t1):real`;`t''':real`]
17624 THEN POP_ASSUM MP_TAC
17625 THEN REMOVE_ASSUM_TAC
17626 THEN REMOVE_ASSUM_TAC
17627 THEN POP_ASSUM MP_TAC
17628 THEN REAL_ARITH_TAC]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]);;
17629
17630
17631
17632
17633
17634 let WGVWSKE=prove(`!x V E.
17635          FAN (x,V,E) /\
17636          conforming_fan (x,V,E)
17637 ==> connected_hypermap(hypermap1_of_fanx (x,V,E))`,
17638 REWRITE_TAC[connected_hypermap;number_of_components]
17639 THEN REPEAT STRIP_TAC
17640 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN STRIP_TAC THEN ASSUME_TAC th)
17641 THEN FIND_ASSUM MP_TAC`FAN(x:real^3,V,E)`
17642 THEN REWRITE_TAC[FAN;fan1;SET_RULE`~(V SUBSET {}) <=> ?v. v IN V`]
17643 THEN STRIP_TAC
17644 THEN REMOVE_ASSUM_TAC
17645 THEN REMOVE_ASSUM_TAC
17646 THEN REMOVE_ASSUM_TAC
17647 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)`
17648 THEN FIND_ASSUM(fun th-> REWRITE_TAC[th])`(v:real^3) IN V`
17649 THEN STRIP_TAC
17650 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`]
17651 THEN REMOVE_ASSUM_TAC
17652 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;`v:real^3`]
17653 THEN POP_ASSUM MP_TAC
17654 THEN RESA_TAC
17655 THEN ABBREV_TAC`f1=(x,v,u,sigma_fan x V E v u:real^3)`
17656 THEN SUBGOAL_THEN`f1 IN d1_fan(x:real^3,V,E)`ASSUME_TAC
17657 THENL[
17658 REWRITE_TAC[d1_fan;IN_ELIM_THM]
17659 THEN EXISTS_TAC`x:real^3`
17660 THEN EXISTS_TAC`v:real^3`
17661 THEN EXISTS_TAC`u:real^3`
17662 THEN EXISTS_TAC`sigma_fan x V E v u:real^3`
17663 THEN ASM_REWRITE_TAC[];
17664
17665 MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17666 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)))`]
17667 THEN ABBREV_TAC`D= comb_component (hypermap1_of_fanx (x,V,E)) (f1:real^3#real^3#real^3#real^3)`
17668 THEN SUBGOAL_THEN`D IN set_of_components(hypermap1_of_fanx (x:real^3,V,E))` ASSUME_TAC
17669 THENL[
17670 ASM_REWRITE_TAC[set_of_components;set_part_components;IN_ELIM_THM]
17671 THEN EXISTS_TAC`f1:real^3#real^3#real^3#real^3`
17672 THEN ASM_REWRITE_TAC[];
17673
17674 SUBGOAL_THEN`set_of_components (hypermap1_of_fanx (x:real^3,V,E))={D}`
17675 ASSUME_TAC
17676 THENL[
17677 REWRITE_TAC[EXTENSION;IN_ELIM_THM;]
17678 THEN GEN_TAC
17679 THEN EQ_TAC
17680 THENL[
17681 ASM_REWRITE_TAC[IN_SING;set_of_components;set_part_components;IN_ELIM_THM]
17682 THEN STRIP_TAC
17683 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]
17684 THEN POP_ASSUM MP_TAC
17685 THEN POP_ASSUM MP_TAC
17686 THEN RESA_TAC
17687 THEN RESA_TAC
17688 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`]
17689 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`];
17690
17691 REWRITE_TAC[IN_SING]
17692 THEN RESA_TAC];
17693
17694 ASM_REWRITE_TAC[CARD_SINGLETON]]]]);;
17695
17696
17697 let CARD_EDGE_SET_FAN=prove(`!x V E e.
17698          FAN (x,V,E)
17699 /\ e IN edge_set (hypermap1_of_fanx (x,V,E))
17700 /\ conforming_fan (x,V,E)
17701          ==> CARD e= 2`,
17702 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17703 THEN REPEAT STRIP_TAC
17704 THEN POP_ASSUM MP_TAC
17705 THEN POP_ASSUM MP_TAC
17706 THEN POP_ASSUM MP_TAC
17707 THEN DISCH_THEN(LABEL_TAC"LINH")
17708 THEN REPEAT STRIP_TAC
17709 THEN POP_ASSUM (fun th-> MP_TAC th THEN REWRITE_TAC[conforming_fan] THEN STRIP_TAC THEN ASSUME_TAC th)
17710 THEN MRESA_TAC dartset_fully_surrounded_is_non_isolated_fan[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17711 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)))`]
17712 THEN REMOVE_THEN"LINH" MP_TAC
17713 THEN RESA_TAC
17714 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)))`]
17715 THEN REMOVE_ASSUM_TAC
17716 THEN REMOVE_ASSUM_TAC
17717 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17718 THEN MRESA_TAC plain_hypermap_fan[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`]
17719 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17720 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)`]
17721 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)))`]
17722 THEN REMOVE_ASSUM_TAC
17723 THEN REMOVE_ASSUM_TAC
17724 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17725 THEN ASM_REWRITE_TAC[ARITH_RULE`k:num < SUC(SUC 0) <=> k = 0 \/ k= SUC 0`;
17726 SET_RULE`{(res (e_fan x V E) (d1_fan (x,V,E)) POWER k) x' | k = 0 \/ k= SUC 0}
17727 = {(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]
17728 THEN MRESA_TAC e_fan_no_fix_point[`x:real^3`;`V:real^3->bool`;`(E:(real^3->bool)->bool)`]
17729 THEN POP_ASSUM(fun th-> MRESA1_TAC th`(x':real^3#real^3#real^3#real^3)`)
17730 THEN POP_ASSUM MP_TAC
17731 THEN MESON_TAC[CARD_2_FAN]);;
17732
17733
17734
17735 let REP_CARD_EDGE_SET_FAN=prove(`!x V E.
17736          FAN (x,V,E)
17737 /\ conforming_fan (x,V,E)
17738          ==> &(CARD (edge_set (hypermap1_of_fanx (x,V,E)))) * &2= &(CARD (dart (hypermap1_of_fanx (x,V,E))))`,
17739 REPEAT STRIP_TAC
17740 THEN MRESA1_TAC DART_EQ_UNIONS_FACE_SET_NODE_SET_EDGE_SET`(hypermap1_of_fanx (x:real^3,V:real^3->bool,E))`
17741 THEN POP_ASSUM MP_TAC
17742 THEN REMOVE_ASSUM_TAC
17743 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM th])
17744 THEN RESA_TAC
17745 THEN SUBGOAL_THEN`(!t. t IN edge_set (hypermap1_of_fanx (x:real^3,V,E)) ==> FINITE t)`ASSUME_TAC
17746 THENL[
17747 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17748 THEN REPEAT STRIP_TAC
17749 THEN ASM_REWRITE_TAC[]
17750 THEN MRESAL_TAC EDGE_FINITE[`(hypermap1_of_fanx (x:real^3,V,E))`;`x':real^3#real^3#real^3#real^3`][edge];
17751 SUBGOAL_THEN`(!t u.
17752            t IN edge_set (hypermap1_of_fanx (x,V,E)) /\
17753            u IN edge_set (hypermap1_of_fanx (x:real^3,V,E)) /\
17754            ~(t = u)
17755            ==> t INTER u = {})`ASSUME_TAC
17756 THENL[
17757 REWRITE_TAC[edge_set;IN_ELIM_THM;set_of_orbits]
17758 THEN REPEAT STRIP_TAC
17759 THEN POP_ASSUM MP_TAC
17760 THEN RESA_TAC
17761 THEN DISJ_CASES_TAC(SET_RULE`(?a:real^3#real^3#real^3#real^3. a IN t INTER u) \/ (t INTER u = {}) `)
17762 THENL[
17763 POP_ASSUM MP_TAC
17764 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM]
17765 THEN STRIP_TAC
17766 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]
17767 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]
17768 THEN POP_ASSUM MP_TAC
17769 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM th]);
17770 POP_ASSUM MP_TAC
17771 THEN ASM_REWRITE_TAC[]];
17772
17773  MRESA_TAC CARD_EDGE_SET_FAN[`x:real^3`;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
17774 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={}`
17775 ;SET_RULE`(!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17776            ==> FINITE x' /\ CARD x' = 2)
17777 <=> (!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17778            ==> FINITE x' ) /\ (!x'. x' IN edge_set (hypermap1_of_fanx (x,V,E))
17779            ==> CARD x' = 2)`; SET_RULE`UNIONS {x' | x' IN edge_set (hypermap1_of_fanx (x,V,E))}
17780 =UNIONS (edge_set (hypermap1_of_fanx (x,V,E)))`;REAL_OF_NUM_MUL]]]);;
17781
17782
17783 let GGRLKHP=prove(`!x V E.
17784          FAN (x,V,E) /\ conforming_fan (x,V,E)
17785          ==> planar_hypermap (hypermap1_of_fanx (x,V,E))`,
17786 REPEAT STRIP_TAC
17787 THEN MRESA_TAC SUM_CARD_FACE_NODE_DART_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
17788 THEN POP_ASSUM MP_TAC
17789 THEN MRESA_TAC REP_CARD_EDGE_SET_FAN[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`]
17790 THEN REWRITE_TAC[REAL_ARITH`A+B-C=D<=> A+B+C=D + &2 *C`]
17791 THEN POP_ASSUM(fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SYM th])
17792 THEN MRESAL_TAC WGVWSKE[`x:real^3`;`(V:real^3->bool)`;` (E:(real^3->bool)->bool)`][connected_hypermap]
17793 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)))) +
17794  &2 * &(CARD (node_set (hypermap1_of_fanx (x,V,E)))) +
17795  &(CARD (edge_set (hypermap1_of_fanx (x,V,E)))) * &2 =
17796  &4 + &2 * &(CARD (dart (hypermap1_of_fanx (x,V,E))))
17797 <=>
17798   &(CARD (node_set (hypermap1_of_fanx (x,V,E)))) +
17799  &(CARD (edge_set (hypermap1_of_fanx (x,V,E))))
17800 + &(CARD (face_set (hypermap1_of_fanx (x,V,E))))
17801 =
17802   &(CARD (dart (hypermap1_of_fanx (x,V,E)))) + &2
17803 `;REAL_OF_NUM_ADD;ARITH_RULE`2*1=2`;REAL_OF_NUM_EQ]);;
17804
17805
17806
17807 end;;
17808
17809