Update from HH
[Flyspeck/.git] / legacy / oldfan / DHVFGBC.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  Leads_intos = struct
14
15
16
17 open Sphere;;
18 open Fan_defs;;
19 open Hypermap_of_fan;;
20 open Tactic_fan;;
21 open Lemma_fan;;                
22 open Fan;;
23 open Hypermap_of_fan;;
24 open Node_fan;;
25 open Azim_node;;
26 open Sum_azim_node;;
27 open Disjoint_fan;;
28 open Lead_fan;;
29 open Fan_misc;;
30 open Leads_into_fan;;
31 open Fully_surrounded;;
32 open Sin_azim_cross_dot;;
33
34
35
36 (* ========================================================================== *)
37 (*   FAN  AND CONVEX              *)
38 (* ========================================================================== *)
39
40
41 let origin_point_not1_in_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
42 FAN(x,V,E) /\ {v,u} IN E
43 ==>
44 ~(x IN convex hull{v,u})`,
45 REPEAT STRIP_TAC
46 THEN POP_ASSUM MP_TAC
47 THEN ASM_REWRITE_TAC[]
48 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
49 ` (v:real^3)`] remark1_fan)
50 THEN RESA_TAC
51 THEN FIND_ASSUM MP_TAC`~(u IN aff {x,v:real^3})`
52 THEN MATCH_MP_TAC MONO_NOT
53 THEN REWRITE_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
54 THEN STRIP_TAC
55 THEN POP_ASSUM MP_TAC
56 THEN POP_ASSUM MP_TAC
57 THEN DISJ_CASES_TAC(REAL_ARITH`(v':real= &0) \/ ~(v':real= &0)`)
58 THENL[ASM_REWRITE_TAC[]
59 THEN REDUCE_ARITH_TAC
60 THEN DISCH_TAC
61 THEN ASM_REWRITE_TAC[]
62 THEN REDUCE_VECTOR_TAC
63 THEN ASM_MESON_TAC[];
64
65 POP_ASSUM MP_TAC
66 THEN REPEAT REMOVE_ASSUM_TAC
67 THEN REWRITE_TAC[VECTOR_ARITH`A=B+C<=>C= A-B:real^3`;REAL_ARITH`a+b= &1<=> a= &1 -b:real`]
68 THEN REPEAT DISCH_TAC
69 THEN MP_TAC(SET_RULE`v'% u =x- u' % v ==> (inv (v')) % v' % u = (inv (v')) % (x-u' % v:real^3)`)
70 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
71 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`(A%(B-(&1-U)%C)=(A%B)+(A*U-A)%C:real^3)`])
72 THEN MP_TAC(ISPEC`(v':real)`REAL_MUL_LINV)
73 THEN RESA_TAC
74 THEN REDUCE_VECTOR_TAC
75 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
76 THEN STRIP_TAC
77 THEN EXISTS_TAC`inv(v':real)`
78 THEN EXISTS_TAC`&1-inv(v':real)`
79 THEN ASM_REWRITE_TAC[]
80 THEN REAL_ARITH_TAC]);;
81
82
83
84
85
86
87 let origin_point_not_in_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3).
88 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
89 ==>
90 ~(x IN convex hull{v,u,w})`,
91 REPEAT STRIP_TAC
92 THEN POP_ASSUM MP_TAC
93 THEN POP_ASSUM MP_TAC
94 THEN ASM_REWRITE_TAC[]
95 THEN MATCH_MP_TAC MONO_NOT
96 THEN REWRITE_TAC[CONVEX_HULL_3; IN_ELIM_THM; coplanar]
97 THEN STRIP_TAC
98 THEN EXISTS_TAC`v:real^3`
99 THEN EXISTS_TAC`u:real^3`
100 THEN EXISTS_TAC`w:real^3`
101 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
102 THENL(*3*)[
103 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
104 THEN EXISTS_TAC`u':real`
105 THEN EXISTS_TAC`v':real`
106 THEN EXISTS_TAC`w':real`
107 THEN ASM_MESON_TAC[];
108
109 SUBGOAL_THEN`(v:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
110 THENL(*4*)[
111 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
112 THEN EXISTS_TAC`&1`
113 THEN EXISTS_TAC`&0`
114 THEN EXISTS_TAC`&0`
115 THEN REDUCE_ARITH_TAC
116 THEN VECTOR_ARITH_TAC;
117
118 SUBGOAL_THEN`(u:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
119 THENL(*5*)[
120 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
121 THEN EXISTS_TAC`&0`
122 THEN EXISTS_TAC`&1`
123 THEN EXISTS_TAC`&0`
124 THEN REDUCE_ARITH_TAC
125 THEN VECTOR_ARITH_TAC;
126 SUBGOAL_THEN`(w:real^3)IN affine hull {v,u,w:real^3}` ASSUME_TAC
127 THENL(*6*)[
128 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
129 THEN EXISTS_TAC`&0`
130 THEN EXISTS_TAC`&0`
131 THEN EXISTS_TAC`&1`
132 THEN REDUCE_ARITH_TAC
133 THEN VECTOR_ARITH_TAC;
134 ASM_TAC
135 THEN SET_TAC[]]]]]);;
136
137 let separate_point_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3).
138 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w})
139 ==>
140 ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u,w} ==> h < norm(y-x))`,
141
142 REPEAT STRIP_TAC 
143 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),(w:real^3)}` ASSUME_TAC
144 THENL(*1*)[
145 MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
146 ` (v:real^3)`] remark1_fan)
147 THEN RESA_TAC 
148 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
149 `(u:real^3)`] remark1_fan)
150 THEN RESA_TAC 
151 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
152 ` (w:real^3)`] remark1_fan)
153 THEN RESA_TAC 
154 THEN POP_ASSUM MP_TAC
155 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
156 THEN ASM_REWRITE_TAC[]
157 THEN STRIP_TAC
158 THEN MP_TAC(SET_RULE`(v:real^3) IN (V:real^3->bool) /\ (u:real^3) IN (V:real^3->bool) /\ (w:real^3) IN (V:real^3->bool)==> {v,u,w} SUBSET V`)
159 THEN ASM_REWRITE_TAC[]
160 THEN DISCH_TAC
161 THEN MATCH_MP_TAC(ISPECL[`{(v:real^3),(u:real^3),(w:real^3)}`;`V:real^3->bool`]FINITE_SUBSET)
162 THEN ASM_REWRITE_TAC[]
163 THEN ASM_TAC
164 THEN REWRITE_TAC[FAN;fan1]
165 THEN SET_TAC[];
166
167 MP_TAC(ISPEC`{(v:real^3),(u:real^3),(w:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
168 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;COMPACT_EQ_BOUNDED_CLOSED])
169 THEN DISCH_TAC
170 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
171 THEN RESA_TAC
172 THEN MP_TAC(ISPECL[`convex hull {(v:real^3),(u:real^3),(w:real^3)}`;`x:real^3`]SEPARATE_POINT_CLOSED)
173 THEN RESA_TAC
174 THEN EXISTS_TAC`d:real/ &2`
175 THEN STRIP_TAC
176 THENL[
177 ASM_TAC THEN REAL_ARITH_TAC;
178
179 ONCE_REWRITE_TAC[NORM_SUB]
180 THEN GEN_TAC
181 THEN POP_ASSUM (fun th ->MP_TAC(ISPEC`y:real^3`th))
182 THEN REWRITE_TAC[dist;]
183 THEN DISCH_THEN(LABEL_TAC"A")
184 THEN DISCH_TAC 
185 THEN REMOVE_THEN "A" MP_TAC
186 THEN POP_ASSUM (fun th ->REWRITE_TAC[th])
187 THEN POP_ASSUM MP_TAC
188 THEN REAL_ARITH_TAC]]);;
189
190
191
192 let bounded_convex_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3).
193 FAN(x,V,E) /\ {v,u} IN E
194 ==> ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u} ==> norm(y-x)<h )`,
195 REPEAT STRIP_TAC
196 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3)}` ASSUME_TAC
197 THENL(*1*)[SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
198                  IN_INSERT; NOT_IN_EMPTY];
199
200 MP_TAC(ISPEC`{(v:real^3),(u:real^3)}`FINITE_IMP_COMPACT_CONVEX_HULL)
201 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
202 THEN DISCH_TAC
203 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
204 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u} SUBSET (:real^3)`)
205 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`(:real^3)`;`convex hull {(v:real^3),(u:real^3)}`]CONTINUOUS_ON_SUBSET)
206 THEN RESA_TAC
207 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`convex hull {(v:real^3),(u:real^3)}`]COMPACT_CONTINUOUS_IMAGE)
208 THEN RESA_TAC
209 THEN POP_ASSUM MP_TAC
210 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
211 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
212 THEN STRIP_TAC
213 THEN POP_ASSUM MP_TAC
214 THEN DISCH_THEN(LABEL_TAC"A")
215 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
216         lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
217 THENL[
218 EXISTS_TAC`v:real^3`
219 THEN SIMP_TAC[CONVEX_HULL_2; IN_ELIM_THM;]
220 THEN EXISTS_TAC`&1`
221 THEN EXISTS_TAC`&0`
222 THEN REDUCE_VECTOR_TAC
223 THEN REAL_ARITH_TAC;
224
225 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
226 THENL[
227 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
228 THEN RESA_TAC
229 THEN POP_ASSUM MP_TAC
230 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
231 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
232 ` (v:real^3)`] remark1_fan)
233 THEN RESA_TAC 
234 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
235 THEN RESA_TAC
236 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
237 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
238 THEN RESA_TAC
239 THEN POP_ASSUM MP_TAC
240 THEN REAL_ARITH_TAC;
241
242 EXISTS_TAC`&2 * a:real`
243 THEN STRIP_TAC
244 THENL[
245
246 REPEAT STRIP_TAC
247 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u} /\
248         lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
249 THENL[
250 EXISTS_TAC`y:real^3`
251 THEN ASM_SIMP_TAC[];
252
253 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th)) 
254 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
255 THEN ASM_TAC
256 THEN REAL_ARITH_TAC];
257
258 ASM_TAC
259 THEN REAL_ARITH_TAC]]]]);;
260
261
262
263 (* ========================================================================== *)
264 (*   ESILON OF FAN               *)
265 (* ========================================================================== *)
266
267
268 let exists_open_not_collinear=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
269 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E
270 ==> 
271 ?t1:real. &0 < t1 /\ t1 <= &1
272 /\ (!t:real. &0<= t /\ t<= t1==> ~(collinear{x,v,(&1-t)%u+ t % w}))`,
273
274 REPEAT STRIP_TAC
275 THEN REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
276 THEN ONCE_REWRITE_TAC[COLLINEAR_3;]
277 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
278 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;
279 `(E:(real^3->bool)->bool)`;` w:real^3`;` u:real^3`]
280 THEN FIND_ASSUM MP_TAC`~collinear {(x:real^3),(u:real^3),(w:real^3)}`
281 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B,C}={B,C,A}`;]
282 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[collinear_fan]
283 THEN ASM_REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
284 THEN DISCH_THEN(LABEL_TAC"MA")
285 THEN FIND_ASSUM MP_TAC`~((u:real^3) IN aff {(x:real^3), (v:real^3)})`
286 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
287 THEN DISCH_THEN(LABEL_TAC"A")
288 THEN SUBGOAL_THEN`!(t:real). ~((&1 - t) % u + t % w = x:real^3)`ASSUME_TAC
289 THENL(*1*)[
290 GEN_TAC
291 THEN REMOVE_THEN "MA" MP_TAC
292 THEN MATCH_MP_TAC MONO_NOT
293 THEN DISCH_TAC
294 THEN EXISTS_TAC`&1-(t:real)`
295 THEN EXISTS_TAC`(t:real)`
296 THEN ASM_REWRITE_TAC[REAL_ARITH`&1 - t + t = &1`];(*1*)
297
298
299 SUBGOAL_THEN`!(t:real). (collinear {vec 0, v - x, ((&1 - t) % u + t % w) - x} <=>
300       vector_angle (v - x:real^3) (((&1 - t) % u + t % w) - x) = &0 \/
301       vector_angle (v - x) (((&1 - t) % u + t % w) - x) = pi)`ASSUME_TAC
302 THENL(*2*)[
303
304 GEN_TAC
305 THEN MP_TAC(ISPECL[`(v:real^3)-(x:real^3)`;`((&1 - t) % (u:real^3) + (t:real) % (w:real^3)) - (x:real^3)`]
306 COLLINEAR_VECTOR_ANGLE)
307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B`];(*2*)
308
309 ASM_REWRITE_TAC[]
310 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`&0`]
311 THEN MRESA_TAC open_vector_angle_fan[ `x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`;`c:real`;`pi`]
312 THEN REWRITE_TAC[DE_MORGAN_THM;]
313 THEN MP_TAC(ISPECL[`{(t:real^1) | ~(   
314 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0)}`
315 ;`{(t:real^1) | ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}`]OPEN_INTER)
316 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM]
317 THEN DISCH_TAC
318 THEN SUBGOAL_THEN` 
319 ((vec 0):real^1) IN {(t:real^1) | ~(   
320 vector_angle ((v:real^3) - x) (((&1 - drop(t)) % (u:real^3) + drop(t) % (w:real^3)) - x) = &0 )/\ 
321 ~(vector_angle (v - x) (((&1 - drop (t)) % u + drop (t) % w) - (x:real^3)) = pi)}` ASSUME_TAC
322 THENL(*3*)[
323
324 SIMP_TAC[IN_ELIM_THM;drop;VEC_COMPONENT;GSYM(DE_MORGAN_THM)]
325 THEN REDUCE_ARITH_TAC
326 THEN REDUCE_VECTOR_TAC
327 THEN MP_TAC(ISPECL[`((v:real^3)-(x:real^3))`;`((u:real^3)-(x:real^3))`]COLLINEAR_VECTOR_ANGLE)
328 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B=vec 0<=> A=B:real^3`]
329 THEN ONCE_REWRITE_TAC[GSYM(COLLINEAR_3);]
330 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
331 THEN ASM_REWRITE_TAC[];(*3*)
332
333
334 POP_ASSUM MP_TAC
335 THEN POP_ASSUM MP_TAC
336 THEN DISCH_THEN(LABEL_TAC"G")
337 THEN DISCH_TAC
338 THEN REMOVE_THEN "G" MP_TAC
339 THEN REWRITE_TAC[open_def]
340 THEN DISCH_TAC
341 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`(vec 0):real^1`th))
342 THEN ASM_REWRITE_TAC[IN_ELIM_THM;dist; VECTOR_ARITH`A-vec 0=A`]
343 THEN STRIP_TAC
344 THEN EXISTS_TAC`min ((e:real)/ &2) (&1)`
345 THEN STRIP_TAC
346 THENL(*4*)[
347 POP_ASSUM (fun th->REWRITE_TAC[])
348 THEN POP_ASSUM MP_TAC
349 THEN REAL_ARITH_TAC;(*4*)
350
351 STRIP_TAC
352 THENL(*5*)[
353 REAL_ARITH_TAC;
354 GEN_TAC
355 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`lift(t:real)`th))
356 THEN REWRITE_TAC[LIFT_DROP;NORM_LIFT]
357 THEN DISCH_THEN(LABEL_TAC"G")
358 THEN STRIP_TAC
359 THEN REMOVE_THEN "G" MATCH_MP_TAC
360 THEN POP_ASSUM MP_TAC
361 THEN POP_ASSUM MP_TAC
362 THEN POP_ASSUM MP_TAC
363 THEN REAL_ARITH_TAC]]]]]);;
364
365
366
367
368
369 let exist_close_fan=prove(`(!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (w:real^3) (v1:real^3) (w1:real^3).
370
371 FAN(x,V,E) /\ {v,w} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,w} IN E
372 ==>
373 ?h:real.
374 (&0 < h)
375 /\ 
376 (!y1:real^3 y2:real^3. y1 IN (aff_ge {x} {v, w} INTER ballnorm_fan x) /\ y2 IN (aff_ge {x} {v1, w1} INTER ballnorm_fan x)
377 ==> h  <= dist(y1,y2) ))`,
378
379 REPEAT STRIP_TAC 
380 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
381 ` (v:real^3)`] 
382 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
383 ` (v1:real^3)`]
384 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), (w:real^3)} INTER ballnorm_fan x`; 
385  `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
386 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` (w:real^3)`]closed_aff_ge_ballnorm_fan) 
387 THEN RESA_TAC
388 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
389 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
390 THEN REWRITE_TAC[FAN;fan7] 
391 THEN STRIP_TAC
392 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
393                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
394 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL; SET_RULE`(A INTER C) INTER (B INTER C)= (A INTER B) INTER C`;] 
395 THEN ASSUME_TAC(AFFINE_SING) 
396 THEN MP_TAC(ISPEC`{ (x:real^3) }` AFFINE_HULL_EQ )
397 THEN RESA_TAC 
398 THEN RESA_TAC 
399 THEN REWRITE_TAC[ballnorm_fan;INTER; IN_SING; EXTENSION;EMPTY;IN_ELIM_THM;] 
400 THEN GEN_TAC
401 THEN STRIP_TAC 
402 THEN POP_ASSUM MP_TAC 
403 THEN ASM_REWRITE_TAC[DIST_REFL ] 
404 THEN REAL_ARITH_TAC);;
405
406
407
408
409
410 let inequality1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
411 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
412 ==>
413 ?(h:real). &0 <h /\  h<= &1
414 /\ (!t:real. &0 <= t /\  t<h
415 ==> (!(s:real). &0 <= s /\ s <= &1 
416 ==> s * inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))* norm(u-((&1-t)%u+ t%w))< d  ))`,
417 REPEAT STRIP_TAC
418 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
419 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
420 THEN RESA_TAC
421 THEN POP_ASSUM MP_TAC
422 THEN DISCH_THEN (LABEL_TAC"A")
423 THEN EXISTS_TAC`min ((h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
424 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
425 ` (u:real^3)`] remark1_fan)
426 THEN RESA_TAC 
427 THEN  MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
428 THEN RESA_TAC 
429 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
430 THEN RESA_TAC
431 THEN STRIP_TAC
432 THENL[
433 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
434 THEN RESA_TAC
435 THEN ASM_TAC
436 THEN REAL_ARITH_TAC;
437 STRIP_TAC
438 THENL[
439
440 REAL_ARITH_TAC;
441 REPEAT STRIP_TAC
442 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
443 THEN RESA_TAC
444 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
445 THEN RESA_TAC
446 THEN MP_TAC(REAL_ARITH`(t:real)< min ((h:real) * (d:real) * inv (norm (u - w:real^3))) (&1)/\ min (h * d * inv (norm (u - w))) (&1)<= &1 ==>t<= &1/\ (t:real)< (h * d * inv (norm (u - w:real^3)))`)
447 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * d * inv (norm (u - w))) (&1)<= &1`]
448 THEN STRIP_TAC
449 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
450 THEN RESA_TAC
451 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
452 THEN RESA_TAC
453 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
454 THEN RESA_TAC
455 THEN MP_TAC(REAL_ARITH`&0 <h /\ (h:real)< norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)==> &0 <= norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`)
456 THEN RESA_TAC
457 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
458 THEN RESA_TAC
459 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
460 THEN RESP_TAC
461 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
462 `inv(h:real)`;`t:real`;`(h * d * inv (norm (u - w:real^3)))`;
463 ]REAL_LT_MUL2)
464 THEN RESA_TAC
465 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
466 THEN RESA_TAC
467 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
468 THEN RESA_TAC
469 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
470 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
471 THEN RESA_TAC
472 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)) * (t:real)`;`inv (h:real) * h * d * inv (norm (u - w:real^3))`;`norm (u - w:real^3)`]REAL_LT_RMUL)
473 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
474 THEN REDUCE_ARITH_TAC
475 THEN STRIP_TAC
476 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real)`;] REAL_LE_MUL)
477 THEN RESA_TAC
478 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t:real)`;`norm(u-w:real^3)`] REAL_LE_MUL)
479 THEN RESA_TAC
480 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
481 THENL[
482 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
483 THEN REDUCE_ARITH_TAC
484 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B*C=(A*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`];
485 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
486 THEN RESA_TAC
487 THEN MP_TAC(ISPECL[`s:real`;`&1`;`(inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t:real)) * norm(u-w:real^3)`;
488 `d:real`]REAL_LT_MUL2)
489 THEN REDUCE_ARITH_TAC
490 THEN RESA_TAC
491 THEN ASM_REWRITE_TAC[REAL_ARITH`A*d*B*C=A*(d*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`]]]]);;
492
493
494
495
496
497 let inequaility2_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
498 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
499 ==>
500 ?(h:real). &0 <h /\  h<= &1
501 /\ (!t:real. &0 <= t /\  t<h
502 ==> (!(s:real). &0 <= s /\ s <= &1 
503 ==> (norm(inv(norm((&1-s)%v+s%u-x))%((&1-s)%v+s%u-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%u-x)))< d  ))`,
504
505 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
506 THEN REPEAT STRIP_TAC
507 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
508 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
509 THEN RESA_TAC
510 THEN POP_ASSUM MP_TAC
511 THEN DISCH_THEN(LABEL_TAC"A")
512 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
513 THEN RESA_TAC
514 THEN POP_ASSUM MP_TAC
515 THEN DISCH_THEN(LABEL_TAC"B")
516 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]bounded_convex_fan)
517 THEN RESA_TAC
518 THEN POP_ASSUM MP_TAC
519 THEN DISCH_THEN(LABEL_TAC"C")
520 THEN EXISTS_TAC`min (h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
521 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
522 ` (u:real^3)`] remark1_fan)
523 THEN RESA_TAC 
524 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
525 THEN RESA_TAC
526 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
527 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
528 THEN RESA_TAC
529 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
530 THEN RESA_TAC
531 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
532 THEN RESA_TAC
533 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
534 THEN RESA_TAC
535 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
536 THEN RESA_TAC
537 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
538 THEN RESA_TAC
539 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
540 THEN RESA_TAC
541 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
542 THEN RESA_TAC
543 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
544 THEN RESA_TAC
545 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
546 THEN RESA_TAC
547 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
548 THEN RESA_TAC
549 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
550 THEN RESA_TAC
551 THEN STRIP_TAC
552 THENL(*1*)[
553 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
554 THEN RESA_TAC
555 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
556 THEN RESA_TAC
557 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
558 THEN RESA_TAC
559 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
560 THEN RESA_TAC
561 THEN POP_ASSUM MP_TAC
562 THEN POP_ASSUM MP_TAC
563 THEN REAL_ARITH_TAC;(*1*)
564
565
566 STRIP_TAC
567 THENL(*2*)[
568
569 REAL_ARITH_TAC;(*2*)
570
571 REPEAT STRIP_TAC
572 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;` s:real`]expansion1_convex_fan)
573 THEN RESA_TAC
574 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % u:real^3`th))
575 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
576 THEN RESA_TAC
577 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]
578 origin_point_not1_in_convex_fan)
579 THEN RESA_TAC
580 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
581 THENL(*3*)[
582 POP_ASSUM MP_TAC
583 THEN MATCH_MP_TAC MONO_NOT
584 THEN RESA_TAC;(*3*)
585
586 MP_TAC(ISPECL[`(&1-s)%v+s%u:real^3`;`x:real^3`]imp_norm_not_zero_fan)
587 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
588 THEN RESA_TAC
589 THEN ASSUME_TAC(ISPEC`(&1-s)%v+s%u-x:real^3`NORM_POS_LE)
590 THEN MP_TAC(REAL_ARITH`~(norm((&1-s)%v+s%u-x:real^3)= &0) /\ &0 <= norm((&1-s)%v+s%u-x:real^3)==> &0 <norm((&1-s)%v+s%u-x:real^3)`)
591 THEN RESA_TAC
592 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_MUL_LINV)
593 THEN RESA_TAC
594 THEN MP_TAC(ISPEC`(norm((&1-s)%v+s%u-x:real^3))`REAL_LE_INV)
595 THEN RESA_TAC
596 THEN MP_TAC(REAL_ARITH`(t:real)< min (h * h * inv h' * inv (norm (u - w)) * d) (&1)/\ min (h * h * inv h' * inv (norm (u - w)) * d) (&1)<= &1 ==> t<= &1/\ (t:real)< (h * h * inv h' * inv (norm (u - w:real^3)) * d) `)
597 THEN ASM_REWRITE_TAC[REAL_ARITH`min (h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
598 THEN STRIP_TAC
599 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % u - x:real^3) `;
600 `(h':real)`;`t:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
601 THEN RESA_TAC
602 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(&0:real) `;`s:real`]expansion_convex_fan)
603 THEN REDUCE_ARITH_TAC
604 THEN REDUCE_VECTOR_TAC
605 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
606 THEN DISCH_TAC
607 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % u:real^3)`th))
608 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
609 THEN DISCH_TAC
610 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % u-x:real^3)`]REAL_LT_INV2)
611 THEN RESA_TAC
612 THEN MP_TAC(ISPECL[`norm((&1-s)%v+s%u-x:real^3)`;`t:real`]REAL_LE_MUL)
613 THEN RESA_TAC
614 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % u - x:real^3))`;`inv(h:real)`;`norm ((&1 - s) % v + s % u - x:real^3)*(t:real)`;`(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
615 THEN RESA_TAC
616 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
617 THEN ASM_REWRITE_TAC[]
618 THEN DISCH_TAC
619 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
620 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
621 THEN DISCH_TAC
622 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
623 THEN RESA_TAC
624 THEN MP_TAC(ISPECL[`inv(norm((&1-s)%v+s%u-x:real^3))`;`norm((&1-s)%v+s%u-x:real^3)*(t:real)`]REAL_LE_MUL)
625 THEN RESA_TAC
626 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
627 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
628 THEN RESA_TAC
629 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3))`;`inv(h:real)`;`inv(norm ((&1 - s) % v + s % u - x:real^3)) * norm ((&1 - s) % v + s % u - x:real^3)*(t:real)`;`inv(h:real)*(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
630 THEN RESA_TAC
631 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
632 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
633       inv (norm ((&1 - s) % v + s % u - x)) *
634       norm ((&1 - s) % v + s % u - x) *
635       t`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
636 THEN RESA_TAC
637 THEN POP_ASSUM MP_TAC
638 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
639 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
640 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
641 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
642 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
643 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
644 THEN ASM_REWRITE_TAC[]
645 THEN REDUCE_ARITH_TAC
646 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
647 THEN REDUCE_ARITH_TAC
648 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
649 THEN REDUCE_ARITH_TAC
650 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
651 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
652 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
653 THEN MP_TAC(ISPECL[`t:real`;`w-u:real^3`]NORM_MUL)
654 THEN MP_TAC(ISPEC`t:real`REAL_ABS_REFL)
655 THEN RESP_TAC
656 THEN DISCH_TAC
657 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
658 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
659 THEN REDUCE_ARITH_TAC
660 THEN DISCH_THEN(LABEL_TAC"BA")
661 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
662 THEN RESA_TAC
663 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
664 THENL(*4*)[
665 POP_ASSUM MP_TAC
666 THEN DISCH_THEN (LABEL_TAC"MA")
667 THEN STRIP_TAC
668 THEN REMOVE_THEN"MA" MP_TAC
669 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
670 THEN ASM_REWRITE_TAC[];(*4*)
671
672 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
673 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
674 THEN RESA_TAC
675 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % u-x:real^3)`;`norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_SUB_INV)
676 THEN RESP_TAC
677 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
678 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
679 THEN REDUCE_ARITH_TAC
680 THEN MP_TAC(ISPECL[`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`;`((&1 - s) % v + s % u-x:real^3)`]REAL_ABS_SUB_NORM)
681 THEN REWRITE_TAC[VECTOR_ARITH`
682 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)-((&1 - s) % v + s % u - x)=s%(t)%(w-u) :real^3`]
683 THEN ONCE_REWRITE_TAC[NORM_MUL]
684 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
685 THEN RESP_TAC
686 THEN DISCH_TAC
687 THEN MP_TAC(ISPECL[`abs
688  (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
689   norm ((&1 - s) % v + s % u - x))`;`s * norm (t % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_RMUL)
690 THEN RESA_TAC
691 THEN REMOVE_THEN "BA" MP_TAC
692 THEN POP_ASSUM MP_TAC
693 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
694 THENL(*5*)[
695 ASM_REWRITE_TAC[]
696 THEN REAL_ARITH_TAC;(*5*)
697
698 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
699 THEN RESA_TAC
700 THEN ASSUME_TAC(ISPEC`(t % (w - u):real^3)`NORM_POS_LE)
701 THEN MP_TAC(ISPECL[`norm (t % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_MUL)
702 THEN RESA_TAC
703 THEN REPEAT STRIP_TAC
704 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm (t % (w - u)) *
705      inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
706 `d:real`]REAL_LT_MUL2)
707 THEN REDUCE_ARITH_TAC
708 THEN ASM_REWRITE_TAC[]
709 THEN POP_ASSUM MP_TAC
710 THEN POP_ASSUM MP_TAC
711 THEN POP_ASSUM MP_TAC
712 THEN REAL_ARITH_TAC]]]]]);;
713
714
715
716
717
718 let exists_point_small_edges_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real.
719 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
720 ==>
721 ?(h:real). &0 <h /\  h<= &1
722 /\ (!t:real. &0 <= t /\  t<h
723 ==> (!(s:real). &0 <= s /\ s <= &1 
724 ==> norm(inv(norm((&1-s)%v+s%u-x))%((&1-s)%v+s%u-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-t)%u+ t%w)-x))< d  ))`,
725
726 REPEAT STRIP_TAC
727 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
728 THEN RESA_TAC
729 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
730 THEN RESA_TAC
731 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`;` (d:real)/ &2`]inequaility2_fan)
732 THEN RESA_TAC
733 THEN POP_ASSUM MP_TAC
734 THEN DISCH_THEN (LABEL_TAC"A")
735 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool) `;`(v:real^3)`;` (u:real^3)`;` (w:real^3)`;` (d:real)/ &2`]inequality1_fan)
736 THEN RESA_TAC
737 THEN POP_ASSUM MP_TAC
738 THEN DISCH_THEN (LABEL_TAC"B")
739 THEN EXISTS_TAC`min (h:real) (h':real)`
740 THEN STRIP_TAC
741 THENL[ASM_TAC
742 THEN REAL_ARITH_TAC;
743
744 STRIP_TAC
745 THENL[
746 ASM_TAC
747 THEN REAL_ARITH_TAC;
748
749 REPEAT STRIP_TAC
750 THEN MP_TAC(REAL_ARITH`t<  min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
751 THEN RESA_TAC
752 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
753 THEN RESA_TAC
754 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
755 THEN RESA_TAC
756 THEN POP_ASSUM MP_TAC
757 THEN DISCH_THEN (LABEL_TAC"B")
758 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
759 THEN RESA_TAC
760 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
761 THEN RESA_TAC
762 THEN POP_ASSUM MP_TAC
763 THEN DISCH_THEN (LABEL_TAC"A")
764 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
765 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
766 THEN RESA_TAC
767 THEN MP_TAC(ISPECL[`s *
768       inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`;`(u - ((&1 - t) % u + t % w)):real^3`]NORM_MUL)
769 THEN REWRITE_TAC[REAL_ABS_MUL]
770 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
771 THEN RESP_TAC
772 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
773 THEN RESP_TAC
774 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
775 THEN DISCH_TAC
776 THEN REMOVE_THEN"B"MP_TAC
777 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
778 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
779   (u - ((&1 - t) % u + t % w))= inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
780       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
781
782 THEN DISCH_TAC
783 THEN MP_TAC(ISPECL[`norm(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
784       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
785 `norm
786       (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
787        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
788        ((&1 - s) % v + s % u - x):real^3)`;`(d:real)/ &2`;
789 ]REAL_LT_ADD2)
790 THEN RESA_TAC
791 THEN POP_ASSUM MP_TAC
792 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
793 THEN MP_TAC(ISPECL[`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
794       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
795 `(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
796        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
797        ((&1 - s) % v + s % u - x):real^3)`]NORM_TRIANGLE)
798 THEN REWRITE_TAC[VECTOR_ARITH`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % u - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
799       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
800 (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
801        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
802        ((&1 - s) % v + s % u - x):real^3)=(inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) -
803   inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
804   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
805 THEN REAL_ARITH_TAC]]);;
806
807
808
809
810
811 let same_projective_sphere_ge_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (t:real) (y1:real^3).
812 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
813 /\ ~(y1=x)
814 /\ (y1 IN aff_ge {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
815
816 ==> ?s:real. &0 <= s/\ s<= &1
817 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
818 REPEAT STRIP_TAC
819 THEN POP_ASSUM MP_TAC
820 THEN DISCH_THEN(LABEL_TAC"A")
821 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
822 THEN RESA_TAC
823 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GE_1_2)
824 THEN RESA_TAC
825 THEN REMOVE_THEN"A" MP_TAC
826 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
827 THEN STRIP_TAC
828 THEN SUBGOAL_THEN`~(&1 - t1:real= &0)/\ &0 <= &1-t1` ASSUME_TAC
829 THENL[
830 STRIP_TAC
831 THENL[
832
833 FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
834 THEN DISCH_TAC
835 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
836 THEN REWRITE_TAC[REAL_ARITH`(A+B)-A=B`]
837 THEN STRIP_TAC
838 THEN MP_TAC(REAL_ARITH`(&0 <= t2) /\ (&0 <= t3) /\(t2+t3= &0)==> t2= &0 /\ t3= &0`)
839 THEN RESA_TAC
840 THEN FIND_ASSUM MP_TAC`y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w)
841 :real^3`
842 THEN FIND_ASSUM MP_TAC`t1+t2+t3= &1:real`
843 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
844 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
845 THEN REDUCE_ARITH_TAC
846 THEN REDUCE_VECTOR_TAC
847 THEN STRIP_TAC
848 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
849 THEN REDUCE_VECTOR_TAC
850 THEN ASM_REWRITE_TAC[];
851 REMOVE_ASSUM_TAC
852 THEN REMOVE_ASSUM_TAC
853 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
854 THEN POP_ASSUM MP_TAC
855 THEN POP_ASSUM MP_TAC
856 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
857 THEN REAL_ARITH_TAC];
858
859 MP_TAC(REAL_ARITH`~(&1 - t1= &0)/\ &0 <= &1-t1==>  &0< (&1 -t1:real)`)
860 THEN RESA_TAC
861 THEN MP_TAC(ISPEC`(&1 -t1:real)`REAL_LE_INV)
862 THEN RESA_TAC
863 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
864 THEN RESA_TAC
865 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LE_MUL)
866 THEN RESA_TAC
867 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LE_MUL)
868 THEN RESA_TAC
869 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
870 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
871 THEN DISCH_TAC
872 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
873 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
874 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
875 THEN REDUCE_ARITH_TAC
876 THEN STRIP_TAC
877 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
878 THEN STRIP_TAC
879 THENL[
880 ASM_TAC
881 THEN REAL_ARITH_TAC;
882 STRIP_TAC
883 THENL[
884 ASM_TAC
885 THEN REAL_ARITH_TAC;
886 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
887   (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
888 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
889 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
890 THEN DISCH_TAC
891 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
892 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
893 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
894 THEN DISCH_TAC
895 THEN MP_TAC(SET_RULE`norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3) = &1 ==> (inv (&1-t1))*(norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x) ) = (inv (&1-t1))* (&1):real`)
896 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
897 THEN ASM_REWRITE_TAC[]
898 THEN REDUCE_ARITH_TAC
899 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
900 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
901 THEN RESP_TAC
902 THEN DISCH_TAC
903 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
904 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
905 THEN REDUCE_VECTOR_TAC
906 THEN DISCH_TAC
907 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
908 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
909 THEN REDUCE_VECTOR_TAC]]]);;
910
911
912
913
914
915 let same_projective_sphere_gt_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (t:real) (y1:real^3).
916 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~collinear {x, v, (&1 - t) % u + t % w}
917 /\ (y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x)
918
919 ==> ?s:real. &0 <= s/\ s<= &1
920 /\ y1=inv(norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x))%((&1 - s) % v + s % ((&1 - t) % u + t % w)-x)+x`,
921 REPEAT STRIP_TAC
922 THEN POP_ASSUM MP_TAC
923 THEN DISCH_THEN(LABEL_TAC"A")
924 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]th3)
925 THEN RESA_TAC
926 THEN MP_TAC(ISPECL[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]AFF_GT_1_2)
927 THEN RESA_TAC
928 THEN REMOVE_THEN"A" MP_TAC
929 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist;ballnorm_fan]
930 THEN STRIP_TAC
931 THEN SUBGOAL_THEN`~(&1 - t1= &0)/\ &0 < &1-t1` ASSUME_TAC
932 THENL[
933 REMOVE_ASSUM_TAC
934 THEN REMOVE_ASSUM_TAC
935 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
936 THEN POP_ASSUM MP_TAC
937 THEN POP_ASSUM MP_TAC
938 THEN MP_TAC(ISPECL[`t2:real`;`t3:real`]REAL_LT_ADD)
939 THEN REAL_ARITH_TAC;
940
941 MP_TAC(ISPEC`(&1 -t1:real)`REAL_LT_INV)
942 THEN RESA_TAC
943 THEN MP_TAC(ISPEC`(&1-t1:real)`REAL_MUL_LINV)
944 THEN RESA_TAC
945 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t2:real)`]REAL_LT_MUL)
946 THEN RESA_TAC
947 THEN MP_TAC(ISPECL[`inv ((&1 - t1:real))`;`(t3:real)`]REAL_LT_MUL)
948 THEN RESA_TAC
949 THEN FIND_ASSUM MP_TAC `t1+t2+t3= &1:real`
950 THEN REWRITE_TAC[REAL_ARITH`A+B+C=D<=>B+C=D-A`]
951 THEN DISCH_TAC
952 THEN MP_TAC(SET_RULE`t2+t3 = &1-t1 ==> (inv (&1-t1))*(t2+t3) = (inv (&1-t1))* (&1-t1:real)`)
953 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
954 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)=D<=>D- A*C=A*B`]
955 THEN REDUCE_ARITH_TAC
956 THEN STRIP_TAC
957 THEN EXISTS_TAC`inv ((&1 - t1:real))*(t3:real)`
958 THEN STRIP_TAC
959 THENL[
960 ASM_TAC
961 THEN REAL_ARITH_TAC;
962 STRIP_TAC
963 THENL[
964 ASM_TAC
965 THEN REAL_ARITH_TAC;
966 ASM_REWRITE_TAC[VECTOR_ARITH`(inv (&1 - t1) * t2) % v +
967   (inv (&1 - t1) * t3) % ((&1 - t) % u + t % w)-x= inv (&1 - t1) %( t2 % v + t3 % ((&1 - t) % u + t % w))-x:real^3`]
968 THEN FIND_ASSUM MP_TAC `norm(x-y1:real^3)= &1`
969 THEN FIND_ASSUM MP_TAC `y1 = t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w):real^3`
970 THEN DISCH_TAC
971 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
972 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
973 THEN REWRITE_TAC[VECTOR_ARITH`(B%A+C+D)-A=C+D-(&1-B)%A`]
974 THEN DISCH_TAC
975 THEN MP_TAC(SET_RULE`norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3) = &1 ==> (inv (&1-t1))*(norm (t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x) ) = (inv (&1-t1))* (&1):real`)
976 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
977 THEN ASM_REWRITE_TAC[]
978 THEN REDUCE_ARITH_TAC
979 THEN MP_TAC(REAL_ARITH`&0<inv(&1-t1:real)==> &0<= inv(&1-t1:real)`)
980 THEN RESA_TAC
981 THEN MP_TAC(ISPECL[`inv(&1-t1:real)`;`t2 % v + t3 % ((&1 - t) % u + t % w) - (&1 - t1) % x:real^3`]NORM_MUL)
982 THEN MP_TAC(ISPEC`inv(&1-t1:real)`REAL_ABS_REFL)
983 THEN RESP_TAC
984 THEN DISCH_TAC
985 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
986 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-E%D)=A%(B+C)-(A*E)%D`]
987 THEN REDUCE_VECTOR_TAC
988 THEN DISCH_TAC
989 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th)])
990 THEN ASM_REWRITE_TAC[REAL_INV_INV;VECTOR_ARITH`(&1-A)%(B%C-D)+D= A%D+(B*(&1-A))%C:real^3`]
991 THEN REDUCE_VECTOR_TAC]]]);;
992
993
994
995 let separate1_sphere_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (u1:real^3).
996
997 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
998 /\ ~(coplanar{x,v,u,w})
999 ==>
1000 ?h:real.
1001 (&0 < h) /\ (h<= &1)
1002 /\ 
1003 (!t:real. &0<t /\ t<h 
1004 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
1005
1006 REPEAT STRIP_TAC 
1007 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1008 ` (v:real^3)`] 
1009 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1010 ` (u:real^3)`] 
1011 THEN MRESA_TAC exist_close_fan[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;
1012 `(v1:real^3)`;` (u1:real^3)`]
1013 THEN POP_ASSUM MP_TAC
1014 THEN DISCH_THEN(LABEL_TAC"THA")
1015 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1016 THEN POP_ASSUM MP_TAC
1017 THEN DISCH_THEN(LABEL_TAC"A" )
1018 THEN MRESA_TAC exists_point_small_edges_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;`h:real`]
1019 THEN POP_ASSUM MP_TAC
1020 THEN DISCH_THEN(LABEL_TAC"B" )
1021 THEN EXISTS_TAC`min ((h':real)/ &2) (t1:real)`
1022 THEN ASM_REWRITE_TAC[]
1023 THEN STRIP_TAC
1024 THENL(*1*)[
1025 ASM_TAC
1026 THEN REAL_ARITH_TAC;(*1*)
1027
1028 STRIP_TAC
1029 THENL(*2*)[
1030
1031 ASM_TAC
1032 THEN REAL_ARITH_TAC;(*2*)
1033
1034 REPEAT STRIP_TAC
1035 THEN REWRITE_TAC[EXTENSION]
1036 THEN GEN_TAC
1037 THEN EQ_TAC
1038 THENL(*3*)[
1039
1040 STRIP_TAC
1041 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
1042 THEN SUBGOAL_THEN `!y1:real^3.
1043           y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
1044 ==> ?y2:real^3.        y2 IN aff_ge {x:real^3} {(v:real^3), (u:real^3)} INTER ballnorm_fan x /\
1045           dist (y1,y2)<(h:real)` ASSUME_TAC
1046 THENL(*4*)[
1047 MP_TAC(REAL_ARITH`&0 <(t:real)/\ &0< h' /\ t < min ((h':real)/ &2) (t1:real)==> &0 <= t /\ t<=t1 /\ t< h'`)
1048 THEN RESA_TAC
1049 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
1050 THEN RESA_TAC
1051 THEN REPEAT STRIP_TAC
1052 THEN MRESA_TAC same_projective_sphere_gt_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;` (t:real) `;`(y1:real^3)`]
1053 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1054 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`(u:real^3) `;]
1055 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
1056 THEN MRESA_TAC expansion1_convex_fan[`(v:real^3)`;` (u:real^3)`;` s:real`]
1057 THEN MRESA_TAC origin_point_not1_in_convex_fan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`]
1058 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%u:real^3)` ASSUME_TAC
1059 THENL(*5*)[
1060 POP_ASSUM MP_TAC
1061 THEN MATCH_MP_TAC MONO_NOT
1062 THEN RESA_TAC;(*5*)
1063
1064 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % u:real^3`]imp_norm_not_zero_fan)
1065 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
1066 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
1067 THEN RESA_TAC
1068 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % u-x:real^3`NORM_POS_LE)
1069 THEN MP_TAC(REAL_ARITH`~(&0 =norm((&1 - s) % v + s % u-x:real^3)) /\ &0 <= norm((&1 - s) % v + s % u-x:real^3)==> &0 <norm((&1 - s) % v + s % u-x:real^3)`)
1070 THEN RESA_TAC
1071 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_MUL_LINV)
1072 THEN RESA_TAC
1073 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % u-x:real^3))`REAL_LE_INV)
1074 THEN RESA_TAC
1075 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x)) %
1076       ((&1 - s) % v + s %  u - x) +x:real^3`
1077 THEN STRIP_TAC
1078 THENL(*6*)[
1079 STRIP_TAC
1080 THENL(*7*)[
1081 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % u - x:real^3)) `
1082 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (&1 - s)`
1083 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % u - x:real^3)) * (s)`
1084 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
1085 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
1086 THEN STRIP_TAC
1087 THEN MATCH_MP_TAC REAL_LE_MUL
1088 THEN ASM_REWRITE_TAC[]
1089 THEN ASM_TAC
1090 THEN REAL_ARITH_TAC;(*7*)
1091
1092 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
1093 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % u - x:real^3))`REAL_ABS_REFL)
1094 THEN RESP_TAC
1095 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
1096
1097 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1098   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
1099   x -
1100   (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) + x)=
1101 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
1102   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
1103   (inv (norm ((&1 - s) % v + s % u - x)) % ((&1 - s) % v + s % u - x) ):real^3`]
1104 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
1105 THEN RESA_TAC
1106 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
1107 THEN RESA_TAC
1108 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
1109 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
1110 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
1111       ballnorm_fan x ==>  x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
1112 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
1113 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1114 THEN REPEAT STRIP_TAC
1115 THEN POP_ASSUM MP_TAC
1116 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
1117 THEN SIMP_TAC[]
1118 THEN REPEAT STRIP_TAC
1119 THEN REMOVE_THEN "THA" (fun th->  MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
1120 THEN POP_ASSUM MP_TAC
1121 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1122 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1123 THEN SIMP_TAC[dist;NORM_SUB]
1124 THEN REAL_ARITH_TAC](*4*);(*3*)
1125
1126 SET_TAC[]]]]);;
1127
1128
1129
1130
1131 let fan_run_in_small1_is_fan=prove(
1132 `!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3.
1133 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
1134 /\ ~(coplanar{x,v,u,w})
1135 ==> 
1136 ?t1:real. &0 < t1 /\ t1 <= &1
1137 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
1138
1139 REPEAT STRIP_TAC 
1140 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1141 ` (v:real^3)`]
1142 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
1143 ` (v1:real^3)`]  
1144 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1145 THEN POP_ASSUM MP_TAC
1146 THEN DISCH_THEN (LABEL_TAC"BA")
1147 THEN MRESA_TAC separate1_sphere_fan[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3)`;` (w:real^3)`;` (v1:real^3)`;`(u1:real^3)`]
1148 THEN POP_ASSUM MP_TAC
1149 THEN DISCH_THEN (LABEL_TAC"A")
1150 THEN REPEAT STRIP_TAC
1151 THEN MP_TAC(REAL_ARITH` &0 < t1/\ &0 < h ==> &0 < min (h:real) (t1:real)`)
1152 THEN RESA_TAC
1153 THEN MP_TAC(REAL_ARITH`  t1 <= &1  /\ h <= &1==>  min (h:real) (t1:real)<= &1`)
1154 THEN RESA_TAC
1155 THEN EXISTS_TAC`min (h:real) (t1:real)`
1156 THEN ASM_REWRITE_TAC[]
1157 THEN REPEAT STRIP_TAC
1158 THEN MP_TAC(REAL_ARITH`  &0 < t /\ t<  min (h:real) (t1:real)==> t< h /\ t<= t1 /\ &0 <= t`)
1159 THEN RESA_TAC
1160 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
1161 THEN POP_ASSUM MP_TAC
1162 THEN DISCH_THEN (LABEL_TAC"A")
1163 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
1164 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1165 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1166 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1167 THEN GEN_TAC
1168 THEN EQ_TAC
1169 THENL[ REPEAT STRIP_TAC
1170 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
1171 THENL[
1172 POP_ASSUM MP_TAC
1173 THEN POP_ASSUM MP_TAC
1174 THEN POP_ASSUM MP_TAC
1175 THEN SET_TAC[];
1176 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
1177 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
1178 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
1179 THEN RESA_TAC
1180 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
1181 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
1182 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
1183 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
1184 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1185 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
1186 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
1187 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
1188 THENL[
1189 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
1190 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
1191
1192 ASM_TAC
1193 THEN SET_TAC[]]];
1194
1195 SET_TAC[]]);;
1196
1197
1198 let fan_run_in_small21_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1199 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
1200 /\ ~coplanar {x,v,u,w}
1201 ==> 
1202 ?t1:real. &0<t1 /\ t1<= &1
1203 /\ (!t:real. &0< t /\ t<= t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1204
1205 REPEAT STRIP_TAC
1206 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1207 THEN POP_ASSUM MP_TAC
1208 THEN DISCH_THEN (LABEL_TAC"A")
1209 THEN DISJ_CASES_TAC(SET_RULE`(?h:real. &0<h /\ h<= &1/\ azim x v u w1=azim x v u ((&1-h)%u+h%w:real^3))\/ ~(?h:real. &0<h /\ h<= &1 /\ azim x v u ((&1-h)%u+h%w:real^3)=azim x v u w1)`)
1210 THENL(*1*)[
1211 POP_ASSUM MP_TAC
1212 THEN STRIP_TAC
1213 THEN EXISTS_TAC`min (t1:real) ((h:real)/ &2)`
1214 THEN STRIP_TAC
1215 THENL(*2*)[
1216 ASM_TAC
1217 THEN REAL_ARITH_TAC;(*2*)
1218
1219 STRIP_TAC
1220 THENL(*3*)[ASM_TAC
1221 THEN REAL_ARITH_TAC;(*3*)
1222 REPEAT STRIP_TAC
1223 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1224 THEN RESA_TAC
1225 THEN MP_TAC(REAL_ARITH`(t:real)<= min (t1:real) (h:real/ &2) ==> t <= t1`)
1226 THEN RESA_TAC
1227 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1228 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1229 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1230 ` (v:real^3)`]
1231 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1232 ` (v:real^3)`]  
1233 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1234 THEN GEN_TAC
1235 THEN EQ_TAC
1236 THENL(*4*)[
1237 DISCH_TAC
1238 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1239 THENL(*5*)[
1240 POP_ASSUM MP_TAC
1241 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1242 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1243 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1244 THEN STRIP_TAC
1245 THEN POP_ASSUM MP_TAC
1246 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1247  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1248  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1249 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1250 THEN RESA_TAC
1251 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1252 THEN STRIP_TAC
1253 THEN MP_TAC(SET_RULE`
1254 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3 
1255 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1256 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1257 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
1258 THEN REDUCE_VECTOR_TAC
1259 THEN STRIP_TAC
1260 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1261 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1262 THEN DISCH_TAC 
1263 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1264 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1265 THEN STRIP_TAC
1266 THEN MP_TAC(SET_RULE`
1267 (t1''-t1') + (t2'-t2) + t3' = t3
1268 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1269 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1270 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1271 THEN STRIP_TAC
1272 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1273 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1274 THEN EXISTS_TAC`inv t3 * t3':real`
1275 THEN ASM_REWRITE_TAC[]
1276 THEN MATCH_MP_TAC REAL_LE_MUL
1277 THEN ASM_REWRITE_TAC[]
1278 THEN MATCH_MP_TAC REAL_LE_INV
1279 THEN ASM_TAC
1280 THEN REAL_ARITH_TAC;(*5*)
1281 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1282 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1283 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
1284 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
1285 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
1286 THEN ASM_TAC
1287 THEN REAL_ARITH_TAC](*5*)(*4*);
1288 SET_TAC[]]]];(*1*)
1289 POP_ASSUM MP_TAC
1290 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
1291 THEN DISCH_THEN(LABEL_TAC"B")
1292 THEN EXISTS_TAC`t1:real`
1293 THEN ASM_REWRITE_TAC[]
1294 THEN REPEAT STRIP_TAC
1295 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
1296 THEN RESA_TAC
1297 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1298 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1299 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1300 ` (v:real^3)`]
1301 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1302 ` (v:real^3)`]  
1303 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
1304 THEN GEN_TAC
1305 THEN EQ_TAC
1306 THENL(*2*)[
1307 DISCH_TAC
1308 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
1309 THENL(*3*)[
1310 POP_ASSUM MP_TAC
1311 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1312 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
1313 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1314 THEN STRIP_TAC
1315 THEN POP_ASSUM MP_TAC
1316 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1317  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
1318  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
1319 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1320 THEN RESA_TAC
1321 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
1322 THEN STRIP_TAC
1323 THEN MP_TAC(SET_RULE`
1324 t3 % ((&1 - t) % u + t % w) = (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3 
1325 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1''-t1') % x + (t2'-t2) % v + t3' % w1)`)
1326 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1327 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
1328 THEN REDUCE_VECTOR_TAC
1329 THEN STRIP_TAC
1330 THEN FIND_ASSUM MP_TAC`t1'' + t2' + t3' = &1:real`
1331 THEN FIND_ASSUM MP_TAC`t1' + t2 + t3 = &1:real`
1332 THEN DISCH_TAC 
1333 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
1334 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
1335 THEN STRIP_TAC
1336 THEN MP_TAC(SET_RULE`
1337 (t1''-t1') + (t2'-t2) + t3' = t3
1338 ==> (inv (t3))*((t1''-t1') + (t2'-t2) + t3') = (inv (t3))*t3`)
1339 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1340 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
1341 THEN STRIP_TAC
1342 THEN EXISTS_TAC`inv t3 * (t1'' - t1'):real`
1343 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
1344 THEN EXISTS_TAC`inv t3 * t3':real`
1345 THEN ASM_REWRITE_TAC[]
1346 THEN MATCH_MP_TAC REAL_LE_MUL
1347 THEN ASM_REWRITE_TAC[]
1348 THEN MATCH_MP_TAC REAL_LE_INV
1349 THEN ASM_TAC
1350 THEN REAL_ARITH_TAC;(*3*)
1351 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1352 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
1353 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
1354 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM])
1355 THEN ASM_TAC
1356 THEN REAL_ARITH_TAC];
1357 SET_TAC[]]]);;
1358
1359
1360
1361 let fan_run_in_small2_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3.
1362 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
1363 /\ ~coplanar {x,v,u,w}
1364 ==> 
1365 ?t1:real. &0<t1 /\ t1<= &1
1366 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
1367 REPEAT STRIP_TAC
1368 THEN MRESA_TAC fan_run_in_small21_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;` w:real^3`]
1369 THEN POP_ASSUM MP_TAC
1370 THEN DISCH_THEN(LABEL_TAC"A")
1371 THEN EXISTS_TAC`t1:real`
1372 THEN ASM_REWRITE_TAC[]
1373 THEN REPEAT STRIP_TAC
1374 THEN MP_TAC(REAL_ARITH`t<t1==>t<=t1`)
1375 THEN ASM_REWRITE_TAC[]
1376 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`));;
1377
1378
1379
1380 let extension_in_aff_2_2_fan=prove(`!x:real^3 v:real^3 u:real^3 w:real^3.
1381 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1382 ==> 
1383 (!t:real. &0< t /\ t< &1
1384 ==> (!t1:real t2:real t3:real. &0<t3  /\ &0<t2 /\ t1+t2+t3= &1
1385 ==>t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) IN aff_gt {x,u} {w,v}))`,
1386 REPEAT STRIP_TAC
1387 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1388 ` (v:real^3)`] 
1389 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1390 ` (u:real^3)`] 
1391 THEN SUBGOAL_THEN `DISJOINT {x,u:real^3} {w,v:real^3}` ASSUME_TAC
1392 THENL[
1393 REWRITE_TAC[DISJOINT_SYM;SET_RULE`{v:real^3,w:real^3}= {v} UNION {w}`;DISJOINT_UNION]
1394 THEN REWRITE_TAC[SET_RULE`{v} UNION {w}={v:real^3,w:real^3}`]
1395 THEN ONCE_REWRITE_TAC[DISJOINT_SYM]
1396 THEN ASM_REWRITE_TAC[];
1397 MRESAL_TAC AFF_GT_2_2[`x:real^3`;`u:real^3`;`w:real^3`;`v:real^3`][IN_ELIM_THM]
1398 THEN EXISTS_TAC`t1:real`
1399 THEN EXISTS_TAC`t3*(&1-t):real`
1400 THEN EXISTS_TAC`t3*(t):real`
1401 THEN EXISTS_TAC`t2:real`
1402 THEN ASM_REWRITE_TAC[REAL_ARITH`t1 +  t3 * (&1 - t) + t3 * t +t2 = t1+t2+t3:real`;VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
1403  t1 % x + (t3 * (&1 - t)) % u  + (t3 * t) % w+ t2 % v:real^3`]
1404 THEN MATCH_MP_TAC REAL_LT_MUL
1405 THEN ASM_TAC
1406 THEN REAL_ARITH_TAC]);;
1407
1408
1409
1410 let inequality3_aim_in_convex_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1411 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ 
1412 (&0< azim x u w v ) /\ (azim x u w v <pi)
1413 ==> 
1414 (!t:real. &0< t /\ t< &1
1415 ==> (!t1:real t2:real t3:real. &0<t3  /\ &0<t2 /\ t1+t2+t3= &1
1416 ==> &0< azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))
1417 /\ azim x u w (t1 % x + t2 % v + t3 % ((&1 - t) % u + t % w))< azim x u w v))`,
1418
1419 REPEAT STRIP_TAC
1420 THEN FIND_ASSUM MP_TAC`{v,u} IN (E:(real^3->bool)->bool)`
1421 THEN ONCE_REWRITE_TAC[SET_RULE`{v,u}={u,v}`]
1422 THEN STRIP_TAC
1423 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v:real^3)`;
1424 ` (u:real^3)`] 
1425 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1426 ` (u:real^3)`] 
1427 THEN MRESA_TAC WEDGE_LUNE_GT[`x:real^3`;` u:real^3`;`w:real^3`;`v:real^3`]
1428 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
1429 THEN DISCH_TAC
1430 THEN MRESA_TAC extension_in_aff_2_2_fan[`x:real^3`;` v:real^3`;`u:real^3`;`w:real^3`]
1431 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1432 THEN POP_ASSUM(fun th-> MRESAL_TAC th [`t1:real`;`t2:real`;`t3:real`][wedge;IN_ELIM_THM]));;
1433
1434
1435
1436 let fan_run_in_small3_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3.
1437 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E 
1438 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
1439 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1440 ==> 
1441 ?t1:real. &0<t1 /\ t1<= &1
1442 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
1443 REPEAT STRIP_TAC
1444 THEN MRESA_TAC exists_open_not_collinear[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`]
1445 THEN POP_ASSUM MP_TAC
1446 THEN DISCH_THEN (LABEL_TAC"A")
1447 THEN EXISTS_TAC`t1:real`
1448 THEN ASM_REWRITE_TAC[]
1449 THEN REPEAT STRIP_TAC
1450 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
1451 THEN RESA_TAC
1452 THEN MP_TAC(REAL_ARITH`t<t1 /\ t1<= &1==>t<=t1 /\ t< &1`)
1453 THEN RESA_TAC
1454 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
1455 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
1456 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1457 ` (v:real^3)`]
1458 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
1459 ` (u:real^3)`]  
1460 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
1461 THEN GEN_TAC
1462 THEN EQ_TAC
1463 THENL(*1*)[
1464 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
1465 THEN STRIP_TAC
1466 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
1467 THENL(*2*)[
1468 POP_ASSUM MP_TAC
1469 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1470 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
1471 THEN STRIP_TAC
1472 THEN EXISTS_TAC`t1'':real`
1473 THEN EXISTS_TAC`t2':real`
1474 THEN EXISTS_TAC`t3':real`
1475 THEN ASM_REWRITE_TAC[];(*2*)
1476
1477 POP_ASSUM MP_TAC
1478 THEN ASM_REWRITE_TAC[]
1479 THEN STRIP_TAC
1480 THEN MRESA_TAC inequality3_aim_in_convex_fan
1481 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
1482 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
1483 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1':real`;`t2:real`;`t3:real`])
1484 THEN POP_ASSUM MP_TAC
1485 THEN POP_ASSUM MP_TAC
1486 THEN DISCH_THEN(LABEL_TAC"BE")
1487 THEN DISCH_THEN(LABEL_TAC"YEU")
1488 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
1489 THENL(*3*)[
1490 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
1491 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
1492 THEN ASM_REWRITE_TAC[collinear_fan;]
1493 THEN POP_ASSUM MP_TAC
1494 THEN MATCH_MP_TAC MONO_NOT
1495 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
1496 THEN STRIP_TAC
1497 THEN EXISTS_TAC`x:real^3`
1498 THEN EXISTS_TAC`v:real^3`
1499 THEN EXISTS_TAC`u:real^3`
1500 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1501 THENL(*4*)[
1502 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1503 THEN EXISTS_TAC`&1`
1504 THEN EXISTS_TAC`&0`
1505 THEN EXISTS_TAC`&0`
1506 THEN REDUCE_ARITH_TAC
1507 THEN VECTOR_ARITH_TAC;(*4*)
1508
1509 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1510 THENL(*5*)[
1511 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1512 THEN EXISTS_TAC`&0`
1513 THEN EXISTS_TAC`&1`
1514 THEN EXISTS_TAC`&0`
1515 THEN REDUCE_ARITH_TAC
1516 THEN VECTOR_ARITH_TAC;(*5*)
1517
1518 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1519 THENL(*6*)[
1520 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1521 THEN EXISTS_TAC`&0`
1522 THEN EXISTS_TAC`&0`
1523 THEN EXISTS_TAC`&1`
1524 THEN REDUCE_ARITH_TAC
1525 THEN VECTOR_ARITH_TAC;(*6*)
1526
1527 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1528 THENL(*7*)[
1529 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1530 THEN REMOVE_ASSUM_TAC
1531 THEN REMOVE_ASSUM_TAC
1532 THEN REMOVE_ASSUM_TAC
1533 THEN POP_ASSUM MP_TAC
1534 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
1535 THEN RESA_TAC
1536 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
1537 THEN RESA_TAC
1538 THEN ASM_REWRITE_TAC[]
1539 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
1540 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
1541 THEN STRIP_TAC
1542 THEN MP_TAC(SET_RULE`
1543 t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u
1544 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1') % x -t2 % v+v' % u):real^3`)
1545 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1546 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
1547 THEN REDUCE_VECTOR_TAC
1548 THEN STRIP_TAC
1549 THEN EXISTS_TAC`(inv t3 * (u' - t1')):real`
1550 THEN EXISTS_TAC`-- (inv t3 * t2):real`
1551 THEN EXISTS_TAC`(inv t3 * v'):real`
1552 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A+(--b)%C+d=A-b%C+d`;REAL_ARITH`inv t3 * (u' - t1') + --(inv t3 * t2) + inv t3 * v'=inv t3 * (t3+(u'+v') - (t1'+ t2+t3))`;REAL_ARITH`A+ &1- &1=A`];(*7*)
1553
1554 ASM_TAC
1555 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
1556  
1557 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
1558 ` (u:real^3)`]
1559 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
1560 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
1561 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
1562 THEN REMOVE_THEN"BE" MP_TAC
1563 THEN REMOVE_THEN"YEU" MP_TAC
1564 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1565 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
1566 THEN DISCH_TAC
1567 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
1568 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
1569 THENL(*4*)[
1570 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
1571 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
1572 THEN DISCH_TAC
1573 THEN ASM_REWRITE_TAC[]
1574 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
1575 THEN REAL_ARITH_TAC;(*4*)
1576
1577 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
1578 THENL(*5*)[
1579 ASM_REWRITE_TAC[]
1580 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
1581 THEN REAL_ARITH_TAC;(*5*)
1582
1583 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
1584 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
1585 THEN POP_ASSUM MP_TAC
1586 THEN REAL_ARITH_TAC]]]];
1587
1588 SET_TAC[]]);;
1589
1590
1591 let fan_run_in_small_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 w1:real^3.
1592 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E 
1593 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1594 /\ sigma_fan x V E u w = v
1595 ==> 
1596 ?t1:real. &0<t1 /\ t1<= &1
1597 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
1598 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
1599 REPEAT STRIP_TAC
1600 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1601 THEN SIMP_TAC[]) in
1602
1603 REPEAT STRIP_TAC
1604 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`]
1605 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
1606 THENL[
1607 MRESA_TAC fan_run_in_small2_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`u:real^3`;` w:real^3`;`w1:real^3`];
1608
1609 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
1610 THENL[
1611 MRESA_TAC fan_run_in_small3_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` v1:real^3`;` w:real^3`;`w1:real^3`];
1612  DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
1613 THENL[
1614 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
1615 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1616 THEN STRIP_TAC
1617 THEN MRESA_TAC fan_run_in_small2_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w1:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`]
1618 THEN EXISTS_TAC`t1:real`
1619 THEN ASM_REWRITE_TAC[lem];
1620 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
1621 THENL[
1622 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
1623 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
1624 THEN STRIP_TAC
1625 THEN MRESA_TAC fan_run_in_small3_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` w1:real^3`;` w:real^3`;`v1:real^3`]
1626 THEN EXISTS_TAC`t1:real`
1627 THEN ASM_REWRITE_TAC[lem];
1628 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
1629 THENL[
1630 ASM_TAC
1631 THEN SET_TAC[];
1632 MRESA_TAC fan_run_in_small1_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`v1:real^3`;`w1:real^3`]]]]]]));;
1633
1634
1635
1636
1637
1638
1639 let fan_run1_in_small_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) (E':(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1640 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
1641 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1642 /\ sigma_fan x V E u w = v
1643 ==>
1644 ?h:real. &0<h /\ h<= &1
1645 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E' /\ v IN aff_ge {x} e}={})`,
1646
1647 REPEAT STRIP_TAC 
1648 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
1649 THEN MRESA_TAC  FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
1650 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
1651 THEN REPEAT(POP_ASSUM MP_TAC)
1652 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
1653 THEN SPEC_TAC (`n:num`,`n:num`)
1654 THEN INDUCT_TAC
1655 THENL(*1*)[
1656 REPEAT STRIP_TAC 
1657 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
1658 THEN RESA_TAC
1659 THEN EXISTS_TAC`&1 / &2`
1660 THEN REWRITE_TAC[REAL_ARITH`&0< &1/ &2`;REAL_ARITH`&1 / &2 <= &1`]
1661 THEN ASM_SET_TAC[];(*1*)
1662
1663 REPEAT GEN_TAC
1664 THEN POP_ASSUM MP_TAC
1665 THEN DISCH_THEN (LABEL_TAC "A")
1666 THEN REPEAT STRIP_TAC
1667 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
1668 THEN RESA_TAC
1669 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
1670 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
1671 THEN STRIP_TAC
1672 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
1673 THEN RESA_TAC
1674 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
1675 THEN RESA_TAC
1676 THEN POP_ASSUM MP_TAC
1677 THEN DISCH_THEN(LABEL_TAC"YEU")
1678 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
1679 THENL(*2*)[
1680 STRIP_TAC
1681 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==>  t= E'`)
1682 THEN RESA_TAC
1683 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
1684 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
1685 THEN ASM_REWRITE_TAC[]
1686 THEN ARITH_TAC;(*2*)
1687 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
1688 THENL(*3*)[
1689 ASM_SET_TAC[];(*3*)
1690
1691 POP_ASSUM MP_TAC
1692 THEN STRIP_TAC
1693 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
1694 (E':(real^3->bool)->bool) SUBSET (E:(real^3->bool)->bool) /\ t SUBSET E' ==> e IN E'/\ e IN E/\ ~(e IN t) /\ {e} UNION t SUBSET E'`)
1695 THEN RESA_TAC
1696 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
1697 THEN RESA_TAC
1698 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
1699 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
1700 THEN RESA_TAC
1701 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool) 
1702 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
1703 THEN RESA_TAC
1704 THEN MP_TAC(ISPECL[`({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))DELETE e`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`]CARD_PSUBSET)
1705 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1706 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
1707 THEN DISCH_TAC
1708 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1709 THEN DISCH_TAC
1710 THEN MP_TAC(ARITH_RULE`CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) < CARD ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))
1711 /\ CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) = CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))-1
1712 <=>CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) +1= CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`)
1713 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1714 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
1715 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
1716 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
1717 THEN RESA_TAC
1718 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
1719 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
1720 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
1721 THEN DISCH_TAC
1722 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
1723 THEN DISCH_TAC
1724 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
1725 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
1726 THEN RESA_TAC
1727 THEN POP_ASSUM MP_TAC
1728 THEN DISCH_THEN(LABEL_TAC"MA")
1729 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
1730 THEN RESA_TAC
1731 THEN MRESA_TAC fan_run_in_small_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`;`v':real^3`;`w':real^3`]
1732 THEN POP_ASSUM MP_TAC
1733 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
1734 THEN POP_ASSUM MP_TAC
1735 THEN RESA_TAC
1736 THEN STRIP_TAC
1737 THEN POP_ASSUM MP_TAC
1738 THEN DISCH_THEN(LABEL_TAC"BE")
1739 THEN EXISTS_TAC` min (h:real) (t1:real)`
1740 THEN STRIP_TAC
1741 THENL(*4*)[
1742 ASM_TAC
1743 THEN REAL_ARITH_TAC;(*4*)
1744
1745 STRIP_TAC
1746 THENL(*5*)[
1747 ASM_TAC
1748 THEN REAL_ARITH_TAC;(*5*)
1749 REPEAT STRIP_TAC
1750 THEN REMOVE_THEN "MA" MP_TAC
1751 THEN DISCH_TAC
1752 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
1753 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
1754 THEN GEN_TAC
1755 THEN EQ_TAC
1756 THENL(*6*)[
1757 ASM_REWRITE_TAC[IN_SING]
1758 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
1759 THEN RESA_TAC
1760 THEN STRIP_TAC
1761 THENL(*7*)[
1762
1763
1764 POP_ASSUM MP_TAC
1765 THEN ASM_REWRITE_TAC[]
1766 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
1767 THEN ASM_SET_TAC[];
1768
1769 POP_ASSUM MP_TAC
1770 THEN ASM_REWRITE_TAC[]
1771 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
1772 THEN ASM_SET_TAC[]];
1773 SET_TAC[]]]]]]]);;
1774
1775
1776
1777 let fan_run_in_small_is_not_meet_xfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1778 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1779 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1780 /\ sigma_fan x V E u w = v
1781 ==>
1782 ?h:real. &0<h /\ h<= &1
1783 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})`,
1784
1785 REPEAT STRIP_TAC
1786 THEN MP_TAC(ISPECL[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`u:real^3`;` (w:real^3)`]fan_run1_in_small_is_fan)
1787 THEN RESA_TAC
1788 THEN POP_ASSUM MP_TAC
1789 THEN REWRITE_TAC[SET_RULE`A SUBSET A`]
1790 THEN RESA_TAC
1791 THEN EXISTS_TAC`h:real`
1792 THEN ASM_REWRITE_TAC[]
1793 THEN ASM_SET_TAC[]);;
1794
1795 let fan_run_in_small_is_subset_yfan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3.
1796 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1797 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1798 /\ sigma_fan x V E u w = v
1799 ==>
1800     ?h:real. &0<h /\ h<= &1
1801 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} SUBSET yfan(x,V,E))`,
1802 REPEAT STRIP_TAC
1803 THEN MP_TAC(ISPECL[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`u:real^3`;` (w:real^3)`]fan_run1_in_small_is_fan)
1804 THEN RESA_TAC
1805 THEN POP_ASSUM MP_TAC
1806 THEN REWRITE_TAC[SET_RULE`A SUBSET A`;yfan;xfan]
1807 THEN RESA_TAC
1808 THEN EXISTS_TAC`h:real`
1809 THEN ASM_REWRITE_TAC[]
1810 THEN ASM_SET_TAC[]);;
1811
1812
1813 let not_collinear_is_properties_fully_surrounded1=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 t:real.
1814 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1815 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1816 /\  &0<=t /\ t<= &1
1817 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
1818
1819 REPEAT STRIP_TAC
1820 THEN POP_ASSUM MP_TAC
1821 THEN REWRITE_TAC[]
1822 THEN MP_TAC(REAL_ARITH`&0<=t /\ t<= &1 ==> t=  &0 \/ t= &1 \/ (&0<t /\ t< &1)`)
1823 THEN RESA_TAC
1824 THENL[
1825 REDUCE_ARITH_TAC THEN REDUCE_VECTOR_TAC
1826 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1827 ` (v:real^3)`] ;
1828
1829 REWRITE_TAC[REAL_ARITH`&1- &1= &0`] THEN REDUCE_VECTOR_TAC
1830 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`]
1831 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`x:real^3`;`v:real^3`;`w:real^3`;`u:real^3`]
1832 THEN POP_ASSUM MATCH_MP_TAC
1833 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,B,D,C}`]
1834 THEN ASM_REWRITE_TAC[];
1835
1836 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
1837 ` (v:real^3)`] 
1838 THEN MRESA_TAC collinear1_fan [`x:real^3`;`v:real^3`;`(&1-t)% u+t% w:real^3`]
1839 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
1840 THEN ASM_REWRITE_TAC[]
1841 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`]
1842 THEN POP_ASSUM MP_TAC
1843 THEN MATCH_MP_TAC MONO_NOT
1844 THEN REWRITE_TAC[aff; AFFINE_HULL_2; IN_ELIM_THM; coplanar]
1845 THEN STRIP_TAC
1846 THEN EXISTS_TAC`x:real^3`
1847 THEN EXISTS_TAC`v:real^3`
1848 THEN EXISTS_TAC`u:real^3`
1849 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1850 THENL[
1851 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1852 THEN EXISTS_TAC`&1`
1853 THEN EXISTS_TAC`&0`
1854 THEN EXISTS_TAC`&0`
1855 THEN REDUCE_ARITH_TAC
1856 THEN VECTOR_ARITH_TAC;
1857
1858 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1859 THENL[
1860 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1861 THEN EXISTS_TAC`&0`
1862 THEN EXISTS_TAC`&1`
1863 THEN EXISTS_TAC`&0`
1864 THEN REDUCE_ARITH_TAC
1865 THEN VECTOR_ARITH_TAC;
1866
1867 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1868 THENL[ 
1869 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1870 THEN EXISTS_TAC`&0`
1871 THEN EXISTS_TAC`&0`
1872 THEN EXISTS_TAC`&1`
1873 THEN REDUCE_ARITH_TAC
1874 THEN VECTOR_ARITH_TAC;
1875
1876 SUBGOAL_THEN`(w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
1877 THENL[
1878 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
1879 THEN REMOVE_ASSUM_TAC
1880 THEN REMOVE_ASSUM_TAC
1881 THEN REMOVE_ASSUM_TAC
1882 THEN POP_ASSUM MP_TAC
1883 THEN MP_TAC(REAL_ARITH`&0<t:real==> ~(t= &0)`)
1884 THEN RESA_TAC
1885 THEN MP_TAC(ISPEC`(t:real)`REAL_MUL_LINV)
1886 THEN RESA_TAC
1887 THEN ASM_REWRITE_TAC[]
1888 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - t) % u + t % w = u' % x + v' % v
1889 <=>t % w = u' % x + v' % v-(&1 - t) % u :real^3`]
1890 THEN STRIP_TAC
1891 THEN MP_TAC(SET_RULE`
1892 t % w = u' % x + v' % v-(&1 - t) % u 
1893 ==> (inv (t))%(t % w  ) = (inv (t))%(u' % x + v' % v-(&1 - t) % u ):real^3`)
1894 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1895 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+C-(&1-E)%D)=A%B+A%C+(A*E-A)%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
1896 THEN REDUCE_VECTOR_TAC
1897 THEN STRIP_TAC
1898 THEN EXISTS_TAC`(inv t * u'):real`
1899 THEN EXISTS_TAC`(inv t * v'):real`
1900 THEN EXISTS_TAC`(&1-inv t):real`
1901 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B+A*C+D-E=A*(B+C)+D-E`]
1902 THEN ASM_TAC
1903 THEN REAL_ARITH_TAC;
1904
1905 ASM_TAC
1906 THEN SET_TAC[]]]]]]);;
1907
1908
1909
1910
1911 let not_collinear_is_properties_fully_surrounded=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 t:real.
1912 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
1913 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
1914 /\  &0<t /\ t< &1
1915 ==> ~ collinear {x,v,(&1-t)%u+ t % w}`,
1916 REPEAT STRIP_TAC
1917 THEN POP_ASSUM MP_TAC
1918 THEN REWRITE_TAC[]
1919 THEN MP_TAC(REAL_ARITH`&0 <t /\ t < &1==> &0<= t /\ t <= &1`)
1920 THEN RESA_TAC
1921 THEN MRESA_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`;`t:real`]
1922 );;
1923
1924
1925
1926
1927 let exists_inf_element_fix_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3  u1:real^3 .
1928 FAN(x,V,E)/\ v IN V  /\ CARD (set_of_edge v V E) >1
1929 ==>
1930 (?(u:real^3). (u IN (set_of_edge v V E)) /\
1931 (!(w:real^3). (w IN (set_of_edge v V E)) ==> azim x v u1 u <= azim x v u1 w))`,
1932 (let lemma = prove
1933    (`!X:real->bool. 
1934           FINITE X /\ ~(X = {}) 
1935           ==> ?a. a IN X /\ !x. x IN X ==> a <= x`,
1936     MESON_TAC[INF_FINITE]) in
1937 MP_TAC(lemma) 
1938 THEN DISCH_THEN(LABEL_TAC "a") 
1939 THEN REPEAT GEN_TAC THEN REWRITE_TAC[FAN;fan1] 
1940 THEN STRIP_TAC 
1941 THEN MRESA_TAC remark_finite_fan1[`(v:real^3)` ;`(V:real^3->bool)`; `(E:(real^3->bool)->bool)`]
1942 THEN DISJ_CASES_TAC(SET_RULE`((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool))={})\/
1943  ~((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) ={})`)
1944 THENL[
1945 FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) > 1`
1946 THEN POP_ASSUM (fun th->REWRITE_TAC[th;CARD_CLAUSES])
1947 THEN ARITH_TAC;
1948 SUBGOAL_THEN`~(IMAGE (azim x v u1) ((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) )={})` ASSUME_TAC
1949 THENL[
1950 REWRITE_TAC[IMAGE_EQ_EMPTY] THEN ASM_MESON_TAC[];
1951
1952 SUBGOAL_THEN` FINITE (IMAGE (azim x v u1) (set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)))` ASSUME_TAC
1953 THENL[ASM_MESON_TAC[FINITE_IMAGE];
1954
1955 REMOVE_THEN "a" (fun th ->MRESAL1_TAC th `(IMAGE (azim x v u1) ((set_of_edge (v:real^3) (V:real^3->bool) (E:(real^3->bool)->bool)) ))`[IMAGE;IN_ELIM_THM]) 
1956 THEN EXISTS_TAC`x':real^3`
1957   THEN ASM_REWRITE_TAC[] 
1958 THEN ASM_MESON_TAC[]]]]));;
1959
1960
1961
1962 let exists_element_in_half_sapace_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3  u1:real^3 w1:real^3.
1963 FAN(x,V,E)/\ v IN V /\ ~coplanar{x,v,u1,w1} 
1964 /\ CARD (set_of_edge v V E) >1
1965 /\ fan80(x,V,E) 
1966 ==>  ?u:real^3. {v,u} IN E /\ &0< azim x v u1 (u:real^3)/\ azim x v u1 (u:real^3) <pi  `,
1967 REWRITE_TAC[fan80]
1968 THEN REPEAT STRIP_TAC
1969 THEN POP_ASSUM MP_TAC
1970 THEN DISCH_THEN(LABEL_TAC "BE")
1971 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR [`x:real^3`;`v:real^3`;`u1:real^3`;`w1:real^3`]
1972 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`]
1973 THEN POP_ASSUM MP_TAC
1974 THEN DISCH_THEN(LABEL_TAC "YEU")
1975 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`v:real^3`]
1976 THEN POP_ASSUM MP_TAC
1977 THEN RESA_TAC
1978 THEN MRESA_TAC SUR_SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
1979 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
1980 THEN DISJ_CASES_TAC(REAL_ARITH`(pi<= azim (x:real^3) (v:real^3) (u1:real^3) u  )\/  azim x v u1 (u:real^3) <pi `)
1981 THENL[
1982 REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`w:real^3`])
1983 THEN MP_TAC(REAL_ARITH`pi <= azim (x:real^3) (v:real^3) (u1:real^3) (u:real^3) /\ azim x v w u < pi==> azim x v w u <= azim x v u1 u`)
1984 THEN RESA_TAC
1985 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`v:real^3`;`u1:real^3`;`w:real^3`;`u:real^3`]
1986 THEN MP_TAC(REAL_ARITH`&0 < azim x v w u /\ azim (x:real^3) (v:real^3) (u1:real^3) (u:real^3) = azim x v u1 w + azim x v w u
1987 ==> azim x v u1 w < azim x v u1 u`)
1988 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
1989 THEN RESA_TAC
1990 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `w:real^3`)
1991 THEN POP_ASSUM MP_TAC
1992 THEN POP_ASSUM MP_TAC
1993 THEN REAL_ARITH_TAC;
1994
1995 ASSUME_TAC(ISPECL[`(x:real^3)`;`(v:real^3)`;`(u1:real^3)`;`u:real^3`]azim)
1996 THEN MP_TAC(REAL_ARITH`(&0<= azim (x:real^3) (v:real^3) (u1:real^3) u) ==>(azim (x:real^3) (v:real^3) (u1:real^3) u = &0 ) \/  &0< azim x v u1 (u:real^3)  `)
1997 THEN POP_ASSUM (fun th-> GEN_REWRITE_TAC( LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] THEN REWRITE_TAC[])
1998 THEN STRIP_TAC
1999 THENL[
2000 EXISTS_TAC`sigma_fan x V E v (u:real^3)`
2001 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge v V E = {u:real^3})\/  ~(set_of_edge v V E = {u})`)
2002 THENL[
2003
2004 MRESA_TAC CARD_SING[`u:real^3`; `(set_of_edge v V E):real^3->bool`]
2005 THEN FIND_ASSUM MP_TAC `CARD ((set_of_edge v V E):real^3->bool) >1`
2006 THEN POP_ASSUM MP_TAC
2007 THEN POP_ASSUM (fun TH-> REWRITE_TAC[TH])
2008 THEN ARITH_TAC;
2009
2010 MRESA_TAC SIGMA_FAN[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3) `;`(u:real^3)`]
2011 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`]
2012 THEN POP_ASSUM MP_TAC
2013 THEN RESA_TAC
2014 THEN REMOVE_THEN "YEU" (fun th-> MRESA1_TAC th `sigma_fan x V E v (u:real^3)`)
2015 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v:real^3`;`u1:real^3`;`u:real^3`;`sigma_fan x V E v (u:real^3)`]
2016 THEN REDUCE_ARITH_TAC
2017 THEN REMOVE_THEN "BE" (fun th-> MRESA_TAC th [`v:real^3`;`(u:real^3)`])];
2018
2019 EXISTS_TAC`(u:real^3)`
2020 THEN ASM_REWRITE_TAC[]]]);;
2021
2022
2023
2024 let independent_run_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2025 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2026 /\ fan80(x,V,E)
2027 /\ sigma_fan x V E u w = v
2028 /\ &0<a /\ a<= &1
2029 ==> independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
2030
2031
2032 REPEAT STRIP_TAC
2033 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2034 THEN REWRITE_TAC[fan80]
2035 THEN DISCH_TAC
2036 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"))
2037 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`]
2038 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2039 THEN RESA_TAC
2040 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2041 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2042 ` (u:real^3)`] 
2043 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2044 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2045 THEN POP_ASSUM MP_TAC
2046 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v, u, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2047 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v:real^3,u:real^3,(&1 - a) % u + a % w:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2048 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2049 THEN REMOVE_ASSUM_TAC
2050 THEN DISCH_TAC
2051 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]);;
2052
2053
2054 let span_run_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2055 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2056 /\ fan80(x,V,E)
2057 /\ sigma_fan x V E u w = v
2058 /\ &0<a /\ a< &1
2059 ==> ?t1:real t2:real t3:real. 
2060 u1-x =t1 % (v-x)+t2 % ((&1 - a) % u + a % w - x)+t3 %(u-x)`,
2061 REPEAT STRIP_TAC
2062 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2063 THEN REWRITE_TAC[fan80]
2064 THEN DISCH_TAC
2065 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"))
2066 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`]
2067 THEN MP_TAC(REAL_ARITH`&0< a==> ~(a= &0)`)
2068 THEN RESA_TAC
2069 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2070 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2071 ` (u:real^3)`] 
2072 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2073 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2074 THEN POP_ASSUM MP_TAC
2075 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v, u, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2076 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v:real^3,u:real^3,(&1 - a) % u + a % w:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2077 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2078 THEN REMOVE_ASSUM_TAC
2079 THEN DISCH_TAC
2080 THEN MRESA_TAC NOT_COPLANAR_0_4_IMP_INDEPENDENT[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]
2081 THEN MRESA_TAC NOT_COPLANAR_NOT_COLLINEAR[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`;`(vec 0):real^3`]
2082 THEN POP_ASSUM MP_TAC
2083 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={D,A,B,C}`]
2084 THEN RESA_TAC
2085 THEN POP_ASSUM(fun th-> MP_TAC(th) THEN ASSUME_TAC(th))
2086 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,D}={D,A,B}`] 
2087 THEN DISCH_TAC
2088 THEN MRESA_TAC th3[`v - x:real^3`; `u - x:real^3`; `((&1 - a) % u + a % w) - x:real^3`]
2089 THEN MRESA_TAC th3[ `((&1 - a) % u + a % w) - x:real^3`;`v - x:real^3`; `u - x:real^3`;]
2090 THEN MP_TAC(ISPECL [`(:real^3)`; `{v - x, u - x, ((&1 - a) % u + a % w) - x:real^3}`] CARD_EQ_DIM) THEN
2091   ASM_SIMP_TAC[ORTHONORMAL_IMP_INDEPENDENT; SUBSET_UNIV] THEN
2092   REWRITE_TAC[DIM_UNIV; DIMINDEX_3; HAS_SIZE; FINITE_INSERT; FINITE_EMPTY] THEN
2093   SIMP_TAC[CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY; IN_INSERT;] 
2094 THEN  ASM_REWRITE_TAC[NOT_IN_EMPTY; ARITH;SUBSET] 
2095 THEN DISCH_TAC
2096 THEN POP_ASSUM(fun th-> MRESAL1_TAC th `u1-x:real^3`[IN_UNIV;SPAN_3;IN_ELIM_THM])
2097 THEN EXISTS_TAC`u':real`        
2098 THEN EXISTS_TAC`w':real`
2099 THEN EXISTS_TAC`v':real`
2100 THEN VECTOR_ARITH_TAC);;
2101
2102
2103 let cross_dot_fully_surrounded1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2104 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2105 /\ sigma_fan x V E u w = v
2106 /\ &0<a /\ a< &1
2107 /\ fan80(x,V,E)
2108 /\ ~collinear{x,v1,u1}
2109 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2110 /\ &0< azim x v1 v u1
2111 /\  azim x v1 v u1 < pi
2112 ==> &0< ((v1 - x) cross (u1 - x)) dot
2113   ((&1 - a) % u + a % w-x)`,
2114
2115 REPEAT STRIP_TAC
2116 THEN MRESAL_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`; `(&1 - a) % u + a % w:real^3`;`u1:real^3`][VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
2117 THEN POP_ASSUM MATCH_MP_TAC
2118 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2119 THEN REWRITE_TAC[fan80]
2120 THEN DISCH_THEN(LABEL_TAC"yeu em")
2121 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2122 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2123 ` (u:real^3)`] 
2124 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2125 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2126 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2127 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2128 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2129 THEN FIND_ASSUM MP_TAC `(v1:real^3) IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2130 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2131 THEN STRIP_TAC 
2132 THEN SUBGOAL_THEN`~collinear {x, v1, (&1 - a) % u + a % w:real^3}` ASSUME_TAC
2133 THENL[
2134 ASM_REWRITE_TAC[collinear1_fan;]
2135 THEN FIND_ASSUM MP_TAC`~((&1 - a) % u + a % w IN aff {x, v:real^3})`
2136 THEN MATCH_MP_TAC MONO_NOT
2137 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2138 THEN STRIP_TAC
2139 THEN POP_ASSUM MP_TAC
2140 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2141       u' % x + v' % ((&1 - a) % u + a % w)<=>
2142 (&1-(t1+t2+t3)) % x  + (v'-t3) % ((&1 - a) % u + a % w-x) =
2143       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
2144 THEN REDUCE_VECTOR_TAC
2145 THEN DISJ_CASES_TAC(REAL_ARITH`v' - t3= &0 \/ ~(v' - (t3:real)= &0)`)
2146 THENL[
2147 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
2148 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
2149 THEN RESA_TAC
2150 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];
2151
2152 MRESA1_TAC REAL_MUL_LINV `(v'-t3:real)`
2153 THEN STRIP_TAC
2154 THEN MP_TAC(SET_RULE`(v' - t3) % ((&1 - a) % u + a % w - x) = t2 % (v - x:real^3) ==> (inv (v'-t3)) % (v' - t3) % ((&1 - a) % u + a % w - x) = (inv (v'-t3)) % ( t2 % (v - x))`)
2155 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
2156 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2157 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w - x) = (inv (v' - t3) * t2) % (v - x)<=>
2158 (&1 - a) % u + a % w  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
2159 THEN STRIP_TAC
2160 THEN EXISTS_TAC`&1-(inv (v' - t3) * (t2:real))`
2161 THEN EXISTS_TAC`(inv (v' - t3) * (t2:real))`
2162 THEN ASM_REWRITE_TAC[]
2163 THEN REAL_ARITH_TAC];
2164
2165 POP_ASSUM MP_TAC
2166 THEN POP_ASSUM MP_TAC
2167 THEN DISCH_THEN (LABEL_TAC"A")
2168 THEN DISCH_TAC
2169 THEN REMOVE_THEN "A" MP_TAC
2170 THEN ASM_REWRITE_TAC[]
2171 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`v1:real^3`;`v:real^3`;`u1:real^3`;`((&1 - a) % u + a % w):real^3`]
2172 THEN POP_ASSUM MP_TAC
2173 THEN DISCH_THEN (LABEL_TAC"B")
2174 THEN DISCH_TAC
2175 THEN SUBGOAL_THEN`azim x v1 v ((&1 - a) % u + a % w)= pi` ASSUME_TAC
2176 THENL[
2177 POP_ASSUM MP_TAC
2178 THEN MRESA_TAC th3[`(x:real^3)` ;`v1:real^3`;` (v:real^3)`]
2179 THEN MRESA_TAC AFF_LT_2_1[`x:real^3`;`v1:real^3`;`v:real^3`]
2180 THEN MRESAL_TAC AZIM_EQ_PI_ALT[`x:real^3`;`v1:real^3`;`v:real^3`;`((&1 - a) % u + a % w):real^3`][IN_ELIM_THM]
2181 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[VECTOR_ARITH`A=B+C+D <=> D=A-B-C:real^3`]
2182 THEN MP_TAC(REAL_ARITH`&0<t3==> ~(t3= &0)`)
2183 THEN RESA_TAC
2184 THEN MRESA1_TAC REAL_MUL_LINV `(t3:real)`
2185 THEN STRIP_TAC
2186 THEN MP_TAC(SET_RULE`t3 % ((&1 - a) % u + a % w) = v1 - t1 % x - t2 % v ==> (inv (t3)) % t3 % ((&1 - a) % u + a % w)  = (inv (t3)) % ( v1 - t1 % x - t2 % v:real^3)`)
2187 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th] 
2188 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
2189 THEN REWRITE_TAC[VECTOR_ARITH`&1 % ((&1 - a) % u + a % w) = inv t3 % (v1 - t1 % x - t2 % v)
2190 <=> (&1 - a) % u + a % w = (-- inv t3 * t1) % x + (inv t3) % v1 +(-- (inv t3* t2)) % v`]
2191 THEN STRIP_TAC
2192 THEN EXISTS_TAC`(-- inv t3 * t1):real`
2193 THEN EXISTS_TAC`(inv t3):real`
2194 THEN EXISTS_TAC`(-- (inv t3 * t2)):real`
2195 THEN ASM_REWRITE_TAC[REAL_ARITH`--inv t3 * t1 + inv t3 + --(inv t3 * t2)= inv t3 *(t3+ &1-(t1+t2+t3))`;REAL_ARITH`(t3 + &1 - &1)=t3`;REAL_ARITH`--A< &0 <=> &0< A`]
2196 THEN MATCH_MP_TAC REAL_LT_MUL
2197 THEN ASM_REWRITE_TAC[]
2198 THEN MATCH_MP_TAC REAL_LT_INV
2199 THEN ASM_REWRITE_TAC[];
2200 REMOVE_THEN "B" MP_TAC
2201 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
2202 THEN REMOVE_ASSUM_TAC
2203 THEN MP_TAC(REAL_ARITH`azim x v1 v u1 < pi==> azim x v1 v u1 <= pi`)
2204 THEN RESA_TAC
2205 THEN ASM_REWRITE_TAC[]
2206 THEN FIND_ASSUM MP_TAC`azim x v1 v (u1:real^3) < pi`
2207 THEN FIND_ASSUM MP_TAC`&0< azim x v1 v (u1:real^3) `
2208 THEN REAL_ARITH_TAC]]);;
2209
2210
2211
2212
2213
2214
2215
2216 let exists_cross_dot_fully_surrounded1_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2217 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2218 /\ sigma_fan x V E u w = v
2219 /\ &0<a /\ a< &1
2220 /\ fan80(x,V,E)
2221 /\ ~collinear{x,v1,u1}
2222 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2223 /\ &0< azim x v1 v u1
2224 /\  azim x v1 v u1 < pi
2225 ==> ?t.  &0< t/\ t < &1
2226 /\( !h:real. &0< h/\ h<t
2227 ==> &0< ((v1 - x) cross (u1 - x)) dot (((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x))`,
2228
2229 REPEAT STRIP_TAC
2230 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
2231  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
2232 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
2233 THEN REWRITE_TAC[DOT_RADD;DOT_RMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
2234 THEN MRESA_TAC cross_dot_fully_surrounded1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;`u1:real^3`]
2235 THEN DISJ_CASES_TAC(REAL_ARITH`(((v1 - x) cross (u1 - x:real^3)) dot (w - u)<= &0 )\/ (&0<((v1 - x) cross (u1 - x)) dot (w - u))`)
2236 THENL[ 
2237 EXISTS_TAC`&1/ &2`
2238 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
2239 THEN REPEAT STRIP_TAC
2240 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
2241 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
2242 THEN MRESAL_TAC REAL_LE_LMUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`;`&0`][REAL_ARITH`(A:real)*  &0= &0`]
2243 THEN MRESAL_TAC REAL_LE_RMUL[`a*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`;`&0`;`h:real`][REAL_ARITH`&0 * (A:real)= &0`]
2244 THEN POP_ASSUM MP_TAC
2245 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2246 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2247 THEN POP_ASSUM MP_TAC
2248 THEN REAL_ARITH_TAC;
2249 MRESA_TAC REAL_LT_MUL[`a:real`;`((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`]
2250 THEN MP_TAC(REAL_ARITH`&0<(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)==> ~( (a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)= &0)`)
2251 THEN RESA_TAC
2252 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2253 THEN MRESA1_TAC REAL_LT_INV`(a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3)`
2254 THEN MRESA_TAC REAL_LT_MUL[`inv((a:real)*((v1 - x) cross (u1 - x)) dot ((w - u):real^3))`;`((v1 - x) cross (u1 - x)) dot (va:real^3)`]
2255 THEN EXISTS_TAC `min ((inv(a *(((v1 - x) cross (u1 - x)) dot (w - u)))*(((v1 - x) cross (u1 - x)) dot va)) / &2 ) (&1/ &2)`
2256 THEN STRIP_TAC
2257 THENL[POP_ASSUM MP_TAC
2258 THEN REAL_ARITH_TAC;
2259 STRIP_TAC
2260 THENL[
2261  REAL_ARITH_TAC;
2262 REPEAT STRIP_TAC
2263 THEN MP_TAC(REAL_ARITH` h< min ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) /  &2) (&1 / &2)
2264 ==>
2265 h< ((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x)) dot va)) /  &2)`)
2266 THEN RESA_TAC
2267 THEN MRESA_TAC REAL_LT_LMUL[`(a * (((v1 - x) cross (u1 - x)) dot (w - u:real^3)))`;`h:real`;`((inv (a * (((v1 - x) cross (u1 - x)) dot (w - u))) * (((v1 - x) cross (u1 - x:real^3)) dot va)) /  &2)`]
2268 THEN ASM_TAC
2269 THEN ABBREV_TAC`vb=a * (((v1 - x) cross (u1 - x)) dot (w - u))`
2270 THEN REPEAT DISCH_TAC
2271 THEN POP_ASSUM MP_TAC
2272 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * (((v1 - x) cross (u1 - x)) dot va)) / &2=
2273 (vb * inv vb) * (((v1 - x) cross (u1 - x)) dot va)/ &2`]
2274 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2275 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2276 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2277 THEN POP_ASSUM MP_TAC
2278 THEN REAL_ARITH_TAC]]]);;
2279
2280
2281 let cross_dot_fully_surrounded2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2282 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2283 /\ sigma_fan x V E u w = v
2284 /\ &0<a /\ a< &1
2285 /\ fan80(x,V,E)
2286 /\ ~collinear{x,v1,u1}
2287 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2288 /\ &0< azim x v1 v u1
2289 /\  azim x v1 v u1 < pi
2290 ==> &0 < (((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)`,
2291
2292 REPEAT STRIP_TAC
2293 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2294 THEN REWRITE_TAC[fan80]
2295 THEN DISCH_THEN(LABEL_TAC"yeu em")
2296 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2297 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2298 ` (u:real^3)`] 
2299 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2300 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2301 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2302 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2303 THEN MRESA1_TAC SIN_POS_PI`azim x v1 v (u1:real^3)`
2304 THEN POP_ASSUM MP_TAC
2305 THEN MRESA_TAC AZIM_TRANSLATION[`-- x:real^3`;`x:real^3`;`v1:real^3`;` v:real^3`;`u1:real^3`]
2306 THEN POP_ASSUM MP_TAC
2307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`x-x= vec 0`;VECTOR_ARITH`(-- X)+A= A-X:real^3`]
2308 THEN DISCH_TAC
2309 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2310 THEN MRESA_TAC JBDNJJB[`(v1-x):real^3`;`v-x:real^3`;`u1-x:real^3`]
2311 THEN POP_ASSUM MP_TAC
2312 THEN REWRITE_TAC[GSYM COLLINEAR_3;]
2313 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={B,A,C}`]
2314 THEN RESA_TAC
2315 THEN MRESAL_TAC REAL_LT_LMUL_EQ [` &0:real `;`(((v1 - x) cross (v - x)) dot ((u1 - x):real^3)):real`;`t:real`][REAL_ARITH`a * &0 = &0`]
2316 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2317 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2318 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2319 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2320 THEN STRIP_TAC 
2321 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;VECTOR_ARITH`A- vec 0= A`;VECTOR_ARITH`(t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w)) - x=(t1- &1) % x + t2 % v + t3 % ((&1 - a) % u + a % w)`])
2322 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
2323 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
2324 THEN DISCH_TAC
2325 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(--t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w)= t2 % (v-x) + t3 % ((&1 - a) % u + a % w-x)`]
2326 THEN REWRITE_TAC[CROSS_LADD; CROSS_RADD; CROSS_LMUL; CROSS_RMUL;CROSS_REFL;CROSS_RNEG;CROSS_LNEG]
2327 THEN REDUCE_VECTOR_TAC
2328 THEN REWRITE_TAC[GSYM CROSS_LMUL;GSYM CROSS_LADD;DOT_LMUL]
2329 THEN MRESAL_TAC REAL_LT_LMUL_EQ [` &0:real `;`((((&1 - a) % u + a % w - x) cross (v - x)) dot (u1 - x)):real`;`t3:real`][REAL_ARITH`a * &0 = &0`]);;
2330
2331
2332
2333 let exists_cross_dot_fully_surrounded2_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2334 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2335 /\ sigma_fan x V E u w = v
2336 /\ &0<a /\ a< &1
2337 /\ fan80(x,V,E)
2338 /\ ~collinear{x,v1,u1}
2339 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2340 /\ &0< azim x v1 v u1
2341 /\  azim x v1 v u1 < pi
2342 ==>
2343 ?t:real.  &0< t/\ t < &1
2344 /\ (!h:real. &0<h /\ h< t 
2345 ==> &0 <
2346 ((((&1 - h) % ((&1 - a) % u + a % w) + h % u) - x) cross (v - x)) dot (u1 - x))`,
2347
2348 REPEAT STRIP_TAC
2349 THEN REWRITE_TAC[VECTOR_ARITH`(((&1 - t) % ((&1 - a) % u + a % w) + t % u) - x)=
2350  ((&1 - a) % u + a % w - x) + t % (--a) % ( w-u)`;]
2351 THEN ABBREV_TAC`va=(&1 - a) % u + a % w-x:real^3`
2352 THEN REWRITE_TAC[CROSS_LADD;CROSS_LMUL;DOT_LADD;DOT_LMUL; REAL_ARITH`&0<A+C*(--B)*D<=> (B*D)*C<A`]
2353 THEN MRESA_TAC cross_dot_fully_surrounded2_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;`u1:real^3`]
2354 THEN DISJ_CASES_TAC(REAL_ARITH`(((w - u) cross (v - x:real^3)) dot (u1- x)<= &0 )\/ (&0<((w - u) cross (v - x:real^3)) dot (u1- x))`)
2355 THENL[ 
2356 EXISTS_TAC`&1/ &2`
2357 THEN REWRITE_TAC[REAL_ARITH`&0 < &1 / &2 /\ &1 / &2 < &1`]
2358 THEN REPEAT STRIP_TAC
2359 THEN MP_TAC(REAL_ARITH`&0 < a ==> &0<= (a:real)`) THEN RESA_TAC
2360 THEN MP_TAC(REAL_ARITH`&0 < h ==> &0<= (h:real)`) THEN RESA_TAC
2361 THEN MRESAL_TAC REAL_LE_LMUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`;`&0`][REAL_ARITH`(A:real)*  &0= &0`]
2362 THEN MRESAL_TAC REAL_LE_RMUL[`a*(((w - u) cross (v - x:real^3)) dot (u1- x))`;`&0`;`h:real`][REAL_ARITH`&0 * (A:real)= &0`]
2363 THEN POP_ASSUM MP_TAC
2364 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2365 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2366 THEN POP_ASSUM MP_TAC
2367 THEN REAL_ARITH_TAC;
2368 MRESA_TAC REAL_LT_MUL[`a:real`;`((w - u) cross (v - x:real^3)) dot (u1- x:real^3)`]
2369 THEN MP_TAC(REAL_ARITH`&0<(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))==> ~( (a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))= &0)`)
2370 THEN RESA_TAC
2371 THEN MRESA1_TAC REAL_MUL_RINV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
2372 THEN MRESA1_TAC REAL_LT_INV`(a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x))`
2373 THEN MRESA_TAC REAL_LT_MUL[`inv((a:real)*(((w - u) cross (v - x:real^3)) dot (u1- x)))`;`((va cross (v - x)) dot (u1 - x))`]
2374 THEN EXISTS_TAC `min ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 ) (&1/ &2)`
2375 THEN STRIP_TAC
2376 THENL[POP_ASSUM MP_TAC
2377 THEN REAL_ARITH_TAC;
2378 STRIP_TAC
2379 THENL[
2380  REAL_ARITH_TAC;
2381 REPEAT STRIP_TAC
2382 THEN MP_TAC(REAL_ARITH` h< min ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 ) (&1/ &2)
2383 ==>
2384 h< ((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`)
2385 THEN RESA_TAC
2386 THEN MRESA_TAC REAL_LT_LMUL[`(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))`;`h:real`;`((inv(a *(((w - u) cross (v - x:real^3)) dot (u1- x)))*((va cross (v - x)) dot (u1 - x))) / &2 )`]
2387 THEN ASM_TAC
2388 THEN ABBREV_TAC`vb=a * (((w - u) cross (v - x:real^3)) dot (u1- x))`
2389 THEN REPEAT DISCH_TAC
2390 THEN POP_ASSUM MP_TAC
2391 THEN ASM_REWRITE_TAC[REAL_ARITH`vb * (inv vb * ((va cross (v - x)) dot (u1 - x))) / &2=
2392 (vb * inv vb) * ((va cross (v - x)) dot (u1 - x))/ &2`]
2393 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2394 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2395 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
2396 THEN POP_ASSUM MP_TAC
2397 THEN REAL_ARITH_TAC]]]);;
2398
2399
2400 let lie_in_half_space_and_azim=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2401 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2402 /\ sigma_fan x V E u w = v
2403 /\ &0<a /\ a< &1
2404 /\ fan80(x,V,E)
2405 /\ ~collinear{x,v1,u1}
2406 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2407 /\ &0< azim x v1 v u1
2408 /\  azim x v1 v u1 < pi
2409 ==> &0 < ((v-x) cross (u - x)) dot (v1-x)`,
2410
2411 REPEAT STRIP_TAC
2412 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2413 THEN REWRITE_TAC[fan80]
2414 THEN DISCH_THEN(LABEL_TAC"yeu em")
2415 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2416 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2417 ` (u:real^3)`] 
2418 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2419 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2420 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2421 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3) `;]
2422 THEN FIND_ASSUM MP_TAC `v1 IN aff_gt {x} {v,(&1-a)%u+ a%(w:real^3)}`
2423 THEN POP_ASSUM(fun th-> REWRITE_TAC[th;IN_ELIM_THM])
2424 THEN STRIP_TAC 
2425 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A- vec 0= A`;VECTOR_ARITH`(t1 % x + t2 % v + t3 % ((&1 - a) % u + a % w)) - x=(t1- &1) % x + t2 % v + t3 % ((&1 - a) % u + a % w)`]
2426 THEN FIND_ASSUM MP_TAC `t1 + t2 + t3 = &1:real`
2427 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1- &1= (-- t2)- t3 `]
2428 THEN DISCH_TAC
2429 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(--t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w)= t2 % (v-x) + t3 % ((&1 - a) % (u-x) + a % (w-x))`]
2430 THEN REWRITE_TAC[ DOT_RADD;DOT_RMUL;DOT_CROSS_SELF]
2431 THEN REDUCE_ARITH_TAC
2432 THEN MATCH_MP_TAC REAL_LT_MUL
2433 THEN ASM_REWRITE_TAC[]
2434 THEN MATCH_MP_TAC REAL_LT_MUL
2435 THEN ASM_REWRITE_TAC[]
2436 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`; `u:real^3`;`v:real^3`;`w:real^3`]
2437 THEN POP_ASSUM MP_TAC
2438 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
2439 THEN ASM_REWRITE_TAC[CROSS_TRIPLE]);;
2440
2441
2442
2443
2444
2445
2446
2447 let exists_cut_small_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real v1:real^3 u1:real^3.
2448 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2449 /\ sigma_fan x V E u w = v
2450 /\ &0<a /\ a< &1
2451 /\ fan80(x,V,E)
2452 /\ ~collinear{x,v1,u1}
2453 /\ v1 IN aff_gt {x} {v,(&1-a)%u+ a%w}
2454 /\ &0< azim x v1 v u1
2455 /\  azim x v1 v u1 < pi
2456 ==>
2457 ?t:real.  &0< t/\ t < &1
2458 /\ ~(aff_gt {x} {v,(&1-t)%((&1-a)%u+ a%w)+t%u} INTER aff_gt {x} {v1,u1}={})`,
2459
2460 REPEAT STRIP_TAC
2461 THEN MRESA_TAC lie_in_half_space_and_azim[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2462 THEN MRESA_TAC exists_cross_dot_fully_surrounded1_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2463 THEN POP_ASSUM MP_TAC
2464 THEN DISCH_THEN (LABEL_TAC"MA")
2465 THEN MRESA_TAC exists_cross_dot_fully_surrounded2_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v1:real^3`;` u1:real^3`]
2466 THEN POP_ASSUM MP_TAC
2467 THEN DISCH_THEN (LABEL_TAC"BE NHO")
2468 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
2469 THEN REWRITE_TAC[fan80]
2470 THEN DISCH_THEN(LABEL_TAC"yeu em")
2471 THEN ABBREV_TAC`ta=min (t:real) (t':real)/ &2`
2472 THEN EXISTS_TAC `(ta:real)`
2473 THEN SUBGOAL_THEN `&0< ta:real /\ ta < &1 /\ ta< t /\ ta< t'` ASSUME_TAC
2474 THENL(*1*)[
2475 POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
2476 THEN FIND_ASSUM MP_TAC`&0<t:real`
2477 THEN FIND_ASSUM MP_TAC`t:real < &1`
2478 THEN FIND_ASSUM MP_TAC`&0<t':real`
2479 THEN FIND_ASSUM MP_TAC`t':real < &1`
2480 THEN REAL_ARITH_TAC;(*1*)
2481
2482 ASM_REWRITE_TAC[]
2483 THEN MP_TAC(REAL_ARITH`ta< &1 ==> &0< (&1-ta):real`)
2484 THEN RESA_TAC
2485 THEN MRESA_TAC REAL_LT_MUL [`(&1-ta):real`;`a:real`]
2486 THEN MRESA_TAC REAL_LT_LMUL [`(&1-ta):real`;`a:real`;`&1`]
2487 THEN MP_TAC(REAL_ARITH` &0< ta /\ (&1-ta)*a< (&1-ta)* &1 :real==> (&1-ta)*a< &1`)
2488 THEN RESA_TAC
2489 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`v:real^3`]
2490 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
2491 ` (u:real^3)`] 
2492 THEN REMOVE_THEN "yeu em" (fun th -> MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC "YEU EM"))
2493 THEN MRESAL_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`((&1-ta)*a):real`][VECTOR_ARITH`(&1 - ((&1 - ta) * a)) % u + ((&1 - ta) * a ) % w=
2494 (&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`]
2495 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2496 THEN MRESA_TAC properties_of_collinear4_points_fan[`x:real^3`;`v:real^3`;`(&1-a)%u+ a%w:real^3`;`v1:real^3`]
2497 THEN MRESA_TAC cross_dot_fully_surrounded_fan[`x:real^3`;`v1:real^3`;`u1:real^3`;`v:real^3`]
2498 THEN POP_ASSUM MP_TAC
2499 THEN DISCH_THEN (LABEL_TAC"CON")
2500 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3`;]
2501 THEN MRESA_TAC th3[`(x:real^3)` ;` (v1:real^3)`;`u1:real^3`;]
2502 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2503 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v1:real^3)`;`(u1:real^3) `;]
2504 THEN MRESA_TAC AFF_GT_1_2[`(x:real^3)` ;` (v:real^3)`;`(&1 - ta) % ((&1 - a) % u + a % w) + ta % u:real^3 `;]
2505 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;EXTENSION;EMPTY;IN;NOT_FORALL_THM]
2506 THEN ABBREV_TAC`a1=(v-x):real^3`
2507 THEN ABBREV_TAC`a2=(((&1-ta)%((&1-a)%u+ a%w)+ta%u)-x):real^3`
2508 THEN ABBREV_TAC`a3=(v1-x) :real^3`
2509 THEN ABBREV_TAC`a4=u1-x:real^3`
2510 THEN ABBREV_TAC`va=a1 cross a2:real^3`
2511 THEN ABBREV_TAC`vb=a3 cross a4:real^3`
2512 THEN EXISTS_TAC`(vb:real^3) cross (va:real^3)+(x:real^3)`
2513 THEN STRIP_TAC
2514 THENL(*2*)[
2515 EXISTS_TAC`&1-(vb:real^3) dot (a2:real^3)+ vb dot (a1:real^3)`
2516 THEN EXISTS_TAC`(vb:real^3) dot (a2:real^3)`
2517 THEN EXISTS_TAC`--((vb:real^3) dot (a1:real^3))`
2518 THEN REMOVE_THEN "MA"(fun th->  MRESA1_TAC th `ta:real`)
2519 THEN ASM_REWRITE_TAC[REAL_ARITH`(&1 - vb dot a2 + vb dot a1) + vb dot a2 + --(vb dot a1) = &1`]
2520 THEN SUBGOAL_THEN `&0< --((vb:real^3) dot (a1:real^3))` ASSUME_TAC
2521 THENL(*3*)[EXPAND_TAC"vb"
2522 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
2523 THEN REWRITE_TAC[DOT_LNEG]
2524 THEN ONCE_REWRITE_TAC[CROSS_TRIPLE]
2525 THEN REMOVE_THEN "CON"MP_TAC
2526 THEN REAL_ARITH_TAC;(*3*)
2527
2528 ASM_REWRITE_TAC[]
2529 THEN EXPAND_TAC"va"
2530 THEN REWRITE_TAC[CROSS_LAGRANGE;VECTOR_MUL_LNEG]
2531 THEN EXPAND_TAC"a1"
2532 THEN EXPAND_TAC"a2"
2533 THEN VECTOR_ARITH_TAC];(*2*)
2534
2535 ONCE_REWRITE_TAC[CROSS_SKEW]
2536 THEN EXPAND_TAC"vb"
2537 THEN REWRITE_TAC[CROSS_LAGRANGE;]
2538 THEN EXISTS_TAC`&1+(va:real^3) dot (a4:real^3)- va dot (a3:real^3)`
2539 THEN EXISTS_TAC`--(va:real^3) dot (a4:real^3)`
2540 THEN EXISTS_TAC`((va:real^3) dot (a3:real^3))`
2541 THEN REMOVE_THEN "BE NHO"(fun th->  MRESA1_TAC th `ta:real`)
2542 THEN ASM_REWRITE_TAC[DOT_LNEG;VECTOR_MUL_LNEG;REAL_ARITH`(&1 + va dot a4 - va dot a3) + --(va dot a4) + va dot a3 = &1`;]
2543
2544 THEN STRIP_TAC
2545 THENL(*3*)[
2546 EXPAND_TAC"va"
2547 THEN ONCE_REWRITE_TAC[CROSS_SKEW;]
2548 THEN REWRITE_TAC[DOT_LNEG]
2549 THEN POP_ASSUM MP_TAC
2550 THEN REAL_ARITH_TAC;(*3*)
2551
2552 STRIP_TAC 
2553 THENL(*4*)[
2554 EXPAND_TAC"va"
2555 THEN EXPAND_TAC"a2"
2556 THEN REWRITE_TAC[VECTOR_ARITH`((&1 - ta) % ((&1 - a) % u + a % w) + ta % u) - x
2557 =(&1 - ta) % ((&1 - a) % u + a % w-x) + ta % (u - x)`]
2558 THEN ABBREV_TAC`vu=(&1 - a) % u + a % w - x:real^3`
2559 THEN REWRITE_TAC[CROSS_RADD;CROSS_RMUL;DOT_LADD;DOT_LMUL;]
2560 THEN MRESAL_TAC coplanar_is_cross_fan[`x:real^3`;`v:real^3`;`(&1 - a) % u + a % w:real^3`;`v1:real^3`]
2561 [VECTOR_ARITH`((&1 - a) % u + a % w) - x=(&1 - a) % u + a % w - x`]
2562 THEN REDUCE_ARITH_TAC
2563 THEN MATCH_MP_TAC REAL_LT_MUL
2564 THEN ASM_REWRITE_TAC[];(*4*)
2565 EXPAND_TAC"a3"
2566 THEN EXPAND_TAC"a4"
2567 THEN REWRITE_TAC[VECTOR_ARITH`-- A+B= B-A:real^3`;VECTOR_ARITH`(&1+A-B)%X+B%U-A%V=X-A%(V-X)+B%(U-X)`]
2568 THEN VECTOR_ARITH_TAC]]]]);;
2569
2570
2571
2572
2573
2574 let not_cut_inside_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
2575 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
2576 /\ sigma_fan x V E u w = v
2577 /\ &0<a /\ a< &1
2578 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
2579 /\ fan80(x,V,E)
2580
2581 /\ (!h:real. &0<h /\ h< a
2582 ==> aff_gt{x} {v,(&1-h)%u+ h % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
2583 ==> aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={}`,
2584
2585 REPEAT STRIP_TAC
2586 THEN POP_ASSUM MP_TAC
2587 THEN POP_ASSUM MP_TAC
2588 THEN POP_ASSUM MP_TAC
2589 THEN DISCH_THEN(LABEL_TAC"EM")
2590 THEN DISCH_TAC
2591 THEN POP_ASSUM (fun th-> MP_TAC (th) THEN ASSUME_TAC(th))
2592 THEN REWRITE_TAC[fan80]
2593 THEN DISCH_THEN(LABEL_TAC"BE")
2594 THEN DISCH_THEN(LABEL_TAC"YEU")
2595 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM]
2596 THEN GEN_TAC
2597 THEN EQ_TAC
2598 THENL(*1*)[
2599 STRIP_TAC 
2600 THEN POP_ASSUM MP_TAC
2601 THEN MRESA_TAC expand_edge_graph_fan [`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]
2602 THEN POP_ASSUM MP_TAC
2603 THEN POP_ASSUM MP_TAC
2604 THEN DISCH_THEN(LABEL_TAC"A")
2605 THEN DISCH_TAC
2606 THEN REMOVE_THEN "A" MP_TAC
2607 THEN POP_ASSUM(fun th->REWRITE_TAC[(th)])
2608 THEN POP_ASSUM MP_TAC
2609 THEN DISCH_THEN(LABEL_TAC"A")
2610 THEN DISCH_TAC
2611 THEN REMOVE_THEN "A" MP_TAC
2612 THEN REMOVE_THEN "BE" (fun th->  MRESA_TAC th [`u:real^3`;`w:real^3`] THEN MP_TAC th THEN DISCH_THEN(LABEL_TAC"BE") )
2613 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`]
2614 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
2615 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
2616 ` (v:real^3)`]
2617 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w':real^3)`;
2618 ` (v':real^3)`]  
2619 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
2620 THEN POP_ASSUM MP_TAC
2621 THEN DISCH_THEN(LABEL_TAC "VUT1")
2622 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
2623 THEN POP_ASSUM MP_TAC
2624 THEN DISCH_THEN(LABEL_TAC "VUT")
2625 THEN REPEAT STRIP_TAC
2626 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2627 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
2628 THEN DISCH_THEN(LABEL_TAC "VUT1")
2629 THEN DISCH_TAC THEN DISCH_TAC
2630 THEN DISJ_CASES_TAC(REAL_ARITH`(t3'= &0) \/ ~(t3':real= &0)`)
2631 THENL(*2*)[
2632 ASM_REWRITE_TAC[]
2633 THEN REDUCE_ARITH_TAC
2634 THEN REDUCE_VECTOR_TAC
2635 THEN DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
2636 THENL(*3*)[
2637 ASM_REWRITE_TAC[]
2638 THEN REDUCE_ARITH_TAC
2639 THEN REDUCE_VECTOR_TAC
2640 THEN DISCH_TAC
2641 THEN ASM_REWRITE_TAC[]
2642 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
2643 THEN RESA_TAC
2644 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
2645 THEN RESA_TAC
2646 THEN ASM_REWRITE_TAC[]
2647 THEN FIND_ASSUM (fun th-> REWRITE_TAC[SYM(th)])`t1 + t2 + t3 = &1:real`
2648 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (((t1 + t2 + t3) - a) % u + a % w) =
2649  (t1 + t2 + t3) % x<=>(t3) % (((t1 + t2 + t3) - a) % u + a % w- x)=(-- t2) % (v-x) `]
2650 THEN ASM_REWRITE_TAC[IN;EMPTY]
2651 THEN STRIP_TAC
2652 THEN MP_TAC(SET_RULE`
2653 (t3) % ((&1 - a) % u + a % w- x)=(-- t2) % (v-x)
2654 ==> (inv (t3))%((t3) % ((&1 - a) % u + a % w- x) ) = (inv (t3))%((-- t2) % (v-x)):real^3`)
2655 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2656 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;]
2657 THEN REDUCE_VECTOR_TAC
2658 THEN REWRITE_TAC[VECTOR_ARITH`E+A-B=C%(D-B)<=>E+A=(&1-C)%B+C%D`;]
2659 THEN STRIP_TAC
2660 THEN FIND_ASSUM MP_TAC `~((&1 - a) % u + a % w IN aff {x, v:real^3})`
2661 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
2662 THEN EXISTS_TAC`&1-(inv t3 * (--t2)):real`
2663 THEN EXISTS_TAC`(inv t3 * (--t2)):real`
2664 THEN ASM_REWRITE_TAC[]
2665 THEN REAL_ARITH_TAC;(*3*)
2666
2667 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
2668 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
2669 THEN DISCH_THEN(LABEL_TAC"MAI")
2670 THEN DISCH_THEN (LABEL_TAC"YEU EM")
2671 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2672  (&1 - t2') % x + t2' % v'<=> t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
2673 THEN MP_TAC(ISPEC`(t2':real)`REAL_MUL_LINV)
2674 THEN RESA_TAC
2675 THEN STRIP_TAC
2676 THEN MP_TAC(SET_RULE`
2677 t2' % v'=(t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
2678 ==> (inv (t2'))%(t2' % v' ) = (inv (t2'))%((t2' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
2679 `)
2680 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2681 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C+D)=(A%B+A%C+A%D)`;REAL_ARITH`a*(b-c-d)=a*b-a*c-a*d`]
2682 THEN REDUCE_VECTOR_TAC
2683 THEN DISCH_TAC
2684 THEN SUBGOAL_THEN `~coplanar{x:real^3,v':real^3,v:real^3,u:real^3}` ASSUME_TAC
2685 THENL(*4*)[
2686
2687 POP_ASSUM MP_TAC
2688 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, v', v, u}= {(--x) +x, (--x) +v', (--x) +v, (--x) +u}`)
2689 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,v':real^3,v:real^3,u:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2690 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
2691 THEN DISCH_TAC
2692 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
2693                          (inv t2' * t2) % v +
2694                          (inv t2' * t3) % ((&1 - a) % u + a % w)) -
2695                         x=(inv t2' * t2) % (v-x) +
2696                          (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
2697 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
2698 THEN REMOVE_THEN"MAI" MP_TAC
2699 THEN DISCH_TAC
2700 THEN REMOVE_ASSUM_TAC
2701 THEN RESA_TAC
2702 THEN POP_ASSUM MP_TAC
2703 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
2704 THEN RESA_TAC
2705 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
2706 THEN RESA_TAC
2707 THEN STRIP_TAC
2708 THEN MP_TAC(SET_RULE`
2709 t2 + t3 = &1 - t1:real
2710 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
2711 `)
2712 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2713 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
2714 THEN STRIP_TAC
2715 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2716 THEN RESA_TAC
2717 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
2718 THEN RESA_TAC
2719 THEN MRESA_TAC REAL_LT_MUL[`t2':real`;`inv (&1- t1):real`]
2720 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
2721 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
2722 THEN MP_TAC(REAL_ARITH`&0< (t2') * inv (&1- t1) ==> ~((t2')* inv(&1- t1)= &0)`)
2723 THEN RESA_TAC
2724 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
2725 THEN MRESA_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`(t2')* inv(&1- t1)`;`u - x:real^3`; `v - x:real^3`; `(inv t2' * t2) % (v - x) +(inv t2' * t3) % ((&1 - a) % u + a % w - x):real^3`]
2726 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
2727 THEN REDUCE_VECTOR_TAC
2728 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
2729 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
2730 THEN REDUCE_ARITH_TAC
2731 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`]
2732 THEN DISCH_TAC
2733 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2734 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2735 THEN POP_ASSUM MP_TAC
2736 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2737 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2738 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2739 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
2740 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2741 THEN DISCH_TAC
2742 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
2743 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
2744 THEN POP_ASSUM MP_TAC
2745 THEN REWRITE_TAC[VECTOR_ARITH`
2746 (&1 - inv (&1 - t1) * t3) % (v - x) +
2747                         (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
2748 (&1 - inv (&1 - t1) * t3) % (v - x) +
2749                             (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
2750
2751 POP_ASSUM MP_TAC
2752 THEN POP_ASSUM MP_TAC
2753 THEN DISCH_THEN (LABEL_TAC"DICH")
2754 THEN DISCH_TAC
2755 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2756 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2757 THEN RESA_TAC
2758 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
2759 THEN RESA_TAC
2760 THEN MRESA1_TAC REAL_LT_INV`t2':real`
2761 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
2762 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
2763 THEN SUBGOAL_THEN `(v':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2764 THENL(*5*)[
2765
2766 ASM_REWRITE_TAC[IN_ELIM_THM]
2767 THEN EXISTS_TAC`(&1 - inv t2' * t2 - inv t2' * t3:real)`
2768 THEN EXISTS_TAC`inv t2' * t2:real`
2769 THEN EXISTS_TAC`(inv t2' * t3:real)`
2770 THEN ASM_REWRITE_TAC[]
2771 THEN REAL_ARITH_TAC;(*5*)
2772
2773 REMOVE_THEN "DICH" MP_TAC
2774 THEN REMOVE_THEN "VUT" MP_TAC
2775 THEN DISCH_TAC
2776 THEN REMOVE_ASSUM_TAC
2777 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
2778 THEN MRESA_TAC exists_element_in_half_sapace_fan
2779 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
2780 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
2781 ` (v':real^3)`]
2782 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
2783 THEN DISCH_TAC
2784 THEN REMOVE_ASSUM_TAC
2785 THEN REWRITE_TAC[EMPTY;IN]
2786 THEN POP_ASSUM MP_TAC 
2787 THEN ASM_REWRITE_TAC[]
2788 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
2789 THEN RESA_TAC
2790 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
2791 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
2792 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
2793 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
2794 THEN POP_ASSUM MP_TAC
2795 THEN POP_ASSUM MP_TAC
2796 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
2797 THEN SET_TAC[]](*5*)](*4*)](*3*);(*2*)
2798
2799
2800
2801 DISJ_CASES_TAC(REAL_ARITH`(t2'= &0) \/ ~(t2':real= &0)`)
2802 THENL(*3*)[
2803
2804 FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
2805 THEN REWRITE_TAC[REAL_ARITH`t1 + t2 + t3 = &1<=> t1= &1 -t2 -t3`; REAL_ARITH`A+B= &1<=> A= &1-B`]
2806 THEN DISCH_THEN(LABEL_TAC"MAI")
2807 THEN DISCH_THEN (LABEL_TAC"YEU EM")
2808 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(&1 - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w) =
2809  (&1 - &0 - t3') % x + &0% v'+t3' % w'<=> t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3 `]
2810 THEN MP_TAC(ISPEC`(t3':real)`REAL_MUL_LINV)
2811 THEN RESA_TAC
2812 THEN STRIP_TAC
2813 THEN MP_TAC(SET_RULE`
2814 t3' % w'=(t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3
2815 ==> (inv (t3'))%(t3' % w' ) = (inv (t3'))%((t3' - t2 - t3) % x + t2 % v + t3 % ((&1 - a) % u + a % w):real^3)
2816 `)
2817 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2818 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C+D)=(A%B+A%C+A%D)`;REAL_ARITH`a*(b-c-d)=a*b-a*c-a*d`]
2819 THEN REDUCE_VECTOR_TAC
2820 THEN DISCH_TAC
2821 THEN SUBGOAL_THEN `~coplanar{x:real^3,w':real^3,v:real^3,u:real^3}` ASSUME_TAC
2822 THENL(*4*)[
2823
2824  POP_ASSUM MP_TAC
2825 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3, w', v, u}= {(--x) +x, (--x) +w', (--x) +v, (--x) +u}`)
2826 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3,w':real^3,v:real^3,u:real^3}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2827 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`])
2828 THEN DISCH_TAC
2829 THEN POP_ASSUM (fun th->REWRITE_TAC[th;VECTOR_ARITH`((&1 - inv t2' * t2 - inv t2' * t3) % x +
2830                          (inv t2' * t2) % v +
2831                          (inv t2' * t3) % ((&1 - a) % u + a % w)) -
2832                         x=(inv t2' * t2) % (v-x) +
2833                          (inv t2' * t3) % ((&1 - a) % u + a % w-x)`])
2834 THEN MP_TAC(REAL_ARITH`&0< t2 /\ &0< t3 /\ t1+t2+t3= &1==>  &0 < &1- t1 /\ ~(&1- t1 = &0)/\ t2+t3= &1- t1`)
2835 THEN REMOVE_THEN"MAI" MP_TAC
2836 THEN DISCH_TAC
2837 THEN REMOVE_ASSUM_TAC
2838 THEN RESA_TAC
2839 THEN POP_ASSUM MP_TAC
2840 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_LT_INV)
2841 THEN RESA_TAC
2842 THEN MP_TAC(ISPEC`&1- (t1:real)`REAL_MUL_LINV)
2843 THEN RESA_TAC
2844 THEN STRIP_TAC
2845 THEN MP_TAC(SET_RULE`
2846 t2 + t3 = &1 - t1:real
2847 ==> (inv ( &1 - t1))*(t2 + t3) = (inv ( &1 - t1))*( &1 - t1:real)
2848 `)
2849 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
2850 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> A*B = &1 -A*C`]
2851 THEN STRIP_TAC
2852 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2853 THEN RESA_TAC
2854 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
2855 THEN RESA_TAC
2856 THEN MRESA_TAC REAL_LT_MUL[`t3':real`;`inv (&1- t1):real`]
2857 THEN MRESA_TAC REAL_LT_MUL[`inv (&1- t1):real`;`t3:real`;]
2858 THEN MP_TAC(REAL_ARITH`&0< (inv (&1- t1)) * t3 ==> ~( (inv(&1- t1)) * t3= &0)`)
2859 THEN MP_TAC(REAL_ARITH`&0< (t3') * inv (&1- t1) ==> ~((t3')* inv(&1- t1)= &0)`)
2860 THEN RESA_TAC
2861 THEN ASSUME_TAC(REAL_ARITH`~(&1 = &0)`)
2862 THEN MRESA_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`(t3')* inv(&1- t1)`;`u - x:real^3`; `v - x:real^3`; `(inv t3' * t2) % (v - x) +(inv t3' * t3) % ((&1 - a) % u + a % w - x):real^3`]
2863 THEN POP_ASSUM (fun th -> ONCE_REWRITE_TAC[SYM(th);])
2864 THEN REDUCE_VECTOR_TAC
2865 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B+E%(C+D))=A%B+(A*E)%(C+D)`;
2866 VECTOR_ARITH`A%B%C=(A*B)%C`; REAL_ARITH`(t2' * inv (&1 - t1)) * inv t2' * t2= (inv (t2')* t2' ) * inv (&1-t1) * t2`]
2867 THEN REDUCE_ARITH_TAC
2868 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`]
2869 THEN DISCH_TAC
2870 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
2871 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
2872 THEN POP_ASSUM MP_TAC
2873 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2874 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
2875 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
2876 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
2877 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
2878 THEN DISCH_TAC
2879 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
2880 THEN POP_ASSUM (fun th-> MRESA1_TAC th`(inv(&1- t1)) * t3:real`)
2881 THEN POP_ASSUM MP_TAC
2882 THEN REWRITE_TAC[VECTOR_ARITH`
2883 (&1 - inv (&1 - t1) * t3) % (v - x) +
2884                         (inv (&1 - t1) * t3) % (((&1 - a) % u + a % w) - x)=
2885 (&1 - inv (&1 - t1) * t3) % (v - x) +
2886                             (inv (&1 - t1) * t3) % ((&1 - a) % u + a % w - x)`];(*4*)
2887
2888
2889 POP_ASSUM MP_TAC
2890 THEN POP_ASSUM MP_TAC
2891 THEN DISCH_THEN (LABEL_TAC"DICH")
2892 THEN DISCH_TAC
2893 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2894 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2895 THEN RESA_TAC
2896 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
2897 THEN RESA_TAC
2898 THEN MRESA1_TAC REAL_LT_INV`t3':real`
2899 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
2900 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
2901 THEN SUBGOAL_THEN `(w':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2902 THENL[(*5*)
2903
2904 ASM_REWRITE_TAC[IN_ELIM_THM]
2905 THEN EXISTS_TAC`(&1 - inv t3' * t2 - inv t3' * t3:real)`
2906 THEN EXISTS_TAC`inv t3' * t2:real`
2907 THEN EXISTS_TAC`(inv t3' * t3:real)`
2908 THEN ASM_REWRITE_TAC[]
2909 THEN REAL_ARITH_TAC;(*5*)
2910
2911 REMOVE_THEN "DICH" MP_TAC
2912 THEN REMOVE_THEN "VUT" MP_TAC
2913 THEN DISCH_TAC
2914 THEN REMOVE_ASSUM_TAC
2915 THEN FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
2916 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
2917 THEN DISCH_TAC
2918 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
2919 ` (w':real^3)`]  
2920 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
2921 THEN MRESA_TAC exists_element_in_half_sapace_fan
2922 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
2923 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
2924 ` (w':real^3)`]
2925 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
2926 THEN DISCH_TAC
2927 THEN REMOVE_ASSUM_TAC
2928 THEN REWRITE_TAC[EMPTY;IN]
2929 THEN POP_ASSUM MP_TAC 
2930 THEN ASM_REWRITE_TAC[]
2931 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
2932 THEN RESA_TAC
2933 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
2934 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
2935 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
2936 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
2937 THEN POP_ASSUM MP_TAC
2938 THEN POP_ASSUM MP_TAC
2939 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
2940 THEN SET_TAC[]](*5*)](*4*);(*3*)
2941
2942
2943 ASM_REWRITE_TAC[]
2944 THEN DISCH_TAC THEN DISCH_THEN(LABEL_TAC"BO")
2945 THEN ABBREV_TAC `va=((&1 - a) % u + a % w):real^3`
2946 THEN MP_TAC(REAL_ARITH` ~(t3' = &0) /\ &0 <= t3'==> &0 <t3'`)
2947 THEN RESA_TAC
2948 THEN MP_TAC(REAL_ARITH` ~(t2' = &0) /\ &0 <= t2'==> &0 <t2'`)
2949 THEN RESA_TAC
2950 THEN MP_TAC(REAL_ARITH`  &0 < a==> ~(a = &0) `)
2951 THEN RESA_TAC
2952 THEN MRESA1_TAC REAL_LT_INV`t2':real`
2953 THEN MRESA1_TAC REAL_MUL_LINV`t2':real`
2954 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t2:real`;]
2955 THEN MRESA_TAC REAL_LT_MUL[`inv (t2'):real`;`t3:real`;]
2956 THEN MRESA1_TAC REAL_LT_INV`t3':real`
2957 THEN MRESA1_TAC REAL_MUL_LINV`t3':real`
2958 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t2:real`;]
2959 THEN MRESA_TAC REAL_LT_MUL[`inv (t3'):real`;`t3:real`;]
2960 THEN SUBGOAL_THEN`(x':real^3) IN aff_gt {x} {v',w'}` ASSUME_TAC
2961 THENL(*4*)[
2962
2963 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v':real^3`;`w':real^3`][IN_ELIM_THM]
2964 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2965 THEN EXISTS_TAC`t1':real`
2966 THEN EXISTS_TAC`t2':real`
2967 THEN EXISTS_TAC`t3':real`
2968 THEN ASM_REWRITE_TAC[];(*4*)
2969
2970 SUBGOAL_THEN`(x':real^3) IN aff_ge {x} {v',w'}` ASSUME_TAC
2971 THENL(*5*)[
2972
2973 ASM_REWRITE_TAC[IN_ELIM_THM]
2974 THEN EXISTS_TAC`t1':real`
2975 THEN EXISTS_TAC`t2':real`
2976 THEN EXISTS_TAC`t3':real`
2977 THEN ASM_REWRITE_TAC[];(*5*)
2978
2979 SUBGOAL_THEN `(x':real^3) IN aff_gt {x} {v,va:real^3}` ASSUME_TAC
2980 THENL(*6*)[
2981
2982 ASM_REWRITE_TAC[IN_ELIM_THM]
2983 THEN EXISTS_TAC`t1:real`
2984 THEN EXISTS_TAC`t2:real`
2985 THEN EXISTS_TAC`t3:real`
2986 THEN ASM_REWRITE_TAC[]
2987 THEN REAL_ARITH_TAC;(*6*)
2988
2989 SUBGOAL_THEN `(x':real^3) IN aff_ge {x} {v,va:real^3}` ASSUME_TAC
2990 THENL(*7*)[
2991
2992 MRESA_TAC AFF_GE_1_2[`x:real^3`;`v:real^3`;`va:real^3`]
2993 THEN ASM_REWRITE_TAC[IN_ELIM_THM]
2994 THEN EXISTS_TAC`t1:real`
2995 THEN EXISTS_TAC`t2:real`
2996 THEN EXISTS_TAC`t3:real`
2997 THEN MP_TAC(REAL_ARITH`&0< t2==> &0 <= t2`) THEN RESA_TAC
2998 THEN MP_TAC(REAL_ARITH`&0< t3==> &0 <= t3`) THEN RESA_TAC
2999 THEN ASM_REWRITE_TAC[];(*7*)
3000
3001 FIND_ASSUM MP_TAC`{v',w':real^3} IN E`
3002 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3003 THEN DISCH_TAC
3004 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (v':real^3)`;
3005 ` (w':real^3)`]  
3006 THEN SUBGOAL_THEN `~collinear {x, x', w':real^3}` ASSUME_TAC
3007 THENL(*8*)[
3008
3009 ASM_REWRITE_TAC[collinear1_fan;]
3010 THEN FIND_ASSUM MP_TAC `~((v':real^3) IN aff{x,w'})`
3011 THEN MATCH_MP_TAC MONO_NOT
3012 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3013 THEN STRIP_TAC
3014 THEN POP_ASSUM MP_TAC
3015 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % w'
3016 <=> t2' % v' = (u'-t1') % x + (v''-t3') % w'`]
3017 THEN STRIP_TAC
3018 THEN MP_TAC(SET_RULE`
3019 t2' % v' = (u'-t1') % x + (v''-t3') % w':real^3
3020 ==> (inv ( t2'))%(t2' % v') = (inv (t2'))%((u'-t1') % x + (v''-t3') % w')
3021 `)
3022 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3023 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3024 THEN REDUCE_VECTOR_TAC
3025 THEN STRIP_TAC
3026 THEN EXISTS_TAC `(inv t2' * (u' - t1':real))`
3027 THEN EXISTS_TAC `(inv t2' * (v'' - t3':real))`
3028 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t2' * (u' - t1') + inv t2' * (v'' - t3')=inv t2'* (t2'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t2'+ &1 - &1=t2'`];(*8*)
3029
3030
3031
3032
3033 SUBGOAL_THEN `~collinear {x, x', v':real^3}` ASSUME_TAC
3034 THENL(*9*)[
3035 ASM_REWRITE_TAC[collinear1_fan;]
3036 THEN FIND_ASSUM MP_TAC `~((w':real^3) IN aff{x,v'})`
3037 THEN MATCH_MP_TAC MONO_NOT
3038 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3039 THEN STRIP_TAC
3040 THEN POP_ASSUM MP_TAC
3041 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
3042 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
3043 THEN STRIP_TAC
3044 THEN MP_TAC(SET_RULE`
3045 t3' % w' = (u'-t1') % x + (v''-t2') % v':real^3
3046 ==> (inv ( t3'))%(t3' % w') = (inv (t3'))%((u'-t1') % x + (v''-t2') % v')
3047 `)
3048 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3049 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3050 THEN REDUCE_VECTOR_TAC
3051 THEN STRIP_TAC
3052 THEN EXISTS_TAC `(inv t3' * (u' - t1':real))`
3053 THEN EXISTS_TAC `(inv t3' * (v'' - t2':real))`
3054 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3' * (u' - t1') + inv t3' * (v'' - t2')=inv t3'* (t3'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t3'+ &1 - &1=t3'`];(*9*)
3055
3056
3057
3058
3059 SUBGOAL_THEN`~collinear {x, x', va:real^3}` ASSUME_TAC
3060 THENL(*10*)[
3061 REMOVE_THEN "BO" MP_TAC
3062 THEN DISCH_TAC THEN REMOVE_ASSUM_TAC
3063 THEN ASM_REWRITE_TAC[collinear1_fan;]
3064 THEN FIND_ASSUM MP_TAC`~(va IN aff {x, v:real^3})`
3065 THEN MATCH_MP_TAC MONO_NOT
3066 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3067 THEN STRIP_TAC
3068 THEN POP_ASSUM MP_TAC
3069 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % v + t3 % (va) =
3070       u' % x + v' % (va)<=>
3071 (&1-(t1+t2+t3)) % x  + (v'-t3) % (va-x) =
3072       (&1-(u'+v') ) % x + t2 % (v-x)`;REAL_ARITH`a-a= &0`]
3073 THEN REDUCE_VECTOR_TAC
3074 THEN DISJ_CASES_TAC(REAL_ARITH`(v'' - t3 = &0) \/ ~(v'' - (t3:real)= &0)`)
3075 THENL(*11*)[
3076
3077 ASM_REWRITE_TAC[VECTOR_ARITH`&0 %A=B<=> B= vec 0`;VECTOR_MUL_EQ_0]
3078 THEN MP_TAC(REAL_ARITH`&0< t2==> ~(t2 = &0)`)
3079 THEN RESA_TAC
3080 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A-B= vec 0<=> A=B`];(*11*)
3081
3082 MRESA1_TAC REAL_MUL_LINV `(v''-t3:real)`
3083 THEN STRIP_TAC
3084 THEN MP_TAC(SET_RULE`(v'' - t3) % (va- x) = t2 % (v - x:real^3) ==> (inv (v'' -t3)) % ((v'' - t3) % (va - x)) = (inv (v'' -t3)) % ( t2 % (v - x))`)
3085 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th]
3086 THEN ASM_REWRITE_TAC[VECTOR_ARITH`(A%B%C=(A*B)%C:real^3)`])
3087 THEN REWRITE_TAC[VECTOR_ARITH`&1 % (va - x) = (inv (v' - t3) * t2) % (v - x)<=>
3088 va  = (&1-(inv (v' - t3) * t2))%x +(inv (v' - t3) * t2) % v:real^3`]
3089 THEN STRIP_TAC
3090 THEN EXISTS_TAC`&1-(inv (v'' - t3) * (t2:real))`
3091 THEN EXISTS_TAC`(inv (v'' - t3) * (t2:real))`
3092 THEN ASM_REWRITE_TAC[]
3093 THEN REAL_ARITH_TAC](*11*);(*10*)
3094
3095
3096 SUBGOAL_THEN `~collinear {x, x', v:real^3}` ASSUME_TAC
3097 THENL(*11*)[
3098 REMOVE_THEN "BO" MP_TAC
3099 THEN DISCH_TAC
3100 THEN REMOVE_ASSUM_TAC
3101 THEN ASM_REWRITE_TAC[collinear1_fan]
3102 THEN FIND_ASSUM MP_TAC `~(va IN aff {x, v:real^3})`
3103 THEN MATCH_MP_TAC MONO_NOT
3104 THEN REWRITE_TAC[aff; AFFINE_HULL_2;IN_ELIM_THM]
3105 THEN STRIP_TAC
3106 THEN POP_ASSUM MP_TAC
3107 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2' % v' + t3' % w' = u' % x + v'' % v'
3108 <=> t3' % w' = (u'-t1') % x + (v''-t2') % v'`]
3109 THEN MP_TAC(REAL_ARITH`&0< t3 ==> ~(t3= &0)`)
3110 THEN RESA_TAC
3111 THEN MRESA1_TAC REAL_MUL_LINV`t3:real`
3112 THEN STRIP_TAC
3113 THEN MP_TAC(SET_RULE`
3114 t3 % va = (u'-t1) % x + (v''-t2) % v:real^3
3115 ==> (inv ( t3))%(t3 % va) = (inv (t3))%((u'-t1) % x + (v''-t2) % v)
3116 `)
3117 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3118 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C= (A*B)%C`;VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3119 THEN REDUCE_VECTOR_TAC
3120 THEN STRIP_TAC
3121 THEN EXISTS_TAC `(inv t3 * (u' - t1:real))`
3122 THEN EXISTS_TAC `(inv t3 * (v'' - t2:real))`
3123 THEN ASM_REWRITE_TAC[REAL_ARITH`inv t3' * (u' - t1') + inv t3' * (v'' - t2')=inv t3'* (t3'+ (u'+v'') - (t1'+t2'+t3'))`;REAL_ARITH`t3'+ &1 - &1=t3'`];(*11*)
3124
3125 ABBREV_TAC`an=t1' % x + t2' % v' + t3' % w':real^3`
3126 THEN REMOVE_THEN "VUT1" MP_TAC
3127 THEN REMOVE_THEN "VUT1" MP_TAC
3128 THEN REMOVE_THEN "BO" MP_TAC
3129 THEN REMOVE_THEN "VUT" MP_TAC
3130 THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC THEN DISCH_TAC
3131 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3132 THEN DISJ_CASES_TAC(SET_RULE`(&0 < azim x (x':real^3) v w' /\
3133       azim x (x') v w' < pi)\/ ~(&0 < azim x (x') v w' /\
3134       azim x (x') v w' < pi)`)
3135
3136 THENL(*12*)[
3137
3138 MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`x':real^3`;`w':real^3`]
3139 THEN REWRITE_TAC[EMPTY;IN]
3140 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3141 THEN RESA_TAC
3142 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3143 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3144 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3145 THEN MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3146 THEN POP_ASSUM MP_TAC
3147 THEN POP_ASSUM MP_TAC
3148 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3149 THEN POP_ASSUM MP_TAC
3150 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
3151 THEN SET_TAC[];(*12*)
3152
3153 ASSUME_TAC(ISPECL[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]azim)
3154 THEN ASSUME_TAC(PI_WORKS)
3155 THEN MP_TAC(REAL_ARITH`~(&0 < azim x x' v w' /\ azim x x' v w' < pi)/\
3156 &0 <= azim x x' v w' /\ &0< pi==>   pi< azim x x' v w' \/(azim x x' v w'= &0 \/  azim x x' v w'=pi) `)
3157 THEN ASM_REWRITE_TAC[]
3158 THEN STRIP_TAC
3159 THENL(*13*)(*3SUBGOAL*)[
3160
3161 POP_ASSUM MP_TAC
3162 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3163 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
3164 THEN DISCH_TAC
3165 THEN MP_TAC(REAL_ARITH`azim x x' v' w' < azim x x' v w'==>azim x x' v' w' <= azim x x' v w'`)
3166 THEN RESA_TAC
3167 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
3168 THEN POP_ASSUM MP_TAC
3169 THEN REMOVE_ASSUM_TAC
3170 THEN POP_ASSUM MP_TAC
3171 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3172 THEN DISCH_TAC THEN DISCH_TAC
3173 THEN MP_TAC(REAL_ARITH`pi < azim x x' v w' /\ azim x x' v w' = azim x x' v v' + pi
3174 /\  azim x x' v w' < &2 * pi==> &0 <azim x x' v v' /\ azim x x' v v' < pi`)
3175 THEN RESA_TAC
3176 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`x':real^3`;`v':real^3`]
3177 THEN REWRITE_TAC[EMPTY;IN]
3178 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3179 THEN RESA_TAC
3180 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3181 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3182 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3183 THEN SUBGOAL_THEN ` aff_ge {x} {w', v':real^3}=aff_ge {x} {v', w'}` ASSUME_TAC
3184 THENL(*14*)[
3185 REWRITE_TAC[SET_RULE`{A,B}={B,A}`];(*14*)
3186
3187 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`w':real^3`;`v':real^3`;`x':real^3`]
3188 THEN POP_ASSUM MP_TAC
3189 THEN REMOVE_ASSUM_TAC 
3190 THEN POP_ASSUM MP_TAC
3191 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3192 THEN POP_ASSUM MP_TAC
3193 THEN FIND_ASSUM MP_TAC`{v',w'} IN (E:(real^3->bool)->bool)`
3194 THEN SET_TAC[]](*14*);(*13*)
3195
3196 MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
3197 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`]
3198 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
3199 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`w':real^3`;`v:real^3`]
3200 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
3201 THENL(*14*)[
3202 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3203 THEN POP_ASSUM MP_TAC
3204 THEN POP_ASSUM MP_TAC
3205 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3206 THEN DISCH_TAC
3207 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3208  THEN ASSUME_TAC(th))
3209 THEN STRIP_TAC 
3210 THEN POP_ASSUM MP_TAC
3211 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
3212  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3213 THEN REDUCE_VECTOR_TAC
3214 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3215 THEN RESA_TAC
3216 THEN POP_ASSUM MP_TAC
3217 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3218 THEN RESA_TAC
3219 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3220 THEN RESA_TAC
3221 THEN STRIP_TAC
3222 THEN MP_TAC(SET_RULE`
3223 t2'' + t3'' = &1 - t1'':real
3224 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3225 `)
3226 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3227 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3228 THEN STRIP_TAC
3229 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3230 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3231 THEN RESA_TAC
3232 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3233 THEN RESA_TAC
3234 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3235 THEN STRIP_TAC
3236 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`]
3237 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3238 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3239 THEN POP_ASSUM MP_TAC
3240 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3241 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3242 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3243 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3244 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3245 THEN DISCH_TAC
3246 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3247 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3248 THEN POP_ASSUM MP_TAC
3249 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
3250 [VECTOR_ARITH`&1 %A=A`]
3251 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
3252 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, w'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3253 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3254 THEN DISCH_TAC
3255 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3256 THEN MRESA_TAC exists_element_in_half_sapace_fan
3257 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
3258 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3259 ` (w':real^3)`]
3260 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
3261 THEN REWRITE_TAC[EMPTY;IN]
3262 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3263 THEN RESA_TAC
3264 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3265 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3266 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3267 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
3268 THEN POP_ASSUM MP_TAC
3269 THEN POP_ASSUM MP_TAC
3270 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3271 THEN POP_ASSUM MP_TAC
3272 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
3273 THEN SET_TAC[];(*14*)
3274
3275 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
3276 THENL(*15*)[
3277
3278 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3279 THEN POP_ASSUM MP_TAC
3280 THEN POP_ASSUM MP_TAC
3281 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3282 THEN DISCH_TAC
3283 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3284  THEN ASSUME_TAC(th))
3285 THEN STRIP_TAC 
3286 THEN POP_ASSUM MP_TAC
3287 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
3288  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3289 THEN REDUCE_VECTOR_TAC
3290 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3291 THEN RESA_TAC
3292 THEN POP_ASSUM MP_TAC
3293 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3294 THEN RESA_TAC
3295 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3296 THEN RESA_TAC
3297 THEN STRIP_TAC
3298 THEN MP_TAC(SET_RULE`
3299 t2'' + t3'' = &1 - t1'':real
3300 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3301 `)
3302 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3303 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3304 THEN STRIP_TAC
3305 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3306 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3307 THEN RESA_TAC
3308 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3309 THEN RESA_TAC
3310 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3311 THEN STRIP_TAC
3312 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`]
3313 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3314 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3315 THEN POP_ASSUM MP_TAC
3316 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3317 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3318 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3319 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3320 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3321 THEN DISCH_TAC
3322 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3323 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3324 THEN POP_ASSUM MP_TAC
3325 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
3326 [VECTOR_ARITH`&1 %A=A`]
3327 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
3328 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, v'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3329 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3330 THEN DISCH_TAC
3331 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3332 THEN MRESA_TAC exists_element_in_half_sapace_fan
3333 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
3334 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3335 ` (v':real^3)`]
3336 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
3337 THEN REWRITE_TAC[EMPTY;IN]
3338 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3339 THEN RESA_TAC
3340 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3341 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3342 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3343 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
3344 THEN POP_ASSUM MP_TAC
3345 THEN POP_ASSUM MP_TAC
3346 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3347 THEN POP_ASSUM MP_TAC
3348 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
3349 THEN SET_TAC[];(*15*)
3350
3351 SUBGOAL_THEN`~(w' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
3352 THENL(*16*)[
3353 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3354 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
3355 THEN POP_ASSUM MP_TAC
3356 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3357 THEN ASM_REWRITE_TAC[]
3358 THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
3359 THEN SET_TAC[];(*16*)
3360
3361 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`w':real^3`] decomposition_planar_by_angle_fan)
3362 THEN ASM_REWRITE_TAC[]
3363 THEN STRIP_TAC
3364 THENL(*17*)[
3365 MRESA_TAC aff_gt1_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3366 THEN MP_TAC(SET_RULE`v IN aff_gt {x} {x', w':real^3} /\ aff_gt {x} {x', w'} SUBSET aff_ge {x} {v', w'}
3367 ==>v IN aff_ge {x} {v', w':real^3}`)
3368 THEN RESA_TAC
3369 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)
3370 THEN ASM_REWRITE_TAC[]
3371 THEN STRIP_TAC
3372 THENL(*18*)[
3373 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3374 THEN POP_ASSUM MP_TAC
3375 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3376 THEN MP_TAC(PI_WORKS)
3377 THEN REAL_ARITH_TAC;(*18*)
3378
3379 MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3380 THEN POP_ASSUM MP_TAC
3381 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3382 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3383 THEN DISCH_TAC
3384 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
3385 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3386 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
3387 THEN POP_ASSUM MP_TAC
3388 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3389 THEN DISCH_TAC
3390 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
3391 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3392 THEN ASM_REWRITE_TAC[]
3393 THEN STRIP_TAC
3394 THENL(*19*)[
3395 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3396 THEN ASM_TAC THEN SET_TAC[];(*19*)
3397
3398 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
3399 THEN POP_ASSUM MP_TAC
3400 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
3401 THEN ASM_REWRITE_TAC[]
3402 THEN POP_ASSUM MP_TAC
3403 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3404 THEN STRIP_TAC THEN STRIP_TAC
3405 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
3406 ==>va IN aff_ge {x} {v', w':real^3}`)
3407 THEN RESA_TAC
3408 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3409 THENL(*20*)[
3410
3411 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3412 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3413 THEN EXISTS_TAC`&0`
3414 THEN EXISTS_TAC`&1 -a:real`
3415 THEN EXISTS_TAC`a:real`
3416 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3417 THEN RESA_TAC
3418 THEN ASM_REWRITE_TAC[]
3419 THEN REDUCE_VECTOR_TAC
3420 THEN REAL_ARITH_TAC;(*20*)
3421
3422
3423 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
3424 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3425 THEN RESA_TAC
3426 THEN POP_ASSUM MP_TAC
3427 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3428 THEN REWRITE_TAC[FAN;fan7]
3429 THEN STRIP_TAC
3430 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
3431   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3432 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3433 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3434 THENL(*21*)[
3435
3436 DISCH_TAC
3437 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3438 THEN REMOVE_ASSUM_TAC
3439 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3440 THEN ASM_REWRITE_TAC[]
3441 THEN STRIP_TAC
3442 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
3443 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
3444 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
3445 THEN STRIP_TAC
3446 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3447 THEN POP_ASSUM MP_TAC
3448 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3449 THEN ASM_REWRITE_TAC[]
3450 THEN DISCH_TAC
3451 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3452 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`]
3453 THEN POP_ASSUM MP_TAC
3454 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3455 THEN POP_ASSUM MP_TAC
3456 THEN SET_TAC[];(*21*)
3457
3458
3459 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
3460 THEN RESA_TAC
3461 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/  {u, w} INTER {v', w'} SUBSET {w} `)
3462 THEN ASM_REWRITE_TAC[]
3463 THEN STRIP_TAC
3464 THENL(*22*)[
3465
3466 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
3467 THEN STRIP_TAC
3468 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3469 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
3470 THEN RESA_TAC
3471 THEN REWRITE_TAC[IN;EMPTY]
3472 THEN POP_ASSUM MP_TAC
3473 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3474 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3475 THEN POP_ASSUM MP_TAC
3476 THEN MATCH_MP_TAC MONO_NOT
3477 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3478 THEN STRIP_TAC
3479 THEN POP_ASSUM MP_TAC
3480 THEN EXPAND_TAC"va"
3481 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
3482 <=> a % w = u' % x + (v''+a- &1) % u`]
3483 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
3484 THEN STRIP_TAC
3485 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
3486 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3487 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3488 THEN REDUCE_VECTOR_TAC
3489 THEN STRIP_TAC
3490 THEN EXISTS_TAC`(inv a * u'):real`
3491 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
3492 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*22*)
3493
3494 STRIP_TAC
3495 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
3496 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3497 THEN STRIP_TAC
3498 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
3499 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
3500 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3501 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
3502 THEN RESA_TAC
3503 THEN REWRITE_TAC[IN;EMPTY]
3504 THEN POP_ASSUM MP_TAC 
3505 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
3506 THEN REWRITE_TAC[]
3507 THEN MATCH_MP_TAC MONO_NOT
3508 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3509 THEN STRIP_TAC
3510 THEN POP_ASSUM MP_TAC
3511 THEN EXPAND_TAC"va"
3512 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
3513 <=> (&1-a )% u = u' % x + (v''-a) % w`]
3514 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
3515 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
3516 THEN STRIP_TAC
3517 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
3518 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3519 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3520 THEN REDUCE_VECTOR_TAC
3521 THEN STRIP_TAC
3522 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
3523 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
3524 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*22*)](*21*)](*20*)](*19*)](*18*);(*17*)
3525
3526
3527
3528
3529 POP_ASSUM MP_TAC
3530 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3531 THEN DISCH_TAC
3532 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
3533 THEN POP_ASSUM MP_TAC
3534 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3535 THEN ASM_REWRITE_TAC[]
3536 THEN DISCH_TAC
3537 THEN MP_TAC(SET_RULE`aff_ge {x} {v, x':real^3} SUBSET aff_gt {x, v} {x'} UNION aff_ge {x} {v} /\ w' IN aff_ge {x} {v, x'} ==> w' IN aff_gt {x, v} {x'} UNION aff_ge {x} {v}`)
3538 THEN RESA_TAC
3539 THEN POP_ASSUM MP_TAC
3540 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3541 THEN POP_ASSUM MP_TAC
3542 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
3543 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
3544 THEN STRIP_TAC
3545 THEN ASM_REWRITE_TAC[]
3546 THEN STRIP_TAC
3547 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `w':real^3`; `v':real^3`; `v:real^3`;`u:real^3`]properties1_of_fan7)
3548 THEN ASM_REWRITE_TAC[]
3549 THEN STRIP_TAC
3550 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
3551 THEN DISCH_TAC
3552 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
3553 THEN SUBGOAL_THEN`v IN aff_ge {x} {v', w':real^3}`ASSUME_TAC
3554 THENL(*18*)[
3555 POP_ASSUM MP_TAC THEN ASM_REWRITE_TAC[];(*18*)
3556 POP_ASSUM MP_TAC
3557 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3558 THEN POP_ASSUM MP_TAC
3559 THEN DISCH_THEN (LABEL_TAC"NHAT")
3560 THEN DISCH_TAC
3561 THEN REMOVE_THEN "NHAT" MP_TAC
3562 THEN DISCH_TAC
3563 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3564 THEN POP_ASSUM MP_TAC
3565 THEN POP_ASSUM (fun th-> ASM_REWRITE_TAC[SYM(th)])
3566 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3567 THEN DISCH_TAC
3568 THEN MRESA_TAC AZIM_EQ_PI_SYM [`x:real^3`;`x':real^3`; `v':real^3`;`v:real^3`]
3569 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3570 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`v':real^3`]
3571 THEN POP_ASSUM MP_TAC
3572 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3573 THEN DISCH_TAC
3574 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`v':real^3`]
3575 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3576 THEN ASM_REWRITE_TAC[]
3577 THEN STRIP_TAC
3578 THENL(*19*)[
3579
3580 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3581 THEN ASM_TAC THEN SET_TAC[];(*19*)
3582
3583 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`w':real^3`; `v':real^3`;`x':real^3`]
3584 THEN POP_ASSUM MP_TAC
3585 THEN GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{A,B}={B,A}`]
3586 THEN ASM_REWRITE_TAC[]
3587 THEN POP_ASSUM MP_TAC
3588 THEN REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3589 THEN STRIP_TAC THEN STRIP_TAC
3590 THEN MP_TAC(SET_RULE`va IN aff_ge {x} {v', x':real^3} /\ aff_ge {x} {v', x'} SUBSET aff_ge {x} {v', w'}
3591 ==>va IN aff_ge {x} {v', w':real^3}`)
3592 THEN RESA_TAC
3593 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3594 THENL(*20*)[
3595
3596 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3597 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3598 THEN EXISTS_TAC`&0`
3599 THEN EXISTS_TAC`&1 -a:real`
3600 THEN EXISTS_TAC`a:real`
3601 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3602 THEN RESA_TAC
3603 THEN ASM_REWRITE_TAC[]
3604 THEN REDUCE_VECTOR_TAC
3605 THEN REAL_ARITH_TAC;(*20*)
3606
3607 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
3608 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3609 THEN RESA_TAC
3610 THEN POP_ASSUM MP_TAC
3611 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3612 THEN REWRITE_TAC[FAN;fan7]
3613 THEN STRIP_TAC
3614 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
3615   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3616 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3617 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3618 THENL(*21*)[
3619
3620 DISCH_TAC
3621 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3622 THEN REMOVE_ASSUM_TAC
3623 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3624 THEN ASM_REWRITE_TAC[]
3625 THEN STRIP_TAC
3626 THEN FIND_ASSUM MP_TAC `v IN aff_ge {x} {v', w':real^3}`
3627 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
3628 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
3629 THEN STRIP_TAC
3630 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3631 THEN POP_ASSUM MP_TAC
3632 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3633 THEN ASM_REWRITE_TAC[]
3634 THEN DISCH_TAC
3635 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
3636 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`]
3637 THEN POP_ASSUM MP_TAC
3638 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3639 THEN POP_ASSUM MP_TAC
3640 THEN SET_TAC[];(*21*)
3641
3642 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
3643 THEN RESA_TAC
3644 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/  {u, w} INTER {v', w'} SUBSET {w} `)
3645 THEN ASM_REWRITE_TAC[]
3646 THEN STRIP_TAC
3647 THENL(*22*)[
3648
3649 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
3650 THEN STRIP_TAC
3651 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3652 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
3653 THEN RESA_TAC
3654 THEN REWRITE_TAC[IN;EMPTY]
3655 THEN POP_ASSUM MP_TAC
3656 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3657 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3658 THEN POP_ASSUM MP_TAC
3659 THEN MATCH_MP_TAC MONO_NOT
3660 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3661 THEN STRIP_TAC
3662 THEN POP_ASSUM MP_TAC
3663 THEN EXPAND_TAC"va"
3664 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
3665 <=> a % w = u' % x + (v''+a- &1) % u`]
3666 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
3667 THEN STRIP_TAC
3668 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
3669 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3670 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3671 THEN REDUCE_VECTOR_TAC
3672 THEN STRIP_TAC
3673 THEN EXISTS_TAC`(inv a * u'):real`
3674 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
3675 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*22*)
3676
3677
3678 STRIP_TAC
3679 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
3680 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3681 THEN STRIP_TAC
3682 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
3683 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
3684 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
3685 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
3686 THEN RESA_TAC
3687 THEN REWRITE_TAC[IN;EMPTY]
3688 THEN POP_ASSUM MP_TAC 
3689 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
3690 THEN REWRITE_TAC[]
3691 THEN MATCH_MP_TAC MONO_NOT
3692 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
3693 THEN STRIP_TAC
3694 THEN POP_ASSUM MP_TAC
3695 THEN EXPAND_TAC"va"
3696 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
3697 <=> (&1-a )% u = u' % x + (v''-a) % w`]
3698 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
3699 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
3700 THEN STRIP_TAC
3701 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
3702 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3703 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
3704 THEN REDUCE_VECTOR_TAC
3705 THEN STRIP_TAC
3706 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
3707 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
3708 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*22*)](*21*)](*20*)](*19*)](*18*)](*17*)](*16*)](*15*)](*14*);(*13*)
3709
3710
3711
3712 POP_ASSUM MP_TAC
3713 THEN DISCH_THEN(LABEL_TAC"CUOI")
3714 THEN MRESA_TAC aff_gt2_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3 `;`x':real^3`]
3715 THEN ASSUME_TAC(REAL_ARITH`pi<= pi`)
3716 THEN MRESA_TAC sum5_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`;`w':real^3`]
3717 THEN POP_ASSUM MP_TAC
3718 THEN REWRITE_TAC[REAL_ARITH`A=B+A<=>B= &0`]
3719 THEN DISCH_TAC
3720 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
3721 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`]
3722 THEN MRESA_TAC AZIM_EQ_0[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
3723 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`v':real^3`;`v:real^3`]
3724 THEN DISJ_CASES_TAC(SET_RULE`w' IN aff_gt {x} {v,va:real^3}\/ ~(w' IN aff_gt {x} {v,va:real^3})`)
3725 THENL(*14*)[
3726
3727 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3728 THEN POP_ASSUM MP_TAC
3729 THEN POP_ASSUM MP_TAC
3730 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3731 THEN DISCH_TAC
3732 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3733  THEN ASSUME_TAC(th))
3734 THEN STRIP_TAC 
3735 THEN POP_ASSUM MP_TAC
3736 THEN ASM_REWRITE_TAC[VECTOR_ARITH`w' = t1'' % x + t2'' % v + t3'' % va<=>
3737  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= w' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3738 THEN REDUCE_VECTOR_TAC
3739 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3740 THEN RESA_TAC
3741 THEN POP_ASSUM MP_TAC
3742 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3743 THEN RESA_TAC
3744 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3745 THEN RESA_TAC
3746 THEN STRIP_TAC
3747 THEN MP_TAC(SET_RULE`
3748 t2'' + t3'' = &1 - t1'':real
3749 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3750 `)
3751 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3752 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3753 THEN STRIP_TAC
3754 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3755 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3756 THEN RESA_TAC
3757 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3758 THEN RESA_TAC
3759 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3760 THEN STRIP_TAC
3761 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`]
3762 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3763 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3764 THEN POP_ASSUM MP_TAC
3765 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3766 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3767 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3768 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3769 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3770 THEN DISCH_TAC
3771 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3772 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3773 THEN POP_ASSUM MP_TAC
3774 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `w'-x:real^3`]
3775 [VECTOR_ARITH`&1 %A=A`]
3776 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,w'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + w'}`)
3777 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, w'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3778 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3779 THEN DISCH_TAC
3780 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `w':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3781 THEN MRESA_TAC exists_element_in_half_sapace_fan
3782 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w':real^3`;`  v:real^3`;`u:real^3`]
3783 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3784 ` (w':real^3)`]
3785 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`w':real^3`;`u':real^3`]
3786 THEN REWRITE_TAC[EMPTY;IN]
3787 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3788 THEN RESA_TAC
3789 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3790 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3791 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3792 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`w':real^3`;`u':real^3`]
3793 THEN POP_ASSUM MP_TAC
3794 THEN POP_ASSUM MP_TAC
3795 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3796 THEN POP_ASSUM MP_TAC
3797 THEN FIND_ASSUM MP_TAC`{w',u'} IN (E:(real^3->bool)->bool)`
3798 THEN SET_TAC[];(*14*)
3799
3800 DISJ_CASES_TAC(SET_RULE`v' IN aff_gt {x} {v,va:real^3}\/ ~(v' IN aff_gt {x} {v,va:real^3})`)
3801 THENL(*15*)[
3802
3803 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-a)%u +a%w:real^3`][IN_ELIM_THM]
3804 THEN POP_ASSUM MP_TAC
3805 THEN POP_ASSUM MP_TAC
3806 THEN DISCH_THEN(LABEL_TAC"DICH CHUYEN")
3807 THEN DISCH_TAC
3808 THEN REMOVE_THEN "DICH CHUYEN"(fun th->MP_TAC(th) THEN ASM_REWRITE_TAC[IN_ELIM_THM] THEN REMOVE_ASSUM_TAC
3809  THEN ASSUME_TAC(th))
3810 THEN STRIP_TAC 
3811 THEN POP_ASSUM MP_TAC
3812 THEN ASM_REWRITE_TAC[VECTOR_ARITH`v' = t1'' % x + t2'' % v + t3'' % va<=>
3813  ((t1''+t2''+t3'')- &1) % x + t2'' % (v-x) + t3'' % (va-x)= v' -x:real^3`;REAL_ARITH`&1- &1 = &0`]
3814 THEN REDUCE_VECTOR_TAC
3815 THEN MP_TAC(REAL_ARITH`&0< t2'' /\ &0< t3'' /\ t1''+t2''+t3''= &1==>  &0 < &1- t1'' /\ ~(&1- t1'' = &0)/\ t2''+t3''= &1- t1''`)
3816 THEN RESA_TAC
3817 THEN POP_ASSUM MP_TAC
3818 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_LT_INV)
3819 THEN RESA_TAC
3820 THEN MP_TAC(ISPEC`&1- (t1'':real)`REAL_MUL_LINV)
3821 THEN RESA_TAC
3822 THEN STRIP_TAC
3823 THEN MP_TAC(SET_RULE`
3824 t2'' + t3'' = &1 - t1'':real
3825 ==> (inv ( &1 - t1''))*(t2'' + t3'') = (inv ( &1 - t1''))*( &1 - t1'':real)
3826 `)
3827 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
3828 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C)= &1<=> &1- A*C = A*B`]
3829 THEN STRIP_TAC
3830 THEN MRESA_TAC REAL_LT_MUL[`inv(&1- t1'':real)`;`t3'':real`]
3831 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)*(t3'':real)==> ~(inv(&1- t1'':real)*(t3'':real)= &0)`)
3832 THEN RESA_TAC
3833 THEN MP_TAC(REAL_ARITH`&0<inv(&1- t1'':real)==> ~(inv(&1- t1'':real)= &0)`)
3834 THEN RESA_TAC
3835 THEN ASSUME_TAC(REAL_ARITH`~(&1= &0)`)
3836 THEN STRIP_TAC
3837 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`]
3838 THEN MRESA_TAC continuous_coplanar_fan[`x:real^3 `;` v:real^3`;` u:real^3`;` w:real^3`]
3839 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
3840 THEN POP_ASSUM MP_TAC
3841 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3842 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v, (&1 - a) % u + a % w}= {(--x) +x, (--x) +v, (--x) +u, (--x) +(&1 - a) % u + a % w}`)
3843 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, (&1 - a) % u + a % w}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3844 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)] )
3845 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
3846 THEN DISCH_TAC
3847 THEN MRESA_TAC continuous_coplanar_fan[`(vec 0):real^3 `;` u-x:real^3`;` v-x:real^3`;` ((&1 - a) % u + a % w)-x:real^3`]
3848 THEN POP_ASSUM (fun th-> MRESAL1_TAC th`(inv(&1- t1'')) * t3'':real`[VECTOR_ARITH`(A*B)%X+(A*C)%Y=A%(B%X+C%Y)`])
3849 THEN POP_ASSUM MP_TAC
3850 THEN MRESAL_TAC COPLANAR_SCALE_ALL [`&1`;`&1`;`inv(&1- t1'')`;`u - x:real^3`; `v - x:real^3`; `v'-x:real^3`]
3851 [VECTOR_ARITH`&1 %A=A`]
3852 THEN ASSUME_TAC(SET_RULE`IMAGE (\x'. --x + x') {x:real^3,  u, v,v'}= {(--x) +x, (--x) +u, (--x) +v, (--x) + v'}`)
3853 THEN MRESAL_TAC COPLANAR_TRANSLATION_EQ[`--(x:real^3)`;`{x:real^3, u, v, v'}`][VECTOR_ARITH`(--A)+B=B-A:real^3`;VECTOR_ARITH`A-A=(vec 0):real^3`]
3854 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,D,C,B}`]
3855 THEN DISCH_TAC
3856 THEN REMOVE_THEN "EM"(fun th-> MRESA1_TAC th `v':real^3` THEN MP_TAC (th) THEN DISCH_THEN(LABEL_TAC"EM"))
3857 THEN MRESA_TAC exists_element_in_half_sapace_fan
3858 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v':real^3`;`  v:real^3`;`u:real^3`]
3859 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u':real^3)`;
3860 ` (v':real^3)`]
3861 THEN MRESA_TAC exists_cut_small_edges_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`a:real`;`v':real^3`;`u':real^3`]
3862 THEN REWRITE_TAC[EMPTY;IN]
3863 THEN MP_TAC(REAL_ARITH`&0<t /\ t< &1==> &0< &1-t:real /\ &1-t< &1`)
3864 THEN RESA_TAC
3865 THEN MRESA_TAC REAL_LT_MUL[`(&1-t:real)`;`a:real`]
3866 THEN MRESAL_TAC REAL_LT_RMUL[`(&1-t:real)`;`&1`;`a:real`][REAL_ARITH`&1 *a=a`]
3867 THEN REMOVE_THEN "YEU"(fun th-> MRESAL1_TAC th `(&1- t) *a`[VECTOR_ARITH`(&1 - (&1 - t) * a) % u + ((&1 - t) * a) % w=(&1 - t) % ((&1-a)%u+a % w)+t%u`;])
3868 THEN MRESA_TAC aff_gt_subset_aff_ge[`x:real^3`;`v':real^3`;`u':real^3`]
3869 THEN POP_ASSUM MP_TAC
3870 THEN POP_ASSUM MP_TAC
3871 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3872 THEN POP_ASSUM MP_TAC
3873 THEN FIND_ASSUM MP_TAC`{v',u'} IN (E:(real^3->bool)->bool)`
3874 THEN SET_TAC[];(*15*)
3875
3876 SUBGOAL_THEN`~(v' IN aff_gt {x} { x',v:real^3})` ASSUME_TAC
3877 THENL(*16*)[
3878 REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3879 THEN MRESA_TAC aff_gt3_subset_aff_gt[`x:real^3`;`v:real^3`;`va:real^3`;`x':real^3`]
3880 THEN POP_ASSUM MP_TAC
3881 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3882 THEN ASM_REWRITE_TAC[]
3883 THEN POP_ASSUM MP_TAC 
3884 THEN SET_TAC[];(*16*)
3885
3886 MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`v:real^3`;`v':real^3`] decomposition_planar_by_angle_fan)
3887 THEN ASM_REWRITE_TAC[]
3888 THEN STRIP_TAC
3889 THENL(*17*)[
3890
3891 MRESA_TAC aff_gt12_subset_aff_ge[`x:real^3`;`v':real^3`;`w':real^3`;`x':real^3`]
3892 THEN MP_TAC(SET_RULE`v IN aff_gt {x} {x', v':real^3} /\ aff_gt {x} {x', v'} SUBSET aff_ge {x} {v', w'}
3893 ==>v IN aff_ge {x} {v', w':real^3}`)
3894 THEN RESA_TAC
3895 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)
3896 THEN ASM_REWRITE_TAC[]
3897 THEN STRIP_TAC
3898 THENL(*18*)[
3899  MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3900 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3901 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
3902 THEN POP_ASSUM MP_TAC
3903 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3904 THEN DISCH_TAC
3905 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
3906 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3907 THEN ASM_REWRITE_TAC[]
3908 THEN STRIP_TAC
3909 THENL(*19*)[
3910
3911 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3912 THEN ASM_TAC THEN SET_TAC[];(*19*)
3913
3914 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3915 THEN ASM_TAC THEN SET_TAC[]](*19*);(*18*)
3916
3917
3918 REMOVE_THEN "CUOI" MP_TAC
3919 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
3920 THEN REWRITE_TAC[AZIM_REFL]
3921 THEN MP_TAC(PI_WORKS)
3922 THEN REAL_ARITH_TAC](*18*);(*17*)
3923
3924 POP_ASSUM MP_TAC
3925 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
3926 THEN DISCH_TAC
3927 THEN MRESA_TAC aff_ge_subset_aff_gt_union_aff_ge[`(x:real^3)`;`(v:real^3)`;`(x':real^3)`]
3928 THEN POP_ASSUM MP_TAC
3929 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
3930 THEN ASM_REWRITE_TAC[]
3931 THEN DISCH_TAC
3932 THEN MP_TAC(SET_RULE`aff_ge {x} {v, x':real^3} SUBSET aff_gt {x, v} {x'} UNION aff_ge {x} {v} /\ v' IN aff_ge {x} {v, x'} ==> v' IN aff_gt {x, v} {x'} UNION aff_ge {x} {v}`)
3933 THEN RESA_TAC
3934 THEN POP_ASSUM MP_TAC
3935 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
3936 THEN POP_ASSUM MP_TAC
3937 THEN MRESA_TAC aff_gt_inter_aff_gt[`(x:real^3)`;`(x':real^3)`;`(v:real^3)`]
3938 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;UNION]
3939 THEN STRIP_TAC
3940 THEN ASM_REWRITE_TAC[]
3941 THEN STRIP_TAC
3942 THEN MP_TAC(ISPECL[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`; `v':real^3`; `w':real^3`; `v:real^3`;`u:real^3`]properties1_of_fan7)
3943 THEN ASM_REWRITE_TAC[]
3944 THEN STRIP_TAC
3945 THEN POP_ASSUM (fun th-> MP_TAC(SYM(th)))
3946 THEN DISCH_TAC
3947 THEN MRESA_TAC point_in_aff_ge[`(x:real^3)`;`(v':real^3)`;`(w':real^3)`]
3948 THEN MRESA_TAC aff_gt2_subset_aff_ge [`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3949 THEN ASSUME_TAC(REAL_ARITH`pi <= pi`)
3950 THEN MRESA_TAC sum4_azim_fan[`x:real^3`;`x':real^3`;`v:real^3`;`va:real^3`;`w':real^3`]
3951 THEN POP_ASSUM MP_TAC
3952 THEN REWRITE_TAC[REAL_ARITH`A=A+B <=> B= &0`]
3953 THEN DISCH_TAC
3954 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`x':real^3`;`va:real^3`;`w':real^3`]
3955 THEN MP_TAC(ISPECL[`x:real^3`;`x':real^3`;`w':real^3`;`va:real^3`] decomposition_planar_by_angle_fan)
3956 THEN ASM_REWRITE_TAC[]
3957 THEN STRIP_TAC
3958 THENL(*18*)[
3959 MRESA_TAC aff_gt1_subset_aff_gt[`x:real^3`;`v:real^3`; `va:real^3`;`x':real^3`]
3960 THEN ASM_TAC THEN SET_TAC[];(*18*)
3961
3962
3963 MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`v':real^3`; `w':real^3`;`x':real^3`]
3964 THEN MP_TAC(SET_RULE`va IN aff_ge {x} { x',w':real^3} /\ aff_ge {x} { x',w'} SUBSET aff_ge {x} {v', w'}
3965 ==>va IN aff_ge {x} {v', w':real^3}`)
3966 THEN RESA_TAC
3967 THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
3968 THENL(*19*)[
3969
3970 MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3971 THEN MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
3972 THEN EXISTS_TAC`&0`
3973 THEN EXISTS_TAC`&1 -a:real`
3974 THEN EXISTS_TAC`a:real`
3975 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
3976 THEN RESA_TAC
3977 THEN ASM_REWRITE_TAC[]
3978 THEN REDUCE_VECTOR_TAC
3979 THEN REAL_ARITH_TAC;(*19*)
3980
3981 MP_TAC(SET_RULE`va IN aff_ge {x} {v', w':real^3} /\ va IN aff_ge {x} {u, w} 
3982 ==>va IN  aff_ge {x} {u, w} INTER aff_ge {x} {v', w':real^3} `)
3983 THEN RESA_TAC
3984 THEN POP_ASSUM MP_TAC
3985 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
3986 THEN REWRITE_TAC[FAN;fan7]
3987 THEN STRIP_TAC
3988 THEN POP_ASSUM  (fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v':real^3),(w':real^3)}`]th)) 
3989   THEN ASM_REWRITE_TAC[UNION;IN_ELIM_THM;]
3990 THEN DISCH_TAC THEN ASM_REWRITE_TAC[]
3991 THEN DISJ_CASES_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}\/ ~({u, w} INTER {v', w'}={u,w:real^3})`)
3992 THENL(*20*)[
3993 DISCH_TAC
3994 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
3995 THEN REMOVE_ASSUM_TAC
3996 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'}={u,w:real^3}/\ ~(w=u) /\ ~(v'=w') ==> {v', w'}={u,w} `)
3997 THEN ASM_REWRITE_TAC[]
3998 THEN STRIP_TAC
3999 THEN FIND_ASSUM MP_TAC `v' IN aff_ge {x} {v', w':real^3}`
4000 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4001 THEN MRESAL_TAC aff_ge_inter_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`][INTER;IN_ELIM_THM]
4002 THEN STRIP_TAC
4003 THEN FIND_ASSUM MP_TAC `~collinear {x, v, u:real^3}`
4004 THEN FIND_ASSUM MP_TAC `v=v':real^3`
4005 THEN DISCH_TAC
4006 THEN POP_ASSUM(fun th->REWRITE_TAC[th])
4007 THEN DISCH_TAC
4008 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4009 THEN POP_ASSUM MP_TAC
4010 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4011 THEN ASM_REWRITE_TAC[]
4012 THEN DISCH_TAC
4013 THEN MRESA_TAC AZIM_EQ_0_PI_IMP_COPLANAR[`x:real^3`;`u:real^3`;`v:real^3`;`w:real^3`]
4014 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`]
4015 THEN POP_ASSUM MP_TAC
4016 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C,D}={A,C,B,D}`]
4017 THEN POP_ASSUM MP_TAC
4018 THEN SET_TAC[];(*20*)
4019
4020 MP_TAC(SET_RULE`~({u, w} INTER {v', w'} = {u, w:real^3}) ==> {u, w} INTER {v', w'} PSUBSET {u, w} `)
4021 THEN RESA_TAC
4022 THEN MP_TAC(SET_RULE`{u, w} INTER {v', w'} PSUBSET {u, w:real^3} ==> {u, w} INTER {v', w'} SUBSET {u}\/  {u, w} INTER {v', w'} SUBSET {w} `)
4023 THEN ASM_REWRITE_TAC[]
4024 THEN STRIP_TAC
4025 THENL(*21*)[
4026
4027 MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4028 THEN STRIP_TAC
4029 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{u:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4030 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {u}/\ aff_ge {x} {u} SUBSET aff {x, u}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,u}`)
4031 THEN RESA_TAC
4032 THEN REWRITE_TAC[IN;EMPTY]
4033 THEN POP_ASSUM MP_TAC
4034 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4035 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4036 THEN POP_ASSUM MP_TAC
4037 THEN MATCH_MP_TAC MONO_NOT
4038 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4039 THEN STRIP_TAC
4040 THEN POP_ASSUM MP_TAC
4041 THEN EXPAND_TAC"va"
4042 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % u
4043 <=> a % w = u' % x + (v''+a- &1) % u`]
4044 THEN MRESA1_TAC REAL_MUL_LINV`a:real`
4045 THEN STRIP_TAC
4046 THEN MP_TAC(SET_RULE`a % w = u' % x + (v'' + a - &1) % u:real^3 ==> (inv (a))%(a % w ) = (inv (a))%( u' % x + (v'' + a - &1) % u)`)
4047 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4048 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4049 THEN REDUCE_VECTOR_TAC
4050 THEN STRIP_TAC
4051 THEN EXISTS_TAC`(inv a * u'):real`
4052 THEN EXISTS_TAC`(inv a * (v'' + a - &1)):real`
4053 THEN ASM_REWRITE_TAC[REAL_ARITH`inv a * u' + inv a * (v'' + a - &1) =inv a * ( a+ (u' + v'') - &1)`;REAL_ARITH`A+ &1- &1=A`];(*21*)
4054
4055
4056 STRIP_TAC
4057 THEN FIND_ASSUM MP_TAC`{u,w:real^3} IN E`
4058 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4059 THEN STRIP_TAC
4060 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`]
4061 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v', w':real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w} = {}<=> ~(x=w:real^3)`]
4062 THEN MRESAL_TAC AFF_GE_SUBSET_AFFINE_HULL[`{x:real^3}`;`{w:real^3}`][SET_RULE`{x} UNION {u}={x,u}`;GSYM aff]
4063 THEN MP_TAC(SET_RULE`aff_ge {x:real^3} ({u, w} INTER {v', w'}) SUBSET aff_ge {x} {w}/\ aff_ge {x} {w} SUBSET aff {x, w}/\ va IN aff_ge {x} ({u, w} INTER {v', w'})==> va IN aff {x,w}`)
4064 THEN RESA_TAC
4065 THEN REWRITE_TAC[IN;EMPTY]
4066 THEN POP_ASSUM MP_TAC 
4067 THEN FIND_ASSUM MP_TAC `~(u IN aff {x, w:real^3})`
4068 THEN REWRITE_TAC[]
4069 THEN MATCH_MP_TAC MONO_NOT
4070 THEN REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4071 THEN STRIP_TAC
4072 THEN POP_ASSUM MP_TAC
4073 THEN EXPAND_TAC"va"
4074 THEN REWRITE_TAC[VECTOR_ARITH`(&1 - a) % u + a % w = u' % x + v'' % w
4075 <=> (&1-a )% u = u' % x + (v''-a) % w`]
4076 THEN MP_TAC(REAL_ARITH`a< &1==> ~(&1-a= &0)` )THEN RESA_TAC
4077 THEN MRESA1_TAC REAL_MUL_LINV`&1-a:real`
4078 THEN STRIP_TAC
4079 THEN MP_TAC(SET_RULE`(&1-a )% u = u' % x + (v''-a) % w:real^3 ==> (inv (&1-a))%((&1-a )% u ) = (inv (&1-a))%( u' % x + (v''-a) % w)`)
4080 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4081 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4082 THEN REDUCE_VECTOR_TAC
4083 THEN STRIP_TAC
4084 THEN EXISTS_TAC`(inv (&1-a) * u'):real`
4085 THEN EXISTS_TAC`(inv (&1-a) * (v'' - a)):real`
4086 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (&1 - a) * u' + inv (&1 - a) * (v'' - a)=inv (&1 - a) * ((u' + v'') - a)`]](*21*)](*20*)](*19*)](*18*)](*17*)](*16*)](*15*)](*14*)](*13*)](*12*)](*11*)](*10*)](*9*)]
4087 (*8*)](*7*)](*6*)](*5*)](*4*)](*3*)](*2*);(*1*)
4088
4089 SET_TAC[]]);;
4090
4091
4092
4093
4094 let exist_close1_fan=prove(`(!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4095
4096 FAN(x,V,E) /\ {v,u} INTER {v1,w1}={} /\ {v1,w1} IN E /\ {v,u} IN E /\ {u,w} IN E
4097 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
4098 /\ &0 <a /\ a< &1 
4099 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
4100       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
4101 ==>
4102 ?h:real.
4103 (&0 < h) 
4104 /\ 
4105 (!y1:real^3 y2:real^3. y1 IN (aff_ge {x} {v, (&1 - a) % u + a % w} INTER ballnorm_fan x) /\ y2 IN (aff_ge {x} {v1, w1} INTER ballnorm_fan x)
4106 ==> h  <= dist(y1,y2) ))`,
4107 REPEAT STRIP_TAC 
4108 THEN POP_ASSUM MP_TAC
4109 THEN DISCH_THEN(LABEL_TAC"EM")
4110 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4111 ` (v:real^3)`]
4112 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4113 ` (v1:real^3)`]
4114 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4115 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
4116
4117 THEN MATCH_MP_TAC( ISPECL [`aff_ge {(x:real^3)} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x`; 
4118  `aff_ge {(x:real^3)} {(v1:real^3), (w1:real^3)} INTER ballnorm_fan x`] SEPARATE_CLOSED_COMPACT)
4119 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v:real^3)`;` ((&1 - a) % u + a % w:real^3)`]closed_aff_ge_ballnorm_fan) 
4120 THEN RESA_TAC
4121 THEN MP_TAC(ISPECL[`(x:real^3) `;` (v1:real^3)`;` (w1:real^3)`]compact_aff_ge_ballnorm_fan) THEN RESA_TAC
4122 THEN REMOVE_THEN "EM" MP_TAC
4123 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4124 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;` (v:real^3)`;`((&1 - a) % u + a % w:real^3)`]
4125 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4126 THEN REWRITE_TAC[FAN;fan7] 
4127 THEN STRIP_TAC
4128 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(v:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4129                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4130 THEN MP_TAC(SET_RULE`(v:real^3) IN V==>(?v'. v' IN V /\ {v} = {v'})`)
4131 THEN REDA_TAC
4132 THEN MP_TAC(SET_RULE`{(v:real^3),u} INTER {v1,w1}={} ==> {v} INTER {v1,w1}={}`)
4133 THEN REDA_TAC
4134 THEN REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;]
4135 THEN STRIP_TAC THEN SUBGOAL_THEN`(aff_ge {x} {v} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
4136 ASSUME_TAC
4137 THENL(*1*)[
4138 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;SET_RULE`(?u. u = &1 /\ x' = u % x)<=> x'= &1 % x`;]
4139 THEN REDUCE_VECTOR_TAC
4140 THEN GEN_TAC THEN EQ_TAC
4141 THENL(*2*)[
4142 STRIP_TAC THEN POP_ASSUM MP_TAC
4143 THEN ASM_REWRITE_TAC[DIST_REFL]
4144 THEN REAL_ARITH_TAC;
4145 SET_TAC[]];
4146
4147 ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
4148  THEN SUBGOAL_THEN `va IN aff_ge {x} {u,w:real^3}` ASSUME_TAC
4149 THENL(*2*)[
4150  MRESAL_TAC AFF_GE_1_2[`x:real^3`;`u:real^3`;`w:real^3`][IN_ELIM_THM]
4151 THEN EXISTS_TAC`&0`
4152 THEN EXISTS_TAC`&1 -a:real`
4153 THEN EXISTS_TAC`a:real`
4154 THEN MP_TAC(REAL_ARITH`&0< a /\ a  < &1 ==> &0 <= &1 - a /\ &0 <= a`)
4155 THEN RESA_TAC
4156 THEN ASM_REWRITE_TAC[]
4157 THEN REDUCE_VECTOR_TAC
4158 THEN REAL_ARITH_TAC;(*2*)
4159
4160 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`
4161 ASSUME_TAC
4162 THENL(*3*)[
4163  MRESA_TAC th3[` (x:real^3)`;`(v:real^3)`;`(va:real^3)`]
4164 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
4165 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4166 THEN REWRITE_TAC[FAN;fan7] 
4167 THEN STRIP_TAC
4168 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4169                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4170 THEN MP_TAC(SET_RULE`{v,u} INTER {v1,w1}={}==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
4171 THEN RESA_TAC
4172 THEN STRIP_TAC
4173 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v1, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4174 THEN POP_ASSUM MP_TAC
4175 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
4176 THEN REMOVE_ASSUM_TAC
4177 THEN DISCH_TAC
4178 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
4179 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
4180 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w}`)
4181 THEN RESA_TAC
4182 THEN MATCH_MP_TAC(SET_RULE` aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w} /\ aff_ge {x} {va} INTER aff_ge {x} {w} SUBSET {x:real^3} ==>aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET {x}`)
4183 THEN ASM_REWRITE_TAC[]
4184 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
4185 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
4186 THEN REPEAT STRIP_TAC
4187 THEN POP_ASSUM MP_TAC
4188 THEN ASM_REWRITE_TAC[]
4189 THEN EXPAND_TAC"va"
4190 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
4191 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
4192 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
4193 THEN RES_TAC
4194 THENL(*4*)[
4195 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
4196 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
4197 THEN REDUCE_ARITH_TAC
4198 THEN DISCH_TAC
4199 THEN ASM_REWRITE_TAC[]
4200 THEN REDUCE_VECTOR_TAC;(*4*)
4201
4202 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
4203 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
4204 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
4205 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
4206 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
4207 THEN STRIP_TAC
4208 THEN MP_TAC(SET_RULE`(t2 * (&1 - a)) % u = (t1' - t1) % x + (t2' - t2 * a) % w:real^3 ==> (inv (t2 * (&1 - a)))%((t2 * (&1 - a)) % u ) = (inv (t2 * (&1 - a)))%((t1' - t1) % x + (t2' - t2 * a) % w)`)
4209 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4210 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4211 THEN REDUCE_VECTOR_TAC
4212 THEN STRIP_TAC
4213 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
4214 THENL(*5*)[
4215 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4216 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
4217 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
4218 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
4219 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];(*5*)
4220
4221 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
4222 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4223 THEN STRIP_TAC
4224 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]];(*3*)
4225
4226
4227 SUBGOAL_THEN`(aff_ge {x} {va} INTER aff_ge {x} {v1, w1:real^3}) INTER ballnorm_fan x={}`
4228 ASSUME_TAC
4229 THENL(*4*)[
4230 ASM_REWRITE_TAC[INTER;ballnorm_fan;EXTENSION;IN_ELIM_THM;]
4231 THEN REDUCE_VECTOR_TAC
4232 THEN GEN_TAC THEN EQ_TAC
4233 THENL(*5*)[
4234 STRIP_TAC THEN POP_ASSUM MP_TAC
4235 THEN MP_TAC(SET_RULE`x' IN aff_ge {x} {va} /\ x' IN aff_ge {x} {v1, w1}
4236 /\ aff_ge {x} {va} INTER aff_ge {x} {v1, w1} SUBSET {x}
4237 ==> x' IN {x:real^3}`)
4238 THEN REWRITE_TAC[IN_SING]
4239 THEN RESA_TAC
4240 THEN ASM_REWRITE_TAC[DIST_REFL;]
4241 THEN REAL_ARITH_TAC;(*5*)
4242 SET_TAC[]];
4243 ASM_TAC THEN SET_TAC[]]]]]);;
4244
4245
4246
4247
4248 let lemma_proof0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4249
4250 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(u IN {v1,w1})
4251 /\ &0 <a /\ a< &1 
4252 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4253 REPEAT STRIP_TAC 
4254 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4255 ` (v1:real^3)`]
4256 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4257 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4258 THEN ABBREV_TAC`va=(&1 - a) % u + a % w:real^3`
4259 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4260 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;`a:real`]
4261 THEN MRESA_TAC th3[` (x:real^3)`;`(va:real^3)`;`(u:real^3)`]
4262 THEN MRESA_TAC aff_ge1_1_subset_aff_ge[`x:real^3`;`u:real^3`;`w:real^3`;`va:real^3`]
4263 THEN FIND_ASSUM(MP_TAC)`FAN(x:real^3,V,E)`
4264 THEN REWRITE_TAC[FAN;fan7] 
4265 THEN STRIP_TAC
4266 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),(w:real^3)}`;`{(v1:real^3),(w1:real^3)}`]th))
4267                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4268 THEN MP_TAC(SET_RULE`~(u IN {v1,w1})==> {u,w} INTER {v1,w1} SUBSET {w:real^3}`)
4269 THEN RESA_TAC
4270 THEN STRIP_TAC
4271 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER {v1, w1:real^3}`; `{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {u} = {}<=> ~(x=u:real^3)`]
4272 THEN POP_ASSUM MP_TAC
4273 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)])
4274 THEN REMOVE_ASSUM_TAC
4275 THEN DISCH_TAC
4276 THEN MP_TAC(SET_RULE`aff_ge {x} {va} SUBSET aff_ge {x} {u, w}/\
4277 aff_ge {x} {u, w} INTER aff_ge {x} {v1, w1} SUBSET aff_ge {x} {w}
4278 ==> aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w}`)
4279 THEN RESA_TAC
4280 THEN MATCH_MP_TAC(SET_RULE` aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET  aff_ge {x} {va} INTER aff_ge {x} {w} /\ aff_ge {x} {va} INTER aff_ge {x} {w} SUBSET {x:real^3} ==>aff_ge {x} {va:real^3} INTER aff_ge {x} {v1, w1} SUBSET {x}`)
4281 THEN ASM_REWRITE_TAC[]
4282 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`va:real^3`;][IN_ELIM_THM;SUBSET;INTER]
4283 THEN MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`w:real^3`;][IN_ELIM_THM;SUBSET;IN_SING]
4284 THEN REPEAT STRIP_TAC
4285 THEN POP_ASSUM MP_TAC
4286 THEN ASM_REWRITE_TAC[]
4287 THEN EXPAND_TAC"va"
4288 THEN REWRITE_TAC[VECTOR_ARITH`t1 % x + t2 % ((&1 - a) % u + a % w) = t1' % x + t2' % w
4289 <=> (t2 *(&1 - a)) % u = (t1'-t1) % x + (t2'- t2*a) % w:real^3`]
4290 THEN MP_TAC(REAL_ARITH`&0<= t2==> t2= &0 \/ &0 < t2:real`)
4291 THEN RES_TAC
4292 THENL(*4*)[
4293 FIND_ASSUM MP_TAC`t1+ t2:real= &1`
4294 THEN POP_ASSUM (fun th-> REWRITE_TAC[th])
4295 THEN REDUCE_ARITH_TAC
4296 THEN DISCH_TAC
4297 THEN ASM_REWRITE_TAC[]
4298 THEN REDUCE_VECTOR_TAC;
4299 MP_TAC(REAL_ARITH`a< &1==> &0< &1-a:real`) THEN RESA_TAC
4300 THEN MRESA_TAC REAL_LT_MUL[`t2:real`;`&1- a:real`]
4301 THEN MP_TAC(REAL_ARITH` &0< t2*(&1-a)==> ~(t2*(&1-a):real= &0)`) THEN RESA_TAC
4302 THEN MRESA1_TAC REAL_MUL_LINV`t2*(&1-a):real`
4303 THEN MRESA1_TAC REAL_LT_INV`t2*(&1-a):real`
4304 THEN STRIP_TAC
4305 THEN MP_TAC(SET_RULE`(t2 * (&1 - a)) % u = (t1' - t1) % x + (t2' - t2 * a) % w:real^3 ==> (inv (t2 * (&1 - a)))%((t2 * (&1 - a)) % u ) = (inv (t2 * (&1 - a)))%((t1' - t1) % x + (t2' - t2 * a) % w)`)
4306 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4307 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`; VECTOR_ARITH`A%(B+C)=A%B+A%C`]
4308 THEN REDUCE_VECTOR_TAC
4309 THEN STRIP_TAC
4310 THEN SUBGOAL_THEN`u IN aff {x,w:real^3}`ASSUME_TAC
4311 THENL(*5*)[
4312 REWRITE_TAC[aff;AFFINE_HULL_2;IN_ELIM_THM]
4313 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t1' - t1)):real`
4314 THEN EXISTS_TAC`(inv (t2 * (&1 - a)) * (t2' - t2 * a)):real`
4315 THEN ASM_REWRITE_TAC[REAL_ARITH`inv (t2 * (&1 - a)) * (t1' - t1) + inv (t2 * (&1 - a)) * (t2' - t2 * a)
4316 = inv (t2 * (&1 - a)) * ((t1' +t2')- (t1+t2)+ t2*(&1 - a)):real`; REAL_ARITH`&1- &1 + A= A`];
4317 FIND_ASSUM MP_TAC `~collinear {x, u, w:real^3}`
4318 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4319 THEN STRIP_TAC
4320 THEN MRESA_TAC th3[`x:real^3`;`w:real^3`;`u:real^3`]]]);;
4321
4322
4323 let lemma_proof1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4324
4325 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~(w IN {v1,w1})
4326 /\ &0 <a /\ a< &1 
4327 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4328
4329 REPEAT STRIP_TAC
4330 THEN MRESAL_TAC lemma_proof0_fan[`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(w:real^3)`;` (u:real^3)`;`(v1:real^3)`;`(w1:real^3)`;`&1 -a:real`][VECTOR_ARITH`(&1 - (&1 - a)) % w + (&1 - a) % u=(&1 - a) % u + a % w`;]
4331 THEN POP_ASSUM MATCH_MP_TAC
4332 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4333 THEN ASM_REWRITE_TAC[] THEN ASM_TAC THEN REAL_ARITH_TAC);;
4334
4335 let lemma_proof_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4336
4337 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
4338 /\ &0 <a /\ a< &1 
4339 ==> (aff_ge {x} {(&1 - a) % u + a % w} INTER aff_ge {x} {v1, w1:real^3}) SUBSET {x}`,
4340
4341 REPEAT STRIP_TAC
4342 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
4343 ` (v1:real^3)`]
4344 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4345 THEN MP_TAC(SET_RULE` ~(u=w) /\ ~(v1=w1:real^3)==> ({u,w} = {v1,w1}<=> {u,w} SUBSET {v1,w1})`)
4346 THEN ASM_REWRITE_TAC[SET_RULE`~({u,w} SUBSET {v1,w1})<=> ~(w IN {v1,w1})\/ ~( u IN {v1,w1})`]
4347 THEN ASM_TAC THEN SET_TAC[lemma_proof0_fan;lemma_proof1_fan]);;
4348
4349
4350
4351
4352 let remark012_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3)  a:real.
4353 FAN(x,V,E)  /\ {u,w} IN E 
4354 /\ &0 <a /\ a< &1 
4355 ==> ~((&1 - a) % u + a % w IN V)`,
4356 REPEAT STRIP_TAC
4357 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4358 THEN ABBREV_TAC`v1=(&1 - a) % u + a % w:real^3`
4359 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4360 THEN REWRITE_TAC[FAN;fan2] 
4361 THEN STRIP_TAC
4362 THEN REMOVE_ASSUM_TAC
4363 THEN POP_ASSUM MP_TAC
4364 THEN MP_TAC(SET_RULE`~(x IN V) /\ v1 IN V==> ~(x=(v1:real^3))`) 
4365 THEN RESA_TAC
4366 THEN MRESA_TAC properties_inside_collinear_fan[`(x:real^3)`;`(u:real^3)`;`(w:real^3)`;`a:real`]
4367 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(w:real^3)`]
4368 THEN MRESA_TAC th3[`(x:real^3)`;`((&1-a)%u+ a%w:real^3)`;`(u:real^3)`]
4369 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {u}==> ~(v1=u:real^3)`) THEN RESA_TAC
4370 THEN MP_TAC(SET_RULE`DISJOINT {x, v1} {w}==> ~(v1=w:real^3)`) THEN RESA_TAC
4371 THEN MP_TAC(SET_RULE` ~(v1=w:real^3) /\ ~(v1=u:real^3) ==> {u,w} INTER {v1}={}`) THEN RESA_TAC
4372 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4373 THEN REWRITE_TAC[FAN;fan7] 
4374 THEN STRIP_TAC
4375 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`({v1:real^3})`]th))
4376                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4377 THEN MP_TAC(SET_RULE`(v1:real^3) IN V==>(?v'. v' IN V /\ {v1} = {v'})`)
4378 THEN REDA_TAC
4379 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4380 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`v1:real^3`]
4381 THEN MRESA_TAC aff_ge_eq_aff_gt_union_aff_ge[`(x:real^3)`;`((&1 - a) % u + a % w:real^3)`;` (w:real^3)`]
4382 THEN MP_TAC(SET_RULE`aff_ge {x} {v1, w} SUBSET aff_ge {x} {u, w}/\ aff_ge {x} {v1, w} =
4383       aff_gt {x} {v1, w} UNION aff_ge {x} {v1} UNION aff_ge {x} {w}
4384 ==> aff_ge {x} {u, w} INTER aff_ge {x} {v1}=aff_ge {x} {v1:real^3}`)
4385 THEN RESA_TAC
4386 THEN STRIP_TAC
4387 THEN SUBGOAL_THEN`v1 IN aff_ge {x} {v1:real^3}` ASSUME_TAC
4388 THENL[MRESAL_TAC  AFF_GE_1_1[`x:real^3`;`v1:real^3`;][IN_ELIM_THM]
4389 THEN EXISTS_TAC`&0` THEN EXISTS_TAC`&1` THEN REDUCE_VECTOR_TAC THEN REAL_ARITH_TAC;
4390 POP_ASSUM MP_TAC
4391 THEN ASM_REWRITE_TAC[AFF_GE_EQ_AFFINE_HULL;AFFINE_HULL_1;SUBSET;IN_SING;IN_ELIM_THM]
4392 THEN STRIP_TAC
4393 THEN POP_ASSUM MP_TAC
4394 THEN ASM_REWRITE_TAC[VECTOR_ARITH`&1 %A=A`]]);;
4395
4396
4397 let remark01_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (u:real^3) (w:real^3) (v1:real^3) (w1:real^3) a:real.
4398 FAN(x,V,E)  /\ {v1,w1} IN E /\ {u,w} IN E /\ ~({u,w} = {v1,w1})
4399 /\ &0 <a /\ a< &1 
4400 ==> ~((&1 - a) % u + a % w IN {v1, w1:real^3})`,
4401 REPEAT STRIP_TAC
4402 THEN POP_ASSUM MP_TAC
4403 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w1:real^3`;`v1:real^3`]
4404 THEN FIND_ASSUM MP_TAC `{v1,w1:real^3} IN E`
4405 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B}={B,A}`]
4406 THEN STRIP_TAC
4407 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` v1:real^3`;`w1:real^3`]
4408 THEN MRESA_TAC remark012_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` u:real^3`;`w:real^3`;`a:real`]
4409 THEN ASM_TAC THEN SET_TAC[]);;
4410
4411
4412 let remark0_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) e:real^3->bool.
4413 FAN(x,V,E)/\ e IN E 
4414 ==> {x} INTER e={}`,
4415 REPEAT STRIP_TAC THEN POP_ASSUM MP_TAC THEN DISCH_THEN(LABEL_TAC"A") THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4416 THEN RESA_TAC
4417 THEN REMOVE_THEN "A" MP_TAC
4418 THEN RESA_TAC
4419 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`v:real^3`]
4420 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
4421 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
4422 THEN POP_ASSUM MP_TAC THEN SET_TAC[]);;
4423
4424
4425
4426 let case2_proof_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
4427 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
4428 /\ &0 < azim x u w v /\ azim x u w v < pi
4429 /\ &0<a /\ a< &1
4430 /\ (&1-a)%u+ a%w=ua
4431 /\ ~(ua=w)
4432 /\ ~collinear {x,w,ua}
4433 /\ (aff_gt {x} {v, ua} INTER
4434       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
4435 ==> (!e. e IN (E DELETE {u,w}) ==> aff_ge {x} e INTER aff_ge {x} {ua,w} = aff_ge {x} (e INTER {ua,w}))`,
4436 REPEAT STRIP_TAC
4437 THEN FIND_ASSUM MP_TAC `~collinear {x,w,ua:real^3}`
4438 THEN ONCE_REWRITE_TAC[SET_RULE`{A,B,C}={A,C,B}`]
4439 THEN DISCH_TAC
4440 THEN MRESA_TAC remark1_fan[`x:real^3 `;`(V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` w:real^3`;`u:real^3`]
4441 THEN FIND_ASSUM MP_TAC `e IN E DELETE {u,w:real^3}`
4442 THEN REWRITE_TAC[DELETE;IN_ELIM_THM;SET_RULE`~(e={u,w:real^3})<=> ~({u,w:real^3}=e)`]
4443 THEN DISCH_TAC
4444 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4445 THEN RESA_TAC
4446 THEN MRESA_TAC lemma_proof_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`(w:real^3)`;`(v':real^3)`;`(w':real^3)`;`a:real`]
4447 THEN MRESA_TAC remark01_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (u:real^3)`;`(w:real^3)`;`(v':real^3)`;`(w':real^3)`;`a:real`]
4448 THEN POP_ASSUM MP_TAC
4449 THEN POP_ASSUM MP_TAC
4450 THEN POP_ASSUM(fun th-> ASM_REWRITE_TAC[SYM(th)])
4451 THEN RESA_TAC THEN RESA_TAC
4452 THEN MP_TAC(SET_RULE`~(ua IN e)==> e INTER {ua,w:real^3} SUBSET {w}`)
4453 THEN RESA_TAC
4454 THEN MRESA_TAC properties1_inside_fan[`(x:real^3)`;` (u:real^3)`;`(w:real^3)`;]
4455 THEN MRESA_TAC aff_ge1_subset_aff_ge[`x:real^3`;`u:real^3`; `w:real^3`;`ua:real^3`]
4456 THEN MRESA_TAC th3[` (x:real^3)`;`(ua:real^3)`;`(w:real^3)`]
4457 THEN MRESA_TAC remark0_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`e:real^3->bool`]
4458 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`e INTER { ua,w:real^3}`;`e:real^3->bool`][DISJOINT;SET_RULE` e INTER {ua,w} SUBSET e`;]
4459 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`e INTER { ua,w:real^3}`;`{ua,w:real^3}`][DISJOINT;SET_RULE` e INTER {ua,w} SUBSET {ua,w:real^3}`;]
4460 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{}:real^3->bool`;`{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w}={} <=> ~(x=w)`;SET_RULE` {} SUBSET {w:real^3}`;]
4461 THEN MATCH_MP_TAC(SET_RULE`C SUBSET A /\ C SUBSET B /\ A INTER B SUBSET C==>A INTER B= C`)
4462 THEN ASM_REWRITE_TAC[]
4463 THEN FIND_ASSUM MP_TAC `FAN(x:real^3,V,E)`
4464 THEN REWRITE_TAC[FAN;fan7] 
4465 THEN STRIP_TAC
4466 THEN POP_ASSUM(fun th-> MP_TAC(ISPECL[`{(u:real^3),w}`;`(e:real^3->bool)`]th))
4467                    THEN ASM_REWRITE_TAC[UNION; IN_ELIM_THM;]
4468 THEN DISJ_CASES_TAC(SET_RULE`{u,w:real^3} INTER e= {u,w} \/  ~({u,w} INTER e= {u,w})`)
4469 THENL[MP_TAC(SET_RULE`{u,w} INTER e= {u,w:real^3}==> {u,w} SUBSET e`)
4470 THEN RESA_TAC
4471 THEN POP_ASSUM MP_TAC
4472 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
4473 THEN RESA_TAC
4474 THEN STRIP_TAC
4475 THEN MP_TAC(SET_RULE` ~(u=w:real^3) ==> ({u,w} = {v',w'}<=> {u,w} SUBSET {v',w'})`)
4476 THEN RESA_TAC
4477 THEN ASM_TAC THEN SET_TAC[];
4478
4479 MP_TAC(SET_RULE` e INTER {ua,w:real^3} SUBSET {w}==>  e INTER { ua,w:real^3} = {w} \/ e INTER { ua,w:real^3}= {}`)
4480 THEN RESA_TAC
4481
4482 THENL[
4483 MP_TAC(SET_RULE`e INTER {ua, w} = {w:real^3}==> w IN e`)
4484 THEN RESA_TAC
4485 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
4486 THEN RESA_TAC
4487 THEN MP_TAC(SET_RULE`{u, w} INTER e PSUBSET {u, w:real^3} /\ w IN e /\ ~(u=w) ==>   {u, w} INTER e SUBSET {w} `)
4488 THEN RESA_TAC
4489 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER (e:real^3->bool)`;`{w:real^3}`][DISJOINT;SET_RULE`{x} INTER {w}={} <=> ~(x=w)`;SET_RULE` {} SUBSET {w:real^3}`;]
4490 THEN POP_ASSUM MP_TAC
4491 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
4492 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4493 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4494 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4495 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
4496  THEN SET_TAC[];
4497
4498 MP_TAC(SET_RULE`e INTER {ua, w:real^3} = {}==> ~(w IN e)`)
4499 THEN RESA_TAC
4500 THEN MP_TAC(SET_RULE`~({u, w} INTER e = {u, w:real^3}) ==> {u, w} INTER e PSUBSET {u, w} `)
4501 THEN RESA_TAC
4502 THEN MP_TAC(SET_RULE`{u, w} INTER e PSUBSET {u, w:real^3} /\ ~(w IN e) ==>   {u, w} INTER e SUBSET {u} `)
4503 THEN RESA_TAC
4504 THEN MRESAL_TAC AFF_GE_MONO_RIGHT [`{x:real^3}`;`{u, w} INTER (e:real^3->bool)`;`{u:real^3}`][DISJOINT;SET_RULE`{x} INTER {u}={} <=> ~(x=u)`;SET_RULE` {} SUBSET {w:real^3}`;]
4505 THEN STRIP_TAC
4506 THEN SUBGOAL_THEN `aff_ge {x} e INTER aff_ge {x} {ua, w} SUBSET aff_ge {x} {u} INTER aff_ge {x} {ua, w:real^3}`ASSUME_TAC
4507 THENL[
4508 POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC
4509 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
4510 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4511 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4512 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
4513 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  
4514 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC THEN SET_TAC[];
4515 MRESA_TAC properties_inside_collinear1_fan[`x:real^3`;`u:real^3`;`w:real^3`]
4516 THEN POP_ASSUM MP_TAC
4517 THEN POP_ASSUM MP_TAC
4518 THEN SET_TAC[]]]]);;
4519
4520
4521
4522
4523
4524
4525
4526 let inequality1_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4527 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4528 /\ &0<a /\ a < &1 
4529 ==>
4530 ?(h:real). a <h /\  h<= &1
4531 /\ (!t:real. a <= t /\  t<h
4532 ==> (!(s:real). &0 <= s /\ s <= &1 
4533 ==> s * inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))* norm( ((&1-a)%u + a %w)-((&1-t)%u+ t%w))< d  ))`,
4534 REPEAT STRIP_TAC
4535 THEN REWRITE_TAC[VECTOR_ARITH`((&1-a)%u + a %w)-((&1-t)%u+ t%w)=(t-a)%(u-w):real^3`;NORM_MUL]
4536 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
4537 THEN RESA_TAC
4538 THEN POP_ASSUM MP_TAC
4539 THEN DISCH_THEN (LABEL_TAC"A")
4540 THEN EXISTS_TAC`min (a+(h:real)*(d:real) *inv(norm(u-w:real^3))) (&1)`
4541 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4542 ` (u:real^3)`] remark1_fan)
4543 THEN RESA_TAC 
4544 THEN  MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_gl_zero_fan)
4545 THEN RESA_TAC 
4546 THEN MP_TAC(ISPECL[`(h:real)*(d:real)`;`inv(norm(u-w:real^3))`] REAL_LT_MUL)
4547 THEN RESA_TAC
4548 THEN STRIP_TAC
4549 THENL[
4550 MP_TAC(ISPECL[`h:real`;`d:real`] REAL_LT_MUL)
4551 THEN RESA_TAC
4552 THEN ASM_TAC
4553 THEN REAL_ARITH_TAC;
4554 STRIP_TAC
4555 THENL[
4556 REAL_ARITH_TAC;
4557 REPEAT STRIP_TAC
4558 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
4559 THEN RESA_TAC
4560 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
4561 THEN RESA_TAC
4562 THEN MP_TAC(REAL_ARITH`(t:real)< min (a+(h:real) * (d:real) * inv (norm (u - w:real^3))) (&1)/\ min (a+h * d * inv (norm (u - w))) (&1)<= &1 /\ &0 <a /\ a <= t ==> &0 <= t /\ t <= &1 /\ &0 <= t-a /\ t - a<= &1/\ (t:real)-a < (h * d * inv (norm (u - w:real^3)))`)
4563 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * d * inv (norm (u - w))) (&1)<= &1`]
4564 THEN STRIP_TAC
4565 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4566 THEN RESA_TAC
4567 THEN REMOVE_THEN "A"(fun th -> MP_TAC(ISPEC`(&1-s)%v+s%((&1-t)%u+ t%w):real^3`th))
4568 THEN RESA_TAC
4569 THEN MP_TAC(ISPECL[`h:real`;`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`]REAL_LT_INV2)
4570 THEN RESA_TAC
4571 THEN MP_TAC(REAL_ARITH`&0 <h /\ (h:real)< norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)==> &0 <= norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`)
4572 THEN RESA_TAC
4573 THEN MP_TAC(ISPEC`norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)`REAL_LE_INV)
4574 THEN RESA_TAC
4575 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
4576 THEN RESP_TAC
4577 THEN MP_TAC(ISPECL[`inv(norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;
4578 `inv(h:real)`;`t:real-a`;`(h * d * inv (norm (u - w:real^3)))`;]REAL_LT_MUL2)
4579 THEN RESA_TAC
4580 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
4581 THEN RESA_TAC
4582 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
4583 THEN RESA_TAC
4584 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
4585 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
4586 THEN RESA_TAC
4587 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3)) * (t:real-a)`;`inv (h:real) * h * d * inv (norm (u - w:real^3))`;`norm (u - w:real^3)`]REAL_LT_RMUL)
4588 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B*C*D)*E=(A*B)*C*(D*E)`]
4589 THEN REDUCE_ARITH_TAC
4590 THEN STRIP_TAC
4591 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))`;`(t:real-a)`;] REAL_LE_MUL)
4592 THEN RESA_TAC
4593 THEN MP_TAC(ISPECL[`inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t-a:real)`;`norm(u-w:real^3)`] REAL_LE_MUL)
4594 THEN RESA_TAC
4595 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1) \/ ~((s:real)= &1)`)
4596 THENL[
4597 POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
4598 THEN REDUCE_ARITH_TAC
4599 THEN ASM_REWRITE_TAC[REAL_ARITH`A*B*C=(A*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`];
4600 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
4601 THEN RESA_TAC
4602 THEN MP_TAC(ISPECL[`s:real`;`&1`;`(inv (norm (((&1 - s) % v + s % ((&1 - t) % u + t % w)) - x:real^3))*(t-a:real)) * norm(u-w:real^3)`;
4603 `d:real`]REAL_LT_MUL2)
4604 THEN REDUCE_ARITH_TAC
4605 THEN RESA_TAC
4606 THEN ASM_REWRITE_TAC[REAL_ARITH`A*d*B*C=A*(d*B)*C:real`;VECTOR_ARITH`(&1 - s) % v + s % ((&1 - t) % u + t % w) - x=((&1 - s) % v + s % ((&1 - t) % u + t % w))- x :real^3`]]]]);;
4607
4608
4609
4610 let bounded_convex1_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) w:real^3.
4611 FAN(x,V,E) /\ {v,u} IN E /\ {u,w} IN E
4612 ==> ?(h:real). &0< h /\ (!(y:real^3).  y IN convex hull{v,u,w} ==> norm(y-x)<h )`,
4613 REPEAT STRIP_TAC
4614 THEN SUBGOAL_THEN `FINITE {(v:real^3),(u:real^3),w}` ASSUME_TAC
4615 THENL(*1*)[ SIMP_TAC[HAS_SIZE; CARD_CLAUSES; FINITE_INSERT; FINITE_EMPTY;
4616                  IN_INSERT; NOT_IN_EMPTY];
4617 MP_TAC(ISPEC`{(v:real^3),(u:real^3),w}`FINITE_IMP_COMPACT_CONVEX_HULL)
4618 THEN POP_ASSUM (fun th-> REWRITE_TAC[th;])
4619 THEN DISCH_TAC
4620 THEN ASSUME_TAC(ISPEC`x:real^3` norm_origin_fan )
4621 THEN ASSUME_TAC(SET_RULE`convex hull {(v:real^3), u,w} SUBSET (:real^3)`)
4622 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`(:real^3)`;`convex hull {(v:real^3),(u:real^3),w}`]CONTINUOUS_ON_SUBSET)
4623 THEN RESA_TAC
4624 THEN MP_TAC(ISPECL[`(\(y:real^3). lift(norm(y-x:real^3)))`;`convex hull {(v:real^3),(u:real^3),w}`]COMPACT_CONTINUOUS_IMAGE)
4625 THEN RESA_TAC
4626 THEN POP_ASSUM MP_TAC
4627 THEN REWRITE_TAC[COMPACT_EQ_BOUNDED_CLOSED;bounded;IMAGE;IN_ELIM_THM]
4628 THEN ONCE_REWRITE_TAC[TAUT`A/\B<=>B/\A`;]
4629 THEN STRIP_TAC
4630 THEN POP_ASSUM MP_TAC
4631 THEN DISCH_THEN(LABEL_TAC"A")
4632 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
4633         lift (norm (v - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
4634 THENL[
4635 EXISTS_TAC`v:real^3`
4636 THEN SIMP_TAC[CONVEX_HULL_3; IN_ELIM_THM;]
4637 THEN EXISTS_TAC`&1`
4638 THEN EXISTS_TAC`&0`
4639 THEN EXISTS_TAC`&0`
4640 THEN REDUCE_VECTOR_TAC
4641 THEN REAL_ARITH_TAC;
4642 SUBGOAL_THEN `&0< (a:real)` ASSUME_TAC
4643 THENL[
4644 REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`lift (norm (v - (x:real^3)))`th))
4645 THEN RESA_TAC
4646 THEN POP_ASSUM MP_TAC
4647 THEN REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
4648 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4649 ` (v:real^3)`] remark1_fan)
4650 THEN RESA_TAC 
4651 THEN MP_TAC(ISPECL[`v:real^3`;`x:real^3`]imp_norm_not_zero_fan)
4652 THEN RESA_TAC
4653 THEN ASSUME_TAC(ISPEC`v-x:real^3`NORM_POS_LE)
4654 THEN MP_TAC(REAL_ARITH`~(&0 =norm(v-x:real^3)) /\ &0 <= norm(v-x:real^3)==> &0 <norm(v-x:real^3)`)
4655 THEN RESA_TAC
4656 THEN POP_ASSUM MP_TAC
4657 THEN REAL_ARITH_TAC;
4658 EXISTS_TAC`&2 * a:real`
4659 THEN STRIP_TAC
4660 THENL[
4661 REPEAT STRIP_TAC
4662 THEN SUBGOAL_THEN `(?x':real^3. x' IN convex hull {v, u,w} /\
4663         lift (norm (y - x:real^3)) = lift (norm (x' - x)))`ASSUME_TAC
4664 THENL[
4665 EXISTS_TAC`y:real^3`
4666 THEN ASM_SIMP_TAC[];
4667 REMOVE_THEN "A"(fun th-> MP_TAC(ISPEC`lift (norm (y - x:real^3))`th)) 
4668 THEN ASM_REWRITE_TAC[NORM_LIFT;REAL_ABS_NORM ]
4669 THEN ASM_TAC
4670 THEN REAL_ARITH_TAC];
4671
4672 ASM_TAC
4673 THEN REAL_ARITH_TAC]]]]);;
4674
4675
4676 let inequaility2_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4677 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4678 /\ &0 <a /\ a< &1
4679 ==>
4680 ?(h:real). a <h /\  h<= &1
4681 /\ (!t:real. a <= t /\  t<h
4682 ==> (!(s:real). &0 <= s /\ s <= &1 
4683 ==> (norm(inv(norm((&1-s)%v+s%((&1-a)%u+ a%w)-x))%((&1-s)%v+s%((&1-a)%u+ a%w)-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-a)%u+ a%w)-x)))< d  ))`,
4684
4685 REWRITE_TAC[VECTOR_ARITH`A%B-C%B=(A-C)%B`;NORM_MUL]
4686 THEN REPEAT STRIP_TAC
4687 THEN REWRITE_TAC[VECTOR_ARITH`u-((&1-t)%u+ t%w)=t%(u-w):real^3`;NORM_MUL]
4688 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3)`;` (u:real^3)`;` (w:real^3)`]separate_point_convex_fan)
4689 THEN RESA_TAC
4690 THEN POP_ASSUM MP_TAC
4691 THEN DISCH_THEN(LABEL_TAC"A")
4692 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
4693 THEN RESA_TAC
4694 THEN POP_ASSUM MP_TAC
4695 THEN DISCH_THEN(LABEL_TAC"B")
4696 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`]bounded_convex1_fan)
4697 THEN RESA_TAC
4698 THEN POP_ASSUM MP_TAC
4699 THEN DISCH_THEN(LABEL_TAC"C")
4700 THEN EXISTS_TAC`min (a+h*h*(inv (h'))* inv(norm(u-w:real^3))*d:real) (&1)`
4701 THEN MP_TAC(ISPECL[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4702 ` (u:real^3)`] remark1_fan)
4703 THEN RESA_TAC 
4704 THEN MP_TAC(ISPECL[`u:real^3`;`w:real^3`]imp_norm_not_zero_fan)
4705 THEN RESA_TAC
4706 THEN ASSUME_TAC(ISPEC`u-w:real^3`NORM_POS_LE)
4707 THEN MP_TAC(REAL_ARITH`~(&0 =norm(u-w:real^3)) /\ &0 <= norm(u-w:real^3)==> &0 <norm(u-w:real^3)`)
4708 THEN RESA_TAC
4709 THEN MP_TAC(ISPEC`(norm(u-w:real^3))`REAL_MUL_LINV)
4710 THEN RESA_TAC
4711 THEN MP_TAC(REAL_ARITH`&0 <(h:real)==> ~(h= &0)`)
4712 THEN RESA_TAC
4713 THEN MP_TAC(ISPEC`(h:real)`REAL_MUL_LINV)
4714 THEN RESA_TAC
4715 THEN MP_TAC(REAL_ARITH`&0 <(h':real)==> ~(h'= &0)`)
4716 THEN RESA_TAC
4717 THEN MP_TAC(ISPEC`(h':real)`REAL_MUL_LINV)
4718 THEN RESA_TAC
4719 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LE_INV)
4720 THEN RESA_TAC
4721 THEN MP_TAC(ISPEC`norm (u-w:real^3)`REAL_LT_INV)
4722 THEN RESA_TAC
4723 THEN MP_TAC(ISPEC`(h:real)`REAL_LT_INV)
4724 THEN RESA_TAC
4725 THEN MP_TAC(REAL_ARITH`&0 <inv (h:real)==> &0 <= inv(h)`)
4726 THEN RESA_TAC
4727 THEN MP_TAC(ISPEC`(h':real)`REAL_LT_INV)
4728 THEN RESA_TAC
4729 THEN MP_TAC(REAL_ARITH`&0 <inv (h':real)==> &0 <= inv(h')`)
4730 THEN RESA_TAC
4731 THEN MP_TAC(REAL_ARITH`&0 <a /\ a< &1==> &0 <= a/\ a <= &1`)
4732 THEN RESA_TAC
4733 THEN STRIP_TAC
4734 THENL(*1*)[
4735 MP_TAC(ISPECL[`(h:real)`;`inv (h':real) `]REAL_LT_MUL)
4736 THEN RESA_TAC
4737 THEN MP_TAC(ISPECL[`(h:real)`;`(h:real)*inv (h':real) `]REAL_LT_MUL)
4738 THEN RESA_TAC
4739 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real)`;`inv(norm(u-w:real^3))`]REAL_LT_MUL)
4740 THEN RESA_TAC
4741 THEN MP_TAC(ISPECL[`(h:real)*(h:real)*inv (h':real) *inv(norm(u-w:real^3))`;`d:real`]REAL_LT_MUL)
4742 THEN RESA_TAC
4743 THEN POP_ASSUM MP_TAC
4744 THEN POP_ASSUM MP_TAC
4745 THEN FIND_ASSUM MP_TAC`a:real < &1 `
4746 THEN REAL_ARITH_TAC;(*1*)
4747
4748 STRIP_TAC
4749 THENL(*2*)[
4750 REAL_ARITH_TAC;(*2*)
4751 REPEAT STRIP_TAC
4752 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`]expansion_convex_fan)
4753 THEN RESA_TAC
4754 THEN REMOVE_THEN "C"(fun th->MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`th))
4755 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4756 THEN RESA_TAC
4757 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)` ASSUME_TAC
4758 THENL(*3*)[
4759 ASM_TAC THEN SET_TAC[];(*3*)
4760 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
4761 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4762 THEN RESA_TAC
4763 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
4764 THEN MP_TAC(REAL_ARITH`~(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)= &0) /\ &0 <= norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)==> &0 <norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`)
4765 THEN RESA_TAC
4766 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
4767 THEN RESA_TAC
4768 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
4769 THEN RESA_TAC
4770 THEN MP_TAC(REAL_ARITH`(t:real)< min (a+h * h * inv h' * inv (norm (u - w)) * d) (&1)/\ min (a+h * h * inv h' * inv (norm (u - w)) * d) (&1)<= &1 /\ &0<a /\ a<=t ==> &0<= t-a /\ &0<= t /\ t<= &1/\ (t:real)-a< (h * h * inv h' * inv (norm (u - w:real^3)) * d) `)
4771 THEN ASM_REWRITE_TAC[REAL_ARITH`min (a+h * h * inv h' * inv (norm (u - w:real^3)) * d) (&1)<= &1`]
4772 THEN STRIP_TAC
4773 THEN MP_TAC(ISPECL[`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3) `;
4774 `(h':real)`;`t-a:real`;`(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4775 THEN RESA_TAC
4776 THEN ASM_REWRITE_TAC[REAL_ARITH`&0<= &0/\ &0<= &1`]
4777 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`((&1 - s) % v + s % ((&1 - a) % u + a % w):real^3)`th))
4778 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4779 THEN ASM_REWRITE_TAC[]
4780 THEN DISCH_TAC
4781 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`]REAL_LT_INV2)
4782 THEN RESA_TAC
4783 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`;`t-a:real`]REAL_LE_MUL)
4784 THEN RESA_TAC
4785 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3))`;`inv(h:real)`;`norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)*(t:real-a)`;`(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4786 THEN RESA_TAC
4787 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4788 THEN ASM_REWRITE_TAC[]
4789 THEN DISCH_TAC
4790 THEN USE_THEN "A" (fun th-> MP_TAC(ISPEC`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`th))
4791 THEN POP_ASSUM(fun th-> REWRITE_TAC[th; VECTOR_ARITH`(A+B)-C=A+B-C:real^3`])
4792 THEN DISCH_TAC
4793 THEN MP_TAC(ISPECL[`h:real`;`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_LT_INV2)
4794 THEN RESA_TAC
4795 THEN MP_TAC(ISPECL[`inv(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`;`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)*(t-a:real)`]REAL_LE_MUL)
4796 THEN RESA_TAC
4797 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
4798 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
4799 THEN RESA_TAC
4800 THEN MP_TAC(ISPECL[`inv(norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3))`;`inv(h:real)`;`inv(norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)*(t-a:real)`;`inv(h:real)*(h':real)*(h * h * inv h' * inv (norm (u - w:real^3)) * d)`;]REAL_LT_MUL2)
4801 THEN RESA_TAC
4802 THEN MP_TAC(ISPECL[`norm (u - w:real^3)`;
4803 `inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)) *
4804       inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) *
4805       norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) *
4806       (t-a)`;`inv h * inv h * h' * h * h * inv h' * inv (norm (u - w:real^3)) * d`;]REAL_LT_LMUL)
4807 THEN RESA_TAC
4808 THEN POP_ASSUM MP_TAC
4809 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(B*C)*E*A*D`]
4810 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
4811 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*E*(C*D)`]
4812 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D=(A*B)*C*D`]
4813 THEN ONCE_REWRITE_TAC[REAL_ARITH`A*B*C*D*E=(A*B)*(C*D)*E`]
4814 THEN ONCE_REWRITE_TAC[REAL_ARITH`(A*B*C)*D*E=A*B*(C*D)*E`]
4815 THEN ASM_REWRITE_TAC[]
4816 THEN REDUCE_ARITH_TAC
4817 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B*C)*D=A*B*(C*D)`]
4818 THEN REDUCE_ARITH_TAC
4819 THEN ASM_REWRITE_TAC[REAL_ARITH`((A*B)*C*D)*E=(A*C)*(B*D)*E`]
4820 THEN REDUCE_ARITH_TAC
4821 THEN REWRITE_TAC[REAL_ARITH`((A*B)*C)*D*E=(A*B)*(C*D)*E`]
4822 THEN ASSUME_TAC(ISPECL[`u:real^3`;`w:real^3`]NORM_SUB)
4823 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
4824 THEN MP_TAC(ISPECL[`t-a:real`;`w-u:real^3`]NORM_MUL)
4825 THEN MP_TAC(ISPEC`t-a:real`REAL_ABS_REFL)
4826 THEN RESP_TAC
4827 THEN DISCH_TAC
4828 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4829 THEN ASM_REWRITE_TAC[REAL_ARITH`(A*B)*C*D=C*A*(B*D)`]
4830 THEN REDUCE_ARITH_TAC
4831 THEN DISCH_THEN(LABEL_TAC"BA")
4832 THEN MP_TAC(ISPECL[`(v:real^3)`;` (u:real^3) `;`(w:real^3) `;`(t:real) `;`s:real`]expansion_convex_fan)
4833 THEN RESA_TAC
4834 THEN SUBGOAL_THEN`~(x=(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3)` ASSUME_TAC
4835 THENL(*4*)[
4836 POP_ASSUM MP_TAC
4837 THEN DISCH_THEN (LABEL_TAC"MA")
4838 THEN STRIP_TAC
4839 THEN REMOVE_THEN"MA" MP_TAC
4840 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4841 THEN ASM_REWRITE_TAC[];(*4*)
4842 MP_TAC(ISPECL[`(&1 - s) % v + s % ((&1 - t) % u + t % w):real^3`;`x:real^3`]imp_norm_not_zero_fan)
4843 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
4844 THEN RESA_TAC
4845 THEN MP_TAC(ISPECL[`norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`;`norm((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`]REAL_SUB_INV)
4846 THEN RESP_TAC
4847 THEN ASM_REWRITE_TAC[REAL_ABS_ABS;REAL_ABS_DIV;REAL_ABS_MUL;REAL_ABS_NORM;real_div;REAL_INV_MUL;
4848 REAL_ARITH`(A*B*C)*D=A*C*(B*D)`]
4849 THEN REDUCE_ARITH_TAC
4850 THEN MP_TAC(ISPECL[`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`;`((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`]REAL_ABS_SUB_NORM)
4851 THEN REWRITE_TAC[VECTOR_ARITH`
4852 ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)-((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)=s%(t-a)%(w-u) :real^3`]
4853 THEN ONCE_REWRITE_TAC[NORM_MUL]
4854 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
4855 THEN RESP_TAC
4856 THEN DISCH_TAC
4857 THEN MP_TAC(ISPECL[`abs
4858  (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3) -
4859   norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x))`;`s * norm ((t-a) % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_RMUL)
4860 THEN RESA_TAC
4861 THEN REMOVE_THEN "BA" MP_TAC
4862 THEN POP_ASSUM MP_TAC
4863 THEN DISJ_CASES_TAC(REAL_ARITH`(s= &1)\/ ~((s:real) = &1)`)
4864 THENL(*5*)[
4865 ASM_REWRITE_TAC[]
4866 THEN REAL_ARITH_TAC;(*5*)
4867
4868 MP_TAC(REAL_ARITH`~(s= &1) /\ s<= &1==> (s:real)< &1`)
4869 THEN RESA_TAC
4870 THEN ASSUME_TAC(ISPEC`((t-a) % (w - u):real^3)`NORM_POS_LE)
4871 THEN MP_TAC(ISPECL[`norm ((t-a) % (w - u):real^3)`;`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`]REAL_LE_MUL)
4872 THEN RESA_TAC
4873 THEN REPEAT STRIP_TAC
4874 THEN MP_TAC(ISPECL[`s:real`;`&1`;`norm ((t-a) % (w - u)) *
4875      inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3))`;
4876 `d:real`]REAL_LT_MUL2)
4877 THEN REDUCE_ARITH_TAC
4878 THEN ASM_REWRITE_TAC[]
4879 THEN POP_ASSUM MP_TAC
4880 THEN POP_ASSUM MP_TAC
4881 THEN POP_ASSUM MP_TAC
4882 THEN REAL_ARITH_TAC]]]]]);;
4883
4884
4885 let exists_point_small_edges_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) d:real a:real.
4886 FAN(x,V,E) /\ {v,u} IN E/\ {u,w} IN E /\ ~(coplanar{x,v,u,w}) /\ &0 < d
4887 /\ &0 <a /\ a< &1
4888 ==>
4889 ?(h:real). a <h /\  h<= &1
4890 /\ (!t:real. a <= t /\  t<h
4891 ==> (!(s:real). &0 <= s /\ s <= &1 
4892 ==> norm(inv(norm((&1-s)%v+s%((&1-a)%u+ a%w)-x))%((&1-s)%v+s%((&1-a)%u+ a%w)-x) - inv(norm((&1-s)%v+s%((&1-t)%u+ t%w)-x))% ((&1-s)%v+s%((&1-t)%u+ t%w)-x))< d  ))`,
4893
4894 REPEAT STRIP_TAC
4895 THEN MP_TAC(REAL_ARITH`&0< (d:real)==> &0< d/ &2`)
4896 THEN RESA_TAC
4897 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`]origin_point_not_in_convex_fan)
4898 THEN RESA_TAC
4899 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3) `;`(w:real^3)`;` (d:real)/ &2`;`a:real`]inequaility2_not0_fan)
4900 THEN RESA_TAC
4901 THEN POP_ASSUM MP_TAC
4902 THEN DISCH_THEN (LABEL_TAC"A")
4903 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool) `;`(v:real^3)`;` (u:real^3)`;` (w:real^3)`;` (d:real)/ &2`;`a:real`]inequality1_not0_fan)
4904 THEN RESA_TAC
4905 THEN POP_ASSUM MP_TAC
4906 THEN DISCH_THEN (LABEL_TAC"B")
4907 THEN EXISTS_TAC`min (h:real) (h':real)`
4908 THEN STRIP_TAC
4909 THENL[ASM_TAC
4910 THEN REAL_ARITH_TAC;
4911 STRIP_TAC
4912 THENL[
4913 ASM_TAC
4914 THEN REAL_ARITH_TAC;
4915 REPEAT STRIP_TAC
4916 THEN MP_TAC(REAL_ARITH`t<  min (h:real) (h':real)==> t< (h:real) /\ t< (h':real)`)
4917 THEN RESA_TAC
4918 THEN REMOVE_THEN"B" (fun th-> MP_TAC(ISPEC`t:real`th))
4919 THEN RESA_TAC
4920 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
4921 THEN RESA_TAC
4922 THEN POP_ASSUM MP_TAC
4923 THEN DISCH_THEN (LABEL_TAC"B")
4924 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
4925 THEN RESA_TAC
4926 THEN POP_ASSUM  (fun th-> MP_TAC(ISPEC`s:real`th))
4927 THEN RESA_TAC
4928 THEN POP_ASSUM MP_TAC
4929 THEN DISCH_THEN (LABEL_TAC"A")
4930 THEN ASSUME_TAC(ISPEC`((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`NORM_POS_LE)
4931 THEN MP_TAC(ISPEC`norm ((&1 - s) % v + s % ((&1 - t) % u + t % w)-x:real^3)`REAL_LE_INV)
4932 THEN RESA_TAC
4933 THEN MP_TAC(ISPECL[`s *
4934       inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`;`(((&1 - a) % u + a % w) - ((&1 - t) % u + t % w)):real^3`]NORM_MUL)
4935 THEN REWRITE_TAC[REAL_ABS_MUL]
4936 THEN MP_TAC(ISPEC`s:real`REAL_ABS_REFL)
4937 THEN RESP_TAC
4938 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x:real^3)):real`REAL_ABS_REFL)
4939 THEN RESP_TAC
4940 THEN REWRITE_TAC[REAL_ARITH`(A*B)*C=A*B*C`]
4941 THEN DISCH_TAC
4942 THEN REMOVE_THEN"B"MP_TAC
4943 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
4944 THEN REWRITE_TAC[VECTOR_ARITH`(s * inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x))) %
4945   (((&1 - a) % u + a % w) - ((&1 - t) % u + t % w))= inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4946       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3`]
4947
4948 THEN DISCH_TAC
4949 THEN MP_TAC(ISPECL[`norm(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4950       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;`(d:real)/ &2`;
4951 `norm
4952       (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4953        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4954        ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`;`(d:real)/ &2`;
4955 ]REAL_LT_ADD2)
4956 THEN RESA_TAC
4957 THEN POP_ASSUM MP_TAC
4958 THEN REWRITE_TAC[REAL_ARITH`d / &2 + d/ &2 = d`]
4959 THEN MP_TAC(ISPECL[`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4960       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)`;
4961 `(inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4962        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4963        ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)`]NORM_TRIANGLE)
4964 THEN REWRITE_TAC[VECTOR_ARITH`(inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)- inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4965       ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x):real^3)+
4966 (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4967        inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4968        ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x):real^3)=(inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) -
4969   inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
4970   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) `]
4971 THEN REAL_ARITH_TAC]]);;
4972
4973
4974 let separate1_sphere_not0_fan=prove(`!(x:real^3) (V:real^3->bool) (E:(real^3->bool)->bool) (v:real^3) (u:real^3) (w:real^3) (v1:real^3) (u1:real^3) a:real.
4975
4976 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
4977 /\ ~(coplanar{x,v,u,w})
4978 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
4979 /\ &0 < a /\  a < &1 /\
4980          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
4981          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
4982          {}
4983 ==>
4984 ?h:real.
4985 (a < h) /\ (h<= &1)
4986 /\ 
4987 (!t:real. a<t /\ t<h 
4988 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge {x} {v1, u1} INTER ballnorm_fan x={})`,
4989 REPEAT STRIP_TAC 
4990 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
4991 ` (v:real^3)`] 
4992 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
4993 ` (u:real^3)`] 
4994 THEN MRESA_TAC exist_close1_fan[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`;`(v1:real^3)`;` (u1:real^3)`;`a:real`]
4995 THEN POP_ASSUM MP_TAC
4996 THEN DISCH_THEN(LABEL_TAC"THA")
4997 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
4998 THEN POP_ASSUM MP_TAC
4999 THEN DISCH_THEN(LABEL_TAC"A" )
5000 THEN MRESA_TAC exists_point_small_edges_not0_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;`h:real`;`a:real`]
5001 THEN POP_ASSUM MP_TAC
5002 THEN DISCH_THEN(LABEL_TAC"B" )
5003 THEN EXISTS_TAC`min (a+((h'-a:real)/ &2)) (&1:real)`
5004 THEN ASM_REWRITE_TAC[]
5005 THEN STRIP_TAC
5006 THENL(*1*)[
5007 MP_TAC(REAL_ARITH`a< h':real==> &0< (h'-a)/ &2`)
5008 THEN ASM_REWRITE_TAC[]
5009 THEN FIND_ASSUM MP_TAC`a:real< &1`
5010 THEN REAL_ARITH_TAC;(*1*)
5011 STRIP_TAC
5012 THENL(*2*)[
5013 ASM_TAC
5014 THEN REAL_ARITH_TAC;(*2*)
5015 REPEAT STRIP_TAC
5016 THEN REWRITE_TAC[EXTENSION]
5017 THEN GEN_TAC
5018 THEN EQ_TAC
5019 THENL(*3*)[
5020 STRIP_TAC
5021 THEN REWRITE_TAC[EMPTY;IN_ELIM_THM]
5022 THEN SUBGOAL_THEN `!y1:real^3.
5023           y1 IN aff_gt {x} {v, (&1-t)%u+(t:real)% (w:real^3)} INTER ballnorm_fan x
5024 ==> ?y2:real^3.        y2 IN aff_ge {x:real^3} {(v:real^3), ((&1 - a) % u + a % w:real^3)} INTER ballnorm_fan x /\
5025           dist (y1,y2)<(h:real)` ASSUME_TAC
5026 THENL(*4*)[
5027 MP_TAC(REAL_ARITH`&0<a /\ a < &1 /\ a <(t:real)/\ a< h' /\ t < min (a+(h'-a:real)/ &2) (&1:real)==> &0<t /\ t< &1 /\ &0 <= t /\ t<= &1 /\ t< h'/\ &0<=a /\ a<= &1/\ a<=t`)
5028 THEN RESA_TAC
5029 THEN USE_THEN"A" (fun th-> MP_TAC(ISPEC`a:real`th))
5030 THEN REMOVE_THEN"A" (fun th-> MP_TAC(ISPEC`t:real`th))
5031 THEN RESA_TAC
5032 THEN RESA_TAC
5033 THEN REPEAT STRIP_TAC
5034 THEN MRESA_TAC same_projective_sphere_gt_fan [`(x:real^3)`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(v:real^3)`;`(u:real^3) `;`(w:real^3)`;` (t:real) `;`(y1:real^3)`]
5035 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - a) % (u:real^3) + a % (w:real^3)`;]
5036 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5037 THEN MRESA_TAC AFF_GE_1_2[`(x:real^3)` ;` (v:real^3)`;`((&1 - a) % u + a % w:real^3) `;]
5038 THEN ASM_REWRITE_TAC[INTER;IN_ELIM_THM;dist]
5039 THEN MRESA_TAC expansion_convex_fan[`(v:real^3)`;` (u:real^3)`;`w:real^3`;`a:real`;` s:real`;]
5040 THEN MRESA_TAC origin_point_not_in_convex_fan[`(x:real^3)`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`w:real^3`]
5041 THEN SUBGOAL_THEN`~(x=(&1-s)%v+s%((&1 - a) % u + a % w):real^3)` ASSUME_TAC
5042 THENL(*5*)[
5043 POP_ASSUM MP_TAC
5044 THEN MATCH_MP_TAC MONO_NOT
5045 THEN RESA_TAC;(*5*)
5046 MP_TAC(ISPECL[`x:real^3`;`(&1 - s) % v + s % ((&1 - a) % u + a % w):real^3`]imp_norm_not_zero_fan)
5047 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[NORM_SUB]
5048 THEN REWRITE_TAC[VECTOR_ARITH`(A+B)-C=A+B-C:real^3`]
5049 THEN RESA_TAC
5050 THEN ASSUME_TAC(ISPEC`(&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3`NORM_POS_LE)
5051 THEN MP_TAC(REAL_ARITH`~(&0 =norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)) /\ &0 <= norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)==> &0 <norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3)`)
5052 THEN RESA_TAC
5053 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_MUL_LINV)
5054 THEN RESA_TAC
5055 THEN MP_TAC(ISPEC`(norm((&1 - s) % v + s % ((&1 - a) % u + a % w)-x:real^3))`REAL_LE_INV)
5056 THEN RESA_TAC
5057 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) %
5058       ((&1 - s) % v + s %  ((&1 - a) % u + a % w) - x) +x:real^3`
5059 THEN STRIP_TAC
5060 THENL(*6*)[
5061 STRIP_TAC
5062 THENL(*7*)[
5063 EXISTS_TAC`&1 - inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) `
5064 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (&1 - s)`
5065 THEN EXISTS_TAC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3)) * (s)`
5066 THEN REWRITE_TAC[VECTOR_ARITH`A%(B%C + a%b-c)+c=(&1-A)%c+(A*B)%C+(A*a)%b:real^3`]
5067 THEN ASM_REWRITE_TAC[REAL_ARITH`&1-A+A*(&1-C)+A*C= &1`]
5068 THEN STRIP_TAC
5069 THEN MATCH_MP_TAC REAL_LE_MUL
5070 THEN ASM_REWRITE_TAC[]
5071 THEN ASM_TAC
5072 THEN REAL_ARITH_TAC;(*7*)
5073 REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`A-(B+A)=(--B):real^3`;NORM_NEG;NORM_MUL]
5074 THEN MP_TAC(ISPEC`inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x:real^3))`REAL_ABS_REFL)
5075 THEN RESP_TAC
5076 THEN ASM_REWRITE_TAC[]](*7*);(*6*)
5077
5078 ASM_REWRITE_TAC[VECTOR_ARITH`inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
5079   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) +
5080   x -
5081   (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) + x)=
5082 inv (norm ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x)) %
5083   ((&1 - s) % v + s % ((&1 - t) % u + t % w) - x) -
5084   (inv (norm ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x)) % ((&1 - s) % v + s % ((&1 - a) % u + a % w) - x) ):real^3`]
5085 THEN REMOVE_THEN "B" (fun th-> MP_TAC(ISPEC`t:real`th))
5086 THEN RESA_TAC
5087 THEN POP_ASSUM (fun th-> MP_TAC(ISPEC`s:real`th))
5088 THEN RESA_TAC
5089 THEN ASM_REWRITE_TAC[NORM_SUB]](*6*)](*5*);(*4*)
5090 POP_ASSUM (fun th->MP_TAC(ISPEC`x':real^3`th))
5091 THEN MP_TAC(SET_RULE` x' IN aff_gt {x} {v, (&1 - t) % u + t % w} INTER aff_ge {x} {v1, u1} INTER
5092       ballnorm_fan x ==>  x' IN aff_ge {x} {v1, u1:real^3} INTER ballnorm_fan x
5093 /\ x' IN aff_gt {x} {v, (&1 - t) % u + t % w:real^3} INTER ballnorm_fan x`)
5094 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5095 THEN REPEAT STRIP_TAC
5096 THEN POP_ASSUM MP_TAC
5097 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[th])
5098 THEN SIMP_TAC[]
5099 THEN REPEAT STRIP_TAC
5100 THEN REMOVE_THEN "THA" (fun th->  MP_TAC(ISPECL[`y2:real^3`;`x':real^3`]th))
5101 THEN POP_ASSUM MP_TAC
5102 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5103 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(RAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5104 THEN SIMP_TAC[dist;NORM_SUB]
5105 THEN REAL_ARITH_TAC](*4*);(*3*)
5106
5107 SET_TAC[]]]]);;
5108
5109
5110
5111 let fan_run_in_small11_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3 a:real.
5112 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
5113 /\ ~(coplanar{x,v,u,w})
5114 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5115 /\ &0 < a /\  a < &1 /\
5116          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5117          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5118          {}
5119 ==> 
5120 ?t1:real. a < t1 /\ t1 <= &1
5121 /\ (!t:real. a< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={})`,
5122
5123 REPEAT STRIP_TAC 
5124 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5125 ` (v:real^3)`]
5126 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u1:real^3)`;
5127 ` (v1:real^3)`]  
5128 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5129 THEN POP_ASSUM MP_TAC
5130 THEN DISCH_THEN (LABEL_TAC"BA")
5131 THEN MRESA_TAC separate1_sphere_not0_fan[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3) `;`(u:real^3)`;` (w:real^3)`;` (v1:real^3)`;`(u1:real^3)`;`a:real`]
5132 THEN POP_ASSUM MP_TAC
5133 THEN DISCH_THEN (LABEL_TAC"A")
5134 THEN REPEAT STRIP_TAC
5135 THEN MP_TAC(REAL_ARITH` a < &1 /\ a < h ==> a < min (h:real) (&1:real)`)
5136 THEN RESA_TAC
5137 THEN MP_TAC(REAL_ARITH`  h <= &1==>  min (h:real) (&1:real)<= &1`)
5138 THEN RESA_TAC
5139 THEN EXISTS_TAC`min (h:real) (&1:real)`
5140 THEN ASM_REWRITE_TAC[]
5141 THEN REPEAT STRIP_TAC
5142 THEN MP_TAC(REAL_ARITH`  &0< a /\ a < t /\ t<  min (h:real) (&1:real)==> t< h /\ t<= &1 /\ &0 <= t/\ &0<t /\ t< &1`)
5143 THEN RESA_TAC
5144 THEN REMOVE_THEN "A"(fun th-> MRESA1_TAC th `(t:real)`)
5145 THEN POP_ASSUM MP_TAC
5146 THEN DISCH_THEN (LABEL_TAC"A")
5147 THEN REMOVE_THEN "BA"(fun th-> MRESA1_TAC th `(t:real)`)
5148 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5149 THEN MRESA_TAC origin_is_not_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
5150 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
5151 THEN GEN_TAC
5152 THEN EQ_TAC
5153 THENL[ 
5154 REPEAT STRIP_TAC
5155 THEN SUBGOAL_THEN`~(x=x':real^3)`ASSUME_TAC
5156 THENL[
5157 POP_ASSUM MP_TAC
5158 THEN POP_ASSUM MP_TAC
5159 THEN POP_ASSUM MP_TAC
5160 THEN SET_TAC[];
5161 MRESA_TAC imp_norm_not_zero_fan[`x':real^3`;`x:real^3`]
5162 THEN ASSUME_TAC(ISPEC`x'-x:real^3`NORM_POS_LE)
5163 THEN MP_TAC(REAL_ARITH`~(norm(x'-x:real^3)= &0) /\ &0 <= norm(x'-x:real^3)==> &0 <norm(x'-x:real^3)`)
5164 THEN RESA_TAC
5165 THEN MRESA1_TAC REAL_LE_INV `norm(x'-x:real^3)`
5166 THEN MRESA1_TAC REAL_LT_INV `norm(x'-x:real^3)`
5167 THEN MRESA1_TAC REAL_MUL_LINV `norm(x'-x:real^3)`
5168 THEN MRESA_TAC scale_aff_ge_fan[`x:real^3`;`v1:real^3`;`u1:real^3`]
5169 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
5170 THEN MRESA_TAC scale_aff_gt_fan[`x:real^3`;`v:real^3`;`(&1-t)%u+t%w:real^3`]
5171 THEN POP_ASSUM(fun th -> MRESA_TAC th [`x':real^3`;`inv(norm(x'-x:real^3))`])
5172 THEN SUBGOAL_THEN`inv (norm (x' - x)) % (x' - x) + x IN ballnorm_fan x:real^3->bool` ASSUME_TAC
5173 THENL[
5174 MRESA1_TAC REAL_ABS_REFL `inv(norm(x'-x:real^3))`
5175 THEN ASM_REWRITE_TAC[ballnorm_fan;IN_ELIM_THM;dist;VECTOR_ARITH`B-(A+B)= --A:real^3`;NORM_NEG;NORM_MUL];
5176 ASM_TAC
5177 THEN SET_TAC[]]];
5178
5179 SET_TAC[]]);;
5180
5181
5182 let fan_run_in_small1_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 u1:real^3 a:real.
5183 FAN(x,V,E) /\  {v,u} INTER {v1,u1}={} /\ {v,u} IN E/\ {u,w} IN E /\ {v1,u1} IN E
5184 /\ ~(coplanar{x,v,u,w})
5185 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5186 /\ &0 < a /\  a < &1 /\
5187          aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5188          {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5189          {}
5190 /\ (!s. &0 < s /\ s < a
5191           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5192               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5193               {})
5194 ==> 
5195 (?t1:real. a < t1 /\ t1 <= &1
5196 /\ (!t:real. &0< t /\ t< t1 ==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,u1}={}))`,
5197 REPEAT STRIP_TAC
5198 THEN MRESA_TAC fan_run_in_small11_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`;`u1:real^3`;`a:real`]
5199 THEN EXISTS_TAC`t1:real`
5200 THEN ASM_REWRITE_TAC[]
5201 THEN GEN_TAC
5202 THEN MP_TAC(REAL_ARITH`&0<a /\ a< t1==>((&0<t /\ t<t1) <=> (&0<t /\ t<a)\/ t=a \/ (a<t/\ t<t1:real))`)
5203 THEN RESA_TAC
5204 THEN STRIP_TAC
5205 THEN ASM_TAC THEN SET_TAC[]);;
5206
5207 let fan_run_in_small2_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3 a:real.
5208 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v,w1} IN E 
5209 /\ ~coplanar {x,v,u,w}
5210 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5211 /\ &0 <a /\ a< &1 
5212 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5213       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
5214 /\ (!s. &0 < s /\ s < a
5215           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5216               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5217               {})
5218 ==> ?t1. a < t1 /\ t1<= &1
5219 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v,w1}={})`,
5220
5221
5222 REPEAT STRIP_TAC
5223 THEN POP_ASSUM MP_TAC
5224 THEN POP_ASSUM MP_TAC
5225 THEN DISCH_THEN(LABEL_TAC"MAI MAI")
5226 THEN DISCH_THEN(LABEL_TAC"YEU EM")
5227 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5228 THEN POP_ASSUM MP_TAC
5229 THEN DISCH_THEN (LABEL_TAC"A")
5230 THEN DISJ_CASES_TAC(SET_RULE`(?h:real. a<h /\ h<= &1/\ azim x v u w1=azim x v u ((&1-h)%u+h%w:real^3))\/ ~(?h:real. a<h /\ h<= &1 /\ azim x v u ((&1-h)%u+h%w:real^3)=azim x v u w1)`)
5231 THENL(*1*)[
5232 POP_ASSUM MP_TAC
5233 THEN STRIP_TAC
5234 THEN EXISTS_TAC`(h:real)`
5235 THEN STRIP_TAC
5236 THENL(*2*)[
5237 ASM_TAC
5238 THEN REAL_ARITH_TAC;(*2*)
5239 STRIP_TAC
5240 THENL(*3*)[
5241 ASM_TAC
5242 THEN REAL_ARITH_TAC;(*3*)
5243 REPEAT STRIP_TAC
5244 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
5245 THEN RESA_TAC
5246 THEN MP_TAC(REAL_ARITH`(t:real)< (h:real) /\ h <= &1 ==> t < &1`)
5247 THEN RESA_TAC
5248 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5249 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5250 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5251 ` (v:real^3)`]
5252 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5253 ` (v:real^3)`]  
5254 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
5255 THEN GEN_TAC
5256 THEN EQ_TAC
5257 THENL(*4*)[
5258
5259 DISCH_TAC
5260 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
5261 THENL(*5*)[
5262 POP_ASSUM MP_TAC
5263 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5264 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5265 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5266 THEN STRIP_TAC
5267 THEN POP_ASSUM MP_TAC
5268 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
5269  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
5270  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
5271 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5272 THEN RESA_TAC
5273 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
5274 THEN STRIP_TAC
5275 THEN MP_TAC(SET_RULE`
5276 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3 
5277 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
5278 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5279 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
5280 THEN REDUCE_VECTOR_TAC
5281 THEN STRIP_TAC
5282 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
5283 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
5284 THEN DISCH_TAC 
5285 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
5286 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
5287 THEN STRIP_TAC
5288 THEN MP_TAC(SET_RULE`
5289 (t1'-t1) + (t2'-t2) + t3' = t3
5290 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
5291 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5292 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
5293 THEN STRIP_TAC
5294 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
5295 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
5296 THEN EXISTS_TAC`inv t3 * t3':real`
5297 THEN ASM_REWRITE_TAC[]
5298 THEN MATCH_MP_TAC REAL_LE_MUL
5299 THEN ASM_REWRITE_TAC[]
5300 THEN MATCH_MP_TAC REAL_LE_INV
5301 THEN ASM_TAC
5302 THEN REAL_ARITH_TAC;(*5*)
5303
5304 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5305 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5306 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
5307 THEN MRESA_TAC injective_azim_coplanar[`x:real^3`;` v:real^3`;` u:real^3`;` w:real^3`]
5308 THEN POP_ASSUM (fun th->MRESA_TAC th [`h:real`;`t:real`])
5309 THEN ASM_TAC
5310 THEN REAL_ARITH_TAC](*5*)(*4*);
5311 SET_TAC[]]]];(*1*)
5312 POP_ASSUM MP_TAC
5313 THEN ONCE_REWRITE_TAC[NOT_EXISTS_THM]
5314 THEN DISCH_THEN(LABEL_TAC"B")
5315 THEN EXISTS_TAC`&1:real`
5316 THEN ASM_REWRITE_TAC[REAL_ARITH `&1<= &1`]
5317 THEN REPEAT STRIP_TAC
5318 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t`)
5319 THEN RESA_TAC
5320 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5321 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5322 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5323 ` (v:real^3)`]
5324 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5325 ` (v:real^3)`]  
5326 THEN REWRITE_TAC[INTER;EXTENSION;IN_ELIM_THM;]
5327 THEN GEN_TAC
5328 THEN EQ_TAC
5329 THENL(*2*)[
5330 DISCH_TAC
5331 THEN SUBGOAL_THEN `(&1-t)%u+t%w IN aff_ge {x,v} {w1}:real^3->bool` ASSUME_TAC
5332 THENL(*3*)[
5333 POP_ASSUM MP_TAC
5334 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5335 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`v:real^3`;`w1:real^3`][IN_ELIM_THM]
5336 THEN MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5337 THEN STRIP_TAC
5338 THEN POP_ASSUM MP_TAC
5339 THEN ASM_REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) =
5340  t1'' % x + t2' % v + t3' % w1<=> t3 % ((&1 - t) % u + t % w) =
5341  (t1''-t1') % x + (t2'-t2) % v + t3' % w1:real^3`]
5342 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5343 THEN RESA_TAC
5344 THEN MRESA1_TAC REAL_MUL_LINV`(t3:real)`
5345 THEN STRIP_TAC
5346 THEN MP_TAC(SET_RULE`
5347 t3 % ((&1 - t) % u + t % w) = (t1'-t1) % x + (t2'-t2) % v + t3' % w1:real^3 
5348 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w)) = (inv (t3))%((t1'-t1) % x + (t2'-t2) % v + t3' % w1)`)
5349 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5350 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%B%C=(A*B)%C`;VECTOR_ARITH`A%(B%X+C%Y+D%Z)=(A*B)%X+(A*C)%Y+(A*D)%Z`]
5351 THEN REDUCE_VECTOR_TAC
5352 THEN STRIP_TAC
5353 THEN FIND_ASSUM MP_TAC`t1' + t2' + t3' = &1:real`
5354 THEN FIND_ASSUM MP_TAC`t1 + t2 + t3 = &1:real`
5355 THEN DISCH_TAC 
5356 THEN POP_ASSUM (fun th -> GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SYM(th)])
5357 THEN REWRITE_TAC[REAL_ARITH`t1'' + t2' + t3' = t1' + t2 + t3<=> (t1''-t1') + (t2'-t2) + t3' = t3:real`]
5358 THEN STRIP_TAC
5359 THEN MP_TAC(SET_RULE`
5360 (t1'-t1) + (t2'-t2) + t3' = t3
5361 ==> (inv (t3))*((t1'-t1) + (t2'-t2) + t3') = (inv (t3))*t3`)
5362 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5363 THEN ASM_REWRITE_TAC[REAL_ARITH`A*(B+C+D)=A*B+A*C+A*D`]
5364 THEN STRIP_TAC
5365 THEN EXISTS_TAC`inv t3 * (t1' - t1):real`
5366 THEN EXISTS_TAC`inv t3 * (t2' - t2):real`
5367 THEN EXISTS_TAC`inv t3 * t3':real`
5368 THEN ASM_REWRITE_TAC[]
5369 THEN MATCH_MP_TAC REAL_LE_MUL
5370 THEN ASM_REWRITE_TAC[]
5371 THEN MATCH_MP_TAC REAL_LE_INV
5372 THEN ASM_TAC
5373 THEN REAL_ARITH_TAC;(*3*)
5374 MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5375 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`v:real^3`;`(&1 - t) % u + t % w:real^3`;`w1:real^3`;]
5376 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`v:real^3`;`u:real^3`;`w1:real^3`;`(&1 - t) % u + t % w:real^3`;]
5377 THEN REMOVE_THEN "B"(fun th -> MRESAL1_TAC th `t:real`[DE_MORGAN_THM; REAL_ARITH`~(A<B)<=> B<A\/ B=A`])
5378 THENL(*4*)[REMOVE_THEN"YEU EM"(fun th-> MRESA1_TAC th `t:real`)
5379 THEN POP_ASSUM MP_TAC
5380 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5381 THEN POP_ASSUM MP_TAC
5382 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
5383 THEN SET_TAC[];
5384 REMOVE_THEN"MAI MAI" MP_TAC
5385 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5386 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5387 THEN POP_ASSUM MP_TAC
5388 THEN FIND_ASSUM MP_TAC `{v,w1:real^3} IN E`
5389 THEN SET_TAC[];
5390 ASM_TAC
5391 THEN REAL_ARITH_TAC](*4*)];
5392 SET_TAC[]]]);;
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402 let fan_run_in_small3_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 w1:real^3 a:real.
5403 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {u,w1} IN E 
5404 /\ ~coplanar {x,v,u,w} /\ sigma_fan x V E u w=v
5405 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5406 /\ &0 <a /\ a< &1 
5407 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5408       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
5409 /\ (!s. &0 < s /\ s < a
5410           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5411               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5412               {})
5413 ==> ?t1. a < t1 /\ t1 <= &1
5414 /\  (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {u,w1}={})`,
5415 REPEAT STRIP_TAC
5416 THEN MRESA_TAC not_collinear_is_properties_fully_surrounded[`(x:real^3)` ;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` (v:real^3)`;`(u:real^3)`;`(w:real^3)`;]
5417 THEN POP_ASSUM MP_TAC
5418 THEN DISCH_THEN (LABEL_TAC"A")
5419 THEN EXISTS_TAC`&1:real`
5420 THEN ASM_REWRITE_TAC[REAL_ARITH`&1<= &1`]
5421 THEN REPEAT STRIP_TAC
5422 THEN MP_TAC(REAL_ARITH`&0<t:real==> &0<=t /\ ~(t= &0)`)
5423 THEN RESA_TAC
5424 THEN MP_TAC(REAL_ARITH`t< &1 ==>t<= &1`)
5425 THEN RESA_TAC
5426 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `t:real`)
5427 THEN MRESA_TAC th3[`(x:real^3)` ;` (v:real^3)`;`(&1 - t) % (u:real^3) + t % (w:real^3)`;]
5428 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (u:real^3)`;
5429 ` (v:real^3)`]
5430 THEN MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w1:real^3)`;
5431 ` (u:real^3)`]  
5432 THEN REWRITE_TAC[EXTENSION;INTER;IN_ELIM_THM]
5433 THEN GEN_TAC
5434 THEN EQ_TAC
5435 THENL(*1*)[
5436 MRESAL_TAC  AFF_GT_1_2[`x:real^3`;`v:real^3`;`(&1-t)%u +t%w:real^3`][IN_ELIM_THM]
5437 THEN STRIP_TAC
5438 THEN SUBGOAL_THEN `x' IN (aff_ge {x,u} {w1}:real^3->bool)`ASSUME_TAC
5439 THENL(*2*)[
5440 POP_ASSUM MP_TAC
5441 THEN MRESAL_TAC  AFF_GE_1_2[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
5442 THEN MRESAL_TAC  AFF_GE_2_1[`x:real^3`;`u:real^3`;`w1:real^3`][IN_ELIM_THM]
5443 THEN STRIP_TAC
5444 THEN EXISTS_TAC`t1':real`
5445 THEN EXISTS_TAC`t2':real`
5446 THEN EXISTS_TAC`t3':real`
5447 THEN ASM_REWRITE_TAC[];
5448 POP_ASSUM MP_TAC
5449 THEN ASM_REWRITE_TAC[]
5450 THEN STRIP_TAC
5451 THEN MRESA_TAC inequality3_aim_in_convex_fan
5452 [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;` w:real^3`]
5453 THEN POP_ASSUM(fun th-> MRESA1_TAC th `t:real`)
5454 THEN POP_ASSUM(fun th-> MRESA_TAC th [`t1:real`;`t2:real`;`t3:real`])
5455 THEN POP_ASSUM MP_TAC
5456 THEN POP_ASSUM MP_TAC
5457 THEN DISCH_THEN(LABEL_TAC"BE")
5458 THEN DISCH_THEN(LABEL_TAC"YEU")
5459 THEN SUBGOAL_THEN`~collinear {x, u, x':real^3}`ASSUME_TAC
5460 THENL(*3*)[
5461 MRESA_TAC continuous_coplanar_fan [`x:real^3`;`v:real^3`;`u:real^3`;`w:real^3`]
5462 THEN POP_ASSUM (fun th-> MRESA1_TAC th `t:real`)
5463 THEN ASM_REWRITE_TAC[collinear_fan;]
5464 THEN POP_ASSUM MP_TAC
5465 THEN MATCH_MP_TAC MONO_NOT
5466 THEN REWRITE_TAC[coplanar;aff; AFFINE_HULL_2;IN_ELIM_THM]
5467 THEN STRIP_TAC
5468 THEN EXISTS_TAC`x:real^3`
5469 THEN EXISTS_TAC`v:real^3`
5470 THEN EXISTS_TAC`u:real^3`
5471 THEN SUBGOAL_THEN`(x:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5472 THENL(*4*)[
5473 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5474 THEN EXISTS_TAC`&1`
5475 THEN EXISTS_TAC`&0`
5476 THEN EXISTS_TAC`&0`
5477 THEN REDUCE_ARITH_TAC
5478 THEN VECTOR_ARITH_TAC;
5479
5480 SUBGOAL_THEN`(v:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5481 THENL(*5*)[
5482 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5483 THEN EXISTS_TAC`&0`
5484 THEN EXISTS_TAC`&1`
5485 THEN EXISTS_TAC`&0`
5486 THEN REDUCE_ARITH_TAC
5487 THEN VECTOR_ARITH_TAC;
5488 SUBGOAL_THEN`(u:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5489 THENL(*6*)[
5490 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5491 THEN EXISTS_TAC`&0`
5492 THEN EXISTS_TAC`&0`
5493 THEN EXISTS_TAC`&1`
5494 THEN REDUCE_ARITH_TAC
5495 THEN VECTOR_ARITH_TAC;
5496 SUBGOAL_THEN`((&1 - t) % u + t % w:real^3)IN affine hull {x,v,u:real^3}` ASSUME_TAC
5497 THENL(*7*)[
5498 REWRITE_TAC[ AFFINE_HULL_3;IN_ELIM_THM]
5499 THEN REMOVE_ASSUM_TAC
5500 THEN REMOVE_ASSUM_TAC
5501 THEN REMOVE_ASSUM_TAC
5502 THEN POP_ASSUM MP_TAC
5503 THEN MP_TAC(REAL_ARITH`&0<t3:real==> ~(t3= &0)`)
5504 THEN RESA_TAC
5505 THEN MP_TAC(ISPEC`(t3:real)`REAL_MUL_LINV)
5506 THEN RESA_TAC
5507 THEN ASM_REWRITE_TAC[]
5508 THEN REWRITE_TAC[VECTOR_ARITH`t1' % x + t2 % v + t3 % ((&1 - t) % u + t % w) = u' % x + v' % u
5509 <=>t3 % ((&1 - t) % u + t % w) = (u'-t1') % x -t2 % v+v' % u:real^3`]
5510 THEN STRIP_TAC
5511 THEN MP_TAC(SET_RULE`
5512 t3 % ((&1 - t) % u + t % w) = (u'-t1) % x -t2 % v+v' % u
5513 ==> (inv (t3))%(t3 % ((&1 - t) % u + t % w) ) = (inv (t3))%((u'-t1) % x -t2 % v+v' % u):real^3`)
5514 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th])
5515 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A%(B-C+D)=A%B-A%C+A%D`;VECTOR_ARITH`A%B%C=(A*B)%C`]
5516 THEN REDUCE_VECTOR_TAC
5517 THEN STRIP_TAC
5518 THEN EXISTS_TAC`(inv t3 * (u' - t1)):real`
5519 THEN EXISTS_TAC`-- (inv t3 * t2):real`
5520 THEN EXISTS_TAC`(inv t3 * v'):real`
5521 THEN ASM_REWRITE_TAC[VECTOR_ARITH`A+(--b)%C+d=A-b%C+d`;REAL_ARITH`inv t3 * (u' - t1') + --(inv t3 * t2) + inv t3 * v'=inv t3 * (t3+(u'+v') - (t1'+ t2+t3))`;REAL_ARITH`A+ &1- &1=A`];(*7*)
5522
5523 ASM_TAC
5524 THEN SET_TAC[]](*7*)](*6*)](*5*)](*4*);(*3*)
5525  
5526 MRESA_TAC remark1_fan[`(x:real^3) `;`(V:real^3->bool)`;` (E:(real^3->bool)->bool) `;` (w:real^3)`;
5527 ` (u:real^3)`]
5528 THEN MRESA_TAC AZIM_EQ_0_GE[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
5529 THEN MRESA_TAC AZIM_EQ_0_ALT[`x:real^3`;`u:real^3`;`x':real^3`;`w1:real^3`;]
5530 THEN MRESA_TAC AZIM_EQ_ALT[`x:real^3`;`u:real^3`;`w:real^3`;`w1:real^3`;`x':real^3`;]
5531 THEN REMOVE_THEN"BE" MP_TAC
5532 THEN REMOVE_THEN"YEU" MP_TAC
5533 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5534 THEN FIND_ASSUM MP_TAC`(sigma_fan x V E u w = (v:real^3))`
5535 THEN DISCH_TAC
5536 THEN POP_ASSUM (fun th-> REWRITE_TAC[SYM(th)])
5537 THEN DISJ_CASES_TAC(SET_RULE`(set_of_edge u V E = {w:real^3}) \/ ~(set_of_edge u V E = {w})`)
5538 THENL(*4*)[
5539 FIND_ASSUM MP_TAC`w1 IN set_of_edge (u:real^3) V E`
5540 THEN POP_ASSUM (fun th-> REWRITE_TAC[(th);IN_SING])
5541 THEN DISCH_TAC
5542 THEN ASM_REWRITE_TAC[]
5543 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
5544 THEN REAL_ARITH_TAC;(*4*)
5545
5546 DISJ_CASES_TAC(SET_RULE`(w1:real^3)=w \/ ~((w1:real^3)=w)`)
5547 THENL(*5*)[
5548 ASM_REWRITE_TAC[]
5549 THEN MP_TAC (ISPECL[`x:real^3`;`u:real^3`;`w:real^3`]AZIM_REFL)
5550 THEN REAL_ARITH_TAC;
5551 MRESA_TAC SIGMA_FAN[`(x:real^3)`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(u:real^3)`;`(w:real^3)`]
5552 THEN POP_ASSUM (fun th-> MRESA1_TAC th `w1:real^3`)
5553 THEN POP_ASSUM MP_TAC
5554 THEN REAL_ARITH_TAC]]]];
5555
5556 SET_TAC[]]);;
5557
5558
5559
5560
5561
5562 let fan_run_in_small_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 v1:real^3 w1:real^3 a:real.
5563 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ {v1,w1} IN E 
5564 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5565 /\ sigma_fan x V E u w = v
5566 /\ &0 <a /\ a< &1 
5567 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5568       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
5569 /\ (!s. &0 < s /\ s < a
5570           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5571               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5572               {})
5573
5574 ==> 
5575 ?t1:real. a<t1 /\ t1<= &1
5576 /\ (!t:real. &0< t /\ t< t1==> aff_gt{x} {v,(&1-t)%u+ t % w} INTER aff_ge{x} {v1,w1}={})`,
5577
5578
5579 (let lem=prove(`!x v v1. aff_ge {x} {v1, v}=aff_ge {x} {v, v1}`,
5580 REPEAT STRIP_TAC
5581 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5582 THEN SIMP_TAC[]) in
5583
5584 REPEAT STRIP_TAC
5585 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`]
5586 THEN DISJ_CASES_TAC(SET_RULE`(v1=v)\/ ~(v1=v:real^3)`)
5587 THENL[
5588 MRESA_TAC fan_run_in_small2_not0_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v1:real^3`;`u:real^3`;` w:real^3`;`w1:real^3`;`a:real`];
5589
5590 DISJ_CASES_TAC(SET_RULE`(v1=u)\/ ~(v1=u:real^3)`)
5591 THENL[
5592 MRESA_TAC fan_run_in_small3_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` v1:real^3`;` w:real^3`;`w1:real^3`;`a:real`];
5593  DISJ_CASES_TAC(SET_RULE`(w1=v)\/ ~(w1=v:real^3)`)
5594 THENL[
5595 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
5596 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5597 THEN STRIP_TAC
5598 THEN MRESA_TAC fan_run_in_small2_not0_is_fan [`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`w1:real^3`;`u:real^3`;` w:real^3`;`v1:real^3`;`a:real`]
5599 THEN EXISTS_TAC`t1:real`
5600 THEN ASM_REWRITE_TAC[lem];
5601 DISJ_CASES_TAC(SET_RULE`(w1=u)\/ ~(w1=u:real^3)`)
5602 THENL[
5603 FIND_ASSUM MP_TAC`{v1,w1} IN (E:(real^3->bool)->bool)`
5604 THEN GEN_REWRITE_TAC(LAND_CONV o ONCE_DEPTH_CONV)[SET_RULE`{v,u}={u,v}`]
5605 THEN STRIP_TAC
5606 THEN MRESA_TAC fan_run_in_small3_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` w1:real^3`;` w:real^3`;`v1:real^3`;`a:real`]
5607 THEN EXISTS_TAC`t1:real`
5608 THEN ASM_REWRITE_TAC[lem];
5609 SUBGOAL_THEN`{v,u} INTER {v1,w1:real^3}={}` ASSUME_TAC
5610 THENL[
5611 ASM_TAC
5612 THEN SET_TAC[];
5613 MRESA_TAC fan_run_in_small1_not0_is_fan[`x:real^3`;` (V:real^3->bool)`;` (E:(real^3->bool)->bool)`;` v:real^3`;` u:real^3`;` w:real^3`;`v1:real^3`;`w1:real^3`;`a:real`]]]]]]));;
5614
5615
5616 let fan_run1_in_small_not0_is_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) (E':(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5617 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E /\ E' SUBSET E
5618 /\ (&0< azim x u w v ) /\ (azim x u w v <pi)
5619 /\ sigma_fan x V E u w = v
5620 /\ &0 <a /\ a< &1 
5621 /\(aff_gt {x} {v, (&1 - a) % u + a % w} INTER
5622       {v | ?e. e IN E /\ v IN aff_ge {x} e} =     {})
5623 /\ (!s. &0 < s /\ s < a
5624           ==> aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5625               {v | ?e. e IN E /\ v IN aff_ge {x} e} =
5626               {})
5627 ==>
5628 ?h:real. a<h /\ h<= &1
5629 /\ (!s:real. &0< s /\ s< h==> aff_gt{x} {v,(&1-s)%u+ s % w} INTER {v | ?e. e IN E' /\ v IN aff_ge {x} e}={})`,
5630
5631 REPEAT STRIP_TAC 
5632 THEN MRESA_TAC set_edges_is_finite_fan [`x:real^3`;`V:real^3->bool`;`E:(real^3->bool)->bool`]
5633 THEN MRESA_TAC  FINITE_SUBSET [`(E':(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`]
5634 THEN ABBREV_TAC`n=CARD (E':(real^3->bool)->bool)`
5635 THEN REPEAT(POP_ASSUM MP_TAC)
5636 THEN SPEC_TAC (`(E':(real^3->bool)->bool)`,`(E':(real^3->bool)->bool)`)
5637 THEN SPEC_TAC (`n:num`,`n:num`)
5638 THEN INDUCT_TAC
5639 THENL(*1*)[
5640 REPEAT STRIP_TAC 
5641 THEN MP_TAC(ISPECL[`E':(real^3->bool)->bool`]CARD_EQ_0)
5642 THEN RESA_TAC
5643 THEN EXISTS_TAC`a+ (&1-a:real) / &2`
5644 THEN MP_TAC(REAL_ARITH`&0<a /\ a < &1 ==> a< a+ (&1-a:real) / &2/\ a+ (&1-a:real) / &2 <= &1`)
5645 THEN RESA_TAC
5646 THEN ASM_SET_TAC[];(*1*)
5647
5648 REPEAT GEN_TAC
5649 THEN POP_ASSUM MP_TAC
5650 THEN DISCH_THEN (LABEL_TAC "A")
5651 THEN REPEAT STRIP_TAC
5652 THEN MP_TAC(ISPEC`(E':(real^3->bool)->bool)` CHOOSE_SUBSET)
5653 THEN RESA_TAC
5654 THEN POP_ASSUM(fun th-> MP_TAC(ISPEC`n:num `th))
5655 THEN REWRITE_TAC[ARITH_RULE `n:num <= SUC n`; HAS_SIZE]
5656 THEN STRIP_TAC
5657 THEN MP_TAC(SET_RULE` t SUBSET E' /\ E' SUBSET E ==> (t:(real^3->bool)->bool) SUBSET E`)
5658 THEN RESA_TAC
5659 THEN REMOVE_THEN "A" (fun th-> MP_TAC(ISPEC`(t:(real^3->bool)->bool)`th))
5660 THEN RESA_TAC
5661 THEN POP_ASSUM MP_TAC
5662 THEN DISCH_THEN(LABEL_TAC"YEU")
5663 THEN SUBGOAL_THEN `~((E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)= {})` ASSUME_TAC
5664 THENL(*2*)[
5665 STRIP_TAC
5666 THEN MP_TAC(SET_RULE`(E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)={} /\ t SUBSET E' ==>  t= E'`)
5667 THEN RESA_TAC
5668 THEN FIND_ASSUM MP_TAC`CARD (t:(real^3->bool)->bool)=n`
5669 THEN POP_ASSUM(fun th-> REWRITE_TAC[th])
5670 THEN ASM_REWRITE_TAC[]
5671 THEN ARITH_TAC;(*2*)
5672 SUBGOAL_THEN`?e. e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)` ASSUME_TAC
5673 THENL(*3*)[
5674 ASM_SET_TAC[];(*3*)
5675
5676 POP_ASSUM MP_TAC
5677 THEN STRIP_TAC
5678 THEN MP_TAC(SET_RULE`e IN (E':(real^3->bool)->bool) DIFF (t:(real^3->bool)->bool)/\
5679 (E':(real^3->bool)->bool) SUBSET (E:(real^3->bool)->bool) /\ t SUBSET E' ==> e IN E'/\ e IN E/\ ~(e IN t) /\ {e} UNION t SUBSET E'`)
5680 THEN RESA_TAC
5681 THEN MP_TAC(ISPECL [`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`(E':(real^3->bool)->bool)`] FINITE_SUBSET)
5682 THEN RESA_TAC
5683 THEN ASSUME_TAC(SET_RULE`e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
5684 THEN MP_TAC(ISPECL[`e:real^3->bool`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;]CARD_DELETE)
5685 THEN RESA_TAC
5686 THEN MP_TAC(SET_RULE `e IN {e:(real^3->bool)} UNION (t:(real^3->bool)->bool) 
5687 ==> ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e PSUBSET {e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`)
5688 THEN RESA_TAC
5689 THEN MP_TAC(ISPECL[`({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))DELETE e`;`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`]CARD_PSUBSET)
5690 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5691 THEN FIND_ASSUM MP_TAC`FINITE ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`
5692 THEN DISCH_TAC
5693 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5694 THEN DISCH_TAC
5695 THEN MP_TAC(ARITH_RULE`CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) < CARD ( {e:(real^3->bool)} UNION (t:(real^3->bool)->bool))
5696 /\ CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) = CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))-1
5697 <=>CARD (({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e) +1= CARD ({e:(real^3->bool)} UNION (t:(real^3->bool)->bool))`)
5698 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5699 THEN POP_ASSUM (fun th->GEN_REWRITE_TAC(LAND_CONV o LAND_CONV o ONCE_DEPTH_CONV)[th;])
5700 THEN REWRITE_TAC[ARITH_RULE`A=A`; ]
5701 THEN MP_TAC(SET_RULE`~(e IN t)==>({e:(real^3->bool)} UNION (t:(real^3->bool)->bool)) DELETE e=t`)
5702 THEN RESA_TAC
5703 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5704 THEN FIND_ASSUM MP_TAC`(CARD (E':(real^3->bool)->bool)=SUC n)`
5705 THEN REWRITE_TAC[ARITH_RULE`SUC n=(n:num) +1`]
5706 THEN DISCH_TAC
5707 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
5708 THEN DISCH_TAC
5709 THEN MP_TAC(ISPECL[`{e:(real^3->bool)} UNION (t:(real^3->bool)->bool)`;`E':(real^3->bool)->bool`]CARD_SUBSET_EQ)
5710 THEN POP_ASSUM (fun th->REWRITE_TAC[SYM(th)])
5711 THEN RESA_TAC
5712 THEN POP_ASSUM MP_TAC
5713 THEN DISCH_THEN(LABEL_TAC"MA")
5714 THEN MP_TAC(ISPECL[`(x:real^3)`;` (V:real^3->bool) `;`(E:(real^3->bool)->bool)`;`(e:real^3->bool)`]expand_edge_graph_fan)
5715 THEN RESA_TAC
5716 THEN MRESA_TAC fan_run_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;` u:real^3`;`w:real^3`;`v':real^3`;`w':real^3`;`a:real`]
5717 THEN POP_ASSUM MP_TAC
5718 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
5719 THEN POP_ASSUM MP_TAC
5720 THEN RESA_TAC
5721 THEN STRIP_TAC
5722 THEN POP_ASSUM MP_TAC
5723 THEN DISCH_THEN(LABEL_TAC"BE")
5724 THEN EXISTS_TAC` min (h:real) (t1:real)`
5725 THEN STRIP_TAC
5726 THENL(*4*)[
5727 ASM_TAC
5728 THEN REAL_ARITH_TAC;(*4*)
5729
5730 STRIP_TAC
5731 THENL(*5*)[
5732 ASM_TAC
5733 THEN REAL_ARITH_TAC;(*5*)
5734 REPEAT STRIP_TAC
5735 THEN REMOVE_THEN "MA" MP_TAC
5736 THEN DISCH_TAC
5737 THEN POP_ASSUM(fun th-> REWRITE_TAC[SYM(th)] THEN ASSUME_TAC(th))
5738 THEN REWRITE_TAC[UNION;IN_ELIM_THM;EXTENSION; INTER;]
5739 THEN GEN_TAC
5740 THEN EQ_TAC
5741 THENL(*6*)[
5742 ASM_REWRITE_TAC[IN_SING]
5743 THEN MP_TAC(REAL_ARITH`s< min h t1==> s<h /\ s<t1`)
5744 THEN RESA_TAC
5745 THEN STRIP_TAC
5746 THENL(*7*)[
5747
5748
5749 POP_ASSUM MP_TAC
5750 THEN ASM_REWRITE_TAC[]
5751 THEN REMOVE_THEN "BE"(fun th-> MRESA1_TAC th `s:real`)
5752 THEN ASM_SET_TAC[];
5753
5754 POP_ASSUM MP_TAC
5755 THEN ASM_REWRITE_TAC[]
5756 THEN REMOVE_THEN "YEU"(fun th-> MRESA1_TAC th `s:real`)
5757 THEN ASM_SET_TAC[]];
5758 SET_TAC[]]]]]]]);;
5759
5760
5761
5762
5763
5764
5765
5766 let cut_in_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5767 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
5768 /\ sigma_fan x V E u w = v
5769 /\ &0<a /\ a<= &1
5770 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5771 /\ fan80(x,V,E)
5772 /\  ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
5773 ==> a= &1 `,
5774 REPEAT STRIP_TAC
5775 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
5776 THEN REWRITE_TAC[fan80]
5777 THEN DISCH_TAC
5778 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"))
5779 THEN ABBREV_TAC`s1={h:real| &0< h/\ h<= &1 /\
5780 ~(aff_gt{x} {v,(&1-h)%u+ h % w:real^3} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})}`
5781 THEN SUBGOAL_THEN`(a:real) IN (s1:real->bool)` ASSUME_TAC
5782 THENL(*1*)[
5783 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
5784
5785 MP_TAC(SET_RULE`(a:real) IN (s1:real->bool)==> ~(s1={})`)
5786 THEN RESA_TAC
5787 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
5788 THENL(*2*)[
5789 EXISTS_TAC`&0`
5790 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5791 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
5792 THEN REAL_ARITH_TAC;
5793 MRESA1_TAC INF`s1:real->bool`
5794 THEN ABBREV_TAC`b= inf (s1:real->bool)`
5795 THEN SUBGOAL_THEN`b<= &1` ASSUME_TAC
5796 THENL(*3*)[POP_ASSUM MP_TAC
5797 THEN POP_ASSUM MP_TAC
5798 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a:real`)
5799 THEN ASM_TAC
5800 THEN REAL_ARITH_TAC;(*3*)
5801  
5802 SUBGOAL_THEN`~(?s. &0 < s /\ s < b
5803           /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5804               {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
5805               {}))` ASSUME_TAC
5806 THENL(*4*)[STRIP_TAC
5807 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
5808 THENL(*5*)[ EXPAND_TAC"s1"
5809 THEN REWRITE_TAC[IN_ELIM_THM]
5810 THEN ASM_REWRITE_TAC[]
5811 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
5812 POP_ASSUM MP_TAC
5813 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5814 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5815 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
5816 THEN DISCH_THEN (LABEL_TAC"DICH")
5817 THEN REPEAT STRIP_TAC
5818 THEN REMOVE_THEN"DICH" MP_TAC
5819 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5820 THEN POP_ASSUM MP_TAC
5821 THEN REAL_ARITH_TAC];(*4*)
5822 POP_ASSUM MP_TAC
5823 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
5824 THEN STRIP_TAC
5825 THEN MRESA_TAC fan_run_in_small_is_not_meet_xfan [`x:real^3`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`;`w:real^3`] 
5826 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
5827 THENL(*5*)[
5828 POP_ASSUM MP_TAC
5829 THEN DISCH_THEN(LABEL_TAC"A")
5830 THEN EXPAND_TAC"s1"
5831 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5832 THEN STRIP_TAC
5833 THEN ASM_REWRITE_TAC[]
5834 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
5835
5836 POP_ASSUM MP_TAC
5837 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5838 THEN STRIP_TAC
5839 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
5840 THENL(*6*)[
5841
5842
5843 POP_ASSUM MP_TAC
5844 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5845 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5846 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
5847 THEN DISCH_THEN (LABEL_TAC"DICH")
5848 THEN REPEAT STRIP_TAC
5849 THEN REMOVE_THEN"DICH" MP_TAC
5850 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5851 THEN POP_ASSUM MP_TAC
5852 THEN REAL_ARITH_TAC;(*6*)
5853 MRESA_TAC not_cut_inside_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3` ;`b:real`]
5854 THEN POP_ASSUM MP_TAC
5855 THEN DISJ_CASES_TAC(REAL_ARITH`(b:real)< &1\/ &1 <= b`)
5856 THENL(*7*)[
5857 ASM_REWRITE_TAC[]
5858 THEN STRIP_TAC
5859 THEN MRESAL_TAC fan_run1_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`b:real`][SET_RULE`A SUBSET A`]
5860 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
5861 THENL(*8*)[
5862 POP_ASSUM MP_TAC
5863 THEN DISCH_THEN(LABEL_TAC"A")
5864 THEN EXPAND_TAC"s1"
5865 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5866 THEN STRIP_TAC
5867 THEN ASM_REWRITE_TAC[]
5868 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*8*)
5869 POP_ASSUM MP_TAC
5870 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5871 THEN STRIP_TAC
5872 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
5873 THENL(*9*)[POP_ASSUM MP_TAC
5874 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5875 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5876 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5877 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5878 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5879 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
5880 THEN REWRITE_TAC[];(*9*)
5881 POP_ASSUM MP_TAC
5882 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5883 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC](*9*)](*8*);(*7*)
5884
5885 STRIP_TAC
5886 THEN MP_TAC(REAL_ARITH`&1<=b /\ b<= &1==> b= &1`) THEN RESA_TAC
5887 THEN POP_ASSUM MP_TAC
5888 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5889 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5890 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5891 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5892 THEN REMOVE_ASSUM_TAC   
5893 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`a:real` th))
5894 THEN RESA_TAC
5895 THEN POP_ASSUM MP_TAC
5896 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5897 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5898 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5899 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
5900 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]);;
5901
5902
5903
5904
5905
5906 let DHVFGBC=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5907 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
5908 /\ sigma_fan x V E u w = v
5909 /\ &0<a /\ a<= &1
5910 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5911 /\ fan80(x,V,E)
5912 /\  ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})
5913 ==> a= &1 /\ independent {v - x, u - x, ((&1 - a) % u + a % w) - x}`,
5914 MESON_TAC[independent_run_edges_fan;cut_in_edges_fan]);;
5915
5916
5917 let not_cut_in_edges_fan=prove(`!x:real^3 (V:real^3->bool) (E:(real^3->bool)->bool) v:real^3 u:real^3 w:real^3 a:real.
5918 FAN(x,V,E)/\ {v,u} IN E /\ {u,w} IN E 
5919 /\ sigma_fan x V E u w = v
5920 /\ &0<a /\ a< &1
5921 /\ (!v. v IN V==>CARD (set_of_edge v V E) >1)
5922 /\ fan80(x,V,E)
5923 ==>  (aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})`,
5924
5925 REPEAT STRIP_TAC
5926 THEN DISJ_CASES_TAC(SET_RULE`(?a. &0< a /\ a< &1 /\ ~(aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x} e}={})) \/  (!a. &0< a /\ a< &1 ==> (aff_gt{x} {v,(&1-a)%u+ a % w} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})) `)
5927 THENL[
5928 POP_ASSUM MP_TAC
5929 THEN STRIP_TAC
5930 THEN POP_ASSUM MP_TAC
5931 THEN DISCH_THEN(LABEL_TAC"EM BE")
5932 THEN FIND_ASSUM MP_TAC `fan80(x:real^3,V,E)`
5933 THEN REWRITE_TAC[fan80]
5934 THEN DISCH_TAC
5935 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"))
5936 THEN ABBREV_TAC`s1={h:real| &0< h/\ h< &1 /\
5937 ~(aff_gt{x} {v,(&1-h)%u+ h % w:real^3} INTER {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e}={})}`
5938 THEN SUBGOAL_THEN`(a':real) IN (s1:real->bool)` ASSUME_TAC
5939 THENL(*1*)[
5940 POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM]);
5941 MP_TAC(SET_RULE`(a':real) IN (s1:real->bool)==> ~(s1={})`)
5942 THEN RESA_TAC
5943 THEN SUBGOAL_THEN`(?b. !x:real. x IN s1 ==> b <= x)`ASSUME_TAC
5944 THENL(*2*)[EXISTS_TAC`&0`
5945 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5946 THEN POP_ASSUM(fun th->ASM_REWRITE_TAC[SYM(th);IN_ELIM_THM])
5947 THEN REAL_ARITH_TAC;(*2*)
5948 MRESA1_TAC INF`s1:real->bool`
5949 THEN ABBREV_TAC`b= inf (s1:real->bool)`
5950 THEN SUBGOAL_THEN`b< &1` ASSUME_TAC
5951 THENL(*3*)[
5952 POP_ASSUM MP_TAC
5953 THEN POP_ASSUM MP_TAC
5954 THEN POP_ASSUM (fun th-> MRESA1_TAC th `a':real`)
5955 THEN ASM_TAC
5956 THEN REAL_ARITH_TAC;(*3*)
5957  SUBGOAL_THEN`~(?s. &0 < s /\ s < b
5958           /\ ~( aff_gt {x} {v, (&1 - s) % u + s % w} INTER
5959               {v | ?e. e IN E /\ v IN aff_ge {x:real^3} e} =
5960               {}))` ASSUME_TAC
5961 THENL(*4*)[
5962 STRIP_TAC
5963 THEN SUBGOAL_THEN`s IN (s1:real->bool)` ASSUME_TAC
5964 THENL(*5*)[EXPAND_TAC"s1"
5965 THEN REWRITE_TAC[IN_ELIM_THM]
5966 THEN ASM_REWRITE_TAC[]
5967 THEN ASM_TAC THEN REAL_ARITH_TAC;(*5*)
5968 POP_ASSUM MP_TAC
5969 THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5970 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC
5971 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`s:real` th))
5972 THEN DISCH_THEN (LABEL_TAC"DICH")
5973 THEN REPEAT STRIP_TAC
5974 THEN REMOVE_THEN"DICH" MP_TAC
5975 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
5976 THEN POP_ASSUM MP_TAC
5977 THEN REAL_ARITH_TAC];(*4*)
5978
5979 POP_ASSUM MP_TAC
5980 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM;IMP_IMP]
5981 THEN STRIP_TAC
5982 THEN MRESA_TAC fan_run_in_small_is_not_meet_xfan [`x:real^3`;` (V:real^3->bool)`;`(E:(real^3->bool)->bool)`;` v:real^3`;`u:real^3`;`w:real^3`] 
5983 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h <= x))`ASSUME_TAC
5984 THENL(*5*)[POP_ASSUM MP_TAC
5985 THEN DISCH_THEN(LABEL_TAC"A")
5986 THEN EXPAND_TAC"s1"
5987 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
5988 THEN STRIP_TAC
5989 THEN ASM_REWRITE_TAC[]
5990 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*5*)
5991
5992 POP_ASSUM MP_TAC
5993 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
5994 THEN STRIP_TAC
5995 THEN SUBGOAL_THEN`&0<b:real`ASSUME_TAC
5996 THENL(*6*)[
5997 POP_ASSUM MP_TAC
5998 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN POP_ASSUM MP_TAC
5999 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6000 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h:real` th))
6001 THEN DISCH_THEN (LABEL_TAC"DICH")
6002 THEN REPEAT STRIP_TAC
6003 THEN REMOVE_THEN"DICH" MP_TAC
6004 THEN POP_ASSUM (fun th->REWRITE_TAC[th])
6005 THEN POP_ASSUM MP_TAC
6006 THEN REAL_ARITH_TAC;(*6*)
6007 MRESA_TAC not_cut_inside_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3` ;`b:real`]
6008 THEN MRESAL_TAC fan_run1_in_small_not0_is_fan[`x:real^3`;`(V:real^3->bool)`;`(E:(real^3->bool)->bool)`;`(E:(real^3->bool)->bool)`;`v:real^3`;`u:real^3`;`w:real^3`;`b:real`][SET_RULE`A SUBSET A`]
6009 THEN SUBGOAL_THEN`~(?x:real. x IN s1 /\ ~(h' <= x))`ASSUME_TAC
6010 THENL(*7*)[
6011 POP_ASSUM MP_TAC
6012 THEN DISCH_THEN(LABEL_TAC"A")
6013 THEN EXPAND_TAC"s1"
6014 THEN REWRITE_TAC[IN_ELIM_THM; REAL_ARITH`~(A<=B)<=> B<A`]
6015 THEN STRIP_TAC
6016 THEN ASM_REWRITE_TAC[]
6017 THEN REMOVE_THEN"A"(fun th-> MRESA1_TAC th `x':real`);(*7*)
6018 POP_ASSUM MP_TAC
6019 THEN REWRITE_TAC[GSYM NOT_IMP; GSYM NOT_FORALL_THM]
6020 THEN STRIP_TAC
6021 THEN SUBGOAL_THEN `h':real <= b`ASSUME_TAC
6022 THENL(*8*)[POP_ASSUM MP_TAC
6023 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6024 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6025 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6026 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6027 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC  
6028 THEN  POP_ASSUM (fun th->MP_TAC(ISPEC`h':real` th))
6029 THEN REWRITE_TAC[];
6030
6031 POP_ASSUM MP_TAC
6032 THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC THEN REMOVE_ASSUM_TAC 
6033 THEN POP_ASSUM MP_TAC THEN REAL_ARITH_TAC]]]]]]]];
6034
6035 POP_ASSUM (fun th-> MRESA1_TAC th`a:real`)]);;
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059 end;;
6060
6061